본문 바로가기

Programming/TDD Project31

Pull Request 020. 회원 가입 및 로그인 기능 TDD로 구현하기 - 회원 가입 Service 계층 구현 어떤 순서로 기능을 구현해야 할까를 고민하다가, 어짜피 이후 기능할 구현에 모두 로그인 로직이 연관되어있을 것이라 생각해 로그인 기능을 먼저 구현하고자 했다. 그런데 로그인을 하려면 회원이 있어야 한다. 그렇다, 로그인 구현을 위해서는 회원 가입을 먼저 구현해야한다는 것이다. 먼저 회원 가입부터 구현해보자. 회원 가입 로직은 다음과 같다. MemberController#postMember(dto) 메서드를 통해 회원 가입 요청을 받는다. 이 때 urn은 "/member"로 설정하며, MemberService#postMember(dto)로 반환받은 Response DTO를 ResponseEntity객체로 감싸 반환한다. MemberService#postMember(dto)는 비밀번호 암호화, 권한 설정 등.. 2023. 12. 4.
Pull Request 019. 페이징 처리 시 페이지 정보도 Response에 함께 담아주기 기존의 페이징 처리에서 문제점은 페이지 정보가 담기지 않는다는 점이었다. 엔티티 정보는 전부 담기지만, 해당 페이지가 몇 번째 페이지인지, 페이지에는 몇 개의 요소가 있는지, 전체 데이터는 몇 개이고 전체 페이지는 몇 페이진지의 정보가 담기지 않았다. 이렇게 페이징 처리가 진행되면 데이터는 넘어가지만, 실질적인 페이징 처리는 프론트엔드 단에 맡겨야한다. 심지어 이 과정 역시 프론트엔드 단에서 전체 데이터 갯수를 알고 있어야 가능하다. 여러 면에서 문제가 존재한다. 따라서 서버 레벨에서 페이지 정보도 함께 담아줘야만이 진정한 의미로 페이징 처리를 끝냈다고 볼 수 있다. @GetMapping public ResponseEntity getFreeBoardPage(@RequestParam(name = "page.. 2023. 12. 1.
Pull Request 018. 자유 게시글 검색 기능 구현 - Querydsl 사용해보기 부트캠프에서 프로젝트를 진행할 당시, 검색 기능을 구현하는데 코드가 상당히 더러웠던 경험이 있다. public MultiResponseDto readFilteredCocktails(String email, String category, String tag, String sortValue) { Sort sort = setSort(sortValue); if (isNotSelectCategoryAndTag(category, tag)) { List cocktails = cocktailQueryService.readAllCocktails(sort); log.info("# CocktailService#readFilterdCocktails 성공"); return createCocktailsSimpleMultiResp.. 2023. 11. 30.
Pull Request 017. 자유 게시글 여러 개 조회 기능 TDD로 구현하기 자유 게시글과 관련해서 남은 기능은 크게 2개다. 하나는 페이지 전체 조회 기능이고, 하나는 검색 기능이 되시겠다. 우선은 페이지 조회 기능을 구현해보고자 한다. 페이지 조회 기능의 로직은 다음과 같다. 게시글 페이지 조회 urn은 /free-board?page="pageNumber"의 형태다. FreeBoardController#getFreeBoardPage(@RequestParameter(value = "page")int page) 메서드를 통해 get 요청을 받는다. 해당 메서드는 FreeBoardService#getFreeBoardPage(int page) 메서드를 호출하고 받은 결과값을 반환한다. 이 때 HTTP 상태 코드는 200 OK다. FreeBoardService#getFreeBoardP.. 2023. 11. 29.
Pull Request 016. Base Entity를 통해 데이터 생성일 / 수정일 설정하기 - 제어하기 어려운 코드 개선, static 메서드 mocking 테스트 해당 기능을 넣을까말까 고민을 많이 했다. 그런데 아무리 생각해도 결국에는 필요한 기능이 아닐까 싶어서 넣기로 했다. 문제는 향로님의 글을 보며 시간에 대한 테스트를 어떻게 해야할까에 대한 고민이 남아있었다는 것이다. 그런데 향로님이 아예 예시 코드를 남겨주시기까지 했는데 못 할 것 있나? 싶은 생각에 빠르게 돌입했다. 이번 포스팅에 앞서 이번 구현만큼은 TDD 방식으로 구현하지 못했음을 미리 알린다. 아예 새롭게 시도해보는 방법이었고, static메서드의 테스트도 처음 도전해보는 부분이라 거의 다른 분들의 코드를 따라하는 수준이었다. 참고한 글들은 글 말미에 남긴다. 데이터 생성일과 수정일은 모든 엔티티에 적용되어야 한다. 따라서 모든 엔티티의 상위 엔티티가 될 Base Entity를 먼저 만들었다... 2023. 11. 28.
반응형