졸업 프로젝트로 진행하고 있는 Tori는 공유 플랫폼이어서 팔로우/팔로잉(Tori에서는 친구맺기/친구끊기) 기능을 구현해야 했다. 🎈 Tori의 친구맺기/친구끊기 기능 개요 친구맺기/친구끊기 기능을 다음과 같이 요약해보았다. 👥 친구 맺기 🤝 A 사용자(cat)이 B 사용자(lion) 프로필에서 '친구맺기' 버튼을 누르면, ✔️ 버튼은 '친구끊기'으로 변한다. ✔️ B 사용자의 팔로워 수가 하나 증가한다. ✔️ A 사용자의 팔로잉 수가 하나 증가한다. ✔️ B 사용자의 팔로워 리스트에 A가 추가된다. ✔️ A 사용자의 팔로잉 리스트에 B가 추가된다. 👥 친구 끊기 친구 맺기의 반대 🎈 구현 방법 크게 두 가지 방법을 생각할 수 있다. 1️⃣ User 엔티티 안에 FollowerList와 Following..
JPA
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..
제일 복잡할 것 같아서 미루고 미루었던 팔로워, 팔로잉 기능 구현을 시작했다. 구체적인 기능은 인스타그램을 많이 참고하였다. 기능설명 A 사용자가 B 사용자 프로필에서 '팔로우' 버튼을 누르면 버튼은 '팔로잉'으로 변한다. A 사용자의 '팔로잉' 목록에 B 사용자가 추가된다. B 사용자의 '팔로워' 목록에 A 사용자가 추가된다. A 사용자가 B 사용자를 그만 '팔로우'하고 싶으면, B 사용자 프로필 또는 '팔로잉' 목록에서 '팔로잉' 버튼을 누른다. 버튼을 누르면 '팔로우'로 변한다. '팔로잉' 목록을 다시 들어가 보면 B 사용자가 목록에 존재하지 않는다. 실제 인스타그램에서는 비공개 계정인 경우 팔로우도 승인을 해야 걸 수 있지만, 일단은 아무나 팔로우를 걸 수 있도록 만들 것이다. 잠깐 생각을 해보아..