Projects/Web Projects

[ํ”„๋กœ์ ํŠธ] ํฌ์ŠคํŠธ๋งจ(Postman)์œผ๋กœ REST API ์„ค๊ณ„ํ•˜๊ธฐ

minzhen 2022. 7. 16. 15:46

API๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„์˜ค๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ธฐ ์ „์—, API์—์„œ ๋‚˜์˜ ์š”์ฒญ๋Œ€๋กœ ์ œ๋Œ€๋กœ ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„์˜ค๋Š”์ง€ ๋จผ์ € ํ™•์ธ์„ ํ•ด๋ณผ ํ•„์š”๊ฐ€ ์žˆ๋‹ค. ์˜ค๋Š˜์€ ์ด ๊ณผ์ •์— ์•„์ฃผ ์œ ์šฉํ•œ Postman์ด๋ผ๋Š” ํ”Œ๋žซํผ์— ๋Œ€ํ•ด ์•Œ์•„๋ณธ๋‹ค.

 

์šฉ์–ด์™€ ๊ฐœ๋…

ํฌ์ŠคํŠธ๋งจ์ด๋ž€?

Postman (www.postman.com)
 

Postman API Platform | Sign Up for Free

Postman is an API platform for building and using APIs. Postman simplifies each step of the API lifecycle and streamlines collaboration so you can create better APIs—faster.

www.postman.com

ํฌ์ŠคํŠธ๋งจ(Postman)์€ ํŽธ๋ฆฌํ•œ REST API ์„ค๊ณ„, ๊ฐœ๋ฐœ, ํ…Œ์ŠคํŒ… ๊ธฐ๋Šฅ์„ ํˆด(Tool)๋กœ ์ œ๊ณตํ•˜๊ณ , ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๊ณต์œ ํ•˜์—ฌ ๊ฐœ๋ฐœ ์ƒ์‚ฐ์„ฑ์„ ๋†’์—ฌ์ฃผ๋Š” ํ”Œ๋žซํผ์ด๋‹ค. API ํ…Œ์ŠคํŠธ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ Collection Sync, API Monitoring ๋“ฑ ํŒ€์›๋“ค์ด ํ˜‘์—…ํ•˜๋Š”๋ฐ ๋„์›€์„ ์ฃผ๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํˆด์ด ์•„๋‹Œ ํ”Œ๋žซํผ์ด๋‹ค.

* Postman์€ ๊ฐœ์ธ ์‚ฌ์šฉ ๋ชฉ์ ์ธ ๊ฒฝ์šฐ๋Š” ๋ฌด๋ฃŒ, ํŒ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๊ด€๋ จ Collection Sync, API ๋ชจ๋‹ˆํ„ฐ๋ง ๊ธฐ๋Šฅ๋“ค์€ ์œ ๋ฃŒ ์„œ๋น„์Šคโ€‹

RESP API๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํด๋ผ์ด์–ธํŠธ๋ฅผ ๊ฐœ๋ฐœํ•˜๋Š” ๊ฒฝ์šฐ ์„œ๋ฒ„์™€์˜ API ์ธ์ฆ๊ณผ ๋™์ž‘์„ ๋จผ์ € ํ™•์ธ ํ›„ ํŒŒ์ด์ฌ(Python), ์ž๋ฐ”(Java), NodeJS, PHP ๋“ฑ์˜ ์–ธ์–ด๋กœ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค. ์ด๋Ÿฌํ•œ ๋ชฉ์ ์œผ๋กœ ์ „ํ†ต์ ์ธ curl์„ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค์–‘ํ•œ ์˜ต์…˜์œผ๋กœ API๋ฅผ ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ์ปค๋ฉ˜๋“œ ๋ผ์ธ(Command Line) ๊ธฐ๋ฐ˜์˜ ํˆด์ด๊ธฐ ๋•Œ๋ฌธ์— ๋งŽ์€ 'ํƒ€์ดํ•‘'์ด ํ•„์š”ํ•˜๋‹ค๋Š” ๊ฒƒ์ด ๋‹จ์ ์ด๋‹ค. ๊ทธ๋ ‡์ง€๋งŒ Postman์„ ์ด์šฉํ•˜๋ฉด ํŽธํ•˜๊ฒŒ API๋ฅผ ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋งŽ์ด ์‚ฌ์šฉ๋œ๋‹ค.

 

CURL

Client URL

ํด๋ผ์ด์–ธํŠธ์—์„œ ์ปค๋งจ๋“œ ๋ผ์ธ์ด๋‚˜ ์†Œ์Šค์ฝ”๋“œ๋กœ ์† ์‰ฝ๊ฒŒ ์›น ๋ธŒ๋ผ์šฐ์ € ์ฒ˜๋Ÿผ ํ™œ๋™ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ฃผ๋Š” ๊ธฐ์ˆ (์ปค๋งจ๋“œ๋ผ์ธ Tool ํ˜น์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ)์ด๋‹ค. ์„œ๋ฒ„์™€ ํ†ต์‹ ํ•  ์ˆ˜ ์žˆ๋Š” ์ปค๋งจ๋“œ ๋ช…๋ น์–ด ํˆด๋กœ, ์›น๊ฐœ๋ฐœ์— ๋งค์šฐ ๋งŽ์ด ์‚ฌ์šฉ๋˜๊ณ  ์žˆ๋Š” ๋ฌด๋ฃŒ ์˜คํ”ˆ์†Œ์Šค์ด๋‹ค.

ํŠน์ง•

  • ์ˆ˜ ๋งŽ์€ ํ”„๋กœํ† ์ฝœ์„ ์ง€์›ํ•œ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ๋‹ค. (DICT, FILE, FTP, FTPS, Gopher, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMB, SMBS, SMTP, SMTPS, Telnet, TFTP)
  • SSL ์ธ์ฆ ๋ฐฉ์‹์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

์‚ฌ์šฉ๋ฒ•

  • curl [-option] https://minjin-sw.tistory.com ํ•˜๊ฒŒ๋˜๋ฉด ์†Œ์Šค๊ฐ€ ํ™”๋ฉด์œผ๋กœ ์ถœ๋ ฅ๋œ๋‹ค.
  • ์ด์™ธ์— ์˜ต์…˜์„ ์ด์šฉํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
-k --insecure https ์‚ฌ์ดํŠธ๋ฅผ SSL certificate ๊ฒ€์ฆ์—†์ด ์—ฐ๊ฒฐํ•œ๋‹ค. wget ์˜ --no-check-certificate ๊ณผ ๋น„์Šทํ•œ ์—ญํ•  ์ˆ˜ํ–‰
-l --head HTTP header ๋งŒ ๋ณด์—ฌ์ฃผ๊ณ  content ๋Š” ํ‘œ์‹œํ•˜์ง€ ์•Š๋Š”๋‹ค  
-D --dump-header
<file>
<file> ์— HTTP header ๋ฅผ ๊ธฐ๋กํ•œ๋‹ค.  
-L --location ์„œ๋ฒ„์—์„œ HTTP 301 ์ด๋‚˜ HTTP 302 ์‘๋‹ต์ด ์™”์„ ๊ฒฝ์šฐ redirection URL ๋กœ ๋”ฐ๋ผ๊ฐ„๋‹ค.
--max-redirs ๋’ค์— ์ˆซ์ž๋กœ redirection ์„ ๋ช‡ ๋ฒˆ ๋”ฐ๋ผ๊ฐˆ์ง€ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ธฐ๋ณธ ๊ฐ’์€ 50์ด๋‹ค
curl -v daum.net ์„ ์‹คํ–‰ํ•˜๋ฉด ๊ฒฐ๊ณผ๊ฐ’์œผ๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์ด HTTP 302 ๊ฐ€ ๋ฆฌํ„ด๋œ๋‹ค.
< HTTP/1.1 302 Object Moved
< Location: http://www.daum.net/

-L ์˜ต์…˜์„ ์ถ”๊ฐ€ํ•˜๋ฉด www.daum.net ์œผ๋กœ ์žฌ์ ‘์†ํ•˜์—ฌ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ›์•„์˜ค๊ฒŒ ๋œ๋‹ค.
-d --data HTTP Post data FORM ์„ POST ํ•˜๋Š” HTTP๋‚˜ JSON ์œผ๋กœ ๋ฐ์ดํƒ€๋ฅผ ์ฃผ๊ณ ๋ฐ›๋Š” REST ๊ธฐ๋ฐ˜์˜ ์›น์„œ๋น„์Šค ๋””๋ฒ„๊น…์‹œ ์œ ์šฉํ•œ ์˜ต์…˜์ด๋‹ค
-v --verbose  ๋™์ž‘ํ•˜๋ฉด์„œ ์ž์„ธํ•œ ์˜ต์…˜์„ ์ถœ๋ ฅํ•œ๋‹ค.  
-J --remote-header-name ์–ด๋–ค ์›น์„œ๋น„์Šค๋Š” ํŒŒ์ผ ๋‹ค์šด๋กœ๋“œ์‹œ Content-Disposition Header ๋ฅผ ํŒŒ์‹ฑํ•ด์•ผ ์ •ํ™•ํ•œ ํŒŒ์ผ์ด๋ฆ„์„ ์•Œ ์ˆ˜ ์žˆ์„ ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค. -J ์˜ต์…˜์„ ์ฃผ๋ฉด ํ—ค๋”์— ์žˆ๋Š” ํŒŒ์ผ ์ด๋ฆ„์œผ๋กœ ์ €์žฅํ•œ๋‹ค. curl 7.20 ์ด์ƒ๋ถ€ํ„ฐ ์ถ”๊ฐ€๋œ ์˜ต์…˜
-o --output FILE curl ์€ remote ์—์„œ ๋ฐ›์•„์˜จ ๋ฐ์ดํƒ€๋ฅผ ๊ธฐ๋ณธ์ ์œผ๋กœ๋Š” ์ฝ˜์†”์— ์ถœ๋ ฅํ•œ๋‹ค. -o ์˜ต์…˜ ๋’ค์— FILE ์„ ์ ์–ด์ฃผ๋ฉด ํ•ด๋‹น FILE ๋กœ ์ €์žฅํ•œ๋‹ค. (download ์‹œ ์œ ์šฉ)  
-O --remote-name file ์ €์žฅ์‹œ remote ์˜ file ์ด๋ฆ„์œผ๋กœ ์ €์žฅํ•œ๋‹ค. -o ์˜ต์…˜๋ณด๋‹ค ํŽธ๋ฆฌํ•˜๋‹ค.  
-s --silent ์ •์ˆ™ ๋ชจ๋“œ. ์ง„ํ–‰ ๋‚ด์—ญ์ด๋‚˜ ๋ฉ”์‹œ์ง€๋“ฑ์„ ์ถœ๋ ฅํ•˜์ง€ ์•Š๋Š”๋‹ค. -o ์˜ต์…˜์œผ๋กœ remote data ๋„ /dev/null ๋กœ ๋ณด๋‚ด๋ฉด ๊ฒฐ๊ณผ๋ฌผ๋„ ์ถœ๋ ฅ๋˜์ง€ ์•Š๋Š”๋‹ค HTTP response code ๋งŒ ๊ฐ€์ ธ์˜ค๊ฑฐ๋‚˜ ํ•  ๊ฒฝ์šฐ ์œ ๋ฆฌ

 

 

ํฌ์ŠคํŠธ๋งจ ์‚ฌ์šฉํ•˜๊ธฐ

์œ„์— ์„ค๋ช…ํ–ˆ๋“ฏ์ด ํฌ์ŠคํŠธ๋งจ์„ ํ™œ์šฉํ•˜์—ฌ REST API๋ฅผ ์„ค๊ณ„, ๊ฐœ๋ฐœ, ํ…Œ์ŠคํŒ…ํ•ด๋ณผ ์ˆ˜ ์žˆ๋‹ค.

API ์„ค๊ณ„ํ•˜๊ธฐ

์™ผ์ชฝ ํƒญ์—์„œ๋Š” Collections, APIs ๋“ฑ ๋‹ค์–‘

ํ•œ ํƒญ์ด ์žˆ๋Š”๋ฐ, ์šฐ์„  Collections์—์„œ ํด๋”์™€ ๊ฐ™์€ ๊ฐœ๋…์˜ collection์„ ์ƒ์„ฑ/๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

API ํƒญ์—์„œ API์˜ ๋ฒ„์ „์„ ์„ค์ •ํ•˜๊ณ  ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค. ์™ผ์ชฝ + ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ฐฝ์—์„œ API ์ •๋ณด๋ฅผ ์ž…๋ ฅํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๋ณธ๊ฒฉ์ ์œผ๋กœ API๋ฅผ ๋งŒ๋“ค์–ด๋ณด์ž. My Workspace ์˜†์˜ New ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ฐฝ์ด ๋œจ๋ฉฐ, ์—ฌ๊ธฐ์„œ API๋ฅผ ์„ค๊ณ„ํ•ด๋ณผ ์ˆ˜ ์žˆ๋‹ค.

๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋งŽ์ด ์“ฐ์ด๋Š” ํ”„๋กœํ† ์ฝœ์ธ HTTP Request๋ฅผ ๋ˆ„๋ฅด๋ฉด ์†์‰ฝ๊ฒŒ API๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

์ด๋Ÿฌํ•œ ์ฐฝ์—์„œ GET / POST ๋“ฑ์˜ ๋ฉ”์†Œ๋“œ๋ฅผ ์„ ํƒํ•  ์ˆ˜ ์žˆ๊ณ , API์ด๋ฆ„, URL ์ž…๋ ฅ ๋“ฑ์„ ํ•ด๋ณผ ์ˆ˜ ์žˆ๋‹ค.

 

API ํ…Œ์ŠคํŠธํ•˜๊ธฐ

์œ„์™€ ๊ฐ™์ด ๋งŒ๋“  API์—์„œ URL์„ ์ž…๋ ฅํ•˜๊ณ  Send๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ ์ด Request๋ฅผ ์ „์†กํ•˜๋ฉด, ๋‹ค์Œ๊ณผ ๊ฐ™์ด Body๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

 

์ฐธ๊ณ ๋กœ ์ด ๊ฒฐ๊ณผ๊ฐ’์„ ์–ด๋–ค ํ˜•์‹์œผ๋กœ ํ•  ๊ฒƒ์ธ์ง€๋„ ๊ฒฐ์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

ํ…Œ์ŠคํŠธ ์Šคํฌ๋ฆฝํŠธ ์ž‘์„ฑํ•˜๊ธฐ

request์˜ test ํƒญ์—์„œ ํ…Œ์ŠคํŠธ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค. ์ฝ”๋“œ๋Š” JavaScript๋กœ ์ž‘์„ฑ์„ ํ•˜๋ฉด ๋˜๋ฉฐ, ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ๋Š” ํ•˜๋‹จ์˜ Test Results์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

์Šคํฌ๋ฆฝํŠธ ์˜ˆ์ œ

tests["responseBody = " + responseBody] = true;
pm.test("Status code is 200", function(){
    pm.response.to.have.statusCode("200")
    pm.response.to.have.jsonBody("headers.host")
});

ํ…Œ์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์€ 2๊ฐ€์ง€๊ฐ€ ์žˆ๋Š”๋ฐ tests["test name"]= (true/false logic) ๋˜๋Š”  pm.test๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ, ํ…Œ์ŠคํŠธ์˜ ์ œ๋ชฉ๊ณผ validation ์ฒดํฌ ๋กœ์ง ์ž‘์„ฑ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.

ํ•˜๋‚˜์˜ ์œ ํšจ์„ฑ ์ฒดํฌ๋งŒ ํ•˜๋ ค๋ฉด tests๋ฅผ, ์—ฌ๋Ÿฌ ๊ฐ’์„ ์ฒดํฌ๋ฅผ ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” pm.test ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.

 


์ฐธ๊ณ  ์‚ฌ์ดํŠธ