์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- testing
- fibonacci
- Spring Data JDBC
- HTML
- spring data jpa
- ์คํ๋ง
- CLI๋ช ๋ น์ด
- ์๋ฃ๊ตฌ์กฐ
- ๊ฑฐ๋ญ์ ๊ณฑ
- ์ ๋ค๋ฆญ์ค
- FilterChain
- ๋ฌธ์์ด๋ค์ง๊ธฐ
- CSS
- ๊ณ์ฐ๊ธฐ๋ง๋ค๊ธฐ
- ์ปฌ๋ ์ ํ๋ ์์ํฌ
- ํ๊ณ
- ๊นํ๋ธ
- ๋ฐฑ์๋
- ๋ถํธ์บ ํ
- ์ฒซ๊ธ์๋๋ฌธ์
- ์๋ฐ
- ๋ฐฑ์ค์๊ณ ๋ฆฌ์ฆ
- ์ธํ ๋ฆฌ์ ์ด
- Spring Security
- ๊ทธ๋ฆฌ๋
- ํ์ดํ๋ก๊ทธ๋๋ฐ
- java
- Publishing
- ๋ฐ์ผ๋ฆฌ์ฝ๋ฉ
- ์๊ณ ๋ฆฌ์ฆ
- Today
- Total
๋์ ๋ชจ์
030 | REST API ๋ณธ๋ฌธ
๐API & REST
๐ค API(Application Programming Interface)
- ํน์ ์๋น์ค๋ฅผ ์ ๊ณตํ๊ธฐ ์ํ ํ๋ก๊ทธ๋๋ฐ ์ธํธ๋ก ์ฌ์ฉํ ์ ์๋ ํ๋ก๊ทธ๋๋ฐ ์ธํฐํ์ด์ค ๋ชฉ๋ก์ ํธ์ถํด์ ์ฌ์ฉ
- ์น ์ฑ์ ๊ตฌํํ๋๋ฐ ๋ค์ด๋ฒ ๋ก๊ทธ์ธ์ ํด์ผ๋๋ ์ํฉ์ด๋ผ๊ณ ํ์ ๋, ๋ค์ด๋ฒ์์ ์ ๊ณตํ๋ OpenAPI๋ฅผ ํตํด ๋ค์ด๋ฒ์ ๋ก๊ทธ์ธ ๊ธฐ๋ฅ์ ํธ์ถํ์ฌ ์ฐ๋ํ ์ ์์
๐ค REST(Representational State Transfer)
- REST๋ ์๋ ์์ด๋ ์น๊ณผ ๊ฐ์ ๋ถ์ฐ ํ์ดํผ๋ฏธ๋์ด ์์คํ ์ ์ํ ์ํํธ์จ์ด ์ํคํ ์ฒ์ ํ ํ์์ผ๋ก, ์์์ ์ด๋ฆ(์์์ ํํ)์ผ๋ก ๊ตฌ๋ถํ์ฌ ํด๋น ์์์ ์ํ(์ ๋ณด)๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ๋ชจ๋ ๊ฒ์ ์๋ฏธํจ
- ์ฝ๊ฒ ๋งํด API๋ฅผ ๊ตฌ์ถํ ๋ URI์ HTTP Method๋ฅผ ํ์ฉํ์ฌ API์ ๊ธฐ๋ฅ์ ์ถ์ธก ๊ฐ๋ฅํ๊ฒ๋ ์ํคํ ์ณ๋ฅผ ๊ตฌ์ฑํ๋ ์์น๊ฐ์ ๊ฒ์ด๋ค. REST ์์น์ ์ ๋ฐ๋ฅธ API๋ง์ด RESTful API๋ผ๋ ์๊ด์ ์ป์ ์ ์๋ ๊ฒ์ด๋ค. ์ ์ด API๋ RESTfulํ๊ตฌ๋~ ํ๋ ๊ฒ์ด๋ ์๊ธฐ๋ค.
๐ค REST ๊ตฌ์ฑ
- ์์ (Resource) - URI
๋ชจ๋ ๋ฆฌ์์ค๋ ๊ณ ์ ํ ์ฃผ์๊ฐ ์กด์ฌํ๊ณ , ์๋ฒ์ ์กด์ฌํจ. URI๋ฅผ ํตํด ๋ฆฌ์์ค๋ฅผ ๊ตฌ๋ถํ๊ณ ํธ์ถ - ํ์ (Verb) - HTTP Method
CRUD์ ๋ง์ถฐ HTTP Method ์ค์ - ํํ (Representation of Resource)
๋ธ๋ผ์ฐ์ ์ ์น ์๋ฒ๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ํํ (ex. JSON, XML, TEXT, RSS, ...)
๐ค REST Architectural Constraints
RESTful ์ํคํ ์ฒ์๋ 6๊ฐ์ง ์ค๊ณ ์์น์ ๋ก์ด ํ๋ฉ์ด 2000๋ ๋ ผ๋ฌธ์์ ๊ธฐ์ ํ๋ค๊ณ ํ๋ค.
1. ์๋ฒ-ํด๋ผ์ด์ธํธ ๊ตฌ์กฐ (Server-Client)
- REST ์ํคํ ์ฒ์ ๊ธฐ์ด
- ์ผ๋ฐ์ ์ธ ์๋ฒ์ ํด๋ผ์ด์ธํธ ๊ตฌ์กฐ๋ฅผ ๋๋ฉฐ, ์ผ์ ํ ์ธํฐํ์ด์ค๋ฅผ ํตํด ์ฐ๊ฒฐ๋จ
2. ๋ฌด์ํ (Stateless)
- HTTP ํ๋กํ ์ฝ์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ HTTP์ ํน์ง์ธ ๋ฌด์ํ์ฑ์ ๊ฐ์ง
- ์๋ฒ ์ํ์ ๊ด๋ฆฌ๊ฐ ์์์ ์ธ์งํ๊ณ ์์ด์ผ ํจ
- ๊ฐ ํด๋ผ์ด์ธํธ ์์ฒญ์ ์ด์ ์ ํด๋ผ์ด์ธํธ๊ฐ ์์ฒญํ ๋ชจ๋ ์์ฒญ๊ณผ ๋ฌด๊ดํ๋ฉฐ, ํด๋ผ์ด์ธํธ๊ฐ ๋ณด๋ธ ์์ฒญ์๋ ํด๋น ์์ฒญ์ ์ฒ๋ฆฌํ๊ธฐ ์ํด ์๋ฒ๊ฐ ํ์๋ก ํ๋ ๋ชจ๋ ์ ๋ณด๊ฐ ์์ด์ผ ํจ
3. ์บ์ ์ฒ๋ฆฌ ๊ฐ๋ฅ (Cacheable / Cashing)
- HTTP ํ๋กํ ์ฝ์์ ์ฌ์ฉํ๋ Last-Modified Tag ๋๋ E-Tag๋ฅผ ์ด์ฉํด ์บ์ฑ์ ์ง์
- Stateless์ ๋ถ์ ์ ์ธ ์ํฅ ์ค ์ผ๋ถ๋ ์บ์ฑ์ผ๋ก ์กฐ์ ๊ฐ๋ฅ
- ์บ์๋ฅผ ์ํ REST ์ํคํ ์ฒ ์ ์ฝ ์กฐ๊ฑด ์๋ฒ๊ฐ ์๋ต์ ์บ์ ๊ฐ๋ฅ ๋๋ ์บ์ ๋ถ๊ฐ๋ฅ์ผ๋ก ํ์ํด์ผ๋๋ฉฐ, ์บ์๋ HTTP ํค๋๋ฅผ ํตํด ์๋ฒ์ ์ํด ์ ์ด๋จ
4. ๊ณ์ธตํ (Layered System)
- REST API ์ํคํ ์ฒ๊ฐ ์ฌ๋ฌ ๊ณ์ธต์ผ๋ก ๊ตฌ์ฑ๋์ด์ผ ํจ
- ์ํคํ ์ฒ ๋ด ๊ฐ ๊ณ์ธต์ ๋ค๋ฅธ ๊ณ์ธต๊ณผ ๋ ๋ฆฝ์ ์ผ๋ก ๋ณ๊ฒฝ๋ ์ ์์
- ํด๋ผ์ด์ธํธ, ์๋ฒ๋ก๋ง ๊ตฌ์ฑํ ์ ๋ ์๊ณ ์ค๊ฐ์ Gateway๋ ํ๋ก์ ์๋ฒ์ ๊ฐ์ ๋ฏธ๋ค ์จ์ด๋ฅผ ๋ฐฐ์นํด ๊ณ์ธตํํ ์ ์์
5. ์ธํฐํ์ด์ค ์ผ๊ด์ฑ (Uniform Interface)
- URI๋ก ์ง์ ํ ๋ฆฌ์์ค์ ๋ํ ์์ฒญ์ ํต์ผ๋๊ณ , ํ์ ์ ์ผ๋ก ์ํํ๋ ์ํคํ ์ฒ ์คํ์ผ์ ์๋ฏธํ๋ค.
- ํด๋ผ์ด์ธํธ์ ์๋ฒ๊ฐ ๊ณตํต์ผ๋ก ๊ธฐ์ ์ ์ธ ์ธํฐํ์ด์ค๋ฅผ ๊ฐ๊ณ ์๋ ๊ฒ
- ์ฌ๊ธฐ์ ์ธํฐํ์ด์ค๋ ํด๋ผ์ด์ธํธ์ ์๋ฒ ๊ฐ ํต์ ์ ์ํ ์ฝ์์ด๊ณ , ์ด ์ฝ์์ HTTP ๋ฉ์๋์ ๋ฏธ๋์ด ์ ํ์ ์ฌ์ฉํ์ฌ ์ ์๋๊ณ , ์ด๊ฒ์ ์ฅ์ ์ ์ํคํ ์ฒ๋ฅผ ๋ถ๋ฆฌํ๋ค.
- ๊ท ์ผํ ์ธํฐํ์ด์ค์ ์ ์ฝ ์กฐ๊ฑด 4๊ฐ์ง
- ๋ฆฌ์์ค IDIdentity of the resource(URI/URL)
- ์์์ ํํ(Representation of the resource)
- ์์ฒด ์ค๋ช ๋ฉ์์ง(Self descriptive messages — metadata)
- ํ์ดํผ๋ฏธ๋์ด(Hypermedia
6. ์์ฒด ํํ (Self-Descriptiveness)
- URI๋ง ๋ถ์ํด๋ ๋ฌด์จ ๊ธฐ๋ฅ์ธ์ง ์ ์ถ๊ฐ ๋๋ค๋ ํน์ฑ์ด๋ค.
โ Ref.
๐ค REST API
- REST ์์น ๊ธฐ๋ฐ ๊ตฌํ API
- ์น(http)์ ์ฅ์ ์ ์ต๋ํ ํ์ฉํ ์ ์๋ ์ํคํ ์ฒ
- ์น์์ ์ฌ์ฉ๋๋ ๋ฐ์ดํฐ๋ ์์์ HTTP URI๋ก ํํํ๊ณ , HTTP ํ๋กํ ์ฝ์ ํตํด ์์ฒญ๊ณผ ์๋ต์ ์ ์ํ๋ ๋ฐฉ์
๐ Richardson Maturity Model (RMM)
Leonard Richardson์ด 100๊ฐ์ ๋ค๋ฅธ ์น ์๋น์ค ๋์์ธ์ ๋ถ์ํ๊ณ ์ด๋ฌํ ๋์์ธ์ 4๊ฐ์ ๋ฒ์ฃผ๋ก ๋๋ด๋ค. ์ด ๋ฒ์ฃผ๋ ์น ์๋น์ค๊ฐ ์ผ๋ง๋ REST๋ฅผ ๋ฐ๋ฅด๋์ง๋ฅผ ๊ธฐ์ด๋ก ํ๋๋ฐ, ์ด REST ์๋น์ค ๋ถํ ๋ชจ๋ธ์ RMM(Richardson Maturity Model)์ด๋ผ๊ณ ํ๋ค.
Richardson์ ์๋น์ค์ ์ฑ์๋๋ฅผ ๊ฒฐ์ ํ๊ธฐ ์ํด ์ธ ๊ฐ์ง ์ฃผ์ ์์(⇒ URI, HTTP ๋ฉ์๋, HATEOAS(ํ์ดํผ๋ฏธ๋์ด))๋ฅผ ์ฌ์ฉํ๋ค. ์๋น์ค๊ฐ ์ด ์์๋ฅผ ๋ ๋ง์ด ์ฌ์ฉํ ์๋ก ๋ ์ฑ์ํด์ง๋ ๊ฒ์ผ๋ก ๊ฐ์ฃผํ๋ค.
REST ์ฑ์๋ ๋ชจ๋ธ - 0๋จ๊ณ
- 0๋จ๊ณ์์๋ ๋จ์ํ HTTP ํ๋กํ ์ฝ์ ์ฌ์ฉํ๊ธฐ๋ง ํ๋ฉด ๋จ
- ์ด๋ฐ ๊ฒฝ์ฐ์๋ ํด๋น API๋ฅผ REST API๋ผ๊ณ ํ ์๋ ์์ผ๋ฉฐ, 0๋จ๊ณ๋ ์ข์ REST API๋ฅผ ์์ฑํ๊ธฐ ์ํ ๊ธฐ๋ณธ ๋จ๊ณ
- HTTP or RPC(Remote Procedure Call) ์ฌ์ฉ
- ๋จ์ผ URI๋ฅผ ๊ฐ์ง๋ฉฐ, ๋จ์ผ HTTP ๋ฉ์๋(์ผ๋ฐ์ ์ผ๋ก POST) ์ฌ์ฉ
REST ์ฑ์๋ ๋ชจ๋ธ -1๋จ๊ณ
- URI ์ฌ์ฉ / HTTP, HATEOAS ์ฌ์ฉ ์ํจ
- ๊ฐ๋ณ ๋ฆฌ์์ค์์ ํต์ ์ ์ค์ํด์ผํ๋ฉฐ, ๋ง์ URI๋ฅผ ์ฌ์ฉํ์ง๋ง ์ผ๋ฐ์ ์ผ๋ก HTTP POST ์ฌ์ฉ
- ์ด ์๋น์ค๋ ์์คํ ์์ ์ฌ์ฉํ ์ ์๋ ๊ฐ ๋ฆฌ์์ค์ ๊ณ ์ ํ URI๋ฅผ ์ ๊ณตํ๋๋ฐ, ๊ณ ์ ํ URI๋ ํ๋์ ๊ณ ์ ํ ๋ฆฌ์์ค๋ฅผ ๋ณ๋๋ก ์๋ณํจ
REST ์ฑ์๋ ๋ชจ๋ธ - 2๋จ๊ณ
- URI, HTTP ์ฌ์ฉ / HATEOAS ์ฌ์ฉ ์ํจ
- ์ผ๋ฐ์ ์ผ๋ก ์๋ง์ URI(์ฃผ์ ์ง์ ๊ฐ๋ฅํ ๋ฆฌ์์ค) ํธ์คํ
- CRUD์ ๋ง๊ฒ ์ ์ ํ HTTP ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ์ค์ ์ ๋
REST ์ฑ์๋ ๋ชจ๋ธ - 3๋จ๊ณ
- Richardson์ ๊ฐ์ฅ ๋ง์ง๋ง ๋ชจ๋ธ
- URI, HTTP, HATEOAS(Hypertext As The Engine Of Application state) ์ธ ๊ฐ์ง ๋ชจ๋ ์ฌ์ฉ
- HATEOAS: API ํด๋ผ์ด์ธํธ์ ์ํธ์์ฉ์ ์ฃผ๋ํ๋ ๋ฆฌ์์ค์ ์๋ต ๋ฉ์์ง์ ํฌํจ๋ ์์
- 3๋จ๊ณ์์ ๊ฐ๋ฐ๋ API๋ ์ผ๋ฐ์ ์ผ๋ก ์์ ํ RESTful API๋ก ๊ฐ์ฃผ๋จ
โ Ref.
'SEB > TIL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
042 | DTO with HTTP Request & Response (0) | 2022.08.22 |
---|---|
031 | RDBMS, SQL, ACID (0) | 2022.08.04 |
029 | ๋คํธ์ํฌ - HTTP (0) | 2022.08.02 |
029 | ๋คํธ์ํฌ - ์น์ ๊ตฌ์ฑํ๋ ๊ธฐ์ (0) | 2022.08.02 |
027 | Permutation & Combination, Greedy Implementation (0) | 2022.07.29 |