로그인 및 인증인가
- Spring security를 이용하여 access token으로 사용자의 정보를 가져옵니다.
@CurrentSession
어노테이션을 사용하여 ContextHolder에 넣은 Session을 불러옵니다.
- filter는
UsernamePasswordAuthenticationFilter
를 상속받아서 만들었습니다.
토큰 없이 요청이 들어와도 되는 api
- 로그인 (
/login
)
- 회원가입 (
/user/signup
)
- 사용자 이름 전부 불러오기 (
/user/info
)
- 이미지 접근을 위한 요청(
/images/**
)
Response
- 프론트엔드로 보낼 데이터를 코드와 메시지로 감싸서 형식화하기 위한 class입니다.
- DataResponse.of(”프론트엔드로 보낼 dto”)로 호출하면 status code, message, data로 보내집니다.
- 따로 보낼 데이터가 없다면 StatusResponse로 status code와 message만 보냅니다.
게시글
- 사용자와 게시글을 1:N 매핑을 하였고, 매핑 관련 속성에는 CasacadeType.REMOVE를 적용하여 사용자 삭제시 게시글도 함께 삭제되도록 하였습니다.
- 게시글과 게시글 좋아요, 게시글과 댓글도 1:N 매핑을 하여 똑같이 게시글이 삭제되면 관련된 좋아요와 댓글이 삭제되도록 하였습니다.
- 복잡한 엔티티 관계에서는 CasacadeType.REMOVE 를 주의해서 써야한다고 알고있지만, 지금 규모에서는 큰 문제가 없을 것 같아서 사용하였습니다. 부모 엔티티 삭제 시 연관 엔티티를 직접 삭제하도록 수정하고자 합니다.
조회수, 좋아요 수, 댓글 수 처리
- 현재 프론트엔드에서 게시글을 클릭하면 GET /posts/{postId}로 요청을 보내는데 백엔드에서는 이 요청 안에 조회수를 증가시키는 로직이 들어있습니다. 조회만 필요한 메서드에서 DB의 값을 변경하는 부수효과를 주고 있습니다. 이 부분은 좀 더 찾아보고 수정해야할 것 같습니다.
- 좋아요 수는 따로 likeCount를 만들어서 사용자가 좋아요를 누르면 1증가, 취소하면 1 감소, 회원 탈퇴하면 사용자와 연관된 모든 좋아요에서 게시글의 likeCount를 1 감소합니다.