์๋ฌ์ฝ๋ ์ค๊ณ ๋ฒค์น๋งํน & NestJS์์ ์๋ฌ ์๋ต ์ปค์คํ ๋ฐฉ๋ฒ
๋ฌธ์ ์ํฉ

- 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 ๊ธฐ๋ณธ ์๋ฌ ์๋ต ํ์์์ ๋ณด์ํด์ผ ํ ์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ์์ฒด ์๋ฌ ์ฝ๋( =/= HTTP ์ํ์ฝ๋)
- ์๋ฌ์ ๋ํ ์ค๋ช
- ์๋ฌ ๋ฐ์ ์์น
- ์๋ฌ ๋ฐ์ ์๊ฐ
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