목록으로
개발

Day 57 - Contract pt.2

·2분 읽기
데브코스백엔드부트캠프프로그래머스

이 글은 2026년 05월 26일 작성된 글입니다.

오늘은 REST API 테스트를 더 정교하게 다듬고, 예외 처리와 HTTP 상태코드 처리, 그리고 IoC 컨테이너의 BeanDefinition 구조를 확장하는 작업을 진행했다.


1. 글 수정 테스트케이스 보강

글 수정 API 테스트를 더 강화했다.

기존에는 응답만 확인했다면, 이제는 실제로 수정된 데이터가 DB에 반영되었는지도 검증했다.

assertThat(post.getTitle()).isEqualTo("수정된 제목");

2. 테스트 검증 범위

REST API 테스트에서 어디까지 검증해야 하는지 기준을 정리했다.

필수

응답 JSON 구조와 필드값 검증

{
  "resultCode": "200-1",
  "msg": "글 수정 완료"
}

선택

실제 DB 조회 후 데이터 검증

Post post = postService.findById(1);

응답 구조 검증은 필수, DB 반영 여부까지 확인하는 것은 상황에 따라 선택이다.


3. 글 삭제 테스트

글 삭제 API 테스트를 추가했다.

mockMvc.perform(delete("/api/v1/posts/1"))

4. 단건 조회 테스트

단건 조회 테스트도 추가했다.

.andExpect(jsonPath("$.data.id").value(1))

5. 다건 조회 테스트

게시글 목록 조회 테스트를 구현했다.

.andExpect(jsonPath("$.data.length()").value(3))

6. Postman baseURL 변수

Postman Collection에 baseURL 변수를 추가했다.

{{baseURL}}/api/v1/posts

7. 존재하지 않는 글 조회

존재하지 않는 글 조회 시 404 응답을 반환하도록 수정했다.

return ResponseEntity.status(404).body(rsData);

8. Validation 예외 처리

제목 없이 글 작성 시 400 Bad Request가 발생하도록 구현했다.

@NotBlank
private String title;

9. MethodArgumentNotValidException 처리

유효성 검증 실패 시 발생하는 예외를 처리했다.

@ExceptionHandler(MethodArgumentNotValidException.class)

10. FieldError 메세지 처리

검증 에러를 문자열 형태로 정리했다.

.map(error -> error.getField()
        + "-" + error.getCode()
        + "-" + error.getDefaultMessage())

11. 잘못된 JSON 처리

JSON 형식이 잘못된 경우에도 400 응답을 반환하도록 처리했다.


12. 댓글 단건조회 테스트

댓글 API 테스트도 시작했다.

/api/v1/posts/1/comments/2

13. 댓글 다건조회 테스트

댓글 목록 조회 테스트 추가.

/api/v1/posts/1/comments

14. BeanDefinition 메서드 기반 생성

@Bean 메서드 기반 생성도 처리할 수 있도록 확장했다.

new BeanDefinition<>(
    TestJacksonConfig.class,
    "testBaseJavaTimeModule"
);

15. 생성 의존성이 있는 BeanDefinition

assertThat(beanDefinition.getParameterNames())
    .containsExactly("testBaseJavaTimeModule");

✅ 정리

  • REST API 테스트에서는 응답 JSON 구조 검증이 가장 중요하다.
  • Validation 예외는 MethodArgumentNotValidException으로 처리할 수 있다.
  • ResponseEntity를 사용하면 상태코드와 응답 구조를 더 유연하게 관리할 수 있다.
  • BeanDefinition이 확장되면서 @Bean 메서드 기반 빈 생성도 처리할 수 있게 되었다.
← 목록으로
데브코스백엔드부트캠프프로그래머스