๋ฐฑ์—”๋“œ/์„ค๊ณ„

์—๋Ÿฌ์ฝ”๋“œ ์„ค๊ณ„ ๋ฒค์น˜๋งˆํ‚น & NestJS์—์„œ ์—๋Ÿฌ ์‘๋‹ต ์ปค์Šคํ…€ ๋ฐฉ๋ฒ•

๐Ÿน HG 2024. 8. 1. 19:39

๋ฌธ์ œ์ƒํ™ฉ

Nest.js ๊ธฐ๋ณธ ์—๋Ÿฌ ํ˜•์‹

 

  • Nest.js์—์„œ ๊ธฐ๋ณธ ์—๋Ÿฌ ์‘๋‹ต ํ˜•์‹์€ ์œ„์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ์‘๋‹ต์„ ์ฃผ๋ฉด ํ˜‘์—…์— ์–ด๋ ค์›€์ด ์žˆ์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
  • ์ผ๋‹จ ์—๋Ÿฌ๊ฐ€ ์–ด๋Š API์—์„œ ๋ฐœ์ƒํ–ˆ๋Š”์ง€, ์–ธ์ œ ๋ฐœ์ƒํ–ˆ๋Š”์ง€ ์•Œ๊ธฐ ์–ด๋ ต์Šต๋‹ˆ๋‹ค.
  • ํ•˜๋‚˜์˜ ์ƒํƒœ ์ฝ”๋“œ์— ๋Œ€ํ•ด์„œ๋„ ์„ธ๋ถ€์ ์œผ๋กœ ๋ถ„๋ฅ˜ํ•˜๊ธฐ ์œ„ํ•œ ์—๋Ÿฌ ์ฝ”๋“œ๋„ ํ•„์š”ํ•ด๋ณด์ž…๋‹ˆ๋‹ค.

 

๋ฒค์น˜๋งˆํ‚น

๋‹ค๋ฅธ ๊ธฐ์—…๋“ค์—์„œ๋Š” ์–ด๋–ค ์—๋Ÿฌ ์ฝ”๋“œ ์ฒด๊ณ„๋ฅผ ๊ฐ€์ง€๊ณ  ์šด์˜ ์ค‘์ธ์ง€ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

1. NAVER WORKS Developers

  • ๋งํฌ : https://developers.worksmobile.com/kr/docs/error-codes
  • HTTP ์ƒํƒœ ์ฝ”๋“œ์™€ ๋ณ„๋„์˜ ์—๋Ÿฌ ์ฝ”๋“œ ์ฒด๊ณ„๋ฅผ ๊ฐ€์ง€๊ณ , ํ•ด๋‹น ์ฝ”๋“œ๋ฅผ ์‘๋‹ต ๋ณธ๋ฌธ์— ํฌํ•จ์‹œ์ผœ์ฃผ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋™์ผํ•œ ์ƒํƒœ ์ฝ”๋“œ์— ๋Œ€ํ•ด์„œ ์—ฌ๋Ÿฌ ์ข…๋ฅ˜์˜ ์—๋Ÿฌ ์ฝ”๋“œ๋ฅผ ์ง€์ •ํ•ด๋†“์•˜๋‹ค๋Š” ์ ์—์„œ ์–ด๋–ค ์—๋Ÿฌ์ธ์ง€ ํŒŒ์•…ํ•˜๊ธฐ ์‰ฌ์›Œ์„œ ์ข‹์•˜์Šต๋‹ˆ๋‹ค.

 

2. Kakao Developers

  • ๋งํฌ : https://developers.kakao.com/docs/latest/ko/rest-api/reference#response-code
  • ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ HTTP ์ƒํƒœ์ฝ”๋“œ์™€ ๋ณ„๊ฐœ๋กœ ๋‚ด๋ถ€์ ์ธ ์—๋Ÿฌ ์ฝ”๋“œ ์ฒด๊ณ„๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
  • code์™€ msg๋ฅผ ํฌํ•จํ•˜์—ฌ ์—๋Ÿฌ ์‘๋‹ต์„ ๋ณด๋‚ด์ฃผ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

3. Line Developers

  • ๋งํฌ : https://developers.line.biz/en/reference/messaging-api/#error-responses
  • ๋ผ์ธ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋‚ด๋ถ€์ ์ธ ์—๋Ÿฌ์ฝ”๋“œ(error)๊ฐ€ ์žˆ๊ณ , ์—๋Ÿฌ์— ๋Œ€ํ•œ ์„ค๋ช…์„ ํ•จ๊ป˜ ๋ณธ๋ฌธ์— ๋‹ด์•„์„œ ๋ณด๋‚ด์ค๋‹ˆ๋‹ค.
  • details์—์„œ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ ๊ตฌ์ฒด์ ์ธ ํ”„๋กœํผํ‹ฐ๋ฅผ ๋ช…์‹œํ•ด์ค€ ์ ์ด ์ข‹์•˜์Šต๋‹ˆ๋‹ค.

 

๋ฒค์น˜๋งˆํ‚น ๊ฒฐ๊ณผ

์„ธ ๊ธฐ์—…์˜ ์‘๋‹ต ํ˜•์‹์„ ์‚ดํŽด๋ณด๊ณ  ๋‹ค๋ฅธ ๊ธฐ์ˆ  ๋ธ”๋กœ๊ทธ๋“ค์„ ์‚ดํŽด๋ณธ ๊ฒฐ๊ณผ, NestJS ๊ธฐ๋ณธ ์—๋Ÿฌ ์‘๋‹ต ํ˜•์‹์—์„œ ๋ณด์™„ํ•ด์•ผ ํ•  ์ ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  1. ์ž์ฒด ์—๋Ÿฌ ์ฝ”๋“œ( =/= HTTP ์ƒํƒœ์ฝ”๋“œ)
  2. ์—๋Ÿฌ์— ๋Œ€ํ•œ ์„ค๋ช…
  3. ์—๋Ÿฌ ๋ฐœ์ƒ ์œ„์น˜
  4. ์—๋Ÿฌ ๋ฐœ์ƒ ์‹œ๊ฐ„

 

NestJS์—์„œ ์—๋Ÿฌ ์‘๋‹ต ์ปค์Šคํ…€ํ•˜๊ธฐ

๋ชฉํ‘œ

์ €์˜ ๋ชฉํ‘œ๋Š” ์—๋Ÿฌ ์‘๋‹ต์„ ์•„๋ž˜์™€ ๊ฐ™์ด ์„ค๊ณ„ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ธฐ์กด์— ์žˆ๋˜ statusCode๋Š” HTTP ์š”์ฒญ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(fetch, axios ๊ฐ™์€...)์—์„œ HTTP ์‘๋‹ต์„ ์ถ”์ƒํ™”ํ•˜์—ฌ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์‚ญ์ œํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด ์ •๋„๋ฉด ํ˜‘์—… ์ค‘ ๋ฌธ์ œ ๋ฐœ์ƒ์‹œ ์‘๋‹ต ๋ณธ๋ฌธ๋งŒ ์บก์ฒ˜ํ•ด์„œ ๊ณต์œ ํ•ด์ค€๋‹ค๋ฉด ๋ฌธ์ œ ํŒŒ์•…์— ์–ด๋ ค์›€์€ ์—†์„ ๊ฑฐ๋ผ๊ณ  ์ƒ๊ฐ์ด ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

{
  "path": "/auth/sign-in",
  "errorCode": "USER_PASSWORD_IS_WRONG",
  "detail": "๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ ์ผ์น˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.",
  "timestamp": "2024-07-31T17:42:40.585Z"
}

 

๊ณผ์ •

1. ErrorCode enum์„ ์ •์˜ํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ErrorCode๋ฅผ key, ์—๋Ÿฌ ๋ฉ”์„ธ์ง€๋ฅผ value๋กœ ํ•˜๋Š” Record ํƒ€์ž…์˜ ErrorMessage ์ •์˜ํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด๋ ‡๊ฒŒ ํ•œ ์ด์œ ๋Š” ์—๋Ÿฌ ์ฝ”๋“œ์™€ ๋ฉ”์„ธ์ง€๋ฅผ ํ•˜๋‚˜์”ฉ ๋งค์นญํ•˜๊ณ , ์—๋Ÿฌ ์ฝ”๋“œ๋ฅผ ๊ฐ€์ง€๊ณ  ๋ฉ”์„ธ์ง€๋ฅผ ๋ถˆ๋Ÿฌ์™€์„œ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•จ์ด์—ˆ์Šต๋‹ˆ๋‹ค.

 

2. ErrorCode๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.

Exception ์ƒ์„ฑ์‹œ ErrorCode๋ฅผ ์ธ์ž๋กœ ๋„ฃ์–ด์ค๋‹ˆ๋‹ค.

 

3. ๊ธฐ๋ณธ ์—๋Ÿฌ ์‘๋‹ต์„ ์ปค์Šคํ…€ ํ•ด์ฃผ๊ธฐ ์œ„ํ•ด filter๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

Exception์˜ ๊ฐ์ฒด์˜ response์˜ message์— ErrorCode๊ฐ€ ๋‹ด๊ฒจ์žˆ๋Š”๋ฐ, ํƒ€์ž…์ด ๋”ฐ๋กœ ์ œ๊ณต๋˜์ง€ ์•Š์•„์„œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

์‘๋‹ต ํ˜•ํƒœ๋ฅผ ์ปค์Šคํ…€ ํ•ด์ฃผ๋Š” ๋กœ์ง์„ ํฌํ•จํ•˜์˜€๊ณ , ์ด ํ•„ํ„ฐ๋ฅผ ๊ธ€๋กœ๋ฒŒ ํ•„ํ„ฐ๋กœ ๋“ฑ๋กํ•ด์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค.

๊ฒฐ๊ณผ

 

  • ์ข‹์€ ์—๋Ÿฌ ์ฝ”๋“œ ์„ค๊ณ„๋Š” ์‹œ์Šคํ…œ์˜ ์œ ์ง€๋ณด์ˆ˜์„ฑ๊ณผ ํ˜‘์—… ์‹œ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜ ์ธก๋ฉด์—์„œ ์ค‘์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. 
  • 1) ์ผ๊ด€์„ฑ, 2) ์˜๋ฏธ๊ฐ€ ์žˆ๊ณ  ์ดํ•ดํ•˜๊ธฐ ์‰ฌ์šด ๋ฉ”์„ธ์ง€, 3) ๋ช…ํ™•ํ•œ ๋ถ„๋ฅ˜์ฒด๊ณ„ ๊ฐ€ ๊ฐ€์žฅ ์ค‘์š”ํ•˜๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.
  •  
 TODO
- i18n ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๊ฐ™์€ ๊ฒƒ์„ ํ™œ์šฉํ•ด ๋‹ค๊ตญ์–ด ์ฒ˜๋ฆฌ๋„ ์ง€์›ํ•ด๋ณด๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
- ๋กœ๊น… ์‹œ์Šคํ…œ์—์„œ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๋„๋ก trace id๋ฅผ ๋‹ด์„ ์ˆ˜๋„ ์žˆ๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. [์ฐธ๊ณ ]

 

์ฐธ๊ณ 

1. https://developers.worksmobile.com/kr/docs/error-codes

2. https://developers.kakao.com/docs/latest/ko/rest-api/reference#response-code

3. https://developers.line.biz/en/reference/messaging-api/#error-responses

4. https://dreamsh19.github.io/error/%EC%95%A0%ED%94%8C%EB%A6%AC%EC%BC%80%EC%9D%B4%EC%85%98-%EC%97%90%EB%9F%AC-%EC%BD%94%EB%93%9C-%EC%84%A4%EA%B3%84/