728x90
REST
- ์์์ ์ด๋ฆ์ผ๋ก ๊ตฌ๋ถํ์ฌ ํด๋น ์์์ ์ํ ๋ฐ ์ ๋ณด๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ๋ชจ๋ ๊ฒ์ ์๋ฏธ
- ์น์ ๊ธฐ์กด ๊ธฐ์ ๊ณผ HTTP ํ๋กํ ์ฝ์ ํ์ฉํ๊ธฐ ๋๋ฌธ์ ์น์ ์ฅ์ ์ ์ต๋ํ ํ์ฉํ ์ ์๋ ์ํคํ ์ฒ ์คํ์ผ
- ๋คํธ์ํฌ ์์์ Client์ Server ์ฌ์ด์ ํต์ ๋ฐฉ์
- HTTP URI๋ฅผ ํตํด ์์์ ๋ช ์ํ๊ณ , HTTP Method(GET, POST, PUT, DELETE)๋ฅผ ํตํด ํด๋น ์์์ ๋ํ CRUD๋ฅผ ์ ์ฉํ๋ ๊ฒ
REST ๊ตฌ์ฑ ์์
- ์์(Resource)
- URI๋ก ํ์
- ๋ชจ๋ ์์์ ๋ํ ๊ณ ์ ID(URI)๊ฐ ์กด์ฌํ๊ณ , ์ด ์์์ Server์ ์กด์ฌ
- Client๋ URI๋ฅผ ์ด์ฉํด์ ์์์ ์ง์ ํ๊ณ ํด๋น ์์์ ์ํ(์ ๋ณด)์ ๋ํ ์กฐ์์ Server์ ์์ฒญ
- ํ์(Verb)
- HTTP ํ๋กํ ์ฝ์ Method ์ฌ์ฉ
- ํํ(Representation of Resource)
- Client๊ฐ ์์์ ์ํ(์ ๋ณด)์ ๋ํ ์กฐ์์ ์์ฒญํ๋ฉด Server๋ ์ด์ ์ ์ ํ ์๋ต(Representation)์ ๋ณด๋
- REST์์ ํ๋์ ์์์ JSON, XML, TEXT, RSS ๋ฑ ์ฌ๋ฌ ํํ์ Representation์ผ๋ก ๋ํ๋ด์ด ์ง ์ ์์
- JSON์ด๋ XML๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ๊ฒ์ด ์ผ๋ฐ์
REST ํน์ง
- Server-Client(์๋ฒ-ํด๋ผ์ด์ธํธ ๊ตฌ์กฐ)
- ์์์ ๊ฐ์ง๊ณ ์๋ ์ชฝ์ Server, ์์์ ์์ฒญํ๋ ์ชฝ์ Client
- ์๋ฒ์ ํด๋ผ์ด์ธํธ ์๋ก ๊ฐ์ ์์กด์ฑ ๋ฎ์
- Stateless(๋ฌด์ํ)
- HTTP ํ๋กํ ์ฝ์ Stateless ์์ฑ์ ๊ทธ๋๋ก ๊ฐ์ง๊ณ ์์
- Client์ context ์ ๋ณด(์ฟ ํค, ์ธ์ ๋ฑ)๋ฅผ Server์ ์ ์ฅํ์ง ์์ ๊ตฌํ ๋จ์
- Server๋ ๊ฐ๊ฐ์ ์์ฒญ์ ๋ณ๊ฐ๋ก ์ธ์ํ๊ณ ๊ฐ๊ฐ ์ฒ๋ฆฌ -> ์ฒ๋ฆฌ ๋ฐฉ์์ ์ผ๊ด์ฑ ๋ถ์ฌ, ์๋น์ค ์์ ๋ ํฅ์
- Cacheable(์บ์ ์ฒ๋ฆฌ ๊ฐ๋ฅ)
- HTTP ํ๋กํ ์ฝ์ ์บ์ฑ ๊ธฐ๋ฅ ํ์ฉ ๊ฐ๋ฅ
- ๋์ฉ๋ ์์ฒญ์ ํจ์จ์ ์ฒ๋ฆฌ ๊ฐ๋ฅ
- ์บ์ ์ฌ์ฉ์ ํตํด ์๋ฒ์ ํธ๋์ญ์ ์ด ๋ฐ์ํ์ง ์๊ธฐ ๋๋ฌธ์ ์ ์ฒด ์๋ต์๊ฐ, ์ฑ๋ฅ, ์๋ฒ์ ์์ ์ด์ฉ๋ฅ ํฅ์
- Layered System(๊ณ์ธตํ)
- Client๋ REST API Server๋ง์ ํธ์ถ
- REST Server๋ ๋ค์ค ๊ณ์ธต์ผ๋ก ๊ตฌ์ฑ ๊ฐ๋ฅ
- ์์ ๋น์ฆ๋์ค ๋ก์ง์ ์ฒ๋ฆฌํ๋ API ์๋ฒ ์์ ๋ณด์, ๋ก๋๋ฐธ๋ฐ์ฑ, ์ํธํ, ์ฌ์ฉ์ ์ธ์ฆ ๋ฑ์ ์๋ฒ ๊ณ์ธต์ ์ถ๊ฐํ์ฌ ๊ตฌ์กฐ์์ ์ ์ฐ์ฑ ์ ๊ณต ๊ฐ๋ฅ
- ํ๋ก์, ๊ฒ์ดํธ์จ์ด์ ๊ฐ์ ๋คํธ์ํฌ ๊ธฐ๋ฐ์ ์ค๊ฐ ๋งค์ฒด ํ์ฉ ๊ฐ๋ฅ
- Code-On-Demand(optional)
- Server๋ก๋ถํฐ ์ ๊ณต๋ฐ์ ๋ฆฌ์์ค ์ฒ๋ฆฌ์ ๋ํ ์ฝ๋๋ฅผ Client์์ ์คํ
- ๋ฐ๋์ ์ถฉ์กฑํ ํ์ X
- Uniform Interface(์ธํฐํ์ด์ค ์ผ๊ด์ฑ)
- URI๋ก ์ง์ ํ ์์์ ๋ํ ์กฐ์์ ํต์ผ๋๊ณ ํ์ ์ ์ธ ์ธํฐํ์ด์ค๋ก ์ํ
- HTTP ํ์ค ํ๋กํ ์ฝ์ ๋ฐ๋ฅด๋ ๋ชจ๋ ํ๋ซํผ์์ ์ฌ์ฉ ๊ฐ๋ฅ
REST ์ฅ๋จ์
- ์ฅ์
- HTTP ํ๋กํ ์ฝ์ ์ธํ๋ผ๋ฅผ ๊ทธ๋๋ก ์ฌ์ฉํ๋ฏ๋ก REST API ์ฌ์ฉ์ ์ํ ๋ณ๋์ ์ธํ๋ผ๋ฅผ ๊ตฌ์ถํ ํ์ X
- HTTP ํ์ค ํ๋กํ ์ฝ์ ๋ฐ๋ฅด๋ ๋ชจ๋ ํ๋ซํผ์์ ์ฌ์ฉ ๊ฐ๋ฅ
- URI ์์ ๋ช ์๋ฅผ ํตํด REST API ๋ฉ์์ง๊ฐ ์๋ํ๋ ๋ฐ๋ฅผ ๋ช ํํ๊ฒ ๋ํ๋ด๋ฏ๋ก ์๋ํ๋ ๋ฐ๋ฅผ ์ฝ๊ฒ ํ์ ๊ฐ๋ฅ
- ์๋ฒ์ ํด๋ผ์ด์ธํธ์ ์ญํ ์ด ๋ช ํํ ๋ถ๋ฆฌ
- ๊ฐ์ข ๋ธ๋ผ์ฐ์ , ๋ชจ๋ฐ์ผ ๋๋ฐ์ด์ค ๋ฑ ๋ค์ํ ํด๋ผ์ด์ธํธ ๋ฐ ๋ฉํฐ ํ๋ซํผ์ ๋ํ ์๋น์ค ์ง์ ์ฉ์ด
- ๋จ์
- ํ์ค ์กด์ฌ X
- ์ฌ์ฉํ ์ ์๋ ๋ฉ์๋๊ฐ ํํ๊ฐ ์ ํ์ (only HTTP Method)
- ๊ตฌํ ๋ธ๋ผ์ฐ์ ์ ๊ฒฝ์ฐ ์ง์ํ์ง ์๋ ๋ถ๋ถ์ด ์กด์ฌ
<์ฐธ๊ณ > REST vs GraphQL
- REST
- HTTP URI๋ฅผ ํตํด ์์์ ๋ช ์ํ๊ณ HTTP Method๋ฅผ ํตํด ์์์ ๋ํ CRUD๋ฅผ ์ ์ฉ
- ์๋ฒ์ ํด๋ผ์ด์ธํธ์ ์ญํ ์ด ๋ช ํํ ๋ถ๋ฆฌ๋๋ฉฐ RestAPI์ ๋ฉ์์ง๊ฐ ์๋ํ๋ ๋ฐ๋ฅผ ์ฝ๊ฒ ํ์ ๊ฐ๋ฅ
- ์ฌ๋ฌ ์๋ํฌ์ธํธ๋ฅผ ๊ฐ์ง๋ฉฐ ์๋ํฌ์ธํธ์ ๋ฐ๋ผ ์ ํด์ง ์๋ต๋ง์ ๋ฐ์์ฌ ์ ์์
- GraphQL
- ํด๋ผ์ด์ธํธ๊ฐ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ์ป๋๋ก ํ๋ ์ผ์ข ์ ์ฟผ๋ฆฌ ์ธ์ด
- ๋ฐฑ์๋๊ฐ ์ ํด๋๋ ํ์ด ์์ด ์ ์ฐํจ
- ํ๋์ ์๋ํฌ์ธํธ๋ฅผ ๊ฐ์ง๋ฉฐ ์์ฒญํ ๋ ์ฌ์ฉํ๋ ์ฟผ๋ฆฌ์ ๋ฐ๋ผ ๋ค๋ฅธ ์๋ต(์ํ๋ ๋ฐ์ดํฐ๋ง)์ ๋ฐ์ ์ ์์
REST API
- REST๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์๋น์ค API๋ฅผ ๊ตฌํํ ๊ฒ
- REST ๊ธฐ๋ฐ์ผ๋ก ์์คํ ์ ๋ถ์ฐํด ํ์ฅ์ฑ๊ณผ ์ฌ์ฌ์ฉ์ฑ์ ๋์ฌ ์ ์ง๋ณด์ ๋ฐ ์ด์ฉ์ ํธ๋ฆฌํ๊ฒ ํ ์ ์์
- REST๋ HTTP ํ์ค์ ๊ธฐ๋ฐ์ผ๋ก ๊ตฌํํ๋ฏ๋ก, HTTP๋ฅผ ์ง์ํ๋ ํ๋ก๊ทธ๋จ ์ธ์ด๋ก ํด๋ผ์ด์ธํธ์ ์๋ฒ๋ฅผ ๊ตฌํํ ์ ์์
REST API ์ค๊ณ ์์น
- ๋ํ๋จผํธ : ๊ฐ์ฒด ์ธ์คํด์ค๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ ์ฝ๋์ ์ ์ฌํ ๊ฐ๋
- ์ปฌ๋ ์ : ์๋ฒ์์ ๊ด๋ฆฌํ๋ ๋๋ ํฐ๋ฆฌ๋ผ๋ ๋ฆฌ์์ค
- ์คํ ์ด: ํด๋ผ์ด์ธํธ์์ ๊ด๋ฆฌํ๋ ๋ฆฌ์์ค ์ ์ฅ์
- URI์์ ์์์ ๋์ฌ๋ณด๋ค๋ ๋ช ์ฌ๋ฅผ, ๋๋ฌธ์๋ณด๋ค๋ ์๋ฌธ์ ์ฌ์ฉ
- URI์์ ์์์ ๋ํ๋จผํธ ์ด๋ฆ์ ๋จ์ ๋ช ์ฌ ์ฌ์ฉ
- URI์์ ์์์ ์ปฌ๋ ์ ์ด๋ฆ์ ๋ณต์ ๋ช ์ฌ ์ฌ์ฉ
- URI์์ ์์์ ์คํ ์ด ์ด๋ฆ์ ๋ณต์ ๋ช ์ฌ ์ฌ์ฉ
- URI์ HTTP Method ์ด๋ฆ ๋ช
์ X
- ex) delete, post, get
- URI์ ํ์์ ๋ํ ๋์ฌ ํํ(๊ธฐ๋ฅ ํํ) ๋ช
์ X
- ex) show, insert
- ๊ฒฝ๋ก ๋ถ๋ถ ์ค ๋ณํ๋ ๋ถ๋ถ์ ์ ์ผํ ๊ฐ์ผ๋ก ๋์ฒด (๊ณ ์ ID๋ฅผ ํ์ฉํด ์์ ํน์ )
- ex) students/12
- ์ฌ๋์ ๊ตฌ๋ถ์(/)๋ ๊ณ์ธต ๊ด๊ณ๋ฅผ ๋ํ๋ด๋๋ฐ์ ์ฌ์ฉ
- URI ๋ง์ง๋ง ๋ฌธ์๋ฅผ ์ฌ๋์(/) ํฌํจ X
- ํ์ดํ(-)์ URI์ ๊ฐ๋ ์ฑ์ ๋์ด๊ธฐ ์ํด ์ฌ์ฉ ๊ฐ๋ฅ
- ์ธ๋๋ฐ(_)๋ ์ฌ์ฉ X
- URI์ ํ์ผ ํ์ฅ์(.jpg ๋ฑ) ํฌํจ X
- ๋ฆฌ์์ค ๊ฐ ์ฐ๊ด ๊ด๊ณ๊ฐ ์๋ ๊ฒฝ์ฐ: /๋ฆฌ์์ค๋ช
/๋ฆฌ์์ค ID/์ฐ๊ด ์๋ ๋ค๋ฅธ ๋ฆฌ์์ค ๋ช
- ex) /users/{userid}/devices (์ผ๋ฐ์ ์ผ๋ก ์์ ‘has’์ ๊ด๊ณ๋ฅผ ํํํ ๋)
RESTful
- "RESTful ํ๋ค": REST API๋ฅผ ์ ๊ณตํ๋ ์น ์๋น์ค
- "RESTful ํ์ง ์๋ค": CRUD ๊ธฐ๋ฅ์ ๋ชจ๋ POST๋ก ์ฒ๋ฆฌํ๊ฑฐ๋ REST API ์ค๊ณ ์์น์ ๋ฐ๋ฅด์ง ์์ ๊ฒฝ์ฐ
- REST๋ฅผ REST๋ต๊ฒ ์ฐ๊ธฐ ์ํ ๋ฐฉ๋ฒ (REST ์๋ฆฌ๋ฅผ ๋ฐ๋ฅด๋ ์์คํ )
728x90
'Computer Science > ๐ก Network' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋คํธ์ํฌ] TCP/IP ํ๋ฆ์ ์ด์ ํผ์ก์ ์ด (0) | 2023.02.06 |
---|---|
[๋คํธ์ํฌ] HTTP ์ํ/์๋ต ์ฝ๋ ์ ๋ฆฌ (0) | 2023.02.02 |
[๋คํธ์ํฌ] ์ฟ ํค(Cookie)์ ์ธ์ (Session) ํน์ง, ์ฐจ์ด (0) | 2022.04.02 |
[๋คํธ์ํฌ] GET ๋ฉ์๋์ POST ๋ฉ์๋ ํน์ง, ์ฐจ์ด (0) | 2022.03.31 |
[๋คํธ์ํฌ] HTTP์ HTTPS ํ๋กํ ์ฝ (0) | 2022.02.09 |