REST (Representational State Transfer)
μν νν μ μ‘ μν€ν
μ²
present [prΙͺΛzent]
: 보μ¬μ£Όλ€
represent [ΛreprΙͺΛzent]
: λ€μ 보μ¬μ£Όλ€, λμ νννλ€
re-(λ€μ) + present(보μ¬μ£Όλ€) λ€μ 보μ¬μ£Όλ€, λννλ€, λλ³νλ€
representational [ ΛreprΙͺzenΛteΙͺΚnl ]
: νννλ, 보μ¬μ£Όλ
REST
μν νν μ μ‘ μν€ν μ²
μμμ μνλ₯Ό νννμ¬ μ λ¬νλ μν€ν
μ²
URI λ‘ μμμ λμ νμ¬ νννκ³ , μλ²κ° ν΄μΌ ν νμ(μλ²μ μν)λ₯Ό HTTP λ©μλλ‘ νννλ κ²μ μμΉμΌλ‘ νλ μν€ν
μ²
β’
λ€νΈμν¬ μν€ν
μ² μ€μ νλμ
λλ€.
β’
νλ‘ νΈμλ λ° λ°±μλμ λ
립μ±κ³Ό νμ₯μ± ν₯μμν΅λλ€.
Overview
β’
REST μμΈν μμ보기
β’
RESTful
β’
RESTful API
β’
CRUD
β’
RESTful CRUD
β’
REST μν€ν
μ²λ₯Ό μ¬μ©νλ μ΄μ
β’
Server Side Rendering (SSR)
β’
Client Side Rendering (CSR)
β’
Non-RESTful VS RESTful
β’
REST μν€ν
μ²μ 6κ°μ§ μμΉ
REST μμΈν μμ보기
2000 λ
λ‘μ΄ νλ© (Roy Fielding) μ λ°μ¬ λ
Όλ¬Έμμ μκ°λ κ°λ
μ΄λ€.
REST μν€ν
μ²λ₯Ό μ μν ν΅μ¬ μΈλ¬Ό μ€ ν λͺ
μΌλ‘, HTTP νλ‘ν μ½κ³Ό μλ μμ΄λ μΉ (WWW)μ ν΅μ¬ νμ€νμ κΈ°μ¬νμ΅λλ€. νλ©μ κ·Έμ λ°μ¬νμ λ
Όλ¬Έμμ REST(Representational State Transfer) μν€ν
μ²λ₯Ό μκ°νμ¬, λΆμ° νμ΄νΌλ―Έλμ΄ μμ€ν
μ μν μ€κ³ μμΉμ μ μνμ΅λλ€. μ΄ν λ§μ μΉ μλΉμ€μ APIκ° REST μν€ν
μ² μ€νμΌμ μ μ©νμ¬ κ΅¬μΆλμμ΅λλ€.
RESTλ Representational State Transferμ μ½μλ‘, μΉ κ°λ°μμ λ€νΈμν¬ μ ν리μΌμ΄μ
μ μ€κ³νλ λ° μμ£Ό μ¬μ©λλ μν€ν
μ² μ€νμΌμ
λλ€. RESTμ μμΉμ μ€μνλ RESTful APIλ λ€λ₯Έ μμ€ν
κ°μ HTTPλ₯Ό ν΅ν΄ ν΅μ νκ³ λ°μ΄ν°λ₯Ό κ΅νν μ μκ² ν΄μ€λλ€.
RESTλ κ°λ¨νκ³ μ μ°ν μν€ν
μ²λ‘, μμμ URI(Uniform Resource Identifier)λ‘ νννκ³ , HTTP λ©μλ(GET, POST, PUT, DELETE λ±)λ₯Ό μ¬μ©νμ¬ ν΄λΉ μμμ λν μ‘μ
μ μνν©λλ€. λν, RESTful APIλ μνλ₯Ό κ΄λ¦¬νμ§ μκ³ , μμ²μ νμν λͺ¨λ μ 보λ₯Ό μμ² μ체μ ν¬ν¨μν΅λλ€.
μ΄λ¬ν RESTful APIμ μ₯μ μ λ€μκ³Ό κ°μ΅λλ€:
β’
κ°κ²°μ±: μ§κ΄μ μ΄κ³ κ°κ²°ν μΈν°νμ΄μ€λ₯Ό μ 곡ν©λλ€.
β’
νμ₯μ±: μμ€ν
μ λμ¨νκ² κ²°ν©νμ¬ νμ₯μ΄ μ©μ΄ν©λλ€.
β’
κ°μμ±: μμμ λν νμ€νλ μΈν°νμ΄μ€λ₯Ό μ 곡νλ―λ‘, κ°λ°μλ€μ΄ APIλ₯Ό μ΄ν΄νκ³ μ¬μ©νκΈ° μ½μ΅λλ€.
λ°λΌμ, RESTful APIλ νλμ μΈ μΉ κ°λ°μμ λ§€μ° μ€μν μν μ λ΄λΉνκ³ μμΌλ©°, λ§μ μΉ μ ν리μΌμ΄μ
κ³Ό μλΉμ€κ° RESTλ₯Ό κΈ°λ°μΌλ‘ ꡬμΆλκ³ μμ΅λλ€.
RESTful
: REST μν€ν
μ²λ₯Ό λ°λ₯΄λ μμ€ν
λλ μλΉμ€λ₯Ό κ°λ¦¬ν€λ μ©μ΄μ
λλ€
RESTful API
REST μν€ν
μ² μμΉμ λ°λ₯΄λ APIλ‘, RESTful μλΉμ€λ₯Ό μν μΈν°νμ΄μ€μ
λλ€. μ΄ APIλ μΉ μλΉμ€λ₯Ό ꡬμΆνκ±°λ ν΅ν©νλ λ° μ¬μ©λ©λλ€.
μ£Όλ‘ HTTPλ₯Ό κΈ°λ°μΌλ‘ νλ©°, μμμ URLλ‘ νννκ³ HTTP λ©μλ(GET, POST, PUT, DELETE λ±)λ₯Ό μ¬μ©νμ¬ μμμ κ΄λ¦¬νλ©°, JSON λλ XMLκ³Ό κ°μ λ°μ΄ν° νμμ ν΅ν΄ λ°μ΄ν°λ₯Ό κ΅νν©λλ€.
RESTful APIλ κ°λ¨νκ³ μ§κ΄μ μ΄λ©°, μλ²μ ν΄λΌμ΄μΈνΈ μ¬μ΄μ ν΅μ μ ν¨μ¨μ μΌλ‘ μννλ λ° λμμ΄ λ©λλ€.
CRUD
CRUDλ λ°μ΄ν°μ κΈ°λ³Έμ μΈ μμ
μ λνλ΄λ μ½μ΄λ‘, Create(μμ±), Read(μ½κΈ°), Update(μμ ), Delete(μμ )μ λ€ κ°μ§ κΈ°λ³Έ μμ
μ λ§ν©λλ€. μ΄ λ€ κ°μ§ μμ
μ μ£Όλ‘ λ°μ΄ν°λ² μ΄μ€μ κ΄λ ¨λ μμ
μμ μ¬μ©λ©λλ€:
RESTful CRUD
CRUD μμ
| μμ² λ©μλ | μ€λͺ
|
Create | POST | μλ‘μ΄ λ°μ΄ν° λ μ½λλ₯Ό μμ± |
Read | GET | λ°μ΄ν°λ₯Ό μ½κ±°λ μ‘°ν |
Update | PUT/PATCH | λ°μ΄ν° λ μ½λλ₯Ό μμ λλ κ°±μ |
Delete | DELETE | λ°μ΄ν°λ₯Ό μμ |
RESTful APIλ μ΄λ¬ν HTTP λ©μλλ₯Ό μ¬μ©νμ¬ μλ²μ μμμ κ΄λ¦¬νλ λ° νμ©λ©λλ€. μλ₯Ό λ€μ΄, POST μμ²μ ν΅ν΄ μλ‘μ΄ λ°μ΄ν°λ₯Ό μμ±νκ³ , GET μμ²μ ν΅ν΄ λ°μ΄ν°λ₯Ό μ½κ±°λ μ‘°ννλ©°, PUT λλ PATCH μμ²μ ν΅ν΄ λ°μ΄ν°λ₯Ό μμ νκ³ , DELETE μμ²μ ν΅ν΄ λ°μ΄ν°λ₯Ό μμ ν μ μμ΅λλ€. μ΄λ¬ν HTTP λ©μλλ₯Ό μ΄μ©νμ¬ κ°κ°μ CRUD μμ
μ μννλ κ²μ΄ RESTful APIμ μ£Όμ νΉμ§ μ€ νλμ
λλ€.
REST μν€ν μ²λ₯Ό μ¬μ©νλ μ΄μ
RESTful APIλ μΌλ°μ μΌλ‘ HTTP νλ‘ν μ½μ λ°λ₯΄κ³ , μμ²κ³Ό μλ΅μ νμ€νλ λ°©μμΌλ‘ μ²λ¦¬ν¨μΌλ‘μ¨, λ€μν μΈμ΄λ νλ«νΌ κ°μ μνΈμ΄μ©μ±μ 보μ₯ν©λλ€. μ΄λ νλ‘ νΈμλμ λ°±μλλ₯Ό λΆλ¦¬νκ³ , κ° μμμ λ
립μ μΌλ‘ κ°λ°ν λ λ§€μ° μ μ©ν©λλ€. λ°λΌμ νλ‘ νΈμλμ λ°±μλλ₯Ό λ
립μ μΌλ‘ κ°λ°νλ κ²½μ° RESTful APIλ₯Ό μ¬μ©νλ κ²μ΄ μΌλ°μ μΌλ‘ κΆμ₯λ©λλ€.
REST λ λ€νΈμν¬ μν€ν
μ²μ μΌμ’
μ
λλ€.
μ£Όμ λ€νΈμν¬ μν€ν μ² μ’ λ₯
1.
κ³μΈ΅νλ μν€ν
μ²(Layered Architecture)
: λ€νΈμν¬ μμ€ν
μ΄ μ¬λ¬ κ³μΈ΅μΌλ‘ ꡬμ±λμ΄ μμΌλ©°, κ° κ³μΈ΅μ νΉμ ν μν κ³Ό μ±
μμ κ°μ΅λλ€. OSI 7κ³μΈ΅ λͺ¨λΈμ΄ μ΄λ¬ν κ³μΈ΅ν μν€ν
μ²μ ν μμ
λλ€.
2.
RESTful μν€ν
μ²(Representational State Transfer)
: RESTλ ν΄λΌμ΄μΈνΈμ μλ² κ°μ ν΅μ μ μν μΉ μν€ν
μ²μ ν ννλ‘, 리μμ€λ₯Ό URLμ ν΅ν΄ μλ³νκ³ HTTP λ©μλλ₯Ό μ¬μ©νμ¬ λ¦¬μμ€μ μ κ·Όνλ μν€ν
μ² μμΉμ
λλ€.
3.
λ§μ΄ν¬λ‘μλΉμ€ μν€ν
μ²(Microservices Architecture)
: μ΄ μν€ν
μ²λ μ ν리μΌμ΄μ
μ μ¬λ¬ μμ μλΉμ€λ‘ λΆν νμ¬ κ° μλΉμ€κ° λ
립μ μΌλ‘ ꡬμ±λκ³ μ€νλλλ‘ νλ ꡬ쑰λ₯Ό λ§ν©λλ€.
Server Side Rendering (SSR)
μλ² μΈ‘ λ λλ§(Server-Side Rendering, SSR)μ μ¬μ©μκ° μΉνμ΄μ§μ μ μνμ λ, μλ²μμ ν΄λΉ νμ΄μ§λ₯Ό μμ ν λ λλ§νκ³ μμ±λ HTML λ¬Έμλ‘ ν΄λΌμ΄μΈνΈμκ² μ 곡νλ κΈ°μ μ
λλ€. ν΄λΌμ΄μΈνΈμμλ μλ²λ‘λΆν° μ λ¬λ μμ±λ HTMLμ λ°μ νλ©΄μ νμνλ λ°©μμ
λλ€.
Client Side Rendering (CSR)
ν΄λΌμ΄μΈνΈ μΈ‘ λ λλ§ (Client-Side Rendering λλ CSR)μ μΉ μ ν리μΌμ΄μ
μ μ¬μ©μμ λΈλΌμ°μ μμ JavaScriptλ₯Ό μ¬μ©νμ¬ μμ ν λ λλ§νλ νλ‘μΈμ€λ₯Ό μλ―Έν©λλ€. μ΄ λ°©μμ μΉ μ ν리μΌμ΄μ
μ μ μ νμΌμ λ‘λνκ³ μ¬μ©μ μνΈ μμ©μ λ°λΌ APIμμ λ°μ΄ν°λ₯Ό κ°μ Έμ DOMμ μ‘°μνμ¬ λ΄μ©μ λμ μΌλ‘ νμν©λλ€.
CSR(Client-Side Rendering)μμλ μ£Όλ‘ JSON λλ XMLκ³Ό κ°μ λ°μ΄ν°λ₯Ό λ°μ μλ°μ€ν¬λ¦½νΈλ‘ λ λλ§νκ³ , React, Vue, Angular λ±μ νλ μμν¬ λλ λΌμ΄λΈλ¬λ¦¬λ₯Ό μ¬μ©νμ¬ ν΄λΌμ΄μΈνΈ μΈ‘μμ μΉ μ ν리μΌμ΄μ
μ λ λλ§μ λ΄λΉν©λλ€. νμ΄μ§ λ‘λ© ν, νλ‘ νΈμλ λΌμ΄λΈλ¬λ¦¬κ° μλ²μμ λ°μ λ°μ΄ν°λ₯Ό λμ μΌλ‘ λ λλ§νμ¬ μ¬μ©μμκ² λ³΄μ¬μ€λλ€. μ΄ κ³Όμ μ ν΄λΌμ΄μΈνΈ μΈ‘μμ μ΄λ£¨μ΄μ§λ―λ‘ λΈλΌμ°μ μμ λΉ λ₯΄κ² νλ©΄μ νμν μ μμ΅λλ€.
Non-RESTful μμ€ν
Non-RESTful μμ€ν
μ REST μν€ν
μ²μ μμΉμ λ°λ₯΄μ§ μλ μμ€ν
μ μλ―Έν©λλ€. μ΄λ¬ν μμ€ν
μ RESTμ κΈ°λ³Έ μμΉ μ€ μΌλΆ λλ μ ν μ μ©λμ§ μμ μ μμ΅λλ€.
λΉRESTful μμ€ν
μμλ μμμ URIλ‘ νννλ κ²μ΄ λΆλͺ
ννκ±°λ μΌκ΄μ±μ΄ μμ μ μμ΅λλ€. λν, HTTP λ©μλλ₯Ό μ¬λ°λ₯΄κ² μ¬μ©νμ§ μκ±°λ, Hypermediaλ₯Ό νμ©νμ§ μλ λ± REST μν€ν
μ²μμ κ·μ ν μμΉμ λ°λ₯΄μ§ μλ νΉμ±μ λ³΄μΌ μ μμ΅λλ€.
RESTful μμ€ν
RESTful μμ€ν
μ RESTμ κΈ°λ³Έ μμΉμΈ μμ μλ³, μκΈ°μμ ν λ©μμ§, HATEOAS(νμ΄νΌλ―Έλμ΄ μ μ΄ μν) λ±μ μ μ©νλ μμ€ν
μ κ°λ¦¬ν΅λλ€. μ΄λ¬ν μμ€ν
μ μΌκ΄λ URI, HTTP λ©μλμ μ¬μ©, Hypermediaμ μ κ·Ήμ μΈ νμ©κ³Ό κ°μ REST μν€ν
μ²μ μμΉμ λ°λ₯΄λ©°, μ΄λ₯Ό ν΅ν΄ νμ₯μ±κ³Ό μ μ§λ³΄μμ±μ΄ ν₯μλ©λλ€.
Non-RESTful VS RESTful
REST μν€ν μ²μ 6κ°μ§ μμΉ
1.
μΈν°νμ΄μ€ μΌκ΄μ± (Uniform Interface)
2.
무μν (Stateless)
3.
μΊμ± κ°λ₯ (Cacheable)
4.
κ³μΈ΅ν (Layered System)
5.
Code on Demand
6.
ν΄λΌμ΄μΈνΈ/μλ² κ΅¬μ‘° (Client/Server Architecture)
μΈν°νμ΄μ€ μΌκ΄μ± (Uniform Interface)
μΌκ΄μ μΈ μΈν°νμ΄μ€λ‘ λΆλ¦¬λμ΄μΌ νλ€.
REST μΈν°νμ΄μ€λ μΌκ΄μ±μ κ°μ ΈμΌ ν©λλ€. μ΄λ 리μμ€μ μ κ·Όνλ λ°©λ²μ΄ μΌκ΄λμ΄μΌ ν¨μ μλ―Έν©λλ€. 리μμ€μ λν μ 보λ 리μμ€ μλ³μμ ν¨κ» μμ²λλ©°, μλ²λ 리μμ€ μνλ₯Ό ν΄λΌμ΄μΈνΈμκ² μ λ¬ν©λλ€.
무μν (Stateless)
κ° μμ² κ° ν΄λΌμ΄μΈνΈμ μ½ν
μ€νΈκ° μλ²μ μ μ₯λμ΄μλ μ λλ€
μμ² κ° μν μ 보λ₯Ό μ μ§νμ§ μλ μμΉμ
λλ€. κ° μμ²μ κ·Έ μμ² μ체μ νμν λͺ¨λ μ 보λ₯Ό ν¬ν¨ν΄μΌ νλ©°, μλ²λ κ° μμ²μ λ³κ°μ μμ²μΌλ‘ μ·¨κΈν΄μΌ ν©λλ€.
μΊμ± κ°λ₯ (Cacheable)
WWWμμμ κ°μ΄ ν΄λΌμ΄μΈνΈλ μλ΅μ μΊμ±ν μ μμ΄μΌ νλ€.
ν΄λΌμ΄μΈνΈλ μλ΅μ μΊμ±ν μ μμ΄μΌ ν©λλ€. μλ²λ μλ΅μ μΊμ μ μ΄ ν€λλ₯Ό μΆκ°νμ¬ μΊμ± λμμ μ‘°μ ν μ μμ΅λλ€.
μΊμ±
μΊμ±μ μμ£Ό μ¬μ©λλ λ°μ΄ν°λ₯Ό 미리 μ μ₯ν΄λκ³ νμν λλ§λ€ λΉ λ₯΄κ² μ¬μ©νλλ‘ νλ κΈ°μ μ
λλ€.
κ³μΈ΅ν (Layered System)
ν΄λΌμ΄μΈνΈλ λμ μλ²μ μ§μ μ°κ²°λμλμ§, μ°κ²°λμλμ§λ₯Ό μ μ μλ€.
RESTλ κ³μΈ΅νλ ꡬ쑰λ₯Ό κ°μ§λλ€. μλ²λ λ€μν κ³μΈ΅μΌλ‘ λλμ΄ μμΌλ©°, ν΄λΌμ΄μΈνΈλ μλ²μ μ§μ ν΅μ νμ§λ§, μ€μ μλ²κ° μ²λ¦¬λλ μμΉλ₯Ό μ νμκ° μμ΅λλ€.
Code on Demand
μλ²κ° ν΄λΌμ΄μΈνΈκ° μ€νμν¬ μ μλ λ‘μ§μ μ μ‘νμ¬ κΈ°λ₯μ νμ₯μν¬ μ μλ€.
"Code on Demand"λ 리μμ€κ° μλ²μμ ν΄λΌμ΄μΈνΈλ‘ 보λ΄μ§λ λμμ ν΄λΌμ΄μΈνΈμκ² μ€ν κ°λ₯ν μ½λλ₯Ό μ μ‘νμ¬, ν΄λΌμ΄μΈνΈκ° μ€νν μ μλ κΈ°λ₯μ νμ₯νλ μμΉμ κ°λ¦¬ν΅λλ€. ν΄λΌμ΄μΈνΈλ μ΄ μ½λλ₯Ό μ€νν μ μμ΄μΌ νλ©°, μΌλ°μ μΌλ‘ JavaScriptκ° κ°μ₯ μΌλ°μ μΈ μ¬μ© μ¬λ‘μ
λλ€.
ν΄λΌμ΄μΈνΈ/μλ² κ΅¬μ‘° (Client/Server Architecture)
ν΄λΌμ΄μΈνΈ-μλ²μ κ° ννΈκ° λ
립μ μΌλ‘ κ°μ λ μ μλλ‘ ν΄μ€λ€.
RESTλ ν΄λΌμ΄μΈνΈμ μλ²κ° λΆλ¦¬λμ΄μΌ νλ€λ μμΉμ
λλ€. μλ²λ λ°μ΄ν° μ μ₯, κ΄λ¦¬, λ°±μλ λ‘μ§μ μ²λ¦¬νκ³ , ν΄λΌμ΄μΈνΈλ μ¬μ©μ μΈν°νμ΄μ€λ₯Ό μ 곡νκ³ μ¬μ©μ μμ²μ μλ²λ‘ μ μ‘ν©λλ€.
REST μν€ν μ²μ URL λͺ λͺ κ·μΉ
λͺ μ¬ μ¬μ©
: URLμ 리μμ€λ₯Ό λνλ΄λ©°, 리μμ€μ λν λμμ HTTP λ©μλλ₯Ό ν΅ν΄ μνλλ―λ‘, λͺ
μ¬λ₯Ό μ¬μ©νμ¬ λ¦¬μμ€λ₯Ό λνλ΄λ κ²μ΄ μ’μ΅λλ€.
볡μν μ¬μ©
: 리μμ€λ₯Ό λνλΌ λ 볡μνμ μ¬μ©νλ κ²μ΄ μ’μ΅λλ€. μλ₯Ό λ€μ΄, /users, /postsμ κ°μ΄ 리μμ€ λ³΅μνμ μ¬μ©ν©λλ€.
νμ 리μμ€λ₯Ό μν μ€μ²© URL μ¬μ©
: κ΄κ³κ° μλ 리μμ€μ κ²½μ°, μ€μ²© URL ꡬ쑰 (/super/sub) λ₯Ό μ¬μ©νμ¬ κ΄κ³λ₯Ό λͺ
νν ν©λλ€.
νμ΄ν(-) λμ μΈλμ€μ½μ΄(_) μ¬μ©
: κ°λ
μ±μ λμ΄κ³ μλ³μ μ½κ² νκΈ° μν΄ μΈλ μ€μ½μ΄(_)λ₯Ό μ¬μ©νλ κ²μ΄ μ’μ΅λλ€.
(λ¨, 리μμ€ μ΄λ¦μ λμ΄μ°κΈ°λ νμ΄ν(-) μ¬μ©)
λ¨μνκ³ μ§κ΄μ μΈ URL
: URLμ 리μμ€λ₯Ό μλ³νλ λ° μ¬μ©λλ©°, μ΄κ²μ μ§κ΄μ μ΄κ³ λͺ
νν΄μΌ ν©λλ€. νλμ 리μμ€μ νλμ URL μ λμνλ κ²μ΄ μ’μΌλ©° νμΌ νμ₯μ (.html, .jsp λ±)λ₯Ό μ¬μ©νμ§ μμ΅λλ€.
μ€νλ§λΆνΈλ‘ RESTful API ꡬννκΈ°
1.
@RestController ν΄λμ€ μ μ
2.
GET, POST, PUT, DELETE 컨νΈλ‘€λ¬ λ©μλ μ μ
@RestController ν΄λμ€ μ μ
/**
* π’ RestFul
* κ²μν 컨νΈλ‘€λ¬
* - κ²μκΈ λͺ©λ‘ - [GET] - /boards
* - κ²μκΈ μ‘°ν - [GET] - /boards/10
* - κ²μκΈ λ±λ‘ μ²λ¦¬ - [POST] - /boards
* - κ²μκΈ μμ μ²λ¦¬ - [PUT] - /boards
* - κ²μκΈ μμ μ²λ¦¬ - [DELETE] - /boards/10
*/
@Slf4j
@RestController
@RequestMapping("/boards")
public class RestBoardController {
}
Java
볡μ¬
GET, POST, PUT, DELETE 컨νΈλ‘€λ¬ λ©μλ μ μ
β’
κ²μκΈ λͺ©λ‘ - [GET] - /boards
β’
κ²μκΈ μ‘°ν - [GET] - /boards/10
β’
κ²μκΈ λ±λ‘ μ²λ¦¬ - [POST] - /boards
β’
κ²μκΈ μμ μ²λ¦¬ - [PUT] - /boards
β’
κ²μκΈ μμ μ²λ¦¬ - [DELETE] - /boards/10
κ²μκΈ λͺ©λ‘ - [GET] - /boards
/**
* κ²μκΈ λͺ©λ‘
* [GET]
* /boards
* response : boardList
* @return
*/
@GetMapping()
public ResponseEntity<?> findAll() {
log.info("[GET] - /board");
try {
List<Board> boardList = boardService.list();
return new ResponseEntity<>(boardList, HttpStatus.OK);
} catch (Exception e) {
return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
}
}
Java
볡μ¬
κ²μκΈ μ‘°ν - [GET] - /boards/10
/**
* κ²μκΈ μ‘°ν
* [GET]
* /boards/{no}
* request : id
* response : board
* @param id - κ²μκΈ λ²νΈ
* @return
*/
@GetMapping("/{no}")
public ResponseEntity<?> find(@PathVariable("no") Integer no) {
log.info("[GET] - /board/" + no);
try {
Board board = boardService.select(no);
return new ResponseEntity<>(board, HttpStatus.OK);
} catch (Exception e) {
return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
}
}
Java
볡μ¬
κ²μκΈ λ±λ‘ μ²λ¦¬ - [POST] - /board
/**
* κ²μκΈ λ±λ‘
* [POST]
* /boards
* request : boards
* response : β, β
* @param board
* @return
*/
@PostMapping()
public ResponseEntity<?> create(@RequestBody Board board) {
log.info("[POST] - /boards");
try {
int result = boardService.insert(board);
if( result == 0 )
return ResponseEntity.badRequest().build();
return new ResponseEntity<>("CREATED", HttpStatus.CREATED);
} catch (Exception e) {
return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
}
}
Java
볡μ¬
κ²μκΈ μμ μ²λ¦¬ - [PUT] - /boards
/**
* κ²μκΈ μμ
* [PUT]
* /boards
* request : boards
* response : β, β
* @param board
* @return
*/
@PutMapping()
public ResponseEntity<?> update(@RequestBody Board board) {
log.info("[PUT] - /board");
try {
int result = boardService.update(board);
if( result == 0 )
return ResponseEntity.badRequest().build();
return new ResponseEntity<>("UPDATED", HttpStatus.OK);
} catch (Exception e) {
return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
}
}
Java
볡μ¬
κ²μκΈ μμ μ²λ¦¬ - [DELETE] - /boards/10
/**
* κ²μκΈ μμ
* [DELETE]
* /boards/{no}
* request : no
* response : β, β
* @param id
* @return
*/
@DeleteMapping("/{no}")
public ResponseEntity<?> delete(@PathVariable("no") Integer no) {
log.info("[DELETE] - /boards/" + no);
try {
int result = boardService.delete(no);
if( result == 0 )
return ResponseEntity.badRequest().build();
return ResponseEntity.ok().build();
} catch (Exception e) {
return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
}
}
Java
볡μ¬