[๊ณต๊ณ ] 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 (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/