REST API (Representational State Transfer Application Programming Interface)**는 웹 서비스에서 데이터를 주고받기 위해 사용하는 가장 표준적인 통신 규약이자 아키텍처 스타일입니다. 쉽게 말해, 인터넷을 통해 서버와 클라이언트(앱 또는 웹사이트)가 데이터를 효율적이고 일관된 방식으로 주고받기 위한 규칙들의 집합이라고 이해할 수 있습니다.
REST API는 마치 우리가 특정 주소에 가서 정해진 방법으로 소통하는 방식과 같습니다.
1. REST의 핵심 요소: 자원(Resource)
REST API에서 가장 중요한 개념은 **자원(Resource)**입니다. 자원은 서버가 관리하는 모든 데이터나 객체를 의미하며, 각 자원은 고유한 **URI(Uniform Resource Identifier)**를 가집니다.
자원(Resource)의 정의
- 비유: 자원은 레스토랑의 **’메뉴판에 있는 음식’**과 같습니다.
- 예시:
- 사용자 정보:
/users - 특정 게시글:
/posts/101 - 상품 목록:
/products
- 사용자 정보:
URI (Uniform Resource Identifier)
- 역할: 자원을 구별하는 고유한 식별자입니다. REST에서는 URI가 자원을 명확하게 표현하는 데 중점을 둡니다.
- 규칙: URI는 명사(Noun)를 사용하고, 동사(Verb)를 사용하지 않습니다. (예:
GET /users는 O,GET /get-users는 X)
2. 통신 방법: HTTP 메서드 (Method)
클라이언트는 자원에 대해 어떤 작업을 하고 싶은지 **HTTP 메서드(동사)**를 통해 서버에 전달합니다. 이 메서드는 자원에 대한 기본적인 CRUD (Create, Read, Update, Delete) 작업에 대응됩니다.
| HTTP 메서드 (동사) | CRUD 작업 | 서버가 하는 일 (비유: 레스토랑 주문) |
| GET | Read (조회) | 해당 자원을 가져옵니다. (메뉴를 주세요) |
| POST | Create (생성) | 새로운 자원을 생성합니다. (새로운 주문을 추가합니다) |
| PUT/PATCH | Update (수정) | 해당 자원을 수정합니다. (메뉴를 변경/일부 수정합니다) |
| DELETE | Delete (삭제) | 해당 자원을 제거합니다. (주문을 취소합니다) |
3. 데이터 형식: 표현(Representation)
클라이언트가 서버로부터 자원을 요청하면, 서버는 그 자원의 **’표현(Representation)’**을 전달합니다. 즉, 자원 자체를 보내는 것이 아니라, 자원의 상태를 나타내는 데이터 형식을 보내는 것입니다.
JSON 형식 (가장 일반적)
- 형식: REST API에서는 주로 JSON(JavaScript Object Notation) 형식을 사용합니다. JSON은 가볍고 사람이 읽기 쉬우며, 웹 환경에서 데이터를 교환하는 데 최적화되어 있습니다.
- 예시:
/users/1에 대한 GET 요청 응답
JSON
{
"id": 1,
"username": "user_a",
"email": "user.a@example.com"
}
4. 무상태성 (Statelessness): 독립적인 통신
REST API의 중요한 특징 중 하나는 **무상태성(Statelessness)**입니다.
- 정의: 서버는 클라이언트로부터 요청을 받을 때, 이전 요청에서 어떤 일이 있었는지 기억하지 않습니다.
- 작동 방식: 모든 요청은 그 요청을 처리하는 데 필요한 모든 정보(인증 정보 등)를 독립적으로 포함해야 합니다.
- 이점: 서버는 수많은 클라이언트의 상태를 기억할 필요가 없으므로 부하가 줄어들고, 확장성이 높아져 대규모 서비스 운영에 매우 유리합니다.
5. REST API 구조의 통신 흐름
REST API를 통한 통신은 다음과 같은 순서로 이루어집니다.
- 클라이언트의 요청: 스마트폰 앱이 사용자 목록을 가져오기 위해 서버에
GET /users요청을 보냅니다. - 서버의 자원 식별: 웹 서버는 요청된 URI(
/users)와 메서드(GET)를 확인하여, ‘사용자 목록’ 자원에 대한 조회 요청임을 파악합니다. - 데이터베이스 연동: 서버는 DB 서버에 접속하여 사용자 목록 데이터를 조회합니다.
- JSON 데이터 생성: 조회된 데이터를 JSON 형식의 표현으로 만듭니다.
- 응답 전송: 서버는 **HTTP 상태 코드(예: 200 OK)**와 함께 JSON 데이터를 클라이언트에게 반환합니다.
- 클라이언트의 처리: 클라이언트는 받은 JSON 데이터를 앱 화면에 표시합니다.
REST API는 이러한 일관된 구조와 규칙 덕분에 어떤 언어나 플랫폼에서도 쉽게 데이터를 통합하고 서비스를 확장할 수 있도록 돕습니다.


