개발
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/posts7. 존재하지 않는 글 조회
존재하지 않는 글 조회 시 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/213. 댓글 다건조회 테스트
댓글 목록 조회 테스트 추가.
/api/v1/posts/1/comments14. BeanDefinition 메서드 기반 생성
@Bean 메서드 기반 생성도 처리할 수 있도록 확장했다.
new BeanDefinition<>(
TestJacksonConfig.class,
"testBaseJavaTimeModule"
);15. 생성 의존성이 있는 BeanDefinition
assertThat(beanDefinition.getParameterNames())
.containsExactly("testBaseJavaTimeModule");✅ 정리
- REST API 테스트에서는 응답 JSON 구조 검증이 가장 중요하다.
- Validation 예외는 MethodArgumentNotValidException으로 처리할 수 있다.
- ResponseEntity를 사용하면 상태코드와 응답 구조를 더 유연하게 관리할 수 있다.
- BeanDefinition이 확장되면서 @Bean 메서드 기반 빈 생성도 처리할 수 있게 되었다.