Programming/TDD Project31 Pull Request 015. API 문서화 적용하기 - Spring Rest Docs API 문서화를 위해서는 크게 두 가지 방법이 있다. 하나는 이번 포스팅에서 서술할 Spring Rest Docs를 사용하는 것이고, 하나는 Swagger를 사용하는 것이다. 두 방법의 가장 큰 차이는 '문서화를 위한 코드를 어디에 작성할 것인가?'에 있다. Swagger는 프로덕션 코드에 문서화를 위한 코드를 작성한다. Spring Rest Docs는 테스트 코드에 문서화를 위한 코드를 작성한다. 이번 프로젝트에는 Spring Rest Docs를 적용해볼 예정이다. 애초에 TDD 구현 방법을 연습하기 위해 모든 경우에 테스트 코드를 먼저 작성할 예정이고, 기왕 테스트 코드를 작성한 김에 테스트 코드에 문서화 코드까지 적용시키는게 낫겠다고 생각했기 때문이다. 또한 많은 분들이 Swagger의 UI만을 이.. 2023. 11. 28. Pull Request 014. 게시판 테이블 상속하기 여러 게시판을 만들기로 결정한 후로, 테이블 상속과 관련하여 고민이 많았다. 게시글 엔티티의 구성요소에는 '게시글 id', '작성자', '제목', '내용', '댓글' 이 겹쳤다. 거의 다 겹쳤다고 보는게 맞다. 위의 초기 디자인을 보면 알 수 있듯이, 정말 많은 부분이 서로 다른 게시판에 공통적으로 포함됐다. 자연스럽게 게시판은 상속의 형태로 구현해야겠다고 생각했다. 마침 JPA에서 상속을 사용하는 방법에 대해 공부한 참이었다. 이를 적절히 적용해볼 수 있겠다 싶었다. 상속 전략은 단일 테이블 전략을 선택했다. 단일 테이블 전략을 선택한 이유는 다음과 같다. 단일 테이블 전략의 가장 큰 단점은 '테이블 하나가 지나치게 비대해질 수 있다'는 점과 'null을 허용해야 한다.'는 점이다. 내가 생각했을 때,.. 2023. 11. 27. Pull Request 013 - 자유 게시글 수정 기능 컨트롤러 계층 TDD로 구현하기 수정 기능의 테스트를 만들고 기능을 구현해보자. 수정 기능의 수행 과정은 다음과 같다. HTTP 메서드는 PUT메서드를 사용한다. urn은 /free-board/{free-board-id}를 사용한다. FreeBoardController#putFreeBoard(long freeboardId, FreeBoardDto dto); 메서드에서 Put DTO를 받아와 FreeBoard Serivce에 넘겨주고 Response DTO를 받아온다. 받아온 Response DTO를 ResponseEntity객체로 변환해 반환한다. 이 때, HttpStatus는 OK로 설정한다. 수정에 PATCH 대신 PUT 메서드를 사용하는 이유는 다음과 같다. 우리가 정보 수정을 하는 경우를 생각해보면, 특정한 블록만 수정 할 수 .. 2023. 11. 27. Pull Request 012 - 자유 게시글 등록 기능 컨트롤러 계층 TDD로 구현하기 이번에는 컨트롤러에 대한 테스트를 작성하고 기능을 구현해보려 한다. 앞서 Service계층의 상위 기능의 테스트를 작성하겠다고 했는데, 다시 생각해도 이미 완성된 테스트와 기능을 가져다 쓰기만 하는데 굳이 테스트가 필요할까 싶어서 만들지 않았다. 아무튼 컨트롤러 계층의 테스트 작성을 시작해보자. 컨트롤러 계층의 테스트를 하기에 앞서 우리는 한 가지 선택을 해야한다. @SpringBootTest를 사용할 것인가, @WebMvcTest를 사용할 것인가. 둘의 차이는 여러 글들을 통해 확인할 수 있으니 확인해보길 바란다. 참고 할만한 글들을 하단에 링크로 남긴다. 아주 간단히 요약하자면, 통합 테스트를 진행하고 싶으면 @SpringBootTest를 사용하는 것이, 단위 테스트를 진행하고 싶으면 @WebMvcT.. 2023. 11. 20. Pull Request 011 - 자유게시글 삭제 기능 TDD로 구현해보기 CRUD의 마지막 삭제 기능을 구현하고자 한다. 이후로는 Service Layer의 상위 계층, Controller Layer, Data Access Layer 순서대로 진행할 예정이다. 게시글 삭제 기능의 순서는 다음과 같다. FreeBoardService#deleteFreeBoard(long id) 를 통해 삭제 명령을 받는다. FreeBoardCommandService#delete(FreeBoard entity) 메서드를 통해 레포지토리에 FreeBoard 엔티티 삭제 쿼리를 날린다. 마찬가지로 오늘은 2번 메서드에 대한 테스트를 진행하고 이를 기반으로 기능 구현을 마칠 것이다. 그런데, 앞서 삽입, 수정, 조회 기능을 구현할 때와 이번 삭제 기능에는 차이가 있다. 바로 무언가 테스트해 볼 결과가 .. 2023. 11. 11. 이전 1 2 3 4 5 6 7 다음 반응형