๐Ÿšง

[JPA๋กœ REST API ๋งŒ๋“ค๊ธฐ] ์„œ๋ฒ„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ตฌ์กฐ - MVC ํŒจํ„ด๊ณผ RESTful API ๋ž€?

purpplee 2021. 11. 24. 15:43

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

 

๋ฐ˜์‘ํ˜•