HomeAboutMeBlogGuest
© 2025 Sejin Cha. All rights reserved.
Built with Next.js, deployed on Vercel
팀 09 : 눈떠보니개발자
팀 09 : 눈떠보니개발자
/
공통 error code
공통 error code
공통 error code

공통 error code

Created time
Feb 16, 2024 03:16 PM
github link
ID
18
개발 중요도
1
noti
Status
Done
Summary
스프린트
S1
누가할꺼임;
전체
Tags

에러 코드 문서화 예시

에러 코드에 대한 문서는 다음과 같은 정보를 포함해야 합니다.
  • 에러 코드
  • 에러 메시지
  • 에러 설명
  • 해결 방법 또는 참고 사항
예를 들어, 101 에러 코드에 대한 문서화는 다음과 같이 될 수 있습니다.
  • 에러 코드: 101
  • 에러 메시지: "사용자 이름이 너무 짧습니다."
  • 에러 설명: 사용자 이름이 설정된 최소 길이 기준을 만족하지 못했을 때 발생합니다.
  • 해결 방법: 사용자 이름을 8자 이상으로 설정해 주세요.
 
enum errorCode404 { USER_NOT_FOUND(HttpStatus.NOT_FOUND, "E1001", "유저가 없서용~"); }
 
 

도메인

  1. custom server error - 1 번부터 시작
      • 01: Auth 관련 Exception
      • 02: User 관련 Exception
      • 03: Project 관련 Exception
      • 04: Profile Card 관련 Exception
      • 05: ProjectJoinRequest 관련 Exception
      • 06: Notification 관련 Exception
      • 07: Cert 관련 Exception
      • 08: Geo 관련 Exception
      • 09: Matching 관련 Exception
      • 10: Profile Card Like 관련 Exception
      • 11: Chat 관련 Exception
      • 12: Review 관련 Exception
      • 13: Achievement 관련 Exception
      • 14: UserAchievement 관련 Exception
       
  1. 공통 error - 0 번 부터 시작
      • 00 : 공통
      • E999999 : 500 에러
 

에러 종류

Number
Situation
0
도메인 또는 DTO 객체를 생성할 때 잘못된 경우, 즉 MethodArgumentValidException 또는 ConstraintViolationException이 발생한 경우 (400)
1
도메인 로직 상의 오류인 경우 (400)
2
인증, 인가가 안된 경우 (401,403)
3
존재하지 않는 리소스에 접근한 경우 (404)
4
외부 API 연동 중 에러가 발생한 경우
 

예시

E000001
도메인 구분 - 공통
에러 종류 구분 - dto 생성 오류
정의 된 순서 (시퀀스 값) - 첫번째로 정의 됨
 
에러코드 관리
도메인
Name
00
E999999
00
E000001
00
E000002
02
E020301
06
E060001
06
E060002
01
E010201
02
E020101
02
E020102
02
E020103
03
E030101
03
E030102
03
E030103
03
E030104
03
E030105
03
E030301
03
E030201
02
E020001
06
E060003
03
E030106
06
E060301
03
E030107
02
E010202
02
E010203
05
E050201
05
E050301
02
E020105
02
E020106
11
E110301
11
E110401
11
E110101
11
E110102
02
E020109
12
E120101
12
E120102
12
E120103

레퍼런스

Custom Error Code가 왜 필요했을까?
커스텀 에러 코드를 도입한 이유 이때까지 백엔드에서 예외가 발생하면 프론트엔드로 다음과 같은 응답 메시지를 보내고 있었다. // response { "message": "요청 형식이 잘못되었습니다." } 각 Http Status Code 마다 응답되는 message는 한 가지뿐이었다. 따라서 어떠한 예외가 발생하던 위의 4가지 중 하나의 메시지만 받을 수 있었다. 악의적인 사용자가 악의적인 요청을 보내 예외가 발생하는 경우 어떠한 잘못으로 인해 예외가 발생했는지 알 수 없게 하기 위해서 위처럼 메시지를 추상화하여 응답하였다. 그러나 이런 추상적인 메시지 덕분에 프론트 개발자가 개발하는데에 어려움을 겪게 되었다. 프론트 개발자가 개발 진행 중, 요청을 보냈을 때 예외가 발생하면 응답 메시지를 통해 어떤 예..
Custom Error Code가 왜 필요했을까?
https://park-algorithm.tistory.com/entry/Custom-Error-Code-%EC%A0%81%EC%9A%A9%EA%B8%B0
Custom Error Code가 왜 필요했을까?
 

 

알

 
일정이 있어서 늦게 확인 했습니다… 🙇🏻🙇🏻
 
코드로 관리 하는거랑 문자열로 관리하는 거랑 어떤 관리적인 측면에서의 이점이 있을까?
고민을 해봤습니다.
 
이전에 개발했던 서비스들은 아시는 것처럼 코드로 관리하였었습니다.
E001, E002… 사실 매핑하기 위한 코드 값이지 코드만 가지고는 오류에 대해서 판단하기 힘든 것도 사실입니다.
그래서 고민이 되는게, 과연 오류 코드라는 것으로 관리를 해야 하는 것일까?
 
에러코드의 역할을 하는 보다 서술적인 내용을 담은 메시지를 전달하는 방법은 없는건가?
 
 
api를 소비하는 입장에서 요청 → 응답 → 에러코드 확인 → 백엔드에 확인 요청 이 아닌 요청 → 응답 → 에러코드 확인 → 자체적으로 수정 → 재요청 → 정상처리 프로세스 처리를 할 수 있는 방법은 없을까?
 
이미 HttpStatus라는 Http의 규격이 존재합니다.
HTTP 상태 코드 - HTTP | MDN
HTTP 응답 상태 코드는 특정 HTTP 요청이 성공적으로 완료되었는지 알려줍니다. 응답은 5개의 그룹으로 나누어집니다: 정보를 제공하는 응답, 성공적인 응답, 리다이렉트, 클라이언트 에러, 그리고 서버 에러. 상태 코드는 section 10 of RFC 2616에 정의되어 있습니다.
HTTP 상태 코드 - HTTP | MDN
https://developer.mozilla.org/ko/docs/Web/HTTP/Status
HTTP 상태 코드 - HTTP | MDN
  • 빈도가 높은 HttpStatus
HttpStatus Code
HttpStatus Message
200
OK
400
Bad Request
401
Unauthorized
402
Request Failed
403
Forbidden
404
Not Found
409
Conflict
429
Too Many Requests
500
Internal Server Error
502
Bad Gateway
503
Server Unavailable
504
Gateway Timeout
 
우리는 개발 중에 HTTP Status를 확인하고, 어떤 요청에서 잘못되었는지를 확인한 뒤에 이를 수정하고 재요청하여 최종적으로 원하는 결과를 얻는 플로우로 개발을 진행합니다.
 
그렇다면 이러한 프로세스로 오류 코드를 정의하고, 이를 확인할 수 있는 방법을 제공한 뒤에, 자체적으로 내용을 수정하고, 재요청 할 수 있도록 하는 프로세스를 정의하면, client와의 협업에서 보다 원할한 소통을 할 수 있을 거랑 생각됩니다.
 
위와 같은 프로세스를 정의하는 방법으로 wiki에 오류코드와 메시지, 보다 자세한 해결 방법을 정의해두고,
오류코드 명세에 이를 확인할 수 있는 방법을 제공함으로써 client의 행동을 규격화 할 수 있지 않을까?
 
Http에 대한 공통 규격이 존재하는 것처럼, 비즈니스에서는 보다 서술적인 내용을 표현할 수도 있을 것 같음
 
  • 오류코드 명세 를 정의한다면 아래와 같은 방식으로 정의할 수 있지 않을까?
    • 오류 타입(type)
      • invalid_request_error(4xx)
      • auth_error (401, 403)
      • api_error (500)
    • 오류 코드(code)
      • 에러가 발생할 수 있는 구간을 정의하고 이를 단어로 정의
    • 오류 메시지(message)
      • 오류 코드에 대한 보다 상세한 내용을 서술
    • 오류 원인(param)
      • 요청 시 원인이 되는 파라미터를 전달
      • 비즈니스 처리시 원인이 되는 파라미터는 응답으로서 노출할 대상이 아님
오류타입(type)
오류코드(code)
오류메시지(message)
오류 원인(param)
invalid_request_error
ㅤ
ㅤ
ㅤ
api_error
ㅤ
ㅤ
ㅤ
 
 

에러 응답 타입 - 상세한 명세를 제시하는 타입

public class ErrorResponse { private final String type; // 오류에 대한 타입(카테고리)을 정의 (api_error, invalid _request_error...) private final String code; // 보다 디테일한(도메인 관련) 오류코드를 정의 (invalid_parameter) private final String message; // 오류코드에 대한 보다 상세한 메시지를 정의 private final String param; // 오류가 발생한 원인에 대한 파라미터를 전달 private final String docUrl; // code에 대한 보다 자세한 정보를 알 수 있는 URL private final String requestLogUrl; // 요즘 트랜드한 서비스에서는 요청에 대한 관리 페이지를 제공(에러사유에 대한 해법 제공) //... }
오류 관련 상세한 정보를 제공하는 페이지(URL)를 제공한다면? (wiki에 에러 모음 페이지를 만들어서 관리)
docUrl 라는 필드에 값으로 전달하여,
 
client가 해당 페이지에 들어가서 상세 메시지를 확인한 뒤
어떤 내용에 대해서 잘못되었는지를 판단할 수 있도록 하는 것도 좋을 듯
 
요즘 회사들이 api document 페이지에도 심혈을 기울이는 것과도 연결을 할 수 있을 듯
 

path가 없는 경우

{ "error": { "code": "resource_missing", // 예시 404 not found에 대한 응답 코드 "doc_url": "{github wiki에 정의하여 url을 담아 보내주는 것도 좋을 듯}", "message": "No such transaction ", // api resource(path)가 없는 경우 "type": "invalid_request_error" } }
 

400 Bad Request 특정 값에 대한 오류가 발생하는 경우

{ "error": { "message": "{value} is not a valid phone number", "message_code": "invalid_phone_number", "param": "phone", "request_log_url": "{요청 및 응답 명세를 확인할 수 있는 url}", "type": "invalid_request_error" } }
 

500 internal server exception

{ "error": { "message": "An unknown error occurred", "request_log_url": "{요청 및 응답 값을 확인할 수 있는 url}", "type": "api_error" } }