
๐ก๊ฐ์
REST๋ Representational State Transfer, API๋ Application Programming Interface์ ์ฝ์ด๋ผ๊ณ ํ๋ค.
์น์ ํตํด ํด๋ผ์ด์ธํธ์ ์๋ฒ ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ ํต์ ๋ฐ ๋ฐ์ดํฐ ๊ตํ์ ๊ฐ๋ฅ์ผ ํ๋ ๋๊ตฌ์ด๋ค.
REST API๋ ์น ์๋น์ค๋ค์ด ์ด๋ป๊ฒ ํต์ ํด์ผ ํ ์ง๋ฅผ ์ ์ํ ์ค๊ณ ๊ท์น์ด๋ค. ์ด๋ฅผ ์ํด ์๋ํฌ์ธํธ, ๋ฆฌ์์ค, HTTP ๋ฉ์๋, ์์ฒญ ๋ฐ ์๋ต ํ์๊ณผ ์ํ ์ฝ๋ ๋ฑ์ ์ ๋ณด๋ค์ ์ด์ฉํ๋ค. ์์์ JSON, XML ๋ฑ์ผ๋ก ํํํ๊ธฐ ๋๋ฌธ์ Representational์ด๋ผ๋ ์์์ด๊ฐ ๋ถ๋๋ค.
API๋ ํ๋ก๊ทธ๋๋จธ๋ค์ด ์๋ก ๋ค๋ฅธ ์ํํธ์จ์ด ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ ์ฐ๊ฒฐํ ๋ ์ฌ์ฉํ๋ ๋๊ตฌ์ด๋ค. ๊ธฐ์กด ํ๋ก๊ทธ๋จ์ ํน์ ๊ธฐ๋ฅ์ด๋ ๋ฐ์ดํฐ๋ฅผ ์ ๊ทผํ ์ ์๋ ๋ฐฉ๋ฒ์ ์ ๊ณตํ์ฌ, ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ์๋น์ค๋ฅผ ๊ฐ๋ฐํ๋๋ฐ ํธ๋ฆฌํจ์ ์ ๊ณตํ๋ค.
REST API๋ ํ์ฅ์ฑ ๋ฐ ์ ์ฐ์ฑ์ ์ง๋ ์น ์๋น์ค๋ฅผ ์ค๊ณํ๊ธฐ ์ํ ๊ท์น๋ค์ ์ ์ํ ์ค๊ณ ๋ฐฉ์(architectural style)์ด๋ค.
RESTful ์น ์๋น์ค๋ HTTP ํ๋กํ ์ฝ ๊ธฐ๋ฐ์ผ๋ก, HTTP ๋ฉ์๋๋ค๋ก ๋ฆฌ์์ค์ ๋ํ CRUD ์ฐ์ฐ๋ค์ ์ํํ๋ค.
๐กREST ํน์ง

REST์ ํต์ฌ์ ๋ค์๊ณผ ๊ฐ๋ค.
1. ๋ฌด์ํ(Stateless): ํด๋ผ์ด์ธํธ-์๋ฒ ํต์ ์ ๋ฌด์ํ์ฌ์ผ ํ๋ค. ์ด๋ ์์ฒญ์ ์ฒ๋ฆฌํ๊ธฐ ์ํด์๋ ์์ฒญ๋ง๋ค ํ์ํ ๋ชจ๋ ์ ๋ณด๊ฐ ๋ด๊ฒจ ์์ด์ผ ํจ์ ์๋ฏธํ๋ค. ๋ํ, ์๋ฒ๋ ์์ฒญ ๊ฐ ์ธ์ ์ ๋ณด๋ฅผ ์ ์งํ์ง ์๋๋ค.
2. Client-Server: ์ด ๋์ ๋ ๋ฆฝ์ ์ผ๋ก ๋์ํ๋ฉฐ, ์ ์ค๊ณ๋ API๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํต์ ํ๋ค.
3. Cacheability: ์๋ฒ์ ์๋ต์ ์บ์ฑ ๊ฐ๋ฅํด์ผ ๋์ผ ์์ฒญ์ ๋ํด์ ์ด์ ์๋ต์ ์ฌํ์ฉํ๊ณ ์ด๋ฅผ ํตํด ์๋ฒ ๋ถํ๋ฅผ ์ค์ธ๋ค.
4. ๊ณ์ธตํ๋ ์์คํ : REST๋ ๊ณ์ธตํ๋ ์์คํ ์ํคํ ์ฒ๋ฅผ ์ง์ํด์ผ ํ๋ค. ์ด๋ ํต์ ์ค๊ฐ ๋งค๊ฐ์ฒด๋ก ํ๋ก์๋ ๊ฒ์ดํธ์จ์ด๋ฅผ ์ถ๊ฐํ์ฌ ์ฑ๋ฅ, ํ์ฅ์ฑ, ๋ณด์์ ๊ฐ์ ํ ์ ์์ด์ผ ํจ์ ์๋ฏธํ๋ค.
5. ์ผ๊ด๋(Uniform) ์ธํฐํ์ด์ค: ๋ชจ๋ ๋ฆฌ์์ค๋ ์ผ๊ด๋ ์ธํฐํ์ด์ค๋ก ์ ๊ทผ ๊ฐ๋ฅํด์ผ ํ๋ฉฐ, URI๋ก ์๋ณ๋ผ์ผ ํ๋ค. HTTP ๋ฉ์๋๋ก ๋ฆฌ์์ค์ ๋ํ CRUD ์ฐ์ฐ์ ์ํํ๊ณ , ์ด์ ๋ํ ์๋ต์ JSON์ด๋ XML ๊ฐ์ ์ผ๊ด๋ ํ์์ ๋ฐ๋ผ์ผ ํ๋ค.
๐กRESTful API๋
API๊ฐ RESTfulํ๋ ค๋ฉด, HTTP ๋ฉ์๋๋ฅผ ์ฉ๋์ ๋ง๊ฒ, URI๋ก ๋ฆฌ์์ค๋ฅผ ๋ช ์ํ๋ฉฐ, ์ฝํ ์ธ ํ์์ ์ง์ํ๊ณ , ์ ์ ํ ์ํ ์ฝ๋๋ฅผ ๋ฐํํด์ผ ํ๋ค.
API๊ฐ RESTFULํ๋ฉด, API๊ฐ ๊ฐ๊ฒฐํด์ง๊ณ , ์ง๊ด์ ์ด๋ฉฐ, ์ ์ง๋ณด์ํ๊ธฐ ์ฌ์์ง๋ค.
๊ฐ๋ฐํ API๋ ๋ฒ์ ๊ณผ ๋ฌด๊ดํ๊ฒ ๋ชจ๋ ์ง์ ๊ฐ๋ฅํด์ผ ํ๋ค. ํด๋ผ์ด์ธํธ๊ฐ ์์ API๋ก ์์ฒญํด๋ ์ ๊ธฐ๋ฅ์ ํด์ผ ํ๋ค. ๋ณดํต, URI ์์ "api/v1/users"์ฒ๋ผ ๋ฒ์ ๋ฒํธ๋ฅผ ๋ฃ์ด์ ๊ตฌ๋ถํ๋ค.
API๋ฅผ ๋ฌธ์ํํด์ผ ๊ฐ๋ฐ์๋ค์ด ์ฌ๋ฐ๋ฅด๊ฒ ์ดํดํ๊ณ ์ธ ์ ์๋ค. API ์๋ํฌ์ธํธ, ํ๋ผ๋ฏธํฐ, ์๋ต ํ์ ๋ฑ์ด ๋ฌธ์ํ๋์ด ์์ด์ผ ํ๋ค. Swagger ๋ฑ์ ์คํ์์ค๋ก ๋ฌธ์ํ๋ฅผ ์๋ํ ํ ์ ์๋ค.
๐กREST API ๋ณด์

REST API๋ ๋ฐ์ดํฐ์ ๋ณด์์ ์ธ ์ธก๋ฉด๋ ๊ณ ๋ คํด์ผ ํ๋ค. REST API์ ๋ณด์์ ๋ค์์ ์ด์ฉํ ์ ์๋ค.
Authentication(์ธ์ฆ)
REST API๋ฅผ ์ ๊ทผํ๋ ์ฌ์ฉ์๋ฅผ ๊ฒ์ฆํ๋ค. ๋ณดํธ๋ ๋ฆฌ์์ค๋ฅผ ์ ๊ทผํ๊ธฐ ์ , ์ฌ์ฉ์์ credentials(username๊ณผ password)๋ฅผ ๊ฒ์ฆํ๋ค. OAuth2, JWT๋ Basic Authentication์ผ๋ก ๊ตฌํํ ์ ์๋ค.
Authorization
๋ฆฌ์์ค์ ๋ํ ๊ถํ์ ๊ฐ์ง ์ฌ์ฉ์๋ง ์ ๊ทผํ ์ ์๋๋ก ํ๋ค. ์ญํ ๊ณผ ๊ถํ์ ํตํด ์ ์ํ ์ ์๋ค. RBAC๋ ABAC๋ฅผ ํตํด API๋ก ์ธ๋ฐํ ์ ๊ทผ ๊ถํ์ ์ ์ดํ ์ ์๋ค.
Encryption
REST API ๋ณด์์ ํต์ฌ์ด๋ค. ํด๋ผ์ด์ธํธ์ ์๋ฒ ๊ฐ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ์ธ์ฝ๋ฉํ์ฌ ๋ฐ์ดํฐ์ ๋ํ ๋น์ธ๊ฐ ์ ๊ทผ์ ๋ง๋๋ค. HTTPS ํ๋กํ ์ฝ๋ก ๋ฐ์ดํฐ ์ํธํ ๋ฐ ์๋ํฌ์ธํธ ์ธ์ฆ์ ํ ์ ์๋ค.
๐กREST API ์ฌ๋ก
๋ํ์ ์ธ REST API์ธ Twitter REST API๋ก tweets, users, direct messages ๋ฑ์ ๋ฐ์ดํฐ๋ฅผ ์ ๊ทผํ ์ ์๋ค. ์ด๋ก์จ, ๊ฐ๋ฐ์๋ค์ Twitter์ ๋๊ท๋ชจ ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ํ์ฉํ ์ ์๋ค. ์๋ต๊ณผ ์์ฒญ์ json ํ์์ ๋ฐ๋ฅธ๋ค.
๐ก์ข์ REST API๋
์ข์ REST API๋ ์๋์ ์กฐ๊ฑด์ ์ถฉ์กฑํด์ผ ํ๋ค.
1. ์ง๊ด์ ์ธ URL, ๋ฆฌ์์ค, ๋ฉ์๋์ ๋ค์ด๋ฐ ์ปจ๋ฒค์
2. HTTP ์ํ ์ฝ๋๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ์ฌ์ฉํ๋ค.
3. ์บ์ฑ ๊ธฐ๋ฒ ํ์ฉ - ์บ์ฑ์ ํตํด ์๋ฒ ๋ถํ๋ฅผ ์ค์ด๊ณ , ์๋ต ์๊ฐ์ ์ค์ผ ์ ์๋ค. ETag๋ Last-Modified์ ๊ฐ์ HTTP ํค๋๋ค๋ก ๊ฐ๋ฅํ๋ค.
4. ์์ฒญ, ์๋ต ๋ฑ์ ๋ช ํํ ์ค๋ช ๊ณผ ์์
5. Versioning์ ํตํ API ์ ์ง๋ณด์
6. ์ํธํ ๋ฐ ๋ณด์ ํ๋กํ ์ฝ์ ํ์ฉํ ์ธ์ฆ ๋ฐ ์ธ๊ฐ
7. ์๋ฌ ํธ๋ค๋ง์ผ๋ก, ์๋ฒ ๊ณ ์ฅ์ ๋ง๊ณ ์๋ฌ ์์ธ์ ์ฌ์ฉ์์๊ฒ ์ค๋ช ํ๊ณ ๋ก๊น ๋ฐ ๋ถ์
๐ก๊ฒฐ๋ก
์ ๋ฆฌํ๋ฉด, REST API์ ํต์ฌ ์์ ์ ์๋์ ๊ฐ๋ค.
- ์น ์๋น์ค๋ค์ด ์ด๋ป๊ฒ ํต์ ํ ์ง๋ฅผ ์ ์ํ ์ค๊ณ ๊ท์น์ ๋ชจ์
- ๋ฌด์ํ์ฑ, ๋จ์ผํ๋ ์ธํฐํ์ด์ค, URI๋ฅผ ํตํ ๋ฆฌ์์ค ์๋ณ
- HTTP ๋ฉ์๋๋ก CRUD ์ฐ์ฐ ์ํ
- ์๋ํฌ์ธํธ, ๋ฆฌ์์ค, ๋ฉ์๋, ์๋ต ๋ฐ ์์ฒญ ํ์๊ณผ ์ํ ์ฝ๋๋ฅผ ํฌํจํ HTTP ๋ฉ์ธ์ง
- ์ธ์ฆ, ์ธ๊ฐ, ์ํธํ ๋ฐ API Key๋ฅผ ํตํ REST API ๋ณด์ ์ค์
'Programming' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Kafka ์ ์ธ๊น? (0) | 2024.02.05 |
---|---|
[Kafka] ๊ฐ์๋จธ์ (VM) ์นดํ์นด & Windows ํ๋ก๋์ ํต์ (0) | 2024.02.05 |
[Kafka] kafka.common.InconsistentClusterIdException ์๋ฌ ํด๊ฒฐ (0) | 2024.02.05 |
Servlet๊ณผ Tomcat์ ๊ฐ๋ (0) | 2024.02.05 |
Python vs Java (0) | 2024.02.05 |
๋๊ธ