REST API, RESTful API ๊ฐ๋ ๊ณผ ์ฐจ์ด
๋ชฉ์ฐจ

๋ฐฑ์๋ ๊ณต๋ถ๋ฅผ ์์ํ๋ฉด ๊ฐ์ฅ ๋จผ์ ๋ง์ฃผ์น๋ ๋จ์ด, REST API. ๊ทผ๋ฐ RESTful API๋ ๋ ๋ญ๊ฐ? ๊ฐ์ ๊ฑด๊ฐ ๋ค๋ฅธ ๊ฑด๊ฐ? ์ค๋ ํ ๋ฒ์ ์ ๋ฆฌํด๋ณด์.
1. API
REST API๋ฅผ ์ดํดํ๋ ค๋ฉด ๋จผ์ API๊ฐ ๋ญ์ง ์์์ผ ํ๋ค. API(Application Programming Interface)๋, ์๋ก ๋ค๋ฅธ ์ํํธ์จ์ด๊ฐ ์๋ก ํต์ ํ ์ ์๋๋ก ์ ํด๋์ ์ธํฐํ์ด์ค๋ค.
์ฝ๊ฒ ๋งํ๋ฉด, ํด๋ผ์ด์ธํธ(ํ๋ก ํธ์๋, ์ฑ ๋ฑ)๊ฐ ์๋ฒ์๊ฒ “์ด ๋ฐ์ดํฐ ์ค” ํ๊ณ ์์ฒญํ๊ณ , ์๋ฒ๊ฐ “์ฌ๊ธฐ ์์ด” ํ๊ณ ์๋ตํ๋ ๊ทธ ์ฐฝ๊ตฌ๊ฐ ๋ฐ๋ก API๋ค.
2. REST
REST(Representational State Transfer)๋ ์น ํต์ ์ ์ํ ์ํคํ ์ฒ ์คํ์ผ(์ค๊ณ ์์น)์ด๋ค. 2000๋ ์ ๋ก์ด ํ๋ฉ(Roy Fielding)์ด ๊ทธ์ ๋ฐ์ฌ ๋ ผ๋ฌธ์์ ์ฒ์ ์ ์ํ๋ค.
REST ์์ฒด๋ ํ๋กํ ์ฝ์ด๋ ํ์ค์ด ์๋๋ค. “์ด๋ฐ ๋ฐฉ์์ผ๋ก ์ค๊ณํ๋ฉด ์ข๋ค”๋ ๊ฐ์ด๋๋ผ์ธ์ ๊ฐ๊น๋ค. REST๊ฐ ์ ์ํ๋ ํต์ฌ ์์น์ ๋ค์๊ณผ ๊ฐ๋ค.
| ์์น | ์ค๋ช |
|---|---|
| ํด๋ผ์ด์ธํธ-์๋ฒ ๊ตฌ์กฐ | ํด๋ผ์ด์ธํธ์ ์๋ฒ๋ ์ญํ ์ ๋ถ๋ฆฌํ๋ค |
| ๋ฌด์ํ(Stateless) | ๊ฐ ์์ฒญ์ ๋ ๋ฆฝ์ ์ด๋ฉฐ ์๋ฒ๋ ํด๋ผ์ด์ธํธ ์ํ๋ฅผ ์ ์ฅํ์ง ์๋๋ค |
| ์บ์ ๊ฐ๋ฅ(Cacheable) | ์๋ต์ ์บ์๋ ์ ์์ด์ผ ํ๋ค |
| ๊ณ์ธตํ ์์คํ | ์ค๊ฐ ์๋ฒ๋ฅผ ๊ฑฐ์น๋์ง ์ฌ๋ถ๋ฅผ ํด๋ผ์ด์ธํธ๊ฐ ์ ํ์ ์๋ค |
| ์ผ๊ด๋ ์ธํฐํ์ด์ค | URI์ HTTP ๋ฉ์๋ ๋ฑ ์ผ๊ด๋ ๋ฐฉ์์ผ๋ก ํต์ ํ๋ค |
| ์ฝ๋ ์จ ๋๋งจ๋ (์ ํ) | ํ์ํ๋ฉด ์๋ฒ๊ฐ ์คํ ๊ฐ๋ฅํ ์ฝ๋๋ฅผ ์ ๋ฌํ ์ ์๋ค |
์ฐ๋ฆฌ๊ฐ ํ์์ ์์ฃผ ์ ํ๋ ์นด์นด์ค๋งต API, ๋ค์ด๋ฒ ๋ก๊ทธ์ธ, ๊ณต๊ณต๋ฐ์ดํฐํฌํธ ๋ฑ๋ ๋ชจ๋ REST API ๋ฐฉ์์ผ๋ก ์ ๊ณต๋๋ค. ์ฆ, ์ด๋ฏธ ์ฐ๋ฆฌ ์ฃผ๋ณ์์ ๋๋ฆฌ ์ฐ์ด๊ณ ์๋ ๋ฐฉ์์ด๋ค.
3. REST API vs RESTful API
์์งํ ๋งํ๋ฉด ์ค๋ฌด์์๋ ๋ ๋จ์ด๋ฅผ ํผ์ฉํด์ ์ฐ๋ ๊ฒฝ์ฐ๊ฐ ๋๋ถ๋ถ์ด๋ค. ํ์ง๋ง ์๋ฐํ๊ฒ ๊ตฌ๋ถํ๋ฉด ์ฐจ์ด๊ฐ ์๋ค.
| REST API | RESTful API | |
|---|---|---|
| ์๋ฏธ | REST ์์น์ ๊ธฐ๋ฐ์ผ๋ก ๋ง๋ API | REST ์์น์ ์ถฉ์คํ ์งํจ API |
| ๋์์ค | REST ์คํ์ผ์ ๋ฐ๋ฅธ๋ค๊ณ ์ฃผ์ฅํ๋ API | REST 6๊ฐ์ง ์์น์ ์ ๋๋ก ์ค์ํ API |
| ํ์ค | ์์น ์ผ๋ถ๋ง ์ง์ผ๋ REST API๋ผ๊ณ ๋ถ๋ฆ | ์์ ํ ์ค์๊ฐ ๊ธฐ์ค |
์ฆ, ๋ชจ๋ RESTful API๋ REST API์ง๋ง, ๋ชจ๋ REST API๊ฐ RESTfulํ ๊ฒ์ ์๋๋ค. ๋ก์ด ํ๋ฉ ๋ณธ์ธ๋ “๋๋ถ๋ถ์ REST API๋ ์ฌ์ค RESTfulํ์ง ์๋ค”๊ณ ๋งํ ์ ๋๋ก, ์์ ํ RESTful ์ค๊ณ๋ ์๊ฐ๋ณด๋ค ๊น๋ค๋กญ๋ค.
4. REST API ์ค๊ณ ๋ฐฉ๋ฒ
REST API๋ URI + HTTP ๋ฉ์๋ ์กฐํฉ์ผ๋ก ํ์๋ฅผ ํํํ๋ค. ๋จผ์ ์ํคํ ์ฒ๋ถํฐ ์ดํด๋ณด์.
์ํคํ ์ฒ

ํด๋ผ์ด์ธํธ(์น ์ฑ, ๋ชจ๋ฐ์ผ ์ฑ, ํ๋ก ํธ์๋)๊ฐ HTTP ์์ฒญ(GET, POST, PUT, DELETE)์ ์ธํฐ๋ท์ ํตํด ์๋ฒ๋ก ์ ์กํ๊ณ , ์๋ฒ๋ API ์๋ํฌ์ธํธ์์ ์์ฒญ์ ๋ฐ์ ๋น์ฆ๋์ค ๋ก์ง์ ์ฒ๋ฆฌํ ๋ค HTTP ์ํ ์ฝ๋์ JSON ๋ฐ์ดํฐ๋ฅผ ์๋ต์ผ๋ก ๋๋ ค์ฃผ๋ REST API์ ์ ์ฒด ํ๋ฆ์ด๋ค.
REST API๋ ๋ฐ์ดํฐ์ ์์ฑ(Create), ์กฐํ(Read), ์์ (Update), ์ญ์ (Delete), ์ฆ CRUD๋ฅผ HTTP ๋ฉ์๋๋ก ํํํ๋ค.
HTTP ๋ฉ์๋
| ๋ฉ์๋ | ์ญํ |
|---|---|
GET |
๋ฐ์ดํฐ ์กฐํ |
POST |
๋ฐ์ดํฐ ์์ฑ |
PUT |
๋ฐ์ดํฐ ์ ์ฒด ์์ |
PATCH |
๋ฐ์ดํฐ ์ผ๋ถ ์์ |
DELETE |
๋ฐ์ดํฐ ์ญ์ |
URI ์ค๊ณ ์์
๊ฒ์ํ API๋ฅผ ์ค๊ณํ๋ค๊ณ ํด๋ณด์.
GET /posts → ๊ฒ์๊ธ ๋ชฉ๋ก ์กฐํ
GET /posts/{id} → ํน์ ๊ฒ์๊ธ ์กฐํ
POST /posts → ๊ฒ์๊ธ ์์ฑ
PUT /posts/{id} → ๊ฒ์๊ธ ์ ์ฒด ์์
PATCH /posts/{id} → ๊ฒ์๊ธ ์ผ๋ถ ์์
DELETE /posts/{id} → ๊ฒ์๊ธ ์ญ์
์๋ต ์์ (JSON)
GET /posts/1 ์์ฒญ ์ ์๋ฒ๊ฐ ๋๋ ค์ฃผ๋ ์๋ต์ ๋ณดํต ์ด๋ฐ ํํ๋ค.
{
"id": 1,
"title": "REST API๋ ๋ฌด์์ธ๊ฐ",
"content": "REST API๋ ...",
"createdAt": "2025-01-01"
}
URI ์ค๊ณ ์ ์ฃผ์ํ ์
โ /getPosts → ๋์ฌ ์ฌ์ฉ ๊ธ์ง
โ /posts/delete/1 → URI์ ํ์๋ฅผ ๋ฃ์ง ์๋๋ค
โ /Posts → ๋๋ฌธ์ ์ฌ์ฉ ์ง์
โ /posts/ → ๋ง์ง๋ง ์ฌ๋์(/) ์ฌ์ฉ ์ง์
โ
/posts
โ
/posts/{id}
โ
/posts/{postId}/comments
5. HTTP ์ํ ์ฝ๋๋ ์ค์ํ๋ค
REST API๋ ์๋ต์ ์ ์ ํ HTTP ์ํ ์ฝ๋๋ฅผ ํจ๊ป ๋ณด๋ด์ผ ํ๋ค. ๋จ์ํ 200๋ง ์ฌ์ฉํ๋ ๊ฒ์ RESTfulํ ์ค๊ณ๋ผ๊ณ ๋ณด๊ธฐ ์ด๋ ต๋ค.
| ์ฝ๋ | ์๋ฏธ | ์์ |
|---|---|---|
200 OK |
์์ฒญ ์ฑ๊ณต | GET, PUT, PATCH ์ฑ๊ณต |
201 Created |
๋ฆฌ์์ค ์์ฑ ์ฑ๊ณต | POST ์ฑ๊ณต |
204 No Content |
์ฑ๊ณตํ์ง๋ง ๋ฐํ ๋ฐ์ดํฐ ์์ | DELETE ์ฑ๊ณต |
400 Bad Request |
์๋ชป๋ ์์ฒญ | ํ์ ํ๋ผ๋ฏธํฐ ๋๋ฝ |
401 Unauthorized |
์ธ์ฆ ํ์ | ๋ก๊ทธ์ธ ์ ํ ์ฌ์ฉ์ |
403 Forbidden |
๊ถํ ์์ | ๋ค๋ฅธ ์ฌ๋ ๊ธ ์ญ์ ์๋ |
404 Not Found |
๋ฆฌ์์ค ์์ | ์กด์ฌํ์ง ์๋ ๊ฒ์๊ธ ์กฐํ |
500 Internal Server Error |
์๋ฒ ์ค๋ฅ | ์๋ฒ ๋ด๋ถ ์๋ฌ |
6. ๋ง์น๋ฉฐ
REST API๋ ๋จ์ํ HTTP๋ก ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ๊ฒ ๊ทธ ์ด์์ด๋ค. URI์ HTTP ๋ฉ์๋๋ฅผ ์ด๋ป๊ฒ ์กฐํฉํ๋๋, ์ํ ์ฝ๋๋ฅผ ์ผ๋ง๋ ์๋ฏธ ์๊ฒ ์ฌ์ฉํ๋๋์ ๋ฐ๋ผ API์ ์์ฑ๋๊ฐ ๋ฌ๋ผ์ง๋ค.
RESTful API๋ ๊ทธ ์์น์ ์ ์งํจ API๋ฅผ ๋ถ๋ฅด๋ ๋ง์ด๊ณ , ํ์ค์์๋ ๋ ๋จ์ด๊ฐ ํผ์ฉ๋๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค๋ ๊ฒ๋ ์์๋๋ฉด ์ข๋ค.
'๐ CS & Infra > Web' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [Web ๊ธฐ์ด] ์น ํ๋ก๊ทธ๋๋ฐ(Web Programming) (0) | 2026.03.31 |
|---|---|
| [Web ๊ธฐ์ด] HTTP ํ๋กํ ์ฝ (0) | 2026.03.31 |
| [Web ๊ธฐ์ด] ์ธํฐ๋ท(Internet)๊ณผ ์น(Web)์ ์ฐจ์ด (0) | 2026.03.31 |