인증/인가 를 중점으로 일반 유저와 관리자의 역할을 구분하고 처리할 수 있도록 기능을 구현해보는 프로젝트이다.
우리 팀은 커뮤니티 사이트에서 관리자의 인가를 받아 게시판을 생성하고, 사용자들이 게시글과 댓글을 남길 수 있는 페이지를 기획하고 구현해보기로 하였다.
ERD를 구성하며 고민했던 부분은 FOLLOW 와 LIKED 의 구현 방법이었다.
우선 FOLLOW 기능을 유저에게 구독중인 BOARD ID 리스트를 갖게 하고 필요할 때 불러오도록 하는 것을 떠올렸었다. 하지만 SQL 에 값을 저장할 때 배열형으로 저장할 수 없기 때문에 다른 방법을 고민해야 했다.
두 번째 아이디어는 BOARD ID 를 문자열로 바꿔 추가해보는 것이었다. 구현은 어렵지 않을 것 같지만 쿼리에서 해당 BOARD 를 팔로우 하는 유저를 리스트업 하는 과정이 너무 길어져 적절하지 않아보였다.
세 번째 아이디어는 차라리 FOLLOW 테이블을 따로 만들어서 관리하는 것! FOLLOW 테이블에 USER ID 와 BOARD ID 를 기록하는 것 이었다. 이 방법이라면 유저별 FOLLOW 목록을 확인하기도 편하고, BOARD 별 USER 목록을 확인하기도 편할 것으로 판단되었다.
같은 방법으로 LIKED 도 별도의 테이블을 만들어 관리하기로 하였다.
아래는 이를 토대로 한 API 명세서 이다.
역할 분담은 객체별 CRUD 와 FOLLOW & LIKED 구현, 내가 맡은 SpringSecurity 구현으로 나누었다. 최근 공부해본 SpringSecurity 를 프로젝트에 잘 적응해 훌륭한 결과물을 만들어보고 싶다.
우리 팀장님 최고! 멋있어요!