๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ–ฅ Computer Science/Network

[Network] REST API๋ž€? (feat. ์›์น™๊ณผ ๋„ค์ด๋ฐ ๊ทœ์น™) (What is a REST API?)

by Fomagran ๐Ÿ’ป 2022. 4. 20.
728x90
๋ฐ˜์‘ํ˜•

REST๋ž€?


REST๋Š” Representational State Transfer์˜ ์•ฝ์ž๋กœ ์ง์—ญํ•˜๋ฉด "๋Œ€ํ‘œ๋กœ ์ƒํƒœ๋ฅผ ์ „์†กํ•˜๋Š” ๊ฒƒ"์ด๋‹ค.

์ œ๋Œ€๋กœ ๋œ ์˜๋ฏธ๋Š” "๋ฐ์ดํ„ฐ์˜ ์ด๋ฆ„์œผ๋กœ ์ƒํƒœ๋ฅผ ๊ตฌ๋ถ„ํ•˜์—ฌ ์ „์†กํ•˜๋Š” ๋ฐฉ์‹" ์ด๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ์‰ฝ๊ฒŒ ์„ค๋ช…ํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

๋ฐ์ดํ„ฐ์˜ ์ด๋ฆ„


"์ด๊ฑฐ ์œ ์ €์— ๋Œ€ํ•œ ๋ฐ์ดํ„ฐ์•ผ" -> user (user๋ผ๊ณ  ์ด๋ฆ„์„ ์ง€์–ด ์œ ์ € ๋ฐ์ดํ„ฐ๋ผ๊ณ  ์•Œ๋ ค์คŒ)

์ƒํƒœ


"๋‚˜ ๋ฐ์ดํ„ฐ ์ƒ์„ฑํ• ๊ฑฐ์•ผ" -> Create (๋ฐ์ดํ„ฐ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค๊ณ  ์•Œ๋ ค์คŒ)

์ „์†ก


"์œ ์ € ๋ฐ์ดํ„ฐ ์ƒ์„ฑํ•ด์ค˜" -> Create user (์œ ์ € ๋ฐ์ดํ„ฐ๋ฅผ ์ƒ์„ฑํ•ด ๋‹ฌ๋ผ๊ณ  ์š”์ฒญํ•จ)

์ด์™€ ๊ฐ™์ด ๋ฐ์ดํ„ฐ์˜ ์ด๋ฆ„์œผ๋กœ ์ƒํƒœ๋ฅผ ๊ตฌ๋ถ„ํ•˜์—ฌ ์ „์†กํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.


์‚ฌ์šฉํ•˜๋Š” ์ด์œ 


๊ทธ๋ ‡๋‹ค๋ฉด REST API๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฌด์—‡์ผ๊นŒ?

๊ฐ€์žฅ ๋Œ€ํ‘œ์ ์ธ ์ด์œ ๋Š” "HTTP ํ”„ํ† ํ† ์ฝœ" ์ด๋ผ๊ณ  ์ƒ๊ฐํ•œ๋‹ค.

REST API๋Š” HTTP ํ”„๋กœํ† ์ฝœ ์ธํ”„๋ผ๋ฅผ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— HTTP๋ฅผ ๋”ฐ๋ฅด๋Š” ๋ชจ๋“  ํ”Œ๋žซํผ์—์„œ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

์ฆ‰, ์›น์˜ ์žฅ์ ์„ ์ตœ๋Œ€ํ•œ ์‚ด๋ฆด ์ˆ˜ ์žˆ๋Š” ์•„ํ‚คํ…์ณ ์Šคํƒ€์ผ์ด๋‹ค.

๋˜ํ•œ HTTP์˜ ํŠน์ง•๊ณผ ๊ฐ™์ด ์š”์ฒญ์— ๋Œ€ํ•œ ๊ฒƒ์„ ๋ช…ํ™•ํ•˜๊ฒŒ ๋ฐํžˆ๊ธฐ ๋•Œ๋ฌธ์— ์˜๋„๋ฅผ ํŒŒ์•…ํ•˜๊ธฐ ์‰ฝ๊ณ  ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ์˜ ์—ญํ• ์„ ๋ช…ํ™•ํžˆ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋‹ค.


์›์น™


REST API๋ฅผ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด์„  ๋ช‡ ๊ฐ€์ง€ ์›์น™์„ ๋”ฐ๋ผ์•ผ ํ•œ๋‹ค.

1. Uniform Interface


๋ฐ์ดํ„ฐ๋ฅผ ์‹๋ณ„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ด์•ผํ•œ๋‹ค๋Š” ์›์น™์ด๋‹ค.

๊ตฌ์ฒด์ ์œผ๋กœ URL๋งŒ ๋ณด๊ณ ๋„ ์–ด๋Š ๋ฐ์ดํ„ฐ๋ฅผ ์–ด๋–ค ์ƒํƒœ๋กœ ์ „์†กํ•ด์•ผ ํ•˜๋Š”์ง€ ๊ตฌ๋ณ„ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค.

์˜ˆ๋ฅผ ๋“ค๋ฉด www.github.com/fomagran/repositories <= ๊นƒํ—™ fomagran์˜ ๋ ˆํฌ์ง€ํ† ๋ฆฌ๋ฅผ ์˜๋ฏธํ•˜๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

2. Client Server


ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„๋Š” ๋ฐ˜๋“œ์‹œ ๋ถ„๋ฆฌ๋˜์–ด์•ผ ํ•˜๋ฉฐ, ํด๋ผ์ด์–ธํŠธ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์„œ๋ฒ„์— ์š”์ฒญํ•˜๊ณ  ์„œ๋ฒ„๋Š” ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์— ๋”ฐ๋ฅธ ๋ฐ์ดํ„ฐ๋ฅผ ์‘๋‹ตํ•ด์•ผ ํ•œ๋‹ค.

3. Stateless


HTTP ํ”„๋กœํ† ์ฝœ์„ ๋”ฐ๋ฅด๊ธฐ ๋•Œ๋ฌธ์— HTTP ํŠน์ง•๊ณผ ๊ฐ™์ด ์ƒํƒœ๋ฅผ ์ €์žฅํ•˜์ง€ ์•Š์œผ๋ฉฐ, ์š”์ฒญ์— ๋ชจ๋“  ์ •๋ณด๊ฐ€ ๋‹ด๊ฒจ ํ•œ ๋ฒˆ์— ์ „์†กํ•ด์•ผ ํ•œ๋‹ค.

4. Cacheable


์š”์ฒญ์„ ํ†ตํ•ด ๋ณด๋‚ด๋Š” ์ž๋ฃŒ๋“ค์€ ์ €์žฅ๋˜์–ด์•ผ ํ•œ๋‹ค.

์ด๋ฅผ ํ†ตํ•ด์„œ ์ €์žฅ๋œ ์ž๋ฃŒ๋“ค์„ ์ฃผ๊ณ  ๋ฐ›์„ ๋•Œ ์†๋„๋ฅผ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.

5. Layered System


์š”์ฒญ๋œ ์ •๋ณด๋ฅผ ๊ฒ€์ƒ‰ํ•˜๋Š”๋ฐ ๊ณ„์ธต ๊ตฌ์กฐ๋กœ ๋ถ„๋ฆฌ๋˜์–ด ์žˆ์–ด์•ผ ํ•œ๋‹ค.

์ค‘๊ฐ„ ์„œ๋ฒ„ ๋“ฑ์„ ๋‘ฌ ์„œ๋ฒ„ ํ™•์žฅ์„ฑ์„ ๋ณด์žฅํ•œ๋‹ค.

6. Code on Demand


๋ณดํ†ต ์„œ๋ฒ„๋Š” XML์ด๋‚˜ JSON์œผ๋กœ ์‘๋‹ตํ•˜์ง€๋งŒ, ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์ฝ”๋“œ ์ž์ฒด๋ฅผ ๋ฐ์ดํ„ฐ๋กœ ํด๋ผ์ด์–ธํŠธ์— ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋‹ค.


URL ๋„ค์ด๋ฐ ๊ทœ์น™


RESTfulํ•˜๊ฒŒ ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•˜๋ ค๋ฉด ๋”ฐ๋ผ์•ผ ํ•˜๋Š” ๋ช‡ ๊ฐ€์ง€ ๊ทœ์น™์ด ์žˆ๋‹ค.

*RESTful - REST์˜ ๊ทœ์น™์„ ์ง€์ผœ ์ œ๊ณตํ•˜๋Š” ์›น ์„œ๋น„์Šค ๋ฐฉ์‹์„ ์˜๋ฏธํ•œ๋‹ค.

1. ๋ช…์‚ฌ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.


๋‚˜์œ ์˜ˆ

www.fomagran.com/get-users

์ข‹์€ ์˜ˆ

www.fomagran.com/users

2. ์†Œ๋ฌธ์ž๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.


๋‚˜์œ ์˜ˆ

www.fomagran.com/Users

์ข‹์€ ์˜ˆ

www.fomagran.com/users

3. ๋ณต์ˆ˜ํ˜•์„ ์‚ฌ์šฉํ•œ๋‹ค.


๋‚˜์œ ์˜ˆ

www.fomagran.com/user

์ข‹์€ ์˜ˆ

www.fomagran.com/users

4. ๊ตฌ๋ถ„์ž๋Š” "-"(ํ•˜์ดํ”ˆ)์„ ์‚ฌ์šฉํ•œ๋‹ค. (์นด๋ฉœ ์ผ€์ด์Šค๋„ ํ—ˆ์šฉ๋˜์ง€ ์•Š์Œ)


๋‚˜์œ ์˜ˆ

www.fomagran.com/very_good_users

www.fomagran.com/veryGoodUsers

์ข‹์€ ์˜ˆ

www.fomagran.com/very-good-users

5. url์˜ ๋งˆ์ง€๋ง‰์—” ์Šฌ๋ž˜์‰ฌ๋ฅผ ํฌํ•จํ•˜์ง€ ์•Š์Œ


๋‚˜์œ ์˜ˆ

www.fomagran.com/very-good-users/

์ข‹์€ ์˜ˆ

www.fomagran.com/very-good-users

6. ํŒŒ์ผ ํ™•์žฅ์ž๋Š” ํฌํ•จํ•˜์ง€ ์•Š์Œ


๋‚˜์œ ์˜ˆ

www.fomagran.com/photos/image.jpg

์ข‹์€ ์˜ˆ

www.fomagran.com/photos/image

728x90
๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€