Study/cs (computer science)

REST API/RESTful API๋ž€/Representational State Transfet API/REST ๋””์ž์ธํŒจํ„ด ์“ฐ๋Š” ์ด์œ  #1

๊ฐœ๋ฐœํ•˜๋Š” ์ฃผ๋””์”จ 2023. 1. 3. 14:11

 

[๊ณต๊ณ ] Front-end ๊ฐœ๋ฐœ์ž ์ฑ„์šฉ

์ €ํฌ ํšŒ์‚ฌ๋Š” HTTP, RESTful API ํด๋ผ์ด์–ธํŠธ๋ฅผ
RESTful ํ•˜๊ฒŒ ๊ฐœ๋ฐœํ•  ์ค„ ์•„๋Š” ์‚ฌ๋žŒ์„ ์ฐพ์Šต๋‹ˆ๋‹ค.

 

 

 

์ตœ์†Œ 3๋ช… ์ด์ƒ์˜ ๊ฐœ๋ฐœํŒ€์ด ์žˆ๋Š” ํšŒ์‚ฌ๊ฐ€ ํ”„๋ŸฐํŠธ์—”๋“œ(Front-end) ๊ฐœ๋ฐœ์ž๋ฅผ ์ฑ„์šฉํ•  ๋•Œ ์กฐ๊ฑด ๋ฐ ์ž๊ฒฉ์š”๊ฑด์— ๋Œ€๋ถ€๋ถ„ ์ ํ˜€์žˆ๋Š” ๋ง์ด๋‹ค. ํ•™๋ถ€ ๋•Œ๋ถ€ํ„ฐ 'REST API๋กœ ์„œ๋น„์Šคํ•ด์•ผ ํ•œ๋‹ค.', '์ข‹์œผ๋‹ˆ๊นŒ ์จ์•ผ ํ•œ๋‹ค.'๋Š” ๋ง์„ ์ข…์ข… ๋“ฃ๊ณค ํ–ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋ˆ„๊ตฐ๊ฐ€ ๋‚˜์—๊ฒŒ REST API๊ฐ€ ๋ญ”๋ฐ? ์™œ ์จ์•ผ ํ•˜๋Š”๋ฐ?๋ผ๊ณ  ๋ฌป๋Š”๋‹ค๋ฉด ๋Œ€๋‹ตํ•  ์ˆ˜ ์—†์„ ๊ฒƒ ๊ฐ™๋‹ค. ์•„๋งˆ ๋Œ€๋ถ€๋ถ„์˜ ๊ฐœ๋ฐœ์ž๋“ค ์ค‘์—์„œ๋„ REST API๋ฅผ ์ •ํ™•ํ•˜๊ฒŒ ์„ค๋ช…ํ•˜๊ณ  ์ƒ๋Œ€๋ฅผ ์ดํ•ด์‹œํ‚ฌ ์ •๋„์˜ ๊ฐœ๋…์„ ์•Œ๊ณ  ์žˆ๋Š” ์‚ฌ๋žŒ์ด ๊ฑฐ์˜ ์—†์„ ๊ฒƒ์ด๋‹ค. ์™œ๋ƒํ•˜๋ฉด ๊ทธ๋ƒฅ "ํด๋ผ์ด์–ธํŠธ(Client)์™€ ์„œ๋ฒ„(Server) ๊ฐ„ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›๋Š” ๋ฐฉ์‹์„ REST ํ•˜๊ฒŒ ์“ฐ๋Š” ๊ฑฐ๋‹ค."๋ผ๊ณ ๋งŒ ๋“ค์—ˆ๊ณ  ์‚ฌ์šฉํ–ˆ๊ณ , ๊ทธ ์ด์œ ๋ฅผ ๊ถ๊ธˆํ•ดํ•˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. 

 

๋‚˜๋Š” ์™œ?(Why) ์จ์•ผ ํ•˜๋Š”์ง€ ์ดํ•ดํ•˜์ง€ ๋ชปํ•˜๋ฉด ๊ธฐ์ˆ ์ด๋‚˜ ํŒจํ„ด ์ž์ฒด ๊ฐœ๋…์ด ์ดํ•ด๊ฐ€์ง€ ์•Š๋Š” ๋ณ‘์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค^^ ๊ทธ๋ž˜์„œ ๋‚จ๋“ค๋ณด๋‹ค ๋Š๋ฆฌ๊ฒŒ ๊ฐ€์ง€๋งŒ ํƒ„ํƒ„ํ•œ ๊ธธ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค. ์ด๋ฒˆ์—๋Š” REST API ๋„๋Œ€์ฒด ์–ด๋–ค ๊ฒƒ์ธ๋ฐ ์ด๋ ‡๊ฒŒ ํ•„์ˆ˜์š”๊ฑด์ด ๋˜์—ˆ๋Š”์ง€ ๊ทธ ๊ฐœ๋…์„ ํŒŒ์•…ํ•˜๊ณ  REST API๊ฐ€ ๋‘๋ ต์ง€ ์•Š์€ ์‚ฌ๋žŒ์ด ๋˜๋Š” ๊ฒƒ์ด ๋ชฉํ‘œ์ด๋‹ค.

 

REST API

 

REST API (Representational State Transfer API)

 

REST๋Š” Representational State Transfer์˜ ์•ฝ์–ด์ด๋‹ค. 2000๋…„ ๋กœ์ดํ•„๋”ฉ(Roy Fielding)์˜ ๋ฐ•์‚ฌํ•™์œ„ ๋…ผ๋ฌธ์—์„œ ์ตœ์ดˆ๋กœ ์†Œ๊ฐœ๋˜์—ˆ๊ณ  ๋‹น์‹œ ์›น(HTTP)์˜ ์žฅ์ ์„ ์ตœ๋Œ€ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์•„ํ‚คํ…์ฒ˜๋กœ REST๋ฅผ ๋ฐœํ‘œํ–ˆ๋‹ค. ์›น์— ์กด์žฌํ•˜๋Š” ๋ชจ๋“  Resourece์— ๊ณ ์œ ํ•œ URL์„ ๋ถ€์—ฌํ•˜์—ฌ ํ™œ์šฉํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค. ์ฆ‰, Resource์„ define ํ•˜๊ณ  Resource์— ๋Œ€ํ•œ adress๋ฅผ ์ง€์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•๋ก ์ด๋‹ค.

 

 

 

REST API ๊ตฌ์„ฑ์š”์†Œ
๐Ÿ”” ์ž์›(Resource) : URL
๐Ÿ”” ํ–‰์œ„(Verb) : Http Method
๐Ÿ”” ํ‘œํ˜„(Representation)

 

๋ชจ๋“  ์ž์›์€ ๊ณ ์œ ํ•œ ID๋ฅผ ๊ฐ€์ง€๋ฉฐ ID๋Š” ์„œ๋ฒ„์— ์กด์žฌํ•˜๊ณ  ํด๋ผ์ด์–ธํŠธ(Client)๋Š” ๊ฐ ์ž์›์˜ ์ƒํƒœ๋ฅผ ์กฐ์ž‘ํ•˜๊ธฐ ์œ„ํ•ด ์š”์ฒญ์„ ๋ณด๋‚ธ๋‹ค. Client๋Š” URL์„ ์ด์šฉํ•ด ์ž์›(Resource)์„ ์ง€์ •ํ•˜๊ณ  ์กฐ์ž‘ํ•˜๊ธฐ ์œ„ํ•ด Method๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. Client๊ฐ€ ์„œ๋ฒ„(Server)๋กœ ์š”์ฒญ(Requset)์„ ๋ณด๋ƒˆ์„ ๋•Œ ์‘๋‹ต(Response)ํ•˜๋Š” ์ž์›์˜ ์ƒํƒœ(State)๋ฅผ Representation์ด๋ผ๊ณ  ํ•œ๋‹ค.

 

 

REST API ์™œ ์จ์•ผ ํ•˜๋Š”๊ฐ€?

 

๊ทธ ์ด์œ ๋Š” ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๊ณ  ์‚ฌ์šฉํ•˜๊ธฐ ์‰ฌ์šด API๋ฅผ ์ œ์ž‘ํ•˜๋Š” ๋ฐ ์žˆ๋‹ค. ๋” ๋‚˜์•„๊ฐ€๋ฉด API์˜ ์ดํ•ด๋„๋ฅผ ๋†’์ด๊ณ  ํ™•์žฅ์„ฑ๊ณผ ์ผ๊ด€์ ์ธ ์ปจ๋ฒค์…˜์„ ์œ„ํ•ด์„œ ์‚ฌ์šฉํ•œ๋‹ค. ํ™•์žฅ์„ฑ๊ณผ ์žฌ์‚ฌ์šฉ์„ฑ์ด ๋†’์•„์ง€๋ฉด ์œ ์ง€๋ณด์ˆ˜ ๋ฐ ์šด์šฉ์ด ํŽธ๋ฆฌํ•ด์ง€๊ธฐ ๋•Œ๋ฌธ์— ์•„์ฃผ ๊ฐ•๋ ฅํ•œ ํŠน์ง•์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋˜ HTTP ํ‘œ์ค€์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ตฌํ˜„ํ•˜๊ธฐ ๋•Œ๋ฌธ์— HTTP๋ฅผ ์ง€์›ํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ ์–ธ์–ด๋กœ client์™€ server๋ฅผ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— REST API๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

 

๋‹จ, REST API๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๊ณ  ํ•ด์„œ ์„ฑ๋Šฅ์ด ๊ฐœ์„ ๋˜์ง€ ์•Š๋Š”๋‹ค. ๋ณดํ†ต ์ฝ”๋“œ๊ฐ€ ๊ฐ„๊ฒฐํ•ด์ง€๊ณ  ํ™•์žฅ์„ฑ์ด ๋†’๊ณ  ์‰ฝ๊ฒŒ ํ‘œํ˜„๋œ๋‹ค๋ฉด ์„ฑ๋Šฅ๊ฐœ์„ ์˜ ํšจ๊ณผ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ๋„ ์žˆ์ง€๋งŒ, REST API์˜ ๊ฒฝ์šฐ๋Š” ํ•ด๋‹น๋˜์ง€ ์•Š์œผ๋‹ˆ ์ฃผ์˜ํ•˜์ž. ์•„๋ž˜ ์˜ˆ์‹œ๋ฅผ ํ†ตํ•ด REST API๋กœ ํ‘œํ˜„ํ•œ URL ์ •๋ณด์™€ ๊ทธ๋ ‡์ง€ ์•Š์€ ์˜ˆ์‹œ๋กœ ๋” ํ™•์‹คํžˆ ์ดํ•ดํ•ด ๋ณด์ž.

 

 

<๐Ÿ› ๏ธuser ์ •๋ณด๋ฅผ ์‚ญ์ œํ•˜๋Š” API>

 

1) ์ผ๋ฐ˜์ ์ธ URL

GET /deleteUserInfo/id?=3

 

2) REST API๋ฅผ ์ ์šฉํ•œ URL

DELETE /user/3

 

 

REST 6๊ฐ€์ง€ ์›์น™๊ณผ ํŠน์ง•

 

1) Uniform Interface(์œ ๋‹ˆํผ ์ธํ„ฐํŽ˜์ด์Šค)

URL๋กœ ์ง€์ •ํ•œ Resource์— ๋Œ€ํ•œ ์กฐ์ž‘์„ ํ†ต์ผ๋˜๊ณ  ํ•œ์ •์ ์ธ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ์ˆ˜ํ–‰

 

2) Stateless (๋ฌด์ƒํƒœ์„ฑ)

REST๋Š” session์ด๋‚˜ cookie ์ •๋ณด๋ฅผ ๋ณ„๋„๋กœ ์ €์žฅํ•˜๊ณ  ๊ด€๋ฆฌํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์„œ๋ฒ„๋Š” ๋‹จ์ˆœํžˆ ๋“ค์–ด์˜ค๋Š” ์š”์ฒญ๋งŒ ์ฒ˜๋ฆฌ. ์„œ๋น„์Šค์˜ ์ž์œ ๋„๊ฐ€ ๋†’์•„์ง€๊ณ  ๋ถˆํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ๊ด€๋ฆฌํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๊ตฌํ˜„์ด ๋‹จ์ˆœ

 

3) Cacheable (์บ์‹œ๊ฐ€๋Šฅ)

Http ํ”„๋กœํ† ์ฝœ ํ‘œ์ค€์—์„œ ์‚ฌ์šฉํ•˜๋Š” Last-Modified ํƒœ๊ทธ๋‚˜ E-Tag๋กœ Http์˜ ์›นํ‘œ์ค€์ด ๊ฐ€์ง„ cashing ์ด ๊ฐ€๋Šฅ. 

 

4) Self-descriptiveness (์ž์ฒดํ‘œํ˜„๊ตฌ์กฐ)

REST API ๋ฉ”์‹œ์ง€๋งŒ์œผ๋กœ๋„ ์‰ฝ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ํ‘œํ˜„ ๊ตฌ์กฐ

 

5) Client-Server Architecture (ํด๋ผ์ด์–ธํŠธ-์„œ๋ฒ„ ๊ตฌ์กฐ)

REST sever๋Š” API๊ฐ€ ์ œ๊ณตํ•˜๊ณ  client๋Š” context(์‚ฌ์šฉ์ž ์ธ์ฆ์ด๋‚˜ ์„ธ์…˜, ๋กœ๊ทธ์ธ ์ •๋ณด ๋“ฑ)์„ ์ง์ ‘ ๊ด€๋ฆฌํ•˜๋Š” ๊ตฌ์กฐ๋กœ ์—ญํ• ์ด ๋‚˜๋ˆ„์–ด์ ธ ์žˆ์–ด ์„œ๋กœ ๊ฐ„ ์˜์กด์„ฑ์ด ๋‚ฎ์Œ.

 

6) Layer Architecture (๊ณ„์ธตํ˜• ๊ตฌ์กฐ)

๋ณด์•ˆ, ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ, ์•”ํ˜ธํ™” ๊ณ„์ธต์„ ์ถ”๊ฐ€ํ•˜์—ฌ ๊ตฌ์กฐ์ƒ์˜ ์œ ์—ฐ์„ฑ์„ ๋‘˜ ์ˆ˜ ์žˆ๊ณ  proxy, gateway ๊ฐ™์€ ๋„คํŠธ์›Œํฌ ๊ธฐ๋ฐ˜์˜ ์ค‘๊ฐ„๋งค์ฒด๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ.

 

 

 

RESTful ํ•˜๋‹ค

 

REST์— ํ˜•์šฉ์‚ฌํ˜• ์–ด๋ฏธ๋ฅผ ๋ถ™์—ฌ ~ํ•œ API๋ผ๋Š” ํ‘œํ˜„์œผ๋กœ ์‚ฌ์šฉํ•œ ๊ฒƒ์ด๋‹ค. ํ•œ๋งˆ๋””๋กœ REST์˜ ์›๋ฆฌ๋ฅผ ๋”ฐ๋ฅด๋Š” ์‹œ์Šคํ…œ์„ RESTful ์ด๋ž€ ์šฉ์–ด๋กœ ์ง€์นญํ•˜๋Š” ๊ฒƒ์ด๊ณ , REST ์•„ํ‚คํ…์ฒ˜๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ์›น ์„œ๋น„์Šค๋ฅผ ๋งํ•œ๋‹ค.

 

 

 

์ง€๊ธˆ๊นŒ์ง€ REST API์˜ ํŠน์ง•๊ณผ ํ˜•ํƒœ ์›์น™์„ ํŒŒ์•…ํ–ˆ๋‹ค. ์ด๊ฑธ ํ† ๋Œ€๋กœ RESTful ํ•˜๊ฒŒ API๋ฅผ ์ž‘์„ฑํ•˜๋ ค๋ฉด ์–ด๋–ค ๋ฐฉ๋ฒ•, ์–ด๋–ค ๋””์ž์ธ ํŒจํ„ด์œผ๋กœ ์ž‘์„ฑํ•ด์•ผ ํ•˜๋Š”์ง€ ๋‹ค์Œ ํฌ์ŠคํŒ…์„ ํ†ตํ•ด ์•Œ์•„๋ณด์ž.

 

 


โš™๏ธReference  : https://restfulapi.net/http-methods/

 

HTTP Methods - REST API Tutorial

REST guidelines suggest using a specific HTTP method on a particular type of call made to the server i.e. GET, POST, PUT or DELETE.

restfulapi.net