Computer Science/Basics and Concepts

๐Ÿ“API / RESTful API

metamong 2025. 3. 2.

๐Ÿ“ 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

๋Œ“๊ธ€