-
Notifications
You must be signed in to change notification settings - Fork 0
08.02 1조 코드 리뷰
mirageoasis edited this page Aug 2, 2024
·
6 revisions
- 여러 사용자가 동시에 댓글을 작성할 수 있는 상황을 대비하여 최신 댓글 목록을 항상 유지하기 위해서 댓글을 새로 작성하면 전체 댓글을 새로 로드하는 것이 일반적인 방법이다.
- 작성 후 전체 댓글을 다시 로드하면 실시간으로 최신 댓글을 확인할 수 있다.
- 현재 내가 작성한 댓글만 새로고침되는 것은 다른 사람이 새롭게 등록한 댓글은 보이지 않으므로 잘못된 구현이다.
- 내가 댓글 달지 않으면(이벤트가 발생하지 않으면) 댓글이 새로고침 안되는 문제는 여전함.
- SSE나 웹소켓을 사용할 수 있지만 게시판이 굳이 실시간 소통이 필요하지 않다면 필요없음
- 게시글 상세보기시에 어떻게 게시글, 게시글작성자, 댓글, 댓글 작성자 정보를 한번에 보여주나?
-
- post,user,comment,user를 join해서 하나의 쿼리로 반환한다.
-
- 어플리케이션에서 두번의 쿼리를 수행. 게시글 조회(join user), 커멘트 조회(join user)
-
- 클라이언트에서 여러번 요청을 보낸다. 각각의 서블릿을 호출한다. -> SPA에 유리. 댓글 refresh 위해서 각각의 서블릿 따로 호출한다. 네트워크 여러번 호출될 수 있음
-
- join하는 것과 select 2번 하는 것의 차이
- join을 하면 한 번의 데이터베이스 호출로 여러 테이블의 데이터를 가져올 수 있고, 조인된 데이터는 최신 상태로 보장됩니다.
- select 2번을 하면 네트워크 호출이 각각 일어난다.일관성이 깨지는 문제가 발생할 수 있다.하지만, 각 쿼리를 독립적으로 최적화할 수 있다는 장점이 있다.
- 탈퇴한 유저가 사용하던 username으로 새롭게 가입하도록 허용할 것인가? 정책 결정에 따라서 달라질듯.
- 실제 넥슨에서는 탈퇴한 유저의 username을 랜덤한 시간에 사용할 수 있도록 풀어둔다. username 거래가 불가능하도록.
- 그렇게 구현하려면 탈퇴한 유저의 username을 따로 테이블로 관리하고, user테이블에서 탈퇴한 유저는 username은 지워둔다. 배치 스레드가 랜덤하게 username을 푼다.
- 유저 이름이 unique하고 변경 불가여서 primary key로 뒀는데 생각해보니 이상한 생각이였네요… 바꿔야 겠습니다!
- 다음 과제인 페이징을 구현해야 했는데 이미 수현님이 구현하셔서 아이디어를 얻을 수 있었습니다!
- 커넥션 풀에 관해서 승수님 코드를 봤는데 따로 구현하신 클래스를 봐도 이상한 부분이 없는데 커넥션 정리가 되어지지 않아 왜 그런지 조금 더 살펴봐야 할 것 같습니다!
- 커넥션 풀을 직접 구현한 분들은 자원의 효율적인 사용이 가능할 것 같습니다.
- 수현님은 페이지네이션을 깔끔하게 구현하셔서 다음 요구사항이 나와도 변경할 점이 크지 않겠습니다.
- 소프트 딜리트의 구현을 생각해보았습니다. 삭제된 정보를 저장하기 위한 별도 테이블을 둔다는 아이디어가 괜찮았습니다.
- 역시 마찬가지로 커넥션 풀을 직접 구현하신 점이 인상적이었습니다.
- 수현님은 1주차부터 페이지네이션을 직접 구현하신 것을 보면서 인상적이었습니다.
- 수현님이 글 페이지를 불러올 때 글 정보 + 유저 정보를 디비에서 한번에 불러오는게 어떤지 물어보셨을 때 재사용성이 떨어진다고 생각해서 반대했습니다.