[Spring boot] REST API์ ๊ธฐ์ด์ ์ค๊ณ
Spring boot๊ฐ ๊ธฐ์กด์ Spring์ ๋นํด ๋ค์ํ ์ค์ ๋ค์ ์๋ํ ์์ผ ๊ฐ๋ฐ์๊ฐ ์ค์ ํด์ผ ํ ๋ถ๋ถ์ ์ค์ด๊ณ , ์๋ฒ ๋๋ ํฐ์บฃ์ ํ์ฌํ์ฌ ๋ ์ฌ์ด ๊ฐ๋ฐ๋ค์ด ๊ฐ๋ฅํด์ก๋ค๋ ๊ฒ์ ์์์ต๋๋ค.
์ด๋ฒ ํฌ์คํธ์์๋ Spring boot๋ก ์๋ฒ๋ฅผ ๊ฐ๋ฐํด๋ณด๋ ์ฒซ ๋จ์ถ์ธ REST API์ ๋ํด ์์๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
What is REST API ?
REST API๋, REST(Representational State Transfer)์ ์ฝ์๋ก '๋ํ์ ์ธ ์ํ ์ ๋ฌ'์ด๋ผ๋ ์๋ฏธ๋ฅผ ๋ด๊ณ ์์ต๋๋ค. ์น๊ณผ ๊ฐ์ ๋ถ์ฐ ํ์ดํผ๋ฏธ๋์ด ์์คํ ์์ ์ฌ์ฉํ๋ ํต์ ๋คํธ์ํฌ ์ํคํ ์ฒ๋ผ๊ณ ๋ณด์๋ฉด ๋ฉ๋๋ค.
๋ณธ๋ ์น์ ์ ์ก ๋ฐฉ์์ผ๋ก HTTP ํ๋กํ ์ฝ์, ์๋ณ ๋ฐฉ๋ฒ์ผ๋ก URI๋ฅผ ์ฌ์ฉํ๋๋ฐ, ์ฌ๊ธฐ์ ํผ๋ํ๋ฉด ์๋๋ ๊ฒ์ URL๊ณผ URI๋ ๋ค๋ฆ ๋๋ค. URI๋ ์ธํฐ๋ท์์ ํน์ ์์์ ๋ํ๋ด๋ ์ฃผ์๊ฐ์ด๊ณ , URL์ ์ธํฐ๋ท์์ ํน์ ์์์ด๋ ํ์ผ์ ์์น๋ฅผ ๋ํ๋ด๋ ์ฃผ์๊ฐ์ ๋๋ค.
HTTP๋ ์น์์ GET, POST, PUT, DELETE ๋ฑ์ ๋ฉ์๋๋ฅผ ์ด์ฉํ์ฌ ์ ๋ณด๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ํ๋กํ ์ฝ๋ก REST๋ HTTP์ URI์ ๋จ์ํ๊ณ ๊ฐ๊ฒฐํ ์ฅ์ ์ ๊ณ์นํ ๋คํธ์ํฌ ์ํคํ ์ฒ์ ๋๋ค. ๋ฐ๋ผ์ ๋ค์ํ ์๊ตฌ ์ฌํญ์ ๋์ํด ๋๋ก๋ ๋จ์ํ๊ฒ, ๋๋ก๋ ์๋ฒ์ ํด๋ผ์ด์ธํธ๊ฐ ์๋ก ํต์ ํ๋ ๋ฆฌ์์ค์ ๋ํด ๋ณต์กํ ๋ฐฉ์์ผ๋ก ์ํธ ์์ฉํ ์ ์์ต๋๋ค.
REST๊ฐ ๊ฐ๋ฐ๋ ๋ชฉ์ ์ ์๋์ ๊ฐ์ต๋๋ค.
- ๊ตฌ์ฑ์์ ์ํธ์์ฉ์ ๊ท๋ชจ ํ์ฅ์ฑ
- ์ธํฐํ์ด์ค์ ๋ฒ์ฉ์ฑ
- ๊ตฌ์ฑ์์์ ๋ ๋ฆฝ์ ์ธ ๋ฐฐํฌ
- ์ค๊ฐ์ ๊ตฌ์ฑ์์๋ฅผ ์ด์ฉํ ์๋ต ์ง์ฐ ๊ฐ์, ๋ณด์ ๊ฐํ, ๋ ๊ฑฐ์ ์์คํ ์บก์ํ
REST API ์ ์ฝ ์กฐ๊ฑด
REST API ์๋ฒ๋ฅผ ๊ฐ๋ฐํ ๋๋ REST์ ๊ตฌํ ์์น์ ์ ๋๋ก ์งํค๋ฉด์ REST ์ํคํ ์ฒ๋ฅผ ๋ง๋๋ ๊ฒ์ RESTfulํ API๋ผ๊ณ ํํ์ ๋ณดํต ๋ง์ด ํ๋๋ฐ, ๋จ์ํ ๋ฌด์์ HTTP์ ๋ฉ์๋์ URI๋ฅผ ์ฌ์ฉํ์๋ค๊ณ ํ์ฌ, ๋ฌด์กฐ๊ฑด RESTfulํ API๋ผ๊ณ ํํํ์ง ์์ต๋๋ค.
์๋์ ์ ์ฝ ์กฐ๊ฑด์ ์ ์งํจ API๋ฅผ RESTfulํ API๋ผ๊ณ ํํํฉ๋๋ค.
- ํด๋ผ์ด์ธํธ-์๋ฒ ํํ (Client-Server model)
- ๋ฌด์ํ์ฑ (Stateless)
- ์บ์ ๊ธฐ๋ฅ (Cacheable)
- ๊ณ์ธตํ ์์คํ (Layered system)
- ์ฝ๋ ์จ ๋๋งจ๋ (Code on demand)
- ์ธํฐํ์ด์ค ์ผ๊ด์ฑ (Uniform interface)
ํด๋ผ์ด์ธํธ ์๋ฒ ํํ์ ์์น์ ๊ด์ฌ์ฌ์ ๋ช ํํ ๋ถ๋ฆฌ๋ฅผ ๋งํ๋ฉฐ, ์ด๋ฅผ ์งํด์ผ๋ก์จ ์๋ฒ์ ํด๋ผ์ด์ธํธ์ ์ญํ ์ ๋ถ๋ช ํ ํจ์ผ๋ก์จ ์๋ฒ์ ๊ตฌ์ฑ ์์๊ฐ ๋จ์ํ ๋๊ณ ํ์ฅ์ฑ์ด ํฅ์๋์ด, ์ฌ๋ฌ ํ๋ซํผ์ ์ง์ํ ์ ์๋ ๊ฒ์ด์ฃ .
๋ฌด์ํ์ฑ ์์น์ ์๋ฒ์ ํด๋ผ์ด์ธํธ ์ํ ์ ๋ณด๋ฅผ ์ผ์ ์ ์ฅํ์ง ์์์ ์ด์ผ๊ธฐ ํฉ๋๋ค. ๋จ์ํ ๋ค์ด์ค๋ ์์ฒญ๋ง์ ์ฒ๋ฆฌํ์ฌ ๊ตฌํ์ ๋จ์ํ ํ๋, ํด๋ผ์ด์ธํธ์ ๋ชจ๋ ์์ฒญ์ ์๋ฒ๊ฐ ์์ฒญ์ ์์๋ฃ๋ ๋ฐ ํ์ํ ๋ชจ๋ ์ ๋ณด๋ฅผ ์๊ณ ์์ด์ผ ํฉ๋๋ค. ์ด๋ฅผ ํ ๋ฉด, ์ด๋ค ๋ฉ์๋๋ฅผ ์์ฒญํ๋์ง, ์ฌ๊ธฐ์ ํ์ํ ์ ๋ณด๋ ๋ฌด์์ธ์ง ๋ฑ์ ์ด์ผ๊ธฐ ํฉ๋๋ค.
์บ์ ๊ธฐ๋ฅ์ ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ์บ์ฑํ๋ค๋ ์ด์ผ๊ธฐ์ ๋๋ค. HTTP์ ๊ธฐ๋ฅ ์ค ์บ์ ๊ธฐ๋ฅ์ ์ ์ฉํ ๊ฒ์ ๋๋ค.
๊ณ์ธตํ ์์คํ ์์น์ ์ ํ๋ฆฌ์ผ์ด์ ์๋ฒ๊ฐ ์ค๊ณ ์๋ฒ(Proxy, Gateway)๋ ๋ก๋ ๋ฐธ๋ฐ์ฑ, ๊ณต์ ์บ์ ๋ฑ์ ์ด์ฉํ์ฌ ํ์ฅ์ฑ ์๋ ์์คํ ์ ๊ตฌํํด์ผ ํ๋ค๋ ์์น์ ๋๋ค.
์ฝ๋ ์จ ๋๋งจ๋์ ์์น์ ๋ฐ๋์ ์ง์ผ์ผ ํ ํ์ ์์น์ ์๋๋๋ค. ์ด ์์น์ ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ์์ Java Applet, Javascript ์คํ ์ฝ๋๋ฅผ ์ ๋ฌ ๋ฐ์ ๊ธฐ๋ฅ์ ์ผ์์ ์ผ๋ก ํ์ฅํ ์ ์์ด์ผ ํ๋ค๋ ์์น์ ๋๋ค.
์ธํฐํ์ด์ค ์ผ๊ด์ฑ ์์น์ URI๋ฅผ ๊ฐ๋ฅํ ์ง์ ๋ ๋ฆฌ์์ค์ ๊ท ์ผํ๊ณ , ํต์ผ๋ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํด์ผ ํ๋ ์์น์ผ๋ก ์ํคํ ์ฒ๋ฅผ ๋จ์ํ๊ฒ ๋ถ๋ฆฌํ์ฌ ํ์ฅ์ด ์ฝ๋๋ก ๊ตฌํํด์ผ ํ๋ค๋ ์์น์ ๋๋ค. ๋ํ์ ์ผ๋ก๋ ๊ฐ Entity ๋ณ๋ก ์์์ ์๋ณํ๋ ๋ฐฉ๋ฒ, ํน์ HATEOAS๋ฅผ ์ด์ฉํ๋ ๋ฐฉ๋ฒ์ ์ด์ผ๊ธฐ ํ๋๋ฐ, HATEOAS๋, ํด๋ผ์ด์ธํธ์ ์๋ตํ๋ ํ์์ ๋จ์ํ ๊ฒฐ๊ณผ ๋ฐ์ดํฐ๋ง ์ ๊ณตํด์ฃผ๋ ๊ฒ์ด ์๋ URI๋ฅผ ํจ๊ป ์ ๊ณตํด์ผํ๋ค๋ ์์น์ ๋งํฉ๋๋ค.
๊ทธ ์ค์์๋ ์ ๊ฐ ์ค์ํ๋ค๊ณ ์๊ฐ๋๋ ๋ถ๋ถ์ด ์๋ค๋ฉด, ์๊ธฐ ์์ ์ ์ธ ์ค๊ณ๋ฅผ ํ๋ ๊ฒ์ ๋๋ค. ์๊ธฐ ์์ ์ ์ธ ์ค๊ณ๋, ์ธํฐํ์ด์ค ์ผ๊ด์ฑ ์์น์ ์ค์ํจ๊ณผ ๋์์ ์ด๊ฒ์ด ์ด๋ป๊ฒ ์ฒ๋ฆฌ๋๋์ง์ ๋ํ ์ถฉ๋ถํ ์ ๋ณด, ๊ด๋ จ๋ ๋ฆฌ์์ค๋ฅผ HyperLink๋ก ๋ด๋ ๊ฒ๊น์ง๊ฐ ์ข ๋ ์ดํดํ๊ธฐ ์ฝ๊ณ , ์ข์ ์ค๊ณ๊ฐ ๋ ์ ์๊ฒ ์ฃ .
REST API ์ค๊ณ
์ ๊ทธ๋ผ ์ด์ ์ง์ REST API๋ฅผ ๋ง๋ค์ด๋ณด๋ ์๊ฐ์ ๊ฐ์ ธ๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค. REST API ์๋ฒ๋ฅผ ๊ฐ๋ฐํ ๋๋ ๋ฌด์์ REST API ์๋ฒ๋ฅผ ๋ง๋ค๊ธฐ ์ํด ํค๋ณด๋๋ฅผ ๋๋ค๊ธฐ๊ธฐ ๋ณด๋จ, ๋จผ์ ์ ์ ํ ์ค๊ณ๋ฅผ ๊ฐ์ถ ํ์ ์ฝ๋ฉ์ ์งํํ๋ ๊ฒ์ ์ถ์ฒํ๋ ๋ฐ์ ๋๋ค.
REST API๋ HTTP์ ๋ฉ์๋, URI๋ก ์ด๋ฃจ์ด์ง API ์๋ฒ์ด๋ฏ๋ก, ํ์ํ ๊ฒ์ ์์ฒญ๊ณผ ์๋ต ์ด๋ ๊ฒ 2๊ฐ์ง๊ฐ ์กด์ฌํ๊ณ , ์ด๋ ํ ์์ฒญ์ ํ์ํ ๋ฐ์ดํฐ(ํ๋ผ๋ฏธํฐ)์ ๊ทธ ๊ฒฐ๊ณผ ๋ชจ๋ธ์ ๊ตฌ์ฑํด์ผ ํฉ๋๋ค.
- ์์(Resource): URI
- ํ์(Action): HTTP Method
- ํํ(Representations): HTTP Message Body
๋ง์ฝ ๊ธฐ์กด์ HTTP API๋ฅผ ์ค๊ณํด๋ณด์ ๋ถ๋ค์ด๋ผ๋ฉด, ์ด๋ฌํ ์ค๊ณ ์์ ์ด ๊ทธ๋ ๊ฒ ์ด๋ ต์ง๋ ์์ ๊ฒ์ด์ง๋ง, ์ฒ์ REST API ์๋ฒ๋ฅผ ๊ฐ๋ฐํด๋ณด์๋ ๋ถ๋ค์ด๋ผ๋ฉด, ์กฐ๊ธ ์์ํ ์ง๋ ๋ชจ๋ฅด๊ฒ ๊ตฐ์.
์๋ฅผ ๋ค์ด, ์ผํ๋ชฐ REST API ์๋ฒ๋ฅผ ๊ฐ๋ฐํ๋ค๊ณ ํ์์ ๋, ์ด๋ค ์ํ์ ๋ํ ์์์ ๊ฐ์ ธ์ค๊ณ ์ ํ ๋๋ ์๋์ ๊ฐ์ด API๋ฅผ ์ค๊ณํ ์ ์์ต๋๋ค.
http://localhost:1412/api/items/1
์ฌ๊ธฐ์ ๋ง๋ ์ ์ฃผ์๋ฅผ URI๋ผ๊ณ ํฉ๋๋ค. ์? URL์ด๋ ๋ฌด์จ ์ฐจ์ด๊ฐ ์๋ ๊ฒ์ผ๊น์? URL์ ์ด๋ค ์์ ์๋ฅผ ๋ค๋ฉด, tistory.pdf ์ฒ๋ผ ์ด๋ค ํ์ผ์ด๋ ์์์ ์์น๋ฅผ ๋ํ๋ด๋ ๊ฒ์ด๋ผ๋ฉด, URI๋ ๋ฌธ์์ด์ ์๋ณํ๊ธฐ ์ํ ๊ฒ์ ๋๋ค. ๋ฐ๋ผ์ ๋ช ์ฌ๋ฅผ ์ฌ์ฉํด์ผ ํ๋ฉฐ, ๋์ฌ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ํผํด์ผ ํฉ๋๋ค. ๊ทธ ์ด์ ๋ HTTP์ ๋ํ ํ์์ ๋ํด์๋ ์ด๋ฏธ HTTP Method๊ฐ ์ด๋ฅผ ์ํํ๊ณ ์์ผ๋ฉฐ, ์ด๋ฅผ URI์ ์ ๋ ๊ฒ์ ์คํ๋ ค ํผ๋์ ์ค ์๋ ์๊ฒ ์ง์.
๋ช ์ฌ๋ฅผ ์ฌ์ฉํ ๋๋ ๋จ์๋ณด๋ค๋ ๋ณต์๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ์๋ํ๋ฉด, API๋ฅผ ์ค๊ณํ ๋, ์ด๋ ํ ์์์ ๊ฐ์ ธ์ค๊ฒ ๋๋๋ฐ, ๊ทธ๊ฒ์ ๋ณดํต DB ๋ฑ์์ ๊ฐ์ ธ์ค๊ฒ ๋๊ณ , ๊ทธ๋ค์ ์ฌ๋ฌ ๊ฐ์ ๋ฐ์ดํฐ๋ก ์กด์ฌํ๊ธฐ ๋๋ฌธ์ ๋๋ค. ๋ฐ๋ผ์ ์ปฌ๋ ์ ์ด๋ผ๋ ๊ฒ์ ๋ช ํํ๊ฒ ์๋ ค์ค์ด ๋๊ณ , ์ฌ๋ฌ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์จ๋ค๋ฉด, ๊ทธ๋ค ๋ฐ์ผ๋ก ๋จ์๋ฅผ ํํํ๋ ๋ฐฉํฅ์ผ๋ก ๊ฐ๋ค๋ฉด, ๋์ฑ ๊น๋ํ API๊ฐ ๋๊ฒ ์ฃ .
# ์ํ์ ๊ฐ์ ธ์ค๋(GET) API
GET http://localhost:1412/api/items
content-type: application/json
๊ทธ๋ฌ๋ ํผํด์ผ ํ๋ ๋ช ์ฌ๋ค๋ ์์ต๋๋ค. ์ด๋ฅผ ํ ๋ฉด, ์ฃผ๋ฌธ ํํฉ์ ๋ํ๋ด๋ orders ๋ฑ์ ๋ช ์ฌ๋ ๊ฐ๋ฅํ ์ฌ์ฉํ์ง ์๋ ๊ฒ์ด ์ข๊ฒ ์ต๋๋ค. ์๋ํ๋ฉด, SQL ์ฟผ๋ฆฌ๋ฌธ์์ order๋ ์ ๋ ฌ์ ํค์๋๋ก์จ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ์ด๋ฅผ ๊ฐ์ด ์ฌ์ฉํ๋ฉด ํผ๋์ ์ฃผ๊ฒ ๋ฉ๋๋ค. ๋ฐ๋ผ์ SQL ์ง์๋ฌธ์ ์กด์ฌํ๋ ํค์๋ ๋ฑ์ ์ฌ์ฉ์ ์์ ํ๋ ๊ฒ์ด ์ข๊ฒ ์ต๋๋ค.
๋ค์์ ํ์์ ๋ํ ์ค๊ณ์ ๋๋ค. REST API ์๋ฒ ๊ฐ๋ฐ์์ ์์์ ๋ํด์๋ ๋์ฌ๋ฅผ ์ฌ์ฉํ์ง ์๋ ๊ฒ์ธ๋ฐ, ๊ทธ๋ ๋ค๋ฉด ์ฐ๋ฆฌ๋ ๋์ฌ๋ฅผ HTTP ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๊ฒ ๋๋ ๊ฒ์ด๊ณ , ๊ฐ๋ฅํ ์ฌ๊ธฐ์ ์๋ ํ์๋ฅผ ๊ฐ์ง๊ณ API๋ฅผ ๊ตฌํํด์ผ ํฉ๋๋ค.
Resource | GET(read) | POST(create) | PUT(update) | DELETE(delete) |
/items | ์ํ ๋ชฉ๋ก ๋ณด๊ธฐ | ์ํ ์ถ๊ฐ | - | - |
/items/{id} | ID๊ฐ ์ํ ๋ณด๊ธฐ | - | ID๊ฐ์ ์ํ ์์ | ID๊ฐ์ ์ํ ์ญ์ |
์ ์์ ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฑ์ ์ด์ฉํด์ ์ํ์ ์ถ๊ฐํ๊ณ , ๋ณด๊ณ , ์ญ์ ํ๋ ๊ฒ์ ๋งํ๋๋ฐ, ์ฐ๋ฆฌ๋ ์ด๋ฅผ CRUD(Create, Read, Update, Delete)๋ผ ํฉ๋๋ค. ์ค์ ๋ก CRUD๋ ์ฐ๋ฆฌ๊ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ํ๋ ํ์๋ฅผ ๋งํ๋ ๊ฒ์ด๊ณ , ์ด๋ฅผ HTTP Method ์ฆ, REST API์์์ ํ์๋ก ํํํ๋ค๋ฉด, GET, POST, PUT, DELETE๊ฐ ๋๋ ๊ฒ์ด์ฃ .
๊ทธ๋ผ ๋ง์ฝ, ์ํ ๋ชฉ๋ก ์ค, ๋ด๊ฐ ์ํ๋ ๊ฐ, ์ํ๋ ํํ๋ก ๋ณด๊ณ ์ถ๋ค๋ฉด ์ด๋ป๊ฒ ํด์ผ ํ ๊น์? SQL๋ก ๋ณด์๋ฉด, where, order by ๋ฑ์ ์กฐ๊ฑด์ ์ฌ์ฉํ๊ฒ ๋ค๋ ๊ฒ์ด ๋๋๋ฐ, ์ด๋ฅผ ์ด๋ป๊ฒ ์ฒ๋ฆฌํ ์ ์์๊น์?
์ด ๋๋ JPA์์ ์ ๊ณตํ๋ Pageable๋ฅผ ์ด์ฉํ๋ ๋ฐฉ๋ฒ์ด ์๋๋ฐ, ์ด ๋ฐฉ๋ฒ์ ์ฐจํ, JPA๋ฅผ ๋ค๋ฃจ๊ฒ ๋๋ค๋ฉด, ๋ ์์ธํ๊ฒ ๋ค๋ค๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค. ๋จผ์ , ์ด Pageable์ ์ฌ์ฉํ๋ค๋ฉด, ์ด๋ค์์ผ๋ก URI๊ฐ ๋์ค๋์ง๋ง ๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
# Pageable์ ์ด์ฉํ ๊ฒฝ์ฐ
GET http://localhost:1412/api/items?page=0&size=10&sort=desc
content-type: application/json
page, size, sort ํ๋ผ๋ฏธํฐ๋ Pageable ๊ฐ์ฒด์ ์กด์ฌํ๋ ๋ฉค๋ฒ ๋ณ์๋ค๋ก, ์ด๋ฌํ ํ๋กํผํฐ ๊ฐ์ ๋ฃ์ด, ์ํ๋ ๋ฐ์ดํฐ๋ฅผ ๋ฝ์ ์ ์๋๋ก ํฉ๋๋ค. ์ด๋ฌํ ๊ธฐ๋ฅ์ ๋ณดํต ์น ๊ฒ์ํ์์ ๋ง์ด ์ฌ์ฉํ๋ ๋ฐ, ๊ฒ์ํ์ ๊ธ์ด 100,000๊ฐ๋ผ๋ฉด, ์ด๋ฐ ๊ธฐ๋ฅ์ด ์์ ๋ 100,000๊ฐ๋ฅผ ๋ชจ๋ ๋ฐ์, ์น ๋ธ๋ผ์ฐ์ ๊ฐ ๋ ๋๋ง ํด์ผ ํ์ง๋ง, ์ด๋ ๊ฒ ํ๋ฉด ์น ๋ธ๋ผ์ฐ์ ์ ๋ก๋ฉ ์๋๊ฐ ๋๋ ค์ง๊ฒ ๋์ฃ , ๋ฐ๋ผ์ ํ์ด์ง๋ณ๋ก ์ด๋ฅผ ์ ํด์ง ๊ฐฏ์๋งํผ ๋ฐ์ดํฐ๋ฅผ ๋ฐ๋๋ก ํ๊ณ , ํด๋ผ์ด์ธํธ์์ ์ด๋ฅผ ๋์ ์ผ๋ก ๋๋๋๋ก ์ฒ๋ฆฌํ๋ฉด, ๊ฒ์๊ธ์ ์ ์ ํ๊ฒ ๋ฑ๋ถํ์ฌ ์ฌ์ฉ์์๊ฒ ํ์ํ ์ ์๊ฒ๋ ๋ฉ๋๋ค.
POST ๋ฉ์๋๋ ์๋ก์ด ์ํ์ ์์ฑํ์ฌ ์ ์ฅํ๋ ์ญํ ์ ์ํํ๊ฒ ๋๋๋ฐ, ์์ฑํ ์ํ์ ์์ง ID ๊ฐ ๋ฑ์ด ์กด์ฌํ์ง ์๊ธฐ ๋๋ฌธ์ ๋จ์ํ items๋ผ๋ URI๋ก ๋๋๋๋ก ์ค๊ณํ๊ณ , ๋์ POST ๋ฉ์๋๋ฅผ ์์ฒญํ๋ ํํ๋ก API๋ฅผ ์ค๊ณํฉ๋๋ค. ์์ฑ ์ดํ์๋ ID ๊ฐ์ด ๋์ค๊ธฐ ๋๋ฌธ์ ์์ ์ด๋ ์ญ์ ๋ฑ์ ์์ ์ ID๋ฅผ ๋ถ์ฌ์ ์ค๊ณ๋ฅผ ํ๋ฉด ๋๊ฒ ์ฃ .
๊ธฐ์กด์ ํด๋ผ์ด์ธํธ ์ ํ๋ฆฌ์ผ์ด์ ์์ DB๋ฅผ ์ฌ์ฉํ์ ๋๋ฅผ ์ฃผํฉ์์ผ๋ก ํ์ํ์๊ณ , ์๋ฒ๋ฅผ ๊ตฌ์ถํ์ ๋๋ฅผ ํ๋์์ผ๋ก ํ์ํ์์ต๋๋ค. ์ฃผํฉ์์ผ๋ก ํ์ํ์์ ๋๋ ์ง์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ก์ธ์คํ์ฌ, ํด๋ผ์ด์ธํธ๊ฐ ์ง์ ์ ๊ทผํ๋ค๋ฉด, ์ด๋ฒ์๋ ์๋ฒ๋ฅผ ์ฌ์ฉํ์ฌ ์๋ฒ์์ ์ ๊ณตํ๋ ํ์๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ๋ฐ๋ ๊ตฌ์กฐ๋ก ์ค๊ณ๊ฐ ๋ ๊ฒ์ด์ฃ .
์ด๋ฌํ ๊ตฌ์กฐ๋ REST API ์๋ฒ๋ฅผ ํตํด ์๋ฒ๊ฐ ๋ ธ์ถํ๊ณ ์ถ์ ๋ฐ์ดํฐ์ ๋ํด์๋ง ์ ๊ณต์ ํ๊ณ , ๋ฐ์ดํฐ๋ฅผ ์บ์ํจ์ผ๋ก์จ, ์ฑ๋ฅ์ ๋ํ ํฅ์๋๋ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง ์ ์๊ฒ ๋ฉ๋๋ค.
Spring boot๋ฅผ ์ด์ฉํ REST API ์๋ฒ ๊ฐ๋ฐ
Spring boot๋ฅผ ์ด์ฉํ์ฌ REST API ์๋ฒ๋ฅผ ๊ฐ๋ฐํ๋ ๋ฐฉ๋ฒ์๋ ๋ ๊ฐ์ง ๋ฐฉ๋ฒ์ด ์์ต๋๋ค.
- MVC ํจํด์ ์ด์ฉํ๋ ๋ฐฉ๋ฒ
- Spring boot data rest๋ฅผ ํ์ฉํ๋ ๋ฐฉ๋ฒ
๊ตฌ์ฒด์ ์ธ ๊ตฌํ์ ๋ํด์๋ ๋ค์ ํฌ์คํธ์์ ๋ค๋ฃฐ ๊ฒ์ ๋๋ค. ๊ทธ ์ ์, ๋ฏธ๋ฆฌ ์ด ๋ฐฉ๋ฒ์ ์ฐจ์ด๊ฐ ์ด๋ค ๊ฒ์ด ์๋์ง ์ค๋ช ์ ๋๋ฆฌ์๋ฉด, MVC ํจํด์ Model View Controller๋ก ์ด๋ฃจ์ด์ง ํํ์ ๋์์ธ ํจํด์ผ๋ก REST API ์๋ฒ๋ฅผ ์ค๊ณํ๊ฒ ๋ค๋ ๊ฒ์ ๋๋ค.
Spring boot๋ก ๋ณธ๋ค๋ฉด, Controller, Service (DAO), Repository๋ก ๋๋์ด ๋ฐ์ดํฐ์ ์ด๋ฐ ์ฒ๋ฆฌ๋ฅผ ์ธ๋ถํ ํ๊ฒ ๋ค๋ ๊ฒ์ด์ฃ . ๊ธฐ์กด์ Spring MVC์ ์ฐจ์ด๊ฐ ์๋ค๋ฉด ๋ฐํ ํ์์ด ๊ธฐ์กด์ Spring MVC๋ HTML์ด์๋ค๋ฉด REST API๋ XML์ด๋, JSON์ด๋์ ์ฐจ์ด๊ฐ ์์ต๋๋ค.
Spring boot data rest๋ Repository ํ๋๋ง ์๋ค๋ฉด DB์์ CRUD๋ฅผ ๋ชจ๋ ์ํํ ์ ์๋๋กํ๋ ์์ฃผ ๊ฐ๋จํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๋ค. MVC ํจํด๊ณผ๋ ๋ฌ๋ฆฌ Controller, Service๊ฐ ์๊ณ , ๋ ํฌ์งํฐ๋ฆฌ ๋ด๋ถ์ CRUD ๋ฉ์๋์ ๋งคํํ์ฌ ์ฒ๋ฆฌํฉ๋๋ค. ์ฆ, MVC์์๋ CRUD๋ฅผ ๋ชจ๋ ์ง์ ๊ตฌํํด์ฃผ๊ณ , ์ด๋ฅผ Service์ Controller๋ก ๋ถ์ด๋ ๊ฑธ ๊ฐ๋ฐ์๊ฐ ๋ชจ๋ ๊ตฌํํด์ค์ผ ํ์ง๋ง, ๊ทธ๋ ์ง ์์๋ ๋๋ค๋ ๊ฒ์ด์ฃ .
๊ทธ๋ ๋ค๊ณ ํ์ฌ, Spring boot data rest์์ Controller, Service๋ฅผ ๊ตฌํํ ์ ์๋ ๊ฒ์ ์๋๋๋ค. ์ด ๋ถ๋ถ๊ณผ ํจ๊ป ๋ค์ ํฌ์คํธ์์๋ MVC ํจํด์ ์ด์ฉํ REST API ์๋ฒ ๊ฐ๋ฐ๊ณผ Spring boot data rest๋ฅผ ์ด์ฉํ REST API ์๋ฒ ๊ฐ๋ฐ์ ๋ํด ์์ธํ๊ฒ ๋ค๋ค๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.