๐ŸŽ‰ berenickt ๋ธ”๋กœ๊ทธ์— ์˜จ ๊ฑธ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค. ๐ŸŽ‰
Back
NestJs
17-Postman Advanced

1. ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์‚ฌ์šฉ

  • ํ˜„์žฌ๋Š” Access, Refresh ํ† ํฐ์„ ๋งค๋ฒˆ ๊ฐฑ์‹ ํ•ด์•ผ ํ•˜๋Š” ๋ถˆํŽธํ•จ์ด ์žˆ๋‹ค.
  • ํ™˜๊ฒฝ๋ณ€์ˆ˜๋ฅผ ์ด์šฉํ•˜๋ฉด ์ด๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.

postman-env

ํฌ์ŠคํŠธ๋งจ์˜ ๋งจ ์™ผ์ชฝ์˜ ๋ฉ”๋‰ด๋ฅผ ๋ณด๋ฉด, ์ด๋–„๊นŒ์ง€๋Š” Collections ํƒญ๋งŒ ์ด์šฉํ–ˆ๋‹ค.

  • Environments ํƒญ์„ ํด๋ฆญํ•œ๋‹ค.
  • Globals์— new Environments ๋ฒ„ํŠผ์„ ํด๋ฆญํ•œ๋‹ค.
  • ๊ทธ ์•ˆ์— ๋ณ€์ˆ˜๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ํ™˜๊ฒฝ๋ณ€์ˆ˜๋Š” ๋‹ค์Œ ํ‘œ์™€ ๊ฐ™์ด ์„ค์ •ํ•œ๋‹ค. ๊ฐ’์„ ์“ฐ๊ณ  ๋ฐ˜๋“œ์‹œ ์ €์žฅ์„ ํ•ด์ค˜์•ผ ์ ์šฉ๋œ๋‹ค.
VariableTypeInitial valueCurrent value
hostdefaultlocalhost:3000localhost:3000
  • cf. Initial value๋Š” ํฌ์ŠคํŠธ๋งจ์—์„œ ํŒ€๋ผ๋ฆฌ ๊ณต์œ ํ•˜๋Š” ๊ธฐ๋Šฅ ์‚ฌ์šฉ์‹œ ๊ณต์œ ํ•  ๋–„ ์‚ฌ์šฉ๋˜๋Š” ๊ฐ’
  • cf. Current value๋Š” Initial value๋ฅผ ๋กœ์ปฌ์—์„œ๋งŒ ์˜ค๋ฒ„๋ผ์ด๋“œํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ’

๊ทธ๋ฆฌ๊ณ  ์˜ค๋ฅธ์ชฝ ์œ„์— ํ† ๊ธ€์—์„œ ์ž‘์„ฑํ•œ Environments๋ฅผ ์ ์šฉ์‹œ์ผœ์ค€๋‹ค.

postman-env2

๊ทธ๋Ÿฐ ๋‹ค์Œ, ๋ชจ๋“  API์— {{ํ™˜๊ฒฝ๋ณ€์ˆ˜๋ช…}}์„ ์ž…๋ ฅํ•ด์„œ ์ ์šฉ์‹œ์ผœ ์ค€๋‹ค.


2. Test๋กœ ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์ €์žฅ

์ ์šฉํ•œ ํ™˜๊ฒฝ๋ณ€์ˆ˜๋ฅผ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ˆ˜์ •ํ•œ๋‹ค.

VariableTypeInitial valueCurrent value
accessTokendefault
refreshTokendefault
hostdefaultlocalhost:3000localhost:3000

๋กœ๊ทธ์ธํ•˜๋ฉด, ์ž๋™์œผ๋กœ accessToken ๊ฐ’์„ ์ฑ„์›Œ์ฃผ๊ฒŒ ํ•  ๊ฒƒ์ด๋‹ค.

/auth/login/email API์—์„œ Tests ํƒญ์„ ํด๋ฆญํ•œ๋‹ค.

  • ์›๋ž˜ Tests ํƒญ์€ ์š”์ฒญ์„ ํ–ˆ์„ ๋–„, ์‘๋‹ต๊ฐ’์ด ์ œ๋Œ€๋กœ ๋“ค์–ด์˜ค๋Š”์ง€ ๊ฒ€์ฆํ•˜๊ธฐ ์œ„ํ•œ ์ฝ”๋“œ๋ฅผ ์งœ๋Š” ๊ณณ์ด๋‹ค.
  • ๊ทธ๋ž˜์„œ ์š”์ฒญ์„ ๋ณด๋‚ผ ๋–„๋งˆ๋‹ค, Tests๊ฐ€ ๊ฐ™์ด ๋Œ๋ฉด์„œ ์‘๋‹ต์ด ์ œ๋Œ€๋กœ ๋๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๊ทธ๊ฑฐ ์™ธ์—๋„ ์›ํ•œ๋‹ค๋ฉด, ํ™˜๊ฒฝ๋ณ€์ˆ˜๋ฅผ ๋ณ€ํ˜•ํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ํฌ์ŠคํŠธ๋งจ์—์„œ ์ œ๊ณตํ•œ๋‹ค.
  • cf. pm์€ postman์ด๋ผ๋Š” ๋œป
1
pm.test('Store access token', function () {
2
pm.environment.set('accessToken', pm.response.json().accessToken)
3
})
4
5
pm.test('Store refresh token', function () {
6
pm.environment.set('refreshToken', pm.response.json().refreshToken)
7
})
  • /auth/login/email API๋ฅผ ์š”์ฒญ์„ ๋ณด๋‚ด๊ณ , ํ™˜๊ฒฝ๋ณ€์ˆ˜ ํƒญ์œผ๋กœ ๋Œ์•„๊ฐ€ ํ™•์ธํ•ด๋ณด๋ฉด, current value์— ๊ฐ’์ด ๋“ค์–ด๊ฐ„๋‹ค.
  • /auth/login/email API์— ๋ฐ‘์— Test Results ํด๋ฆญํ•ด๋ณด๋ฉด ์š”์ฒญ์ด ์ž˜ ๋ณด๋‚ด์ง„ ๊ฒƒ(PASS)์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

3. Authorization ํƒญ ์ด์šฉํ•ด Basic ํ† ํฐ ๋ณด๋‚ด๊ธฐ

/auth/login/email API์˜ Headers ํƒญ์—์„œ authorization์„ ์‚ญ์ œํ•œ๋‹ค.

  • ๊ทธ๋ฆฌ๊ณ  /auth/login/email API์˜ Authorization ํƒญ์—์„œ Type์„ Basic Auth๋ฅผ ์„ ํƒํ•œ๋‹ค.
  • ์‚ฌ์šฉํ•  ID, PW๋ฅผ ์ž…๋ ฅํ•œ๋‹ค. ์ €์žฅํ•˜๊ณ  ์š”์ฒญ์„ ๋ณด๋‚ธ๋‹ค.
  • ๊ทธ๋Ÿฌ๋ฉด ์ž๋™์œผ๋กœ Base64๋กœ ์ธ์ฝ”๋”ฉํ•ด์ค€๋‹ค.

ํฌ์ŠคํŠธ๋งจ์— ๋งจ ์•„๋ž˜ console ํƒญ์„ ํด๋ฆญํ•ด๋ณด๋ฉด, ์ง€๊ธˆ๊นŒ์ง€ ๋ณด๋‚ธ ์š”์ฒญ๋“ค์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ๊ฐ€์žฅ ์ตœ๊ทผ์ด ๋งจ ๋ฐ‘์— ์žˆ๋‹ค.
  • ํ™•์ธํ•ด๋ณด๋ฉด, Request Headers.Authorization๋ฅผ ํ™•์ธํ•ด๋ณด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ž˜ ๋“ค์–ด๊ฐ„ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.
1
Request Headers
2
Authorization: Basic c3dAZ21haWwuYWk6MTIzMTIz
3
User-Agent: PostmanRuntime/7.32.3
4
Accept: */*
5
Postman-Token: a889e7c9-220b-4123-bd1a-6c1ac6b283df
6
Host: localhost:3000
7
Accept-Encoding: gzip, deflate, br
8
Connection: keep-alive
9
Content-Length: 0

4. ํšŒ์›๊ฐ€์ž… ๋ผ์šฐํŠธ์— Test ์ ์šฉ

/auth/login/email API์˜ Tests ํƒญ์˜ ์ฝ”๋“œ๋ฅผ /auth/register/email์— Tests์— ๋ณต๋ถ™ํ•œ๋‹ค.

  • ํšŒ์›๊ฐ€์ž…์€ Body์—์„œ ํ•˜๋‹ˆ, ๊ทธ๋Œ€๋กœ ๋‘๋ฉด ๋œ๋‹ค.

5. ํ—ค๋”์— Bearer ํ† ํฐ ์ ์šฉ

  1. /posts API์˜ Headers ํƒญ์—์„œ Authorization๋ฅผ ์ง€์šด๋‹ค.
  2. /posts API์˜ Authorization ํƒญ์—์„œ type์„ Bearer Token์„ ํด๋ฆญํ•œ๋‹ค.
  3. Token์— ํ™˜๊ฒฝ๋ณ€์ˆ˜ {{accessToken}}๋ฅผ ์ž…๋ ฅํ•ด๋‘๋ฉด, ์•Œ์•„์„œ ํ™˜๊ฒฝ๋ณ€์ˆ˜์˜ ๊ฐ’์„ ๊ฐ€์ ธ์™€์„œ ์ ์šฉํ•œ๋‹ค.
  4. ์ด์ œ๋ถ€ํ„ฐ ๊ทธ๋ƒฅ ๋ฐ”๋กœ ์ตœ์‹ ํ† ํฐ์„ ๊ธฐ๋ฐ˜์œผ๋กœ API ์š”์ฒญ๋งŒ ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

๋‹ค๋ฅธ ํ”„๋กœ์ ํŠธ์—์„œ๋„ ํ™˜๊ฒฝ๋ณ€์ˆ˜๋ฅผ ์ž˜ ์ ์šฉํ•˜๋ฉด ํŽธํ•ด์ง„๋‹ค.