사용자가 SNS를 이용해 로그인하거나, 로그인 하지 않고 익명으로 게시글을 작성할 수 있는 게시판 사이트
Java 11, Spring Boot, Spring Security, OAuth2, Spring Data JPA, JPA, QueryDSL, MySQL
- 도메인 설계 및 연관관계 정의
- 데이터베이스 연동 및 비즈니스 로직 구현
- 소셜 로그인 연동
- OAuth2를 이용한 회원 인증과 소셜 로그인
- 로그인한 사용자에 대한 세션 관리
- 작성한 게시글, 댓글을 확인할 수 있는 마이페이지
- 게시글 등록, 조회 기능과 자신의 게시글에 대한 수정, 삭제 기능
- 전체 게시글에 대한 페이징과 정렬 기능
- 게시글에 대한 댓글 작성과 댓글에 대한 대댓글 기능
- 로그인하지 않은 사용자의 익명 게시글, 익명 댓글 기능
- 이미지 첨부 기능
사용자가 게시글 조회 시 댓글의 양이 많은 경우 응답시간이 매우 늦어지는 이슈 발생
전체 댓글을 조회한 후 재귀적으로 재구성하는 과정에서 데이터의 양이 많을수록 연산이 지수적으로 증가하는게 원인
단일중첩모델을 이용해서 댓글을 저장할 때 해당 댓글이 속하는 구간값과 root 댓글에 대한 참조를 함께 저장하고, 이후 조회할 때 root 댓글별로 구간값으로 정렬해서 조회하는 방법으로 조회 성능 60% 개선
- 데이터베이스에서 계층 구조를 다룰 수 있는 방법에 대해 배울 수 있었습니다.
- QueryDSL을 이용해 코드로 복잡한 쿼리를 쉽게 작성하는 방법을 배울 수 있었습니다.
- Self 참조를 이용한 양방향 연관관계 매핑에 대해 이해할 수 있었습니다.
- 제대로 동작한다고 기능에 대해서도 그게 과연 최선의 방법인가에 대해 한번 더 고민하는 자세를 배웠습니다.

