4 ๋ถ„ ์†Œ์š”

๐Ÿ“š REST API


๐Ÿ“š REST

REST ๋ž€

REST ( Representational State Transfer ) ์˜ ์•ฝ์ž๋กœ ํ•˜๋‚˜์˜ URI๋Š” ํ•˜๋‚˜์˜ ๊ณ ์œ ํ•œ ๋ฆฌ์†Œ์Šค ( Resource ) ๋ฅผ ๋Œ€ํ‘œํ•˜๋„๋ก ์„ค๊ณ„๋œ๋‹ค๋Š” ๊ฐœ๋…์— ์ „์†ก๋ฐฉ์‹์„ ๊ฒฐํ•ฉํ•ด์„œ ์›ํ•˜๋Š” ์ž‘์—…์„ ์ง€์ •ํ•œ๋‹ค.
์ž์›์„ ์ด๋ฆ„์œผ๋กœ ๊ตฌ๋ถ„ํ•˜์—ฌ ํ•ด๋‹น ์ž์›์˜ ์ƒํƒœ๋ฅผ ์ฃผ๊ณ  ๋ฐ›๋Š” ๋ชจ๋“  ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.
์›น์˜ ์žฅ์ ์„ ์ตœ๋Œ€ํ•œ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์•„ํ‚คํ…์ฒ˜๋กœ์„œ REST๊ฐ€ ๊ฐœ๋ฐœ๋˜์—ˆ๋‹ค.
HTTP URI๋ฅผ ํ†ตํ•ด ์ œ์–ดํ•  ์ž์› ( Resource )์„ ๋ช…์‹œํ•˜๊ณ , HTTP Method ( GET, POST, PUT, DELETE ) ์„ ํ†ตํ•ด ํ•ด๋‹น ์ž์› ( Resources ) ์— ๋Œ€ํ•œ CRUD Operation์„ ์ ์šฉํ•˜๋Š” ๋ฐฉ์‹์˜ ์•„ํ‚คํ…์ฒ˜๋‹ค.

CRUD Operation

  • Create : ๋ฐ์ดํ„ฐ ์ƒ์„ฑ ( POST )
  • Read : ๋ฐ์ดํ„ฐ ์กฐํšŒ ( GET)
  • Update : ๋ฐ์ดํ„ฐ ์ˆ˜์ • ( PUT )
  • Delete : ๋ฐ์ดํ„ฐ ์‚ญ์ œ ( DELETE )

REST ๊ตฌ์„ฑ

  • ์ž์› ( Resource )
    • URI, Server์— ์กด์žฌ
  • ํ–‰์œ„ : HTTP Method
    • 4๊ฐ€์ง€ method ( GET, POST, PUT, DELETE )
  • ํ‘œํ˜„ ( Representations )
    • Client๊ฐ€ ์ž์›์˜ ์ƒํƒœ์— ๋Œ€ํ•œ ์กฐ์ž‘์„ ์š”์ฒญํ•˜๋ฉด Server๋Š” ์ด์— ์ ์ ˆํ•œ ์‘๋‹ต์„ ๋ณด๋‚ธ๋‹ค.
    • JSON, XML, TEXT, RSS ๋“ฑ ์—ฌ๋Ÿฌ ํ˜•ํƒœ์˜ ์‘๋‹ต์œผ๋กœ ๋‚˜ํƒ€ ๋‚ผ ์ˆ˜ ์žˆ๋‹ค.
    • JSON์ด ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ๋œ๋‹ค.


์ž˜ ํ‘œํ˜„๋œ HTTP URI๋กœ ๋ฆฌ์†Œ์Šค๋ฅผ ์ •์˜ํ•˜๊ณ  HTTP Method๋กœ ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ํ–‰์œ„๋ฅผ ์ •์˜ํ•œ๋‹ค.
๋ฆฌ์†Œ์Šค๋Š” JSON, XML ๋“ฑ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์–ธ์–ด๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค. ( ์ œ์•ฝ์ด ์—†๋‹ค )

REST ๊ณผ ๊ธฐ์กด Service ( web ) ๋น„๊ต

  • ๊ธฐ์กด Service
  • REST Service
    • data ์ฒ˜๋ฆฌ๋งŒ ํ•œ๋‹ค๊ฑฐ๋‚˜, ์ฒ˜๋ฆฌ ํ›„ ๋ฐ˜ํ™˜๋  data๊ฐ€ ์žˆ๋‹ค๋ฉด JSON ์ด๋‚˜ XML ํ˜•์‹์œผ๋กœ ์ „๋‹ฌ. View์— ๋Œ€ํ•ด์„œ๋Š” ์‹ ๊ฒฝ์„ ์“ธ ํ•„์š”๊ฐ€ ์—†๋‹ค
    • ์ด๋Ÿฌํ•œ ์ด์œ ๋กœ OPEN API์—์„œ ๋งŽ์ด ์‚ฌ์šฉ



REST ํŠน์ง•

  • ๊ธฐ์กด์˜ ์ „์†ก๋ฐฉ์‹๊ณผ๋Š” ๋‹ฌ๋ฆฌ ์„œ๋ฒ„๋Š” ์š”์ฒญ์œผ๋กœ ๋ฐ›์€ ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•ด ์ˆœ์ˆ˜ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•œ๋‹ค.
  • ๊ธฐ์กด์˜ GET/POST ์™ธ์— PUT, DELETE ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ CRUD ์ฒ˜๋ฆฌ๋ฅผ ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • HTTP URI๋ฅผ ํ†ตํ•ด ์ œ์–ดํ•  ์ž์› ( Resource )์„ ๋ช…์‹œํ•˜๊ณ , HTTP Method ( GET, POST, PUT, DELETE ) ์„ ํ†ตํ•ด ํ•ด๋‹น ์ž์› ( Resources )์„ ์ œ์–ดํ•˜๋Š” ๋ช…๋ น์„ ๋‚ด๋ฆฌ๋Š” ์•„ํ‚คํ…์ฒ˜ ์ด๋‹ค.
  • ๋ชจ๋ฐ”์ผ, PC, ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋“ฑ ํ”Œ๋žซํผ์— ์ œ์•ฝ์„ ๋‘์ง€ ์•Š๋Š”๋‹ค.
  • View ์— ์‹ ๊ฒฝ์“ฐ์ง€ ์•Š๋Š”๋‹ค, ๋ฐ์ดํ„ฐ๋งŒ ์ „๋‹ฌํ•œ๋‹ค.
  • JSON ํฌ๋ฉง์„ ์ œ์ผ ๋งŽ์ด ์‚ฌ์šฉํ•œ๋‹ค.
  • ๋น„๋™๊ธฐ์ฒ˜๋ฆฌ์— ์‚ฌ์šฉํ•œ๋‹ค.
  • Server - Client ๊ตฌ์กฐ์ด๋‹ค.
  • Stateless : ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•˜์ง€ ์•Š๋Š”๋‹ค( ์ƒํƒœ์ •๋ณด ๊ธฐ์–ต X ), ๋“ค์–ด์˜จ ์š”์ฒญ์— ์ฒ˜๋ฆฌ๋งŒ ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.
  • Cacheable : ์บ์‹œ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ
  • Layered System : ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„๊ฐ€ ๋ถ„๋ฆฌ๋˜์–ด ์žˆ์–ด ์ค‘๊ฐ„์— ํ”„๋ก์‹œ์„œ๋ฒ„, ์•”ํ˜ธํ™” ๊ณ„์ธต ๋“ฑ ์ค‘๊ฐ„๋งค์ฒด๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
  • Uniform Interface : ํŠน์ • ์–ธ์–ด๋‚˜ ๊ธฐ์ˆ ์— ์ข…์†๋˜์ง€ ์•Š๋Š”๋‹ค. ( HTTP ํ‘œ์ค€์—๋งŒ ๋”ฐ๋ฅธ๋‹ค๋ฉด )

REST ์„ค๊ณ„ ๋ชฉํ‘œ

  • ์ปดํฌ๋„ŒํŠธ๋“ค๊ฐ„์˜ ์œ ์—ฐํ•œ ์ƒํ˜ธ ์—ฐ๋™์„ฑ ํ™•๋ณด ( ๋” ํšจ์œจ์ ์œผ๋กœ ์ˆ˜ํ–‰ )
  • ๋ฒ”์šฉ ์ธํ„ฐํŽ˜์ด์Šค ( ๊ฐœ๋ฐœ์ž๋Š” ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง๋งŒ ๊ณ ๋ คํ•˜๋ฉด ๋œ๋‹ค. )
  • ๊ฐ ์ปดํฌ๋„ŒํŠธ๋“ค์˜ ๋…๋ฆฝ์ ์ธ ๋ฐฐํฌ
  • ์ง€์—ฐ ๊ฐ์†Œ, ๋ณด์•ˆ๊ฐ•ํ™”, ๋ ˆ๊ฑฐ์‹œ ์‹œ์Šคํ…œ์„ ์ธ์บก์Š๋ ˆ์ด์…˜ ( ๋ฐ์ดํ„ฐ์— ํ—ค๋”๊ฐ€ ์ถ”๊ฐ€๋˜๋Š” ๊ณผ์ • ) ํ•˜๋Š” ์ค‘๊ฐ„ ์ปดํฌ๋„ŒํŠธ๋กœ์˜ ์—ญํ• 

REST ์žฅ์ 

  • ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ์˜ ์—ญํ• ์„ ๋ช…ํ™•ํžˆ ํ•œ๋‹ค.
  • HTTP ํ”„๋กœํ† ์ฝœ์˜ ์ธํ”„๋ผ๋ฅผ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ REST API ์‚ฌ์šฉ์„ ์œ„ํ•œ ๋ณ„๋„์˜ ์ธํ”„๋ผ๋ฅผ ๊ตฌ์ถ•ํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค.
  • HTTP ํ”„๋กœํ† ์ฝœ์˜ ํ‘œ์ค€์„ ์ตœ๋Œ€ํ•œ ํ™œ์šฉํ•˜์—ฌ ์—ฌ๋Ÿฌ ์ถ”๊ฐ€์ ์ธ ์žฅ์ ์„ ํ•จ๊ป˜ ๊ฐ€์ ธ๊ฐˆ ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค.
  • HTTP ํ‘œ์ค€ ํ”„๋กœํ† ์ฝœ์— ๋”ฐ๋ฅด๋Š” ๋ชจ๋“  ํ”Œ๋žซํผ์—์„œ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ์˜๋„ํ•˜๋Š” ๋ฐ”๋ฅผ ์‰ฝ๊ฒŒ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์„œ๋น„์Šค ๋””์ž์ธ์—์„œ ์ƒ๊ธธ ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ๋ฅผ ์ตœ์†Œํ™”ํ•œ๋‹ค.

REST ๋‹จ์ 

  • ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉ”์„œ๋“œ๊ฐ€ 4๊ฐœ ๋ฐ–์— ์—†๋‹ค.
  • ๊ตฌํ˜• ๋ธŒ๋ผ์šฐ์ €์— ํ˜ธํ™˜์ด ์ž˜ ์•ˆ๋œ๋‹ค.
  • ์ „๋ฌธ์„ฑ์ด ์š”๊ตฌ๋œ๋‹ค.
  • ํ‘œ์ค€ ์ž์ฒด๊ฐ€ ์—†์–ด์„œ ์ •์˜๊ฐ€ ํ•„์š”ํ•˜๋‹ค. ( ๋‹ค๋“ค ์ด๋ ‡๊ฒŒ ์“ฐ๋”๋ผ ~ ๋ผ๋Š” ์•”๋ฌต์ ์ธ ํ‘œ์ค€๋งŒ ์ •ํ•ด์ ธ ์žˆ๋‹ค. )
  • HTTP์— ์ƒ๋‹นํžˆ ์˜์กด์ ์ด๋‹ค.



๐Ÿ“š REST API


REST API ๋ž€

REST API๋ž€ REST์˜ ์›๋ฆฌ๋ฅผ ๋”ฐ๋ฅด๋Š” API ( Application Programming Interface ) ๋ฅผ ์˜๋ฏธํ•œ๋‹ค.
API๋Š” ์ปดํ“จํ„ฐ๋‚˜ ์ปดํ“จํ„ฐ ํ”„๋กœ๊ทธ๋žจ ์‚ฌ์ด์˜ ์—ฐ๊ฒฐ์ด๋‹ค. ๋‹ค๋ฅธ ์ข…๋ฅ˜์˜ ์†Œํ”„ํŠธ์›จ์–ด์— ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

REST API ์„ค๊ณ„ ์˜ˆ์‹œ

  • ํ•˜์ดํ”ˆ (-) ์€ ์‚ฌ์šฉ ๊ฐ€๋Šฅ ํ•˜์ง€๋งŒ ์–ธ๋”๋ฐ” (_)๋Š” ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.
    • bad : http://jsdevlog.com/test_blog
    • good : http://jsdevlog.com/test-blog
  • ํŠน๋ณ„ํ•œ ๊ฒฝ์šฐ๋ฅผ ์ œ์™ธํ•˜๊ณ  ๋Œ€๋ฌธ์ž ์‚ฌ์šฉ์€ ํ•˜์ง€ ์•Š๋Š”๋‹ค. ( ๋Œ€์†Œ๋ฌธ์ž ๊ตฌ๋ถ„ )
    • good : http://jsdevlog.com/test
  • URI ๋งˆ์ง€๋ง‰์— ์Šฌ๋ž˜์‹œ(/)๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.
    • bad : http://jsdevlog.com/test/
    • good : http://jsdevlog.com/test
  • ์Šฌ๋ž˜์‹œ(/) ๋กœ ๊ณ„์ธต๊ด€๊ณ„๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค.
    • good : http://jsdevlog.com/study/java
  • ํ™•์žฅ์ž๊ฐ€ ํฌํ•จ๋œ ํŒŒ์ผ์ด๋ฆ„์„ ์ง์ ‘ ํฌํ•จ์‹œํ‚ค์ง€ ์•Š๋Š”๋‹ค.
    • bad : http://jsdevlog.com/picture.jpg
    • good : http://jsdevlog.com/picture
  • URI๋Š” ๋ช…์‚ฌ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
    • bad : http://jsdevlog.com/testing
    • good : http://jsdevlog.com/test

REST API ์™€ ๊ธฐ์กด ์›น ์ ‘๊ทผ ๋ฐฉ์‹๊ณผ ์ฐจ์ด์ 

์ž‘์—… ๊ธฐ์กด ๋ฐฉ์‹ ๋ฉ”์„œ๋“œ ๊ธฐ์กด ๋ฐฉ์‹ REST ๋ฐฉ์‹ ๋ฉ”์„œ๋“œ REST ๋ฐฉ์‹ ์„ค๋ช…
Create ( Insert ) POST /write.do?id=js POST /blog/js ๊ธ€์“ฐ๊ธฐ
Read ( Select ) GET /view.do?id=js&articleno=10 GET /blog/js/10 ๊ธ€์ฝ๊ธฐ
Update ( Update ) POST /modify.do?id=js PUT /blog/js ๊ธ€์ˆ˜์ •
Delete ( Delete ) GET /delete.do?id=js&articleno=10 DELETE /blog/js/10 ๊ธ€์‚ญ์ œ


๊ธฐ์กด ๋ธ”๋กœ๊ทธ๋“ค์€ GET๊ณผ POST ๋งŒ์œผ๋กœ ์ž์›์— ๋Œ€ํ•œ CRUD๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ณ  , URI๋Š” ์•ก์…˜์„ ๋‚˜ํƒ€๋ƒˆ๋‹ค.
REST๋กœ ๋ณ€๊ฒฝํ•  ๊ฒฝ์šฐ 4๊ฐ€์ง€ method ( GET, POST, PUT, DELETE )๋ฅผ ๋ชจ๋‘ ์‚ฌ์šฉํ•˜์—ฌ CRUD๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ณ  URI๋Š” ์ œ์–ดํ•˜๋ ค๋Š” ์ž์›์„ ๋‚˜ํƒ€๋‚ธ๋‹ค.

REST API ์„ค์ •

  • Jackson library
    • jackson-databind ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ๊ฐ์ฒด๋ฅผ JSON ํฌ๋ฉง์˜ ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜์‹œ์ผœ ๋ธŒ๋ผ์šฐ์ €๋กœ ์ „์†กํ•œ๋‹ค.
    • jackson-dataformat-xml ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ๊ฐ์ฒด๋ฅผ xml๋กœ ๋ธŒ๋ผ์šฐ์ €๋กœ ์ „์†กํ•œ๋‹ค.
    • pom.xml ์— library ์ถ”๊ฐ€
		<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
	 	<dependency>
			<groupId>com.fasterxml.jackson.core</groupId>
			<artifactId>jackson-databind</artifactId>
			<version>${jackson-databind-version}</version>
		</dependency> 
  • JSON library
    • java์—์„œ JSON ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋Š” ๋ฐ์ดํ„ฐํ˜•์€ ๋ณดํ†ต JSONObject์ด๋‹ค.
    • ์ด๊ฒƒ์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” library๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผํ•œ๋‹ค.
		<!-- https://mvnrepository.com/artifact/org.json/json -->
		<dependency>
		    <groupId>org.json</groupId>
		    <artifactId>json</artifactId>
		    <version>${json-version}</version>
		</dependency>

REST API ๊ด€๋ จ Annotation

Annotation Description
@RestController Controller๊ฐ€ REST ๋ฐฉ์‹์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ๊ฒƒ์ž„์„ ๋ช…์‹œ
๋ชจ๋“  ๋ฉ”์„œ๋“œ๊ฐ€ @ResponseBody๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์„ ๋•Œ ์„ค์ •ํ•ด์ฃผ์–ด @ResponseBody๋ฅผ ์ƒ๋žตํ•ด์ค€๋‹ค.
@ResponseBody JSP ๊ฐ™์€ ๋ทฐ๋กœ ์ „๋‹ฌ๋˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๋ฐ์ดํ„ฐ ์ž์ฒด๋ฅผ ์ „๋‹ฌ
๊ธฐ์กด ์›น์€ return { name : "js" } ๋ผ ํ•˜๋ฉด viewResolver ์— ์˜ํ•ด ์•ž์— /WEB-INF/views/....js ๊ฐ€ ๋ฐ˜ํ™˜๋œ๋‹ค.
๊ทธ๋Ÿฌ๋‚˜ jsp๋ฅผ ๋ณด๋‚ด๋ ค๋Š” ์˜๋„๊ฐ€ ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— @ResponseBody ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฐ์ดํ„ฐ ์ž์ฒด๋ฅผ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋‹ค.
@PathVariable URL ๊ฒฝ๋กœ์— ์žˆ๋Š” ๊ฐ’์„ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์ถ”์ถœ
@CrossOrigin Ajax์˜ ํฌ๋กœ์Šค ๋„๋ฉ”์ธ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐ
์„ค์ •ํ•œ URI๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค. -> ๋ณด์•ˆ ๋ฌธ์ œ
@CrossOrigin("*") ์€ HTTP ํ‘œ์ค€ ํ”„๋กœํ† ์ฝœ์ด๋ฉด ๋‹ค ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์˜๋ฏธ
@RequestBody JSON ๋ฐ์ดํ„ฐ๋ฅผ ์›ํ•˜๋Š” ํƒ€์ž…์œผ๋กœ ๋ฐ”์ธ๋”ฉ
parameter ๊ฐ€ ์•„๋‹Œ JSON์œผ๋กœ ๋ฐ›์•„์™”์„ ๋•Œ DTO์˜ parameter๋กœ ๋งคํ•‘์‹œ์ผœ์ฃผ๋Š” ์—ญํ• 



๐Ÿ“š RESTFUL

RESTFUL ์ด๋ž€

RESTFUL ์ด๋ž€ REST์˜ ์›๋ฆฌ๋ฅผ ๋”ฐ๋ฅด๋Š” ์‹œ์Šคํ…œ์„ ์˜๋ฏธํ•œ๋‹ค.
ํ•˜์ง€๋งŒ REST๋ฅผ ์‚ฌ์šฉํ–ˆ๋‹ค๊ณ  ํ•ด์„œ ๋ชจ๋‘๊ฐ€ RESTFUL ํ•œ ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค.
REST API์˜ ์„ค๊ณ„ ๊ทœ์น™์„ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ง€ํ‚จ ์‹œ์Šคํ…œ์„ RESTFULํ•˜๋‹ค ๋งํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ
๋ชจ๋“  CRUD ๊ธฐ๋Šฅ์„ POST๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” API ํ˜น์€ URI ๊ทœ์น™์„ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ง€ํ‚ค์ง€ ๋ชปํ–ˆ๋‹ค๋ฉด REST API๋ฅผ ์‚ฌ์šฉํ–ˆ๋‹ค ํ•˜๋”๋ผ๋„ RESTFUL ํ•˜๋‹ค๊ณ  ๋งํ•  ์ˆ˜ ์—†๋‹ค.





๐Ÿ‘ ์ฐธ์กฐ
https://velog.io/@somday/RESTful-API-%EC%9D%B4%EB%9E%80
https://khj93.tistory.com/entry/%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-REST-API%EB%9E%80-REST-RESTful%EC%9D%B4%EB%9E%80