수진개발서
article thumbnail
[JPA] Soft Delete 적용하기
코딩/JPA 2023. 1. 6. 00:46

Soft Delete가 왜 필요한가? SNS 프로젝트를 진행하면서 한가지 상황을 가정해보았다. 누군가가 법적으로 침해되는 게시물이나 댓글을 작성하여 신고를 하려고한다. 하지만 그 회원이 탈퇴를 하면 그 회원이 가지고있는 데이터들이 모두 삭제되었기 때문에 더 이상 신고할 증거가 남지 않게된다. 이러한 상황 외에도 회원이 탈퇴해도 알수없음으로 표시되면서 사라지지 않는 게시물들의 존재를 볼 수 있었다. 이러한 것은 모두 데이터를 물리적으로 삭제한 것(hard delete)이 아닌 논리적으로 삭제한것(soft delete)이다. Hard Delete와 Soft Delete Hard delete: delete쿼리를 날려서 데이터베이스에서 실제로 삭제하는 방법(물리 삭제) Soft delete: 실제로 데이터베이스..

[SNS Project] Post, User 예외처리 분리하기
프로젝트/SNS만들기 2023. 1. 4. 21:54

목표 SNS만들기 프로젝트를 진행하면서 모든 로직에 공통적으로 들어가는 부분이 있었다. 아래와 같이 token에서 추출한 userName이 존재하는지, 접속한 게시물이 존재하는지 예외처리하는 로직이였다. 해당 로직을 클래스화 해두면 게시물기능 뿐만 아니라 댓글기능, 좋아요기능 등등 sns프로젝트 전반적으로 사용할 수 있을거라고 판단하여서 ValidateService를 만들어서 로직을 분리하였다. //유저 확인 userRepository.findByUserName(userName) .orElseThrow(() -> new AppException(ErrorCode.USERNAME_NOT_FOUND, ErrorCode.USERNAME_NOT_FOUND.getMessage())); //게시물 확인 postRep..

[SNS Project] 좋아요 테스트
프로젝트/SNS만들기 2023. 1. 4. 21:38

좋아요 기능을 테스트하는 테스트코드를 작성하였다. Mock라이브러를 사용하였다. 요구사항 Controller테스트 - 좋아요 누르기 성공 - 좋아요 누르기 실패: 로그인 하지 않은 경우 - 좋아요 누르기 실패: 해당 Post가 없는 경우 코드 LikeControllerTest 좋아요 기능 테스트를 Mock라이브러리를 사용해서 구현하였다. Service쪽의 로직테스트가 아닌 Controller테스트이기 때문에 Service는 Mock을 사용해서 가짜객체를 생성해주었다. 좋아요 기능은 result에 String값만 반환해주기 때문에 그 반환된 문자열 값이 내가 원하는게 맞는지를 비교해주고 싶었다. 그럴 경우 MockMvc에서 json을 검증하기 위해 다양한 방법들이 있었다. .andExpect(jsonPat..

[SNS Project] 좋아요 조회
프로젝트/SNS만들기 2023. 1. 4. 21:26

sns만들기 프로젝트 2일차 좋아요 조회를 구현하였다. 요구사항은 다음과 같다. 요구사항 - 좋아요 조회 좋아요 개수 GET /posts/{postsId}/likes - Json방식으로 리턴 - response 형태: { "resultCode":"SUCCESS", "result": 0 } 코드 LikeController 좋아요 조회를 구현했다. 생각해야할것 중 하나는 좋아요의 개수는 로그인 필요 없이 볼 수 있다는것! 그점을 간과하고 로그인한 유저만 조회를 할 수 있도록 구현했다가 수정했다. 바로 service에서 좋아요 개수를 받아 Response에 감싸서 보내주었다. /** * 좋아요 개수 조회 */ @GetMapping public Response getLike(@PathVariable Long p..