Postman์์ JWT ํ ํฐ ์๋ ์ ์ฅ ๋ฐ ์ ์ฉ ์ค์
1. ๊ฐ์
๋ก๊ทธ์ธ API ํธ์ถ ์ ์๋ต์ผ๋ก ๋ด๋ ค์ค๋ accessToken์ Postman ํ๊ฒฝ๋ณ์์ ์๋์ผ๋ก ์ ์ฅํ๊ณ , ์ดํ ์ธ์ฆ์ด ํ์ํ ๋ชจ๋ API ์์ฒญ์ ์๋์ผ๋ก Bearer Token์ ๋ถ์ด๋ ์ค์ ๋ฐฉ๋ฒ์ด๋ค.
2. ๋ฐฐ๊ฒฝ ์ง์
JWT & AccessToken์ด๋?
JWT(JSON Web Token)๋ ์๋ฒ๊ฐ ๋ก๊ทธ์ธํ ์ฌ์ฉ์์๊ฒ ๋ฐ๊ธํ๋ ์ธ์ฆ ํ ํฐ์ด๋ค. ์ด ์ค AccessToken์ ์ค์ API ์์ฒญ ์ ๋ก๊ทธ์ธ๋ ์ฌ์ฉ์์์ ์ฆ๋ช
ํ๋ ํ ํฐ์ด๋ค.
์ผ๋ฐ์ ์ผ๋ก AccessToken์ ๋ณด์์ ๋ง๋ฃ ์๊ฐ์ด ์งง๊ฒ ์ค์ ๋๋ค. ๋ณดํต 30๋ถ์์ 1์๊ฐ ์ ๋๋ก ์ค์ ํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง๊ธฐ ๋๋ฌธ์, ํ ์คํธ ์ค ํ ํฐ์ด ๋ง๋ฃ๋๋ฉด ๋ค์ ๋ก๊ทธ์ธํด์ ์ ํ ํฐ์ ๋ฐ์์ผ ํ๋ค.
Bearer๋?
Bearer๋ HTTP ์ธ์ฆ ๋ฐฉ์ ์ค ํ๋๋ค. ์๋ฒ์ ์์ฒญ์ ๋ณด๋ผ ๋ ์๋์ ๊ฐ์ ํ์์ผ๋ก ํ ํฐ์ ์์ฒญ ํค๋์ ๋ด์ ๋ณด๋ธ๋ค.
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6...์๋ฒ๋ Bearer ๋ค์ ๋ถ์ ํ ํฐ์ ํ์ฑํด์ ์ฌ์ฉ์๋ฅผ ์๋ณํ๊ณ , ํด๋น ์ฌ์ฉ์๊ฐ ์์ฒญํ API์ ์ ๊ทผํ ์ ์๋์ง ๊ฒ์ฆํ๋ค.
์ ์ด ์ค์ ์ด ํ์ํ๊ฐ?
Postman์ผ๋ก ์ธ์ฆ์ด ํ์ํ API๋ฅผ ํ ์คํธํ ๋, ๋งค๋ฒ ๋ก๊ทธ์ธ ์์ฒญ์ ๋ณด๋ด๊ณ ์๋ต์์ ํ ํฐ์ ๋ณต์ฌํ ๋ค ๋ค๋ฅธ ์์ฒญ ํค๋์ ๋ถ์ฌ๋ฃ๋ ๊ณผ์ ์ ๋ฒ๊ฑฐ๋กญ๋ค.
ํนํ AccessToken์ด ๋ง๋ฃ๋๋ฉด ๋ค์ ๋ก๊ทธ์ธํ๊ณ ํ ํฐ์ ๋ณต์ฌํด์ ์ค์ ํด์ผ ํ๋ค. ์๋ ์ค์ ์ ์ ์ฉํ๋ฉด ๋ก๊ทธ์ธ ์์ฒญ ํ ๋ฒ์ผ๋ก ์ดํ ๋ชจ๋ ์ธ์ฆ ํ์ ์์ฒญ์ ํ ํฐ์ด ์๋์ผ๋ก ์ ์ฉ๋๋ค.
3. ์ค์ ๋ฐฉ๋ฒ
1. Environment ์์ฑ
Postman ์ฐ์ธก ์๋จ Environments ๋ฉ๋ด์์ + ๋ฒํผ์ ๋๋ฌ ์ ํ๊ฒฝ์ ์์ฑํ๋ค.
| Variable | Initial Value |
|---|---|
baseUrl |
http://localhost:8080 |
accessToken |
๋น์๋๊ธฐ |

baseUrl์๋ ๋ก์ปฌ ์๋ฒ ์ฃผ์๋ฅผ ์
๋ ฅํ๊ณ , accessToken์ ๋ก๊ทธ์ธ ํ ์๋ ์ ์ฅ๋๋๋ก ๋น์๋๋ค.
2. ๋ก๊ทธ์ธ ์์ฒญ Tests ํญ์ ์คํฌ๋ฆฝํธ ์ถ๊ฐ
๋ก๊ทธ์ธ ์์ฒญ์ ์ ํํ ๋ค Tests ํญ์ ํด๋ฆญํ๊ณ , ๋ก๊ทธ์ธ ์๋ต์์ accessToken์ ๊บผ๋ด ํ๊ฒฝ๋ณ์์ ์ ์ฅํ๋ ์คํฌ๋ฆฝํธ๋ฅผ ์ถ๊ฐํ๋ค.

๋ก๊ทธ์ธ ์์ฒญ์ Tests ํญ์ ์๋ต์์ accessToken์ ์ถ์ถํด ํ๊ฒฝ๋ณ์๋ก ์ ์ฅํ๋ ์คํฌ๋ฆฝํธ๋ฅผ ์ถ๊ฐํ๋ค.
Postman ๋ฒ์ ์ ๋ฐ๋ผ Tests ๋๋ Post-response ์์ญ์์ ์๋ต ํ ์คํ ์คํฌ๋ฆฝํธ๋ฅผ ์์ฑํ ์ ์๋ค.

์๋ฒ ์๋ต์ JSON์ผ๋ก ํ์ฑํ ๋ค res.data.accessToken ๊ฐ์ ํ๊ฒฝ๋ณ์ accessToken์ ์ ์ฅํ๋ ์ฝ๋๋ค.
์คํฌ๋ฆฝํธ ๋์ ๋ฐฉ์
Postman์ ์์ฒญ์ Sendํ๋ฉด ์๋ต์ ๋ฐ์ ์งํ Tests ํญ์ ์๋ ์คํฌ๋ฆฝํธ๋ฅผ ์๋์ผ๋ก ์คํํ๋ค. ์ด ์คํฌ๋ฆฝํธ๋ ์ฝ์์ ์ถ๋ ฅํ๋ ์ฝ๋๊ฐ ์๋๋ผ, ์๋ต์์ ๊ฐ์ ๊บผ๋ด ํ๊ฒฝ๋ณ์์ ์ ์ฅํ๋ ์ฝ๋๋ค.
pm.response.json()— ์๋ฒ์์ ๋ฐ์ ์๋ต ๋ฐ๋๋ฅผ JSON ํํ๋ก ํ์ฑํ๋ค.res.data.accessToken— ํ์ฑํ ์๋ต์์ accessToken ๊ฐ์ ๊บผ๋ธ๋ค.pm.environment.set("accessToken", ...)— ๊บผ๋ธ ๊ฐ์ ํ๊ฒฝ๋ณ์accessToken์ ์ ์ฅํ๋ค.
์ฆ, ๋ก๊ทธ์ธ ์์ฒญ์ Sendํ๋ฉด ์๋ต ์์ ํ ์คํฌ๋ฆฝํธ๊ฐ ์๋ ์คํ๋๊ณ , ์ดํ {{accessToken}}์ ์ฐธ์กฐํ๋ ๋ชจ๋ ์์ฒญ์ ์ ์ฅ๋ ํ ํฐ ๊ฐ์ด ์๋์ผ๋ก ์ฑ์์ง๋ค.
Tests ํญ์ ์คํฌ๋ฆฝํธ๋ฅผ ๋ถ์ฌ๋ฃ๊ณ ๋ค์ ๋ก๊ทธ์ธ ์์ฒญ์ ๋ณด๋ด์ผ ํ๋ค. ๊ทธ๋์ผ ์ดํ ์์ฒญ๋ง๋ค ํ ํฐ์ด ์๋์ผ๋ก ์ ์ฉ๋๋ค.3. ์ปฌ๋ ์ Authorization ์ค์
์ปฌ๋ ์
์ด๋ฆ์ ํด๋ฆญํ ๋ค ์ฐ์ธก Authorization ํญ์์ ์๋์ ๊ฐ์ด ์ค์ ํ๋ค.
- Type:
Bearer Token - Token:
{{accessToken}}
์ด๋ ๊ฒ ์ค์ ํ๋ฉด ์ปฌ๋ ์ ํ์์ ๋ชจ๋ ์์ฒญ์ ์๋์ผ๋ก AccessToken์ด ๋ถ๋๋ค.

์ปฌ๋ ์
Authorization์ Bearer Token ํ์
์ ์ ํํ๊ณ , Token ๊ฐ์ผ๋ก {{accessToken}}์ ์ค์ ํ ํ๋ฉด์ด๋ค.
4. Refresh Token ์ฒ๋ฆฌ
Refresh Token์ด HttpOnly ์ฟ ํค๋ก ๋ด๋ ค์ค๋ ๊ฒฝ์ฐ์๋ Postman์ด ์ฟ ํค๋ฅผ ์๋์ผ๋ก ๊ด๋ฆฌํ๋ค. ๋ฐ๋ผ์ Refresh Token์ ๋ณ๋๋ก ํ๊ฒฝ๋ณ์์ ์ ์ฅํ์ง ์์๋ ๋๋ค.
/auth/reissue ์์ฒญ์ ๋ณด๋ผ ๋ Postman์ด ์ ์ฅ๋ ์ฟ ํค๋ฅผ ์๋์ผ๋ก ํจ๊ป ์ ์กํ๋ฏ๋ก, ์๋ฒ๋ ์ฟ ํค์ ๋ด๊ธด Refresh Token์ ์ด์ฉํด AccessToken์ ์ฌ๋ฐ๊ธํ ์ ์๋ค.
5. ์ฐธ๊ณ
- Postman ๋ฒ์ ์ ๋ฐ๋ผ ์ปฌ๋ ์ Edit ๋ฉ๋ด ์์น๊ฐ ๋ค๋ฅผ ์ ์๋ค.
- ์ปฌ๋ ์ ์ด๋ฆ์ ์ง์ ํด๋ฆญํ๋ฉด ์ฐ์ธก์ Authorization, Variables, Scripts ๋ฑ์ ํญ์ด ์ด๋ฆด ์ ์๋ค.
- ํ๊ฒฝ๋ณ์๋ ๋ฐ๋์ ํ์ฑํ๋์ด ์์ด์ผ
{{accessToken}}์ด ์ ์ ๋์ํ๋ค. - ํ ํฐ์ด ๋ง๋ฃ๋๋ฉด ๋ก๊ทธ์ธ ์์ฒญ์ ๋ค์ ๋ณด๋ด ํ๊ฒฝ๋ณ์์ ์ AccessToken์ ์ ์ฅํ๋ฉด ๋๋ค.