2026-02-23

오늘 한 것

  • Swagger UI를 통해 User API 전체 테스트 진행
  • POST /api/users 사용자 생성 성공 (201 Created 확인)
  • GET /api/users 전체 조회 성공 (배열 응답 확인)
  • PATCH /api/users/{userId} 사용자 정보 수정 성공
  • multipart/form-data 기반 요청 구조 디버깅
  • 500 오류(Content-Type ‘application/octet-stream’ is not supported) 해결
  • @RequestPart DTO 직접 바인딩 방식에서 String → ObjectMapper 변환 방식으로 수정

막힌 점

  • Swagger에서 multipart 요청 시 JSON part가 application/json이 아닌 octet-stream으로 처리됨
  • @RequestPart UserCreateRequest로 직접 받는 구조에서 HttpMessageConverter 변환 실패 발생
  • UserApi와 UserController 메서드 시그니처 불일치로 컴파일 오류 발생
  • UUID(PathVariable)에 임의 문자열 입력 시 “Value must be a Guid” 검증 오류 발생

정리

  • multipart/form-data에서 JSON part는 항상 안전하게 DTO로 변환되지 않는다.
  • Swagger는 JSON part를 내부적으로 octet-stream으로 처리할 수 있다.
  • 이 경우 @RequestPart로 DTO를 직접 받으면 500 오류가 발생할 수 있다.
  • 해결 방법은 JSON을 String으로 받고 ObjectMapper로 직접 파싱하는 것이다.
  • 인터페이스(UserApi)와 구현체(UserController)의 메서드 시그니처는 반드시 정확히 일치해야 한다.
  • PATCH 테스트 시 userId에는 GET 응답에서 반환된 실제 UUID 값을 넣어야 한다.
  • User API는 현재 생성, 조회, 수정이 모두 정상 동작 상태이다.

코드

  • @RequestPart(“userCreateRequest”) String userCreateRequestJson 방식으로 수정
  • ObjectMapper.readValue(…)를 통해 JSON → DTO 변환
  • update 메서드도 동일 구조 적용
  • UUID는 GET 응답의 id 값을 그대로 PathVariable로 사용