캡스톤프로젝트

졸업 프로젝트로 진행하고 있는 Tori는 공유 플랫폼이어서 팔로우/팔로잉(Tori에서는 친구맺기/친구끊기) 기능을 구현해야 했다. 🎈 Tori의 친구맺기/친구끊기 기능 개요 친구맺기/친구끊기 기능을 다음과 같이 요약해보았다. 👥 친구 맺기 🤝 A 사용자(cat)이 B 사용자(lion) 프로필에서 '친구맺기' 버튼을 누르면, ✔️ 버튼은 '친구끊기'으로 변한다. ✔️ B 사용자의 팔로워 수가 하나 증가한다. ✔️ A 사용자의 팔로잉 수가 하나 증가한다. ✔️ B 사용자의 팔로워 리스트에 A가 추가된다. ✔️ A 사용자의 팔로잉 리스트에 B가 추가된다. 👥 친구 끊기 친구 맺기의 반대 🎈 구현 방법 크게 두 가지 방법을 생각할 수 있다. 1️⃣ User 엔티티 안에 FollowerList와 Following..
Be My Story에는 친구들과 다른 유저의 컨텐츠를 모아 볼 수 있는 타임라인이 존재한다. Be My Story는 SNS이기 때문에 무한 스크롤이 어울리겠다고 생각했다. 큰 Result Set을 JPA로 처리하는 방법은 크게 Slice, Page, Stream 3가지로 나누어볼 수 있다. Slice와 Page가 paginated query를 사용하는 방식으로 모든 entity들을 작은 batch로 나누어, 메모리에 많은 데이터를 로드하는 것을 막는다. 나는 Slice를 이용해서 무한 페이지네이션을 구현해보았다. Entity Book entity를 data로 사용한다. @Entity public class Book { @Id @GeneratedValue(strategy = GenerationType.I..
Be My Story의 동화 생성/수정/저장 로직은 다음과 같다. 동화 수정 요청에서 api 설계를 PATCH로 할지, PUT으로 할지 고민되었다. 그래서 HTTP RFC(Request For Comments)를 찾아보았다. 먼저 PUT부터 살펴보자. The PUT method requests that the enclosed entity be stored under the supplied Request-URI. If the Request-URI refers to an already existing resource, the enclosed entity SHOULD be considered as a modified version of the one residing on the origin server. If..
첫번째로 확인할 것은 본인의 EC2 인스턴스 인바운드 규칙이다. 실제로 앞으로 나올 모든 과정이 정상적으로 진행되었음에도 https로 도메인이 들어가지지 않아서 일주일 넘게 고민했는데, 알고보니 ec2 인스턴스의 443포트를 열어주지 않아서 그 고생을 했었다. 두번째로, 도메인을 구입해야 한다. 나는 가비아에서 bemystory.store라는 도메인을 구매했다. .com이나 .kr로 끝나는 도메인은 비싼 편이니, 개발 공부 목적의 구입이라면 싼 도메인을 구입하는 것을 추천한다. 웹을 넘어 클라우드로. 가비아 그룹웨어부터 멀티클라우드까지 하나의 클라우드 허브 www.gabia.com 아래 링크에서 구매한 도메인을 어떻게 등록하는지 알 수 있다. https://customer.gabia.com/manual/..
프로젝트를 진행할수록 초반 설계의 중요성을 뼈저리게 느끼고 있다. (그리고 좋은 설계를 위해서는 많은 경험이 필요하다는 것도.) 현재 우리 러블리한 Be My Story의 가장 중요한 기능은 일기 데이터를 이용한 동화책 생성 및 수정인데, '생성' 단계까지 구현을 완료했고, 생성형 AI를 통해 만들어진 최초 동화책을 사용자가 '수정'(각색)하는 기능에 대한 회의를 진행하고 있었다. 어라 그런데 수정 기능 로직이 뭔가 이상하다. 우선 현재 동화책 생성 과정부터 짚고 가자. 1단계 유저가 일기 작성 →백엔드에게 일기 저장 및 동화텍스트 생성 요청 →백엔드(spring)에서 일기저장 → AI서버(ChatGPT, Fastapi)에게 동화텍스트 생성 요청 →스프링에서 AI서버에게 텍스트 받고 DB에 저장 후 클라..
[SpringBoot] 팔로워, 팔로잉 기능 구현하기 1 제일 복잡할 것 같아서 미루고 미루었던 팔로워, 팔로잉 기능 구현을 시작했다. 구체적인 기능은 인스타그램을 많이 참고하였다. 기능설명 A 사용자가 B 사용자 프로필에서 '팔로우' 버튼을 누르 z1-colab.tistory.com 1편에서 이어집니다. 2편은 구체적인 기능 구현입니다. Follow Controller *from_user: 팔로우를 요청하는 유저 *to_user: 팔로우를 요청받은 유저 팔로우 걸기, 팔로잉/팔로워 목록 조회, 팔로우 취소 기능을 구현했다. @RestController @RequiredArgsConstructor public class FollowController { private final UserService us..
제일 복잡할 것 같아서 미루고 미루었던 팔로워, 팔로잉 기능 구현을 시작했다. 구체적인 기능은 인스타그램을 많이 참고하였다. 기능설명 A 사용자가 B 사용자 프로필에서 '팔로우' 버튼을 누르면 버튼은 '팔로잉'으로 변한다. A 사용자의 '팔로잉' 목록에 B 사용자가 추가된다. B 사용자의 '팔로워' 목록에 A 사용자가 추가된다. A 사용자가 B 사용자를 그만 '팔로우'하고 싶으면, B 사용자 프로필 또는 '팔로잉' 목록에서 '팔로잉' 버튼을 누른다. 버튼을 누르면 '팔로우'로 변한다. '팔로잉' 목록을 다시 들어가 보면 B 사용자가 목록에 존재하지 않는다. 실제 인스타그램에서는 비공개 계정인 경우 팔로우도 승인을 해야 걸 수 있지만, 일단은 아무나 팔로우를 걸 수 있도록 만들 것이다. 잠깐 생각을 해보아..
현재 우리 팀은 아래와 같은 구조를 가진 웹 서비스를 기획하고 있습니다. 필자는 백엔드 개발을 맡았는데, 웹 개발 경험이 없습니다. 사실 이 시스템 구조도는 웹 개발 경험이 있는 팀원이 만들었습니다. 내가 만들고 싶었지만 정말 아는 게 하나도 없어서 손도 댈 수 없었습니다. 이걸 처음 봤을 때, 나는 깃허브, 리액트, 스프링부트, 챗GPT만 알았고(이것도 깃허브 빼고는 그냥 들어본 정도..ㅋㅋ), '내가 4년째 컴퓨터를 공부하고 있는데 이게 맞나'라는 생각도 들었습니다. 구조도는 내가 설계하지 않았지만, 이에 맞는 개발환경은 백엔드인 내가 세팅해야 합니다. 그래서 일단 Jenkins, EC2를 이용한 스프링부트의 CI/CD 파이프라인을 구축하는 실습을 해보기로 했습니다. AWS 가입부터 시작하겠습니다. ..
mu_
'캡스톤프로젝트' 카테고리의 글 목록