Skip to content

Conversation

@f1v3-dev
Copy link
Collaborator

@f1v3-dev f1v3-dev commented Oct 3, 2025

연관 이슈

resolves #6

작업 내용

Common Module

  • 공통 응답 정의 (ApiResponse)
  • 공통 에러 정의 (ErrorCode, ErrorStatus, ReservationException)

API Module

  • api module: ReservationControllerAdvice
  • admin-api module: AdminReservationControllerAdvice
  • 기존 사용하던 예외(IllegalArgumentException, IllegalStateException)를 커스텀 예외(ReservationException)으로 처리하여 ControllerAdvice에서 공통 처리

@f1v3-dev f1v3-dev self-assigned this Oct 3, 2025
@f1v3-dev f1v3-dev added the enhancement New feature or request label Oct 3, 2025
@f1v3-dev f1v3-dev changed the title 공통 응답 및 예외 포맷 세팅 설정 공통 응답 및 예외 포맷 세팅 Oct 3, 2025
@f1v3-dev
Copy link
Collaborator Author

f1v3-dev commented Oct 11, 2025

에러 처리 개선

자주 발생할 수 있는 예외에 대해서는 개발자 대응이 별도로 필요없는 경우가 많다.

특히, 새로운 기능을 개발했을 때 어떤 예외가 발생했는지 초기에는 확인이 필요한 경우가 있음

example

  1. 개발자가 핸드폰 번호 포맷에 대한 검증 예외를 잘못 설정한 상황
  2. 사용자가 회원가입 도중 핸드폰 번호 검증에 대한 예외가 발생
  3. 기대한 포맷 형태는 무엇이었는데, 사용자가 입력한 핸드폰 번호는 어떻게 되는지 파악이 필요함

어떤 상황에서 로그를 찍어야 할까?

  • 만약, 로그를 사용해야하는 상황이라면, 다양한 로그 레벨 중 어떤 로그 레벨을 사용해야 할 것인가?
  • @Slf4j 를 사용하여 로깅을 사용한다면 ControllerAdvice 에서 어떻게 처리해야할까? (키워드: Consumer<T>)

로그를 제공할 때 부가적인 정보가 제공이 되어야 하는 상황이라면 어떻게 해야할까?

  • Map<String, Object> 필드라는 파라미터를 통해 예외를 전달
  • 실제 발생한 예외에 대해 Exception 필드를 통해 상위 예외(rootCause)를 제공

로그를 한 줄로 작성하는 방법

  • 부가적인 정보들을 뽑아내어 로그를 찍어줘야 하는 상황
  • 즉, 메시지를 한 줄로 만들어 줘야 하기 때문에 별도의 라이브러리를 사용해서 StringJoiner 작업 필요

@sonarqubecloud
Copy link

@f1v3-dev
Copy link
Collaborator Author

f1v3-dev commented Oct 11, 2025

예외 예시

-- Request Parameter Exception
2025-10-11T15:58:22.469+09:00  INFO 53993 --- [nio-8080-exec-1] c.f.r.api.ReservationControllerAdvice    : Validation error | URI = /v1/users/signup | Method = POST | Errors = {phoneNumber=핸드폰 번호 형식이 올바르지 않습니다. (예: 010-0000-0000), gender=성별은 M | F로 입력해주세요., email=이메일 형식이 올바르지 않습니다.} | Parameters = {phoneNumber=01027178133, gender=G, email=f1v3kakao.com}

-- SQL Exception
2025-10-11T15:22:57.993+09:00 ERROR 51357 --- [nio-8081-exec-8] c.f.reservation.admin.term.TermService   : ErrorCode: 4104 | Message: 약관 생성 시 버전 충돌이 발생했습니다. 버전을 확인해주세요. | Parameters: {termCode=TERM_TEST, termVersion=2} | Root Cause: DataIntegrityViolationException - could not execute statement [Duplicate entry 'TERM_TEST-2' for key 'terms.uk_term_code_version'] [insert into terms (activated_at,code,content,created_at,deactivated_at,display_order,is_required,title,updated_at,version) values (?,?,?,?,?,?,?,?,?,?)]; SQL [insert into terms (activated_at,code,content,created_at,deactivated_at,display_order,is_required,title,updated_at,version) values (?,?,?,?,?,?,?,?,?,?)]; constraint [terms.uk_term_code_version]

@f1v3-dev f1v3-dev merged commit 1094e70 into main Oct 12, 2025
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[FEAT] API 공통 응답 및 예외 포맷 세팅

2 participants