[JPA๋ก REST API ๋ง๋ค๊ธฐ] ์๋ฒ ์ ํ๋ฆฌ์ผ์ด์ ๊ตฌ์กฐ - MVC ํจํด๊ณผ RESTful API ๋?
MVC ํจํด์ด๋?
Layered Architecture ์ ๊ธฐ์ํ ๋์์ธ ํจํด์ด๋ค. user interface ์์ business layer ์ presentation layer ๋ฅผ ๋ถํ ํ์ฌ ๋น์ฆ๋์ค ๋ก์ง์ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ๊ฒ ํ๊ณ interface ๋ ์ฝ๊ฒ ์์ ํ๊ฒ ํ๋ ๊ฒ์ด ๋ชฉ์ ์ด๋ค. MVC ํจํด์ ๊ตฌ์ฑ์์๋ ๋ทฐ, ๋ชจ๋ธ, ์ปจํธ๋กค๋ฌ๊ฐ ์๋ค.
View
์ปจํธ๋กค๋ฌ๊ฐ ๋ฐํํ ๋ฐ์ดํฐ๋ฅผ ์ด์ฉํด ์ฌ์ฉ์์๊ฒ ์ถ๋ ฅํ ํ๋ฉด์ด๋ ์ธํฐํ์ด์ค๋ฅผ ๊ทธ๋ฆฐ๋ค. ์ฌ๊ธฐ์๋ Todo list ์ ํ๋ฉด์ ๊ทธ๋ฆฌ๋ ๋ถ๋ถ์ด๋ค.
Model
์ปจํธ๋กค๋ฌ๊ฐ ์์ฒญํ ๋น์ฆ๋์ค ๋ก์ง์ ์ฒ๋ฆฌํ๋ค. ๋น์ฆ๋์ค ๋ก์ง์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ ์ฃผ์ ์ ๋ฌด๋ฅผ ๋งํ๋ค. ์ฆ, DB์ ์ ์ํด ๋ฐ์ดํฐ๋ฅผ ์ ์ถ๋ ฅํ๊ณ , ์ฉ๋์ ๋ง๊ฒ ๊ฐ๊ณตํ๊ฑฐ๋ ํ๋ ๋ก์ง์ ์ํํ๋ค. ๋ง์ฝ ๋ฐ์ดํฐ์ ์ํ ๋ณํ๊ฐ ์๋ค๋ฉด ๋ทฐ์ ์ปจํธ๋กค๋ฌ์๊ฒ ์๋ฆฌ๋ ์ญํ ๋ ํ๋ค. Service, Entity, Repository ๋ฑ์ผ๋ก ๊ตฌํ๋๊ณค ํ๋ค. ๋ ๋ชจ๋ธ ๊ณ์ธต์ ๋น์ฆ๋์ค ๋ก์ง์ ์ฒ๋ฆฌํ ๋ ํ์ํ ๋น์ฆ๋์ค ๋ชจ๋ธ์ ๊ฐ์ง๊ณ ์๋ค. ๋น์ฆ๋์ค ๋ชจ๋ธ์ ๋ฐ์ดํฐ๋ฅผ ๋งํ๋ค. ์ฌ๊ธฐ์๋ Todo list ์ todo item ์ด๋ค.
- Entity : ๋น์ฆ๋์ค ๋ชจ๋ธ ๊ฐ์ฒด.
- Repository : DB ์กฐ์์ ๋ด๋นํจ
- Service : ์ค์ ๋น์ฆ๋์ค ๋ก์ง์ ์ฒ๋ฆฌํจ
Controller
์ฌ์ฉ์์ ์์ฒญ์ ๊ฐ๊ฐ ๋ชจ๋ธ๋ก ๋ผ์ฐํ ํ๊ณ ๋ทฐ ์ชฝ์ ๋ฐ์ํ์ฌ ๊ทธ ๊ฒฐ๊ณผ(ํ๋ฉด ๋ฑ)๋ฅผ ์๋ตํ๋ค. ๋ผ์ฐํ ์ด๋ ์์ฒญ์ ์ ํฉํ ๋ชจ๋ธ ์ชฝ์ผ๋ก ๋ณด๋ด ์ฒ๋ฆฌํ๊ฒ ํ๋ ๊ฒ์ด๋ค.
์ฌ๊ธฐ์๋ View ๋ฅผ ํ๋ก ํธ์๋ ์๋ฒ๋ก ๋ถํ ํ๊ธฐ ๋๋ฌธ์ ๊ตฌํํ์ง ์๊ณ ์ปจํธ๋กค๋ฌ์์ data ๋ฅผ ์ฌ์ฉ์์๊ฒ ๋ฐํํ๋ค.
์๋ฒ ์ ํ๋ฆฌ์ผ์ด์ ๊ตฌ์กฐ
์์์ ์ค๋ช ํ MVC ํจํด์ ๊ธฐ๋ฐํ์ฌ Client <-> Controller <-> Service <-> Repository <-> DB ๊ตฌ์กฐ๋ก ์ค์ ํ์๋ค. Client ์ http ์์ฒญ์ด Contoller ์ ๋ค์ด์ค๋ฉด ์ปจํธ๋กค๋ฌ๊ฐ ํ์ํ ์๋น์ค๋ฅผ ํธ์ถํด ๋น์ฆ๋์ค ๋ก์ง์ ์คํํ๋ค. ์๋น์ค์์๋ ํ์ํ ๋ฐ์ดํฐ๊ฐ ์๋ค๋ฉด Repository ๋ฅผ ํตํด DB ์ ์ ์ํด ๋ฐ์ดํฐ๋ฅผ CRUD ํ๋ค.
RESTful API ๋?
REST ์ํคํ ์ฒ๋ฅผ ์ค์ํ๋ API ๋ฅผ ๋งํ๋ค. ๊ฐ๋จํ ๋งํ๋ฉด, HTTP method ๋ก ๋ฐ์ดํฐ ์ ์ถ๋ ฅ์ ์ํํ๋ค.
- GET - Read
- POST - Create
- PUT - All fields Update
- PATCH - Some fields Update
- DELETE - Delete
REST ์ํคํ ์ฒ ์ค์์ฌํญ์ ๋ง์ง๋ง, ๋ช ๋ช ๊ท์น๋ง ์ ๋ฆฌํด๋ณด๋ฉด
- uri ์ resource name ๊ณผ id ๋ฅผ ๋ช ์ํ๋ค.
- ๊ทธ ์ธ ํ์ผ ํ์ฅ์, ํ์์ ๋ํ ๋์ฌ ๋ฑ์ ๋ช ์ํ์ง ์๋๋ค.
- / ๋ ๊ณ์ธต๊ด๊ณ๋ฅผ ๋ํ๋ธ๋ค. ์ฐ๊ด ๊ด๊ณ๋ ๋งจ ๋ค์ ํ์ํ๋ค.
todo RESTful API ๊ตฌํ
Description | HTTP method | Route |
todo list ๋ฅผ ๊ฐ์ ธ์จ๋ค | GET | /todos |
todo ๋ฅผ ๊ฐ์ ธ์จ๋ค | GET | /todo/:id |
todo ๋ฅผ ์์ฑํ๋ค | POST | /todo |
todo ๋ฅผ ์์ ํ๋ค | PUT or PATCH | /todo/:id |
todo ๋ฅผ ์ญ์ ํ๋ค | DELETE | /todo/:id |