Skip to content

Conversation

@gogori6565
Copy link
Contributor

📣 Related Issue

📝 Summary

[기존 코드의 문제점]
단순한 예외(4xx, 5xx)만 던지고 외부 API가 제공하는 상세 에러 본문/구체적인 오류(예: 만료된 코드, 잘못된 시크릿 키 등)을 로그로 남기지 않았음

[수정한 코드]

  • 에러 응답을 서버 로그에 상세히 남기는 코드를 구현하였습니다.

    • bodyToMono(String.class): 에러가 발생했을 때 서버가 보낸 응답 본문(Error Body)을 읽어옴
    • defaultIfEmpty(...): 만약 응답 바디가 비어있을 경우 발생할 수 있는 오류를 방지하는 안전장치
    • flatMap: 읽어온 에러 바디와 상태 코드를 조합하여 로깅(Logging)을 수행하고, 최종적으로 우리 시스템에 정의된 커스텀 예외로 변환
  • WebClientErrorHandler : WebClient 공통 에러 핸들링을 도입했습니다.

    • 문제: 기존 API의 에러코드는 onStatus 로직이 반복되어 코드가 비대해지고 가독성이 떨어짐
    • 해결: 에러 처리 로직을 별도의 공통 헬퍼 클래스로 분리하고, onStatus(HttpStatusCode::isError, res -> WebClientErrorHandler.handleApiError(res, "API명")) 형태로 한 줄 선언하게 개선하였습니다.

[에러 처리 흐름]

  1. 감지: WebClient 호출 시 onStatus를 통해 HTTP 에러 상태(4xx, 5xx)를 감지합니다.
  2. 기록: log.error를 통해 어떤 API(apiName)에서 어떤 응답(errorBody)이 왔는지 서버 로그에 상세히 남깁니다.
  3. 변환: 외부의 상태 코드를 기반으로 서비스 내부 예외(UnauthorizedException 등)로 매핑합니다.

📬 Reference

image
2025-12-17T16:11:53.280+09:00 ERROR 18708 --- [moongeul] [ctor-http-nio-2] c.m.b.c.c.w.WebClientErrorHandler        : [getKakaoToken] API Error: Status Code: 400 BAD_REQUEST, Body: {"error":"invalid_grant","error_description":"authorization code not found for code=[인가코드]","error_code":"KOE320"}

-> 위와 같은 에러 문구가 서버 로그에 찍힘

Copy link
Member

@rhkr8521 rhkr8521 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

고생하셨습니다

@rhkr8521 rhkr8521 merged commit 89ec35f into develop Dec 17, 2025
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[REFAC] 로그인 처리 코드 서버 로그 찍기

3 participants