리얼 월드란?
API와 구현해야 할 기본 기능들이 제공되고, 그 것들을 스스로 구현하는 프로젝트
즉, 사이드 프로젝트를 할 아이디어가 부족할 때 할만한 프로젝트라고 할 수 있겠다.
깃허브 저장소
https://github.com/SeolYoungKim/real-world-study
팔로우 기능에 대한 고민
UML을 작성 해보면서, 팔로우에 대한 고민이 가장 많는데, 이를 엔티티로 분리해야 할지, User간의 소통이니 User에 항목을 두어야할지를 고민했다. 하지만, 이는 쓸데없는 고민이었다. 관계형 데이터베이스에서는 table이 서로 관계를 맺을 수 있어야 하는데, 같은 Table 간에는 관계를 맺을 수 없기 때문에 위와 같은 형태로 저장할 수가 없는게 당연했다. 무슨 쓸데없는 고민을 한건지!
팀원인 준영님과 함께 해당 기능에 대해 토론을 한 결과, “Follow”라는 테이블이 따로 있어야 함을 깨달았고, 덕분에 Index라는 개념까지 알아갈 수 있었다. (DB에 대한 지식이 매우 부족함을 통감했다.. 공부해야지.. )
Like에 대한 토론
사실 나는 좋아요, 팔로우 등의 기능을 구현 해보지 않았기에, 이를 어떻게 구현해야 할지 감이 잘 오지 않았다. 많은 코드를 구글링 해본 결과, Like라는 엔티티를 따로 만들어 좋아요를 누른 유저 식별자와 눌림 당한(?) 게시글 식별자 정보를 담고 있도록 구현한 것을 확인할 수 있었다.
내가 생각한 Like 엔티티의 초안은 다음과 같다.
likeId
(PK)userId
articleId
준영님이 이에 대해, 좋아요 기능은 user 식별자 + article 식별자를 합쳐 하나의 key 형태로 인덱싱을 할 수도 있다고 했다. 하지만 이러한 방식의 경우, Like 엔티티에 필드 하나가 추가되는 순간 다시 인덱싱을 해야 할 수도 있다고 한다. 만약, Like 엔티티와 Article 엔티티, 혹은 User 엔티티가 연관관계 매핑이 되어있다면… 매핑으로 인해 함부로 삭제조차 할 수 없어 테이블을 drop하고 다시 만들어서 사용해야 하는 문제가 발생할 수도 있다고 한다.
- Like 엔티티가 항상 “다(many)”의 입장이면 괜찮을 수도 있겠다. 생명주기를 User와 Article에 독립적으로 관리된다면 문제를 예방할 수 있을 것도 같다.
Like 엔티티의 연관관계 매핑을 할 것이냐, 안 할 것이냐.. 에 대한 기준을 우리로써는 섣불리 정하기가 어려웠다. 그렇기에, 일단은 정석(?)인 연관관계 매핑을 통해 구현을 하기로 하고, 나중에 개선을 해보기로 했다.
좋은 아이디어, 학습 계획들
- 구현 후 대량의 트래픽에 대한 테스트를 해보기로 했다. 실 서비스도 해보면서 만나볼 수는 있겠지만, 더 대량의 트래픽은 실 서비스만으로는 만나기 어려울 것이라고 판단했다. 그렇기 때문에, 가짜로 많은 트래픽을 발생시켜, 트래픽이 몰림으로써 발생되는 동시성 문제나 서버가 죽는 문제 등을 직접 만나보고 해결해보고 싶다.
- 해당 프로젝트는 어디까지나 학습이다!
- OAuth2인증이 대세긴 하나, 시큐리티의 전반적인 흐름을 파악하기에는 어렵다고 생각했다. (프레임워크가 왠만하면 다 해주기 때문이다.) 그래서, Username/password를 통한 인증 + JWT를 통한 인증 방식으로 구현을 해봄으로써, 시큐리티의 전반적인 흐름을 파악하기로 했다
- 매 기능 구현 스프린트(?)마다, 개념을 학습하기로 했다.
- 이번 주 게시글 CUD 기능 구현 때는, “스프링 부트의 동작 원리”에 대한 학습을 함께 하기로 했다. 물론, 대략적인 내용들은 다 알고 있지만
@SpringBootApplication
애노테이션 등, 깊이 있는 학습을 한 적이 없던 것 같기 때문이다. 기술 면접때 잘 대답하지 못하는 나를 보면서, 좀 더 깊게 알아볼 필요가 있다고 느꼈다. - 얼추 기능 구현이 완료된 뒤에는, 성능 테스트, 트래픽 테스트 등을 통해 성능을 개선해나갈 계획이다. 때문에, DB에 대한 전반적인 학습도 동반되어야 한다고 생각하여 RealMySQL 책을 읽어보기로 했다. DB에 대한 지식이 더 부족한 나는 SQL 첫걸음 부터 뗄 계획이다.
- 이번 주 게시글 CUD 기능 구현 때는, “스프링 부트의 동작 원리”에 대한 학습을 함께 하기로 했다. 물론, 대략적인 내용들은 다 알고 있지만
기대감(?)
왠지 잘 헤쳐나가면서 깊이있게 학습할 수 있는 좋은 기회가 될 수 있을 것 같다. 여태까지 학습한 내용들을 총 정리하는 데 더해, 살을 붙여나가는 좋은 스터디가 될 것 같다. 특히, 준영님께도 배울게 많으므로… 상부상조 할 수 있는 스터디가 잘 짜여진 것 같아 더욱 더 열심히 해봐야겠다는 생각이 든다.
'스터디 > 리얼 월드 스터디 회고' 카테고리의 다른 글
리얼 월드 스터디 회고 - 6 ) Spring Security + JWT (0) | 2023.01.05 |
---|---|
리얼 월드 스터디 회고 - 5 (0) | 2022.12.30 |
리얼 월드 스터디 회고 - 4 (2) | 2022.12.23 |
리얼 월드 스터디 회고 - 3 (0) | 2022.12.21 |
리얼 월드 스터디 회고 - 2 (0) | 2022.12.18 |
댓글