๐ API?
๐ 'Application Programming Interface'๋ก SW๋ค์ด ์๋ก ๋ํํ ๋ ์ฌ์ฉ๋๋ ์๋จ.
๐ ex) ์์ฒญํ๊ณ ์๋ youtube๋ฅผ ์์ฒญํ๊ธฐ ์ํ ์ปดํจํฐ, ํฐ. ์์ฒญํ๋ youtube ์์๋ค์ server๋ผ๋ ์ปดํจํฐ์ ์ ์ฅ๋์ด ์์. ๊ฐ ๊ธฐ๊ธฐ๋ค์ server๋ก๋ถํฐ ์์๋ค๊ณผ ๊ด๋ จ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์ ์ฌ์ํจ. ์ฆ server์๋ sw์ ์ฃผ๋ฌธ์ ๋ฐ์ ์๋นํ๋ sw๊ฐ ์คํ๋๊ณ ์๋ค. ์ฆ, ํฐ์์ youtube ์ฑ์ ์ผ๋ฉด youtube ์ฑ์ server์ ์ค์น๋ sw์๊ฒ '์ต์ ์ปจํ ์ธ '๋ค์ ๋ชฉ๋ก์ ๋ณด๋ด๋ฌ๋ผ๋ ์์ฒญ์ ํจ. ์ด์ ๋ํ ์๋ต์ผ๋ก server์์ ๋ณด๋ด์ค. ๊ทธ ์ธ์๋ ๋ค์ํ ์์ ๋ค์ด sw๊ฐ์ ๋ํ๋ก ์ด๋ฃจ์ด์ง.
๐ API๋ server ์ญํ ์ ํ๋ ํ๋ก๊ทธ๋จ์ด ๋๋ ์ค ๋ฉ๋ดํ. ์์ฒญ์ ๋ณด๋ด๋ ์ชฝ, ์ฆ client ๋ค์ด ๋ณด๋ผ ์ ์๋ ์์ฒญ๋ค์ด ๋ฉ๋ด์ฒ๋ผ ๋์ด๋์ด ์๋ค. ์ฆ ๋ฉ๋ดํ์ ์๋ฅผ ๋ค์ด '๋ค์ ์์ ์ฌ์ํ๊ธฐ, ๋๊ธ์ ์ข์์ ๋๋ฅด๊ธฐ, ์ฑ๋์ ๊ตฌ๋ ๋๋ฅด๊ธฐ, ๋ด ๊ณ์ ์ ๋ณด ๋ณด๊ธฐ' ๋ฑ๋ฑ์ด API์ ๋ช ์.
๐ SW๋ค๊ฐ์ ์ํตํ๋ ค๋ฉด ์๋ก ๊ฐ์ ๊ท์ฝ ํ์. ์ฆ, '๋ค๊ฐ ์ด๋ ๊ฒ ์์ฒญํ๋ฉด, ๋ด๊ฐ ์ด๋ ๊ฒ ํด ์ค๊ฒ,' '๋ค๊ฐ ์ด๊ฑธ ์ด๋ฐ ๋ฐฉ์์ผ๋ก ๋ณด๋ด์ฃผ๋ฉด ๋ด๊ฐ ๊ทธ๊ฑธ ์ด๋ ๊ฒ ์ฒ๋ฆฌํด์ค๊ฒ'์ ๊ฐ์ ์ฒด๊ณ ํ์. ์ฆ, โ client์์ ์ด๋ป๊ฒ ์์ฒญํ๋ ๊ฐ โก server์์ ์ด๋ป๊ฒ ๋๋ตํ๋ ๊ฐ ๋ ๊ฐ ์ ์.
๐ example - OpenWeatherMap
๐ โ client์์ API ์์ฒญ์ ๋ณด๋ด๋ ๋ฐฉ๋ฒ ์ ์ ์๋ค. ํน์ ์ขํ์ ๋ ์จ๋ฅผ ํ์ธํ๋ ค๋ฉด ์๋ ์ฃผ์์๋ค๊ฐ ์๋/๊ฒฝ๋ ์ ์ด์ ๋ณด๋ด๋ผ๋ ๋ป.
๐ โก ์ฌ์ฉ์๊ฐ ๊ทธ ๋ค์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ์์ฒญํ๋ฉด server๊ฐ ์ด๋ป๊ฒ ๋๋ต์ ํด์ฃผ๋ ์ง ๋์์๋ค.
๐ โข ๋ฐ์์จ ์๋ต์ ์์.
+ ๋ฐ์์จ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉ์๊ฐ ๋ณด๊ธฐ ํธํ๋๋ก ์์ UI์ ๋ด์๋ธ ๊ฒ์ด ์ฐ๋ฆฌ๊ฐ ๊ฒฐ๊ณผ์ ์ผ๋ก ๋ณด๋ ์ฑ ํ๋ฉด
๐ added
๐ API๋ ์ ์์์ ๊ฐ์ด ํน์ ๋ฐ์ดํฐ ์กฐํ ๋ฟ ์๋๋ผ, ๋ฐ์ดํฐ๋ฅผ ์๋ก ์์ฑํ๊ฑฐ๋ ์์ , ์ญ์ ์ฉ๋๋ก๋ ์ฌ์ฉ๋๋ค.
ex) ํฌ์คํธ๋ฅผ ์ฌ๋ฆฌ๊ณ , ์ข์์ ๋๋ฅด๊ณ ๋๊ธ ์ญ์ ๋ํ ์ฑ์์ server๋ก ๋ณด๋ด๋ ์์ฒญ์ผ๋ก API์ ์ํด ์ฒ๋ฆฌ๋๋ค.
๐ API๋ ๋ฌด์์ ๋ณด๋ด๊ณ ๋ฌด์์ ๋ฐ์์ค๋ ๊ฐ์ ๋ํ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ์ธ์ด๋ ํ๋ ์์ํฌ์ ๊ตฌ์ ๋ฐ์ง ์๋๋ค. API๋ ์ฌ์, ์์น์ผ ๋ฟ ๋ญ๊ฐ๋ฅผ ์ค์ ๋ก ํ๋ก๊ทธ๋๋ฐํ ๊ตฌํ์ฒด๊ฐ ์๋๊ธฐ ๋๋ฌธ. API์ ๋ช ์๋ ๋ฐ์ ๋ฐ๋ผ sw๋ฅผ ๋ง๋ค๋ฉด ๋๋ค.
ex) client๊ฐ ์น ์ฌ์ดํธ๋ผ๋ฉด JavaScript๋ก, android ํฐ์ด๋ผ๋ฉด java๋ kotlin์ผ๋ก ์์ฒญ์ ๋ณด๋ด๋ฉด ๋๋ค. / server๋ ๋ค์ํ ์ธ์ด ๋ฐ framework๋ก ๋ง๋ค ์ ์๋ค.
๐GUI: ์ผ๋ฐ์ธ๋ค์ด ๋ฒํผ๊ณผ ํญ ๋ฑ์ ํด๋ฆญํ๊ฑฐ๋ ๋๋ฌ์ ์ฌ์ฉํ ์ ์๋๋ก ๋ง๋ค์ด ๋ ๊ธฐ๋ณธ์ ์ธ ๊ฒ๋ค / API: ๊ฐ๋ฐ์๋ค์ด ์ฝ๋ฉํด์ ์ฌ์ฉํ ์ ์๋๋ก ๋ณด๋ค ๊ณ ๊ธ์ค๋ฌ์ด ๊ธฐ๋ฅ๋ค์ ์ค๋ช ์์ ํจ๊ป ์ ์
๐
(1) Internal API(private API): ํน์ ์๋น์ค๋ฅผ ๊ตฌ์ฑํ๋ sw๊ฐ์ ์ฌ์ฉ๋๋ API. ํํ website์ mobile app๊ณผ ๊ฐ์ frontend๊ฐ backend server์ ์ํธ์์ฉํ ๋ ์ฌ์ฉ๋๋ API. ์ด API์ ๋ฐ๋ผ ํ๋ก ํธ์๋ ๊ฐ๋ฐ์๋ค์ ์์ฒญ์ ๋ณด๋ด๋ ์ฝ๋, ๋ฐฑ์๋ ๊ฐ๋ฐ์๋ค์ ์์ฒญ์ ๋ฐ์ ์ฒ๋ฆฌํ๋ ์ฝ๋๋ฅผ ์์ฑ. API๋ฅผ ์ ๋ง๋๋๊ฒ ๊ฐ๋ฐ์๋ค๋ผ๋ฆฌ๋ ํ์ ์ ๋งค์ฐ ์ค์,
(2) Public API: openweathermap๊ณผ ๊ฐ์ด ๋ชจ๋์๊ฒ ๊ณต๊ฐ๋ API. ์์ ๋ค์ ๋ฐ์ดํฐ์ ์๋น์ค๋ฅผ ๋ค๋ฅธ ๊ฐ๋ฐ์๋ค์ด ๊ฐ์ ธ๋ค ์ธ ์ ์๋๋ก ๋ง๋ค์ด ๋ ๊ฒ.
๐RESTful API?
๐ API์ ๋ค์ํ ํ์๋ค ์ค ์ค๋๋ ๊ฐ์ฅ ๋๋ฆฌ ์ฌ์ฉ๋๋ ๊ฒ. RESTful API๋ A๊ฐ ์ด๋ค ๋ฐฉ์์ผ๋ก ์์ฒญํ๊ณ , B๊ฐ ์ด๋ค ๋ฐฉ์์ผ๋ก ์๋ตํ ์ง ์ง์ ํด ๋์ ๋ค์ํ ํ์๋ค ์ค ํ๋. REST(REpresentational State Transfer)์ ~ful์ ๋ถ์ฌ 'RESTํ API'๋ผ๋ ํํ์ผ๋ก ์ฌ์ฉ๋๋ค. ์ฆ, REST์ ๊ธฐ๋ณธ ์์น์ ์ฑ์คํ ์งํจ ์๋น์ค ๋์์ธ.
๐ REST๋ ํ๋์ ์ํคํ ์ฒ. Resource Oriented Architecture๋ก API ์ค๊ณ์ ์ค์ฌ์ ์์(Resource)๊ฐ ์๊ณ , HTTP Method๋ฅผ ํตํด ์์์ ์ฒ๋ฆฌํ๋๋ก ์ค๊ณ. REST๋ ์น์์ ๋ฐ์ดํฐ๋ฅผ ํจ์จ์ ์ผ๋ก ์ฃผ๊ณ ๋ฐ๊ธฐ ์ํ ์ค๊ณ ์์น. HTTP ํ๋กํ ์ฝ์ ๊ธฐ๋ฐ์ผ๋ก ๋์.
๐ RESTful API๋ REST ์์น์ ๊ธฐ๋ฐ์ผ๋ก Client - Server ๊ฐ์ ํต์ ์ ํ์คํํ๋ ๋ฐฉ์
๐ API๋ฅผ ํตํด ํ๋ ์ผ) CRUD(Create, Read, Update, Delete) ์ด 4๊ฐ์ง๋ก ๊ตฌ์ฑ.
ex) ๋์๊ด ์ฑ์์ ์ 4๊ฐ์ง ์์ ์ RESTfulํ ์์ฒญ์ผ๋ก ์์ฑํ๋ฉด ์๋์ ๊ฐ๋ค.
: (์๋ถํฐ) ์ ์ฑ ์ ์ ๋ณด ์ถ๊ฐ - ์ฑ ๋ค์ ๋ชฉ๋ก ๋ฐ์์ค๊ธฐ - ์์ธ์ ๋ณด๊ฐ 1์ธ ์ฑ ์ ์ ๋ณด ์กฐํ - ์์ธ์ ๋ณด๊ฐ 20์ธ ์ฑ ์ ์ ๋ณด ์ฝ์ - ์์ธ์ ๋ณด๊ฐ 7์ธ ์ฑ ์ ๋์ฌ ์ํ ๋ณ๊ฒฝ - ์์ธ๋ฒํธ๊ฐ 123์ธ ์ฑ ์ญ์
: HTTP ํ๋กํ ์ฝ ์ฌ์ฉํด์ http:// ์ค๋ฅธ์ชฝ์ธ URI๋ก ์์ฒญ์ ๋ณด๋. HTTP๋ RESTFul API์ ํ์์์๋ ์๋์ง๋ง, RESTful API์ ์กฐ๊ฑด์ ๊ตฌํํ๊ธฐ ์ฉ์ดํ๊ธฐ์ ํ์ ์์ ์ฃผ๋ก HTTP ์ฌ์ฉ๋๋ค.
: api) ๋ฌด์ธ๊ฐ์ api๋ก ์ฌ์ฉ / yalcobooks.com์ ์๋ฒ์ ์ฃผ์ / v1์ผ๋ก ๋ฒ์ ์ ๋ณด(API์ ๋ณ๊ฒฝ์ฌํญ ์๊ธธ ์ ์์ผ๋ฏ๋ก) / ๊ฐ ์์ฒญ์ด ์ด๋ค ๋ฐ์ดํฐ์ ๊ดํ ๊ฒ์ธ์ง ๋ช ์
: RESTFul API๋ ์ ์์์ ๊ฐ์ด URI์ '์ด๋ค ์์'์ ๊ดํ ๊ฒ์ธ์ง ํํํด์ผ ํ๊ณ , ๊ฐ๋ฅํ ํ '์ด๋ค ์์'์ธ์ง์ ๋ํด์๋ง ํํํด์ผ ํ๋ค. ์ ์์์ ๊ฒฝ์ฐ ์ฑ ๋ค / + ํน์ ์ฑ ์ ๋ณด ์ด๋ ๊ฒ๋ง ๋ช ์ / ๋ฌด์์ ํ๋ ์ง๋ URI์ ๊ฐ๋ฅํ ํ ํํ x
: ๊ทธ๋ ๋ค๋ฉด, ์ด๋ค ์ข ๋ฅ์ ์์ ์ ํ ์ง๋ HTTP ๋ฉ์๋๋ก ํํ. HTTP์์๋ RESTFul API๋ก POST, GET, PUT, PATCH, DELETE ์ฌ์ฉ. GET๊ณผ DELETE๋ ํธ์ง๋ดํฌ์ ๋ด๊ฒจ ๋ณด๋ด์ง๊ณ , POST์ PUT, ๊ทธ๋ฆฌ๊ณ PATCH๋ ์ํฌ ์์์ ๋ด๊ฒจ ๋ณด๋ด์ง๋ค. ์ฆ, POST, PUT, PATCH์๋ GET, DELETE๋ณด๋ค ๋ ๋ง์ ๋ด์ฉ์ ๋ด์ ์ ์๋ค๋ ๋ป์ด๋ค.
๐ ์ฆ, ๋ฉ์๋ ์์ฒญ์ ์ข ๋ฅ์ URI ์์ฒด๊ฐ ๋ชฉ์ ์ ๋ช ํํ ๋ํ๋ด๋ฏ๋ก, ๊ฐ๋ฐ์๋ค์ ๋ค๋ฅธ ํ๊ณผ ํ์ ์ ํ๊ฑฐ๋ ์ด๋ค public API ์ฒ์์ผ๋ก ์ฌ์ฉํด์ผ ํ๋ ์ํฉ์์๋ ํฐ ์ด๋ ค์ ์์ด ์ API ์ฌ์ฉ๋ฒ์ ์ฝ๊ฒ ์ตํ ์ ์๋ค(RESTFul API ์ฌ์ฉ๋ฒ์ ๋ง๊ฒ ์์ฑํ๋ฉด)
* GET
๐RESTFul API์ ์์ฒญ๊ณผ ์๋ต์๋ ๊ตฌ์กฐํ๋ ๋ฐ์ดํฐ ํํ์ด ๊ฐ๋ฅํ๋ฉด์๋ ๊ฐ๋ฒผ์ด JSON์ด ๋ง์ด ์ฌ์ฉ๋๋ค. GET ๊ฒฐ๊ณผ๋ก ํน์ ์กฐ๊ฑด์ผ๋ก ํํฐ๋งํ๋ ค๋ฉด query parameter ์ฌ์ฉ. ์๋ฅผ ๋ค์ด URL ์ค๋ฅธ์ชฝ์ ?status=available์ ๋ถ์. + ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ตฌ์ถ ์ ๊ฐ ํญ๋ชฉ๋ง๋ค ๊ณ ์ ๊ฐ์ด ๋ง๋ค์ด์ง๋๋ก ์ค๊ณ ํ์.
๐HATEOS ๊ถ์ฅ(Hypermedia As The Engine Of Application State)
: ์ฆ, ๊ฐ ์์ฒญ์ ์๋ต์, ๊ฐ์ฉํ ๋ค๋ฅธ ์์ฒญ๋ค์ ์ ๋ณด๋ฅผ ํฌํจ์ํจ๋ค. ์ด ๋ฆฌ์์ค์ ๊ดํด ์ด๋ฐ ๊ธฐ๋ฅ๋ค๋ ์ด์ ๊ฐ์ด ์์ฒญํ ์ ์๋ค๊ณ ์ฒจ๋ถ. ex) ํ์คํ ์ฃผ๋ฌธ ์ ์ปคํผ๋ ๋์ ํธ ๋ฉ๋ดํ๋ ๊ฐ์ด ์ฃผ๋ ๊ฒ. ์ฆ, link:๋ผ๋ ์ ๋ณด๋ฅผ ํตํด์ ๊ฐ๋ฐ์๋ API ๋ฌธ์๋ค์ ๋ค ๋ค์ ธ๋ณด์ง ์์๋ ๋ค์์ ์ด๋ค ์์ฒญ์ ๋ณด๋ผ ์ ์๋ ์ง ์ดํด๋ณผ ์ ์๋ค.
๐ ์์/ํ์ ๋ฆฌ์์ค๋ฅผ ๊ฐ์ง ์ ์๋ค. ex) ์์ธ๋ฒํธ๊ฐ 1์ธ ์ฑ ์ ํด๋น๋๋ ๋ฆฌ๋ทฐ๋ค์ ์กฐํํ๋ ค๋ฉด /reviews ๋ถ์ด๋ฉด ๋๋ค.
* POST, PUT, PATCH
: body๋ ๊ณต๊ฐ์ด ์์ด์ ์ฉ๋์ด ํฐ ๋ฐ์ดํฐ๋ฅผ ์ค์ด๋ณด๋ด๊ณ ๋ฐ์ ์ ์๋ค. ์๋ฅผ ๋ค์ด ์ ์ฑ ์ ์ถ๊ฐํ๋ฉด, server์์ ์๋์ผ๋ก ๋ถ์ฌ๋๋ id, ์์ธ ๋ฒํธ ๋ฑ์ ์ ๋ณด๋ server๋ก๋ถํฐ ๋ฐ์์ง๋ค.
: PUT๊ณผ PATCH์ ์ฐจ์ด๋, ์ ๋ถ ์์ ์ธ์ง, ์ผ๋ถ ์์ ์ธ์ง์ ์ฐจ์ด๋ง ์กด์ฌ. PUT ์์ฒญ์ ํน์ ํญ๋ชฉ์ ์ ๋ณด๋ฅผ ์ ์ฒด์ ์ผ๋ก ๋์ฒดํ ๋ ์ฌ์ฉ. ๋ค์ด๊ฐ ๋ชจ๋ ์ ๋ณด๋ฅผ body์ ์ค์ด๋ณด๋ธ๋ค. / PATCH๋ ํน์ ๊ฐ์ ์ ๋ณด๋ง ๋ณ๊ฒฝํ๋ค๋ฉด, ์์ ํ ๋ถ๋ถ๋ง ๋ณด๋ด์ฃผ๋ฉด ๋๋ค.
๐ Status Codes
๐ ์๋ฒ์ ์๋ต์๋ ์์ฒญ์ ์ฒ๋ฆฌํ ๊ฒฐ๊ณผ๋ฅผ ์๋ ค์ฃผ๋ ์ํ ์ฝ๋๊ฐ ๋ด๊ฒจ ์จ๋ค. ๋ชจ๋ ์์ฒญ์ด ์ฑ๊ณต์ ์ผ๋ก ์ฒ๋ฆฌ๋๋ฉด 200 OK. ์ฑ๊ณต์ ์ธ ์์ฒญ์ ์๋ต์ผ๋ก๋ 200๋ฒ๋์ ์ํ ์ฝ๋๊ฐ ๋์์จ๋ค / client์ ์์ฒญ์ ๋ฌธ์ ๊ฐ ์์ด์ ์ฑ๊ณต์ ์ผ๋ก ์ฒ๋ฆฌ๊ฐ ๋ชป๋๋ฉด 400๋ฒ๋ ์ฝ๋ ๋ฐํ / server ์ธก์ ๋ฌธ์ ๋ก ์ค๋ฅ๊ฐ ๋ฐ์ํ์ ๋๋ 500๋ฒ ๋์ ์ฝ๋ ๋ฐํ
๐ Stateless
๐ = '์ํ๊ฐ ์๋' ํต์ ์ด๋ค. client์ ์ํ ์ ๋ณด๊ฐ server์ ์ ์ฅ๋์ง ๋ง์์ผ ํ๋ค๋ ๊ฒ์ธ๋ฐ, server๋ client์ ๋ํด ์๋ฌด๊ฒ๋ ๊ธฐ์ตํ์ง ๋ง์์ผ ํ๋ค๋ ๊ฒ์ด๋ค. ๋ฐ๋ผ์ client์ ์์ฒญ์ ๋ช ๋ฒ์งธ ๋ฐ๋ณต๋๋ , ํ์ํ ๋ชจ๋ ๋ด์ฉ์ ํฌํจํ๊ณ ์์ด์ผ ํ๋ค.
๐ Cacheability
๐ client์ server ์๋ก ๊ฐ์๋ ๊ณ์ ์ ํ ๋ชฐ๋ผ์ผ ํ์ง๋ง, ๊ฐ์ ์๊ธฐ๊ฐ ์ด๋ค ์๋ต์ ๋ณด๋๋ ์ง, ์๊ธฐ๊ฐ ์ด๋ค ์๋ต์ ๋ฐ์๋ ์ง๋ ๊ธฐ์ตํด๋๋ ๊ฒ ์ข๋ค. ํ ๋ฒ ์ป์ด๋ธ ๋ฐ์ดํฐ๋ฅผ ๋ ์ธ ์ ์๋๋ก ์ ์ฅํด ๋๋ ๊ฑธ caching์ด๋ผ๊ณ ํ๋ค. client์์ ์ด๋ค ์์ฒญ์ ๋ํ ์๋ต์ cachingํด๋๋ฉด, ๊ฐ์ ๋ฐ์ดํฐ๊ฐ ํ์ํ ๋๋ง๋ค ์์ฒญ์ ๋ณด๋ด์ง ์์๋ ๋๊ณ , server๋ ํน์ ์์ฒญ์ ๋ํด ์๋ตํ ๋ฐ๋ฅผ ๊ธฐ์ตํด ๋๋ฉด, ๋ค๋ฅธ client๊ฐ ๊ฐ์ ์์ฒญ์ ๋ณด๋์ ๋ ๋ DB์์ ์ ๋ณด๋ฅผ ์บ๋ผ ํ์ ์์ด, ๊ฐ๊ณ ์๋ ๊ฑธ ๋ฐ๋ก ๋ณด๋ด๋ฉด ๋๋ค.
๐ RESTful API์์๋ ๊ฐ ์์ฒญ์ด ๋ํ๋ด๋ ๋ฐ๊ฐ ๋๋ ทํ๋, ์บ์ฑ ํด๋๊ธฐ๊ฐ ์์.
๐ 6๊ฐ์ง ์์น
โ Uniform Interface: ์ผ๊ด๋ ์ธํฐํ์ด์ค
: API ์ค๊ณ ์ ์ผ๊ด๋ ๋ฐฉ์์ผ๋ก ๋ฆฌ์์ค๋ฅผ ์ฒ๋ฆฌํด์ผ ํ๋ค. ์ผ๋ฐ์ ์ผ๋ก HTTP ๋ฉ์๋์ RESTful URL ๊ตฌ์กฐ๋ฅผ ์ค์ํด์ผ ํ๋ค.
โก Stateless(๋ฌด์ํ)
: ์๋ฒ๋ ํด๋ผ์ด์ธํธ์ ์ํ๋ฅผ ์ ์ฅํ์ง ์์. ๊ฐ ์์ฒญ(request)์ ๋ ๋ฆฝ์ ์ด๋ฉฐ ํ์ํ ๋ชจ๋ ์ ๋ณด๋ฅผ ํฌํจํด์ผ ํจ. ์ฆ, ์์ฒญ๋ง๋ค ์์ ํ ๋ฐ์ดํฐ๋ฅผ ์ ๊ณตํด์ผ ํ๋ฉฐ, ์ธ์ ์ ์๋ฒ์์ ์ ์งํ์ง ์์.
โข Caching(์บ์ ๊ฐ๋ฅ)
: ํด๋ผ์ด์ธํธ๋ ์๋ฒ์ ์๋ต์ cachingํ ์ ์์ด์ผ ํ๋ฉฐ, ์ด๋ฅผ ํตํด ์ฑ๋ฅ์ ํฅ์์ํฌ ์ ์์. ์๋ต์ Cache-Control ํค๋๋ฅผ ์ค์ ํ์ฌ caching ๊ธฐ๋ฅ ์ฌ๋ถ ๊ฒฐ์ .
โฃ Client-Server
: client์ server๋ฅผ ๋ช ํํ ๋ถ๋ฆฌํ๋ฉฐ ๊ฐ๊ฐ ๋ ๋ฆฝ์ ์ผ๋ก ๊ฐ๋ฐํ ์ ์๋๋ก ํ๋ค. client๋ UI ๋ฐ ์ฌ์ฉ์ ๊ฒฝํ์ ๋ด๋นํ๊ณ , server๋ ๋ฐ์ดํฐ ๋ฐ ๋น์ฆ๋์ค ๋ก์ง ๋ด๋น.
โค Hierchical System
: client๋ server์ ๋ด๋ถ ๊ตฌ์กฐ๋ฅผ ์ ํ์ ์๋ค. API ์๋ฒ๋ ์ฌ๋ฌ ๊ณ์ธต์ผ๋ก ๊ตฌ์ฑ๋ ์ ์๋ค.
โฅ Code on Demand:
: server๊ฐ client์ ์ฝ๋๋ฅผ ์ ๋ฌํ์ฌ ์คํํ ์ ์๋๋ก ์ง์ํ ์ ์๋ค. ํ์ง๋ง ์ผ๋ฐ์ ์ธ REST API์์๋ ๊ฑฐ์ ์ฌ์ฉ๋์ง ์๋๋ค.
๐RESTfulํ๊ฒ API๋ฅผ ๋์์ธ ํ๋ค๋ ๊ฒ์?
โ ๋ฆฌ์์ค์ ํ์๋ฅผ ๋ช ์์ ์ด๊ณ ์ง๊ด์ ์ผ๋ก ๋ถ๋ฆฌ
: ๋ฆฌ์์ค๋ URI๋ก ํํ๋๋ ๋ฐ, ๋ฆฌ์์ค๊ฐ ๊ฐ๋ฆฌํค๋ ๊ฒ์ ๋ช ์ฌ๋ก ํํ. ํ์๋ HTTP Method๋ก ํํํ๊ณ GET / POST / PUT / PATCH / DELETE๋ฅผ ๋ถ๋ช ํ ๋ชฉ์ ์ผ๋ก ์ฌ์ฉ
โก Message๋ Header์ Body๋ฅผ ๋ช ํํ๊ฒ ๋ถ๋ฆฌํด์ ์ฌ์ฉ
: entity์ ๋ํ ๋ด์ฉ์ body์ ๋ด๋๋ค / application server๊ฐ ํ๋ํ ํ๋จ์ ๊ทผ๊ฑฐ๊ฐ ๋๋ ์ปจํธ๋กค ์ ๋ณด์ธ API ๋ฒ์ ์ ๋ณด, ์๋ต ๋ฐ๊ณ ์ ํ๋ MIME ํ์ ๋ฑ์ header์ ๋ด๋๋ค. header์ body๋ http header์ http body๋ก ๋๋ ์๋ ์๊ณ , http body์ ๋ค์ด๊ฐ๋ JSON ๊ตฌ์กฐ๋ก ๋ถ๋ฆฌํ ์๋ ์๋ค.
โข API ๋ฒ์ ๊ด๋ฆฌ
: ํ๊ฒฝ์ ํญ์ ๋ณํ๊ธฐ์ API์ signature๊ฐ ๋ณ๊ฒฝ๋ ์ ์๋ค. ํน์ API ๋ณ๊ฒฝ ์ ๋ฐ๋์ ํํํธํ์ฑ ๋ณด์ฅ ํ์
โฃ server - client๊ฐ ๊ฐ์ ๋ฐฉ์์ ์ฌ์ฉํด์ ์์ฒญํ๋๋ก ํ๋ค.
: ๋ธ๋ผ์ฐ์ ๋ form-data ํ์์ submit์ผ๋ก ๋ณด๋ด๊ณ server์์๋ json ํํ๋ก ๋ณด๋ด๋ ์์ ๋ถ๋ฆฌ๋ณด๋ค๋ json์ผ๋ก ๋ณด๋ด๋ , ๋ ๋ค form-data ํ์์ผ๋ก ๋ณด๋ด๋ ํ๋๋ก ํต์ผ / ์ฆ, URI๊ฐ ํ๋ซํผ ์ค๋ฆฝ์ .
๐์ฅ์ / ๋จ์
* ์ฅ์
: OPEN API ์ ๊ณต ์ฝ๋ค / ๋ฉํฐํ๋ซํผ ์ง์ ๋ฐ ์ฐ๋ ์ฉ์ด / ์ํ๋ ํ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์ ์ ์๋ค / ๊ธฐ์กด ์น ์ธํ๋ผ(HTTP) ๊ทธ๋๋ก ์ฌ์ฉ ๊ฐ๋ฅ
* ๋จ์
: ์ฌ์ฉํ ์ ์๋ ๋ฉ์๋ ํ์ ์ / ๋ถ์ฐํ๊ฒฝ์๋ ๋ถ์ ํฉ / HTTP ํต์ ๋ชจ๋ธ์ ๋ํด์๋ง ์ง์ / ์ค๋ฒํค๋(HTTP ์์ฒญ๊ณผ ์๋ต์ด ๋ง์์ง ๊ฒฝ์ฐ ์ฑ๋ฅ ์ ํ ๊ฐ๋ฅ์ฑ) / ๋ณต์กํ ๊ด๊ณ ํํ ์ด๋ ค์(REST๋ ํธ๋์ญ์ ์ด๋ ๋ณต์กํ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฅผ ํํํ๋ ๋ฐ ์ ํฉ์น ์์) / ๋ฒ์ ๊ด๋ฆฌ ํ์(API๊ฐ ๋ณ๊ฒฝ๋ ๊ฒฝ์ฐ client์ ์ํฅ์ ์ค ์ ์์ด ๋ฒ์ ๊ด๋ฆฌ ํ์)
โญ ๋ฆฌ์์ค ๊ธฐ๋ฐ URL ์ค๊ณ
โญ HTTP ๋ฉ์๋๋ฅผ ํ์ฉํ CRUD
โญ JSON ํ์์ ์๋ต
โญ client-server ๊ตฌ์กฐ, ๋ฌด์ํ ์์น
'Computer Science > Basics and Concepts' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๐Operating Systems Fundamentals 2 - Process 1/2 (0) | 2024.11.01 |
---|---|
๐ Operating Systems Fundamentals 1 (0) | 2024.10.30 |
jupyter notebook markdown *์์ ์ ๋ฐ์ดํธ (0) | 2023.02.07 |
Data Handling (0) | 2022.07.15 |
feature scaling (0) | 2022.06.22 |
๋๊ธ