RESTful API는 REpresentational State Transfer (상태 전달 표현) 아키텍처 스타일을 기반으로 한 웹 API입니다. REST는 웹 서비스의 설계를 위한 아키텍처적 규칙과 제약을 따르며, HTTP 프로토콜을 통해 자원(Resource)을 정의하고, 이를 HTTP 메서드(GET, POST, PUT, DELETE 등)로 처리하는 방식입니다.
RESTful API의 주요 특징
- 자원(Resource): RESTful API에서는 "자원"이 기본적인 개념입니다. 자원은 웹에서 처리하고자 하는 대상이며, URL을 통해 식별됩니다. 예를 들어, "책"이라는 자원을 다룬다면, 그 책은 http://example.com/books/123와 같이 URL로 표현됩니다. 여기서 123은 특정 책의 고유 식별자(ID)가 됩니다.
- HTTP 메서드 (CRUD와 매핑): RESTful API에서는 HTTP 메서드(GET, POST, PUT, DELETE 등)를 사용하여 자원에 대한 작업을 정의합니다. 각 HTTP 메서드는 CRUD(Create, Read, Update, Delete) 작업과 매핑됩니다.
- GET: 자원을 조회(읽기)합니다. (GET /books → 책 목록 조회, GET /books/123 → 특정 책 조회)
- POST: 새로운 자원을 생성합니다. (POST /books → 새로운 책 생성)
- PUT: 기존 자원을 업데이트합니다. (PUT /books/123 → 특정 책 수정)
- DELETE: 자원을 삭제합니다. (DELETE /books/123 → 특정 책 삭제)
- 상태 비저장성 (Stateless): RESTful API는 상태 비저장성(Stateless)을 유지해야 합니다. 이는 각 요청이 독립적이어야 하며, 서버는 클라이언트의 이전 요청 상태를 저장하지 않아야 한다는 의미입니다. 즉, 서버는 각 요청에서 필요한 모든 정보를 요청 본문에 포함하여 보내야 하며, 서버는 이전의 상태를 기억하지 않습니다.
- 캐시 처리 (Cacheable): RESTful API의 응답은 캐시 가능해야 합니다. 서버에서 반환된 응답은 캐시가 가능하도록 명시적 또는 암시적으로 처리됩니다. 이를 통해 응답 시간을 줄이고 서버의 부하를 줄일 수 있습니다.
- 계층화된 시스템 (Layered System): RESTful API는 여러 계층으로 구성될 수 있습니다. 클라이언트는 중간 서버나 프록시 서버를 통해 최종 서버와 통신할 수 있습니다. 클라이언트는 각 계층을 알 필요 없이 최종 서버와 통신할 수 있어 유연한 아키텍처 설계를 지원합니다.
- 일관된 인터페이스 (Uniform Interface): RESTful API는 일관된 인터페이스를 사용하여, 클라이언트와 서버 간의 통신을 단순화합니다. 이를 위해 특정 규칙에 따라 URL, HTTP 메서드, 상태 코드 등을 정의하고 사용합니다.
RESTful API의 구성 요소
1. 자원(Resouces): 자원은 URI(Uniform Resource Identifier)로 식별되며, RESTful API에서 다루는 기본적인 객체입니다. 자원은 보통 명사로 표현됩니다.
- 예시:
- GET /books → 책 목록 조회
- GET /books/{id} → 특정 책 조회
- POST /books → 새로운 책 생성
- PUT /books/{id} → 특정 책 정보 수정
- DELETE /books/{id} → 특정 책 삭제
2. HTTP 메서드와 자원 RESTful API에서 자원에 대한 조작은 HTTP 메서드(또는 동사)로 결정됩니다:
- GET: 자원 조회
- POST: 자원 생성
- PUT: 자원 수정
- DELETE: 자원 삭제
예시:
- GET /users → 사용자 목록 조회
- POST /users → 사용자 추가
- GET /users/{id} → 특정 사용자 조회
- PUT /users/{id} → 특정 사용자 정보 업데이트
- DELETE /users/{id} → 특정 사용자 삭제
3. HTTP 상태 코드 (HTTP Status Codes) RESTful API는 HTTP 상태 코드를 통해 요청의 결과를 클라이언트에게 전달합니다. 다음은 자주 사용되는 상태 코드입니다:
- 200 OK: 요청이 성공적으로 처리됨
- 201 Created: 새 자원이 생성됨
- 400 Bad Request: 잘못된 요청 (예: 파라미터 부족)
- 404 Not Found: 요청한 자원이 없음
- 500 Internal Server Error: 서버 측 오류
4. JSON 또는 XML 응답 형식 RESTful API는 보통 JSON 형식으로 응답을 반환합니다. 이는 사람이 읽기 쉽고, 대부분의 언어에서 쉽게 처리할 수 있기 때문에 널리 사용됩니다.
예시 (JSON 형식):
{
"id": 1,
"title": "The Great Gatsby",
"author": "F. Scott Fitzgerald"
}
RESTful API의 장점
- 확장성: RESTful API는 다양한 시스템 간에 쉽게 확장 가능하고, 다른 시스템과 통합이 용이합니다.
- 표준화: HTTP 프로토콜을 사용하여 표준화된 방식으로 데이터를 처리하므로 다양한 클라이언트(모바일, 웹 등)와 서버 간의 상호 작용을 원활하게 합니다.
- 독립성: 서버와 클라이언트는 독립적으로 동작할 수 있으며, 클라이언트가 서버의 내부 동작 방식을 알 필요가 없습니다.
- 유연성: RESTful API는 다양한 데이터 형식(JSON, XML 등)을 지원하므로 다양한 클라이언트 환경에 적합합니다.
RESTful API의 예시
- 자원 조회 (GET):
- GET /users → 사용자 목록 조회
- GET /users/{userId} → 특정 사용자 정보 조회
- 자원 생성 (POST):
- POST /users → 새로운 사용자 생성
- 자원 수정 (PUT):
- PUT /users/{userId} → 특정 사용자 정보 수정
- 자원 삭제 (DELETE):
- DELETE /users/{userId} → 특정 사용자 삭제
결론
RESTful API는 HTTP를 기반으로 하여 자원을 HTTP 메서드를 통해 다양한 데이터 형식(JSON, XML 등)으로 처리하는 방식입니다. 이를 통해 시스템 간의 효율적이고 표준화된 통신이 가능하며, 특히 웹 서비스나 모바일 애플리케이션에서 널리 사용됩니다.
'springboot' 카테고리의 다른 글
[springboot] AJAX 사용 방법과 동기(Synchronous), 비동기(Asynchronous) 차이 (0) | 2025.01.14 |
---|---|
[springboot] 쿠키, 웹 스토리지(LocalStorage, SessionStorage) (0) | 2025.01.14 |
[springboot] 쿼리스트링(Query String)과 주소변수매핑(Path variable) (0) | 2025.01.14 |
[springboot] DI(Dependency injection) (0) | 2025.01.12 |
[springboot] maven VS gradle (0) | 2025.01.12 |