이 글에서는 HTTP 메서드와 REST API 개념을 정리해보겠습니다.
📖 참고 자료: 《코딩 자율학습 스프링 부트 3 자바 백엔드 개발 입문》
1. HTTP 메서드란?
HTTP 메서드
- 프로토콜(Protocol) : 컴퓨터 간 원활한 통신을 위한 전 세계 표준으로, 신호 처리 방식, 오류처리, 암호화, 인증방식 등을 규정합니다.
- HTTP(HyperText Transfer Protocol) : 웹에서 데이터를 주고받을 때 사용하는 프로토콜로, 클라이언트의 다양한 요청을 메서드를 통해 서버로 보내는 역할을 합니다.
- 대표적인 HTTP 메서드는 다음과 같습니다.
- POST : 데이터 생성 요청
- GET : 데이터 조회 요청
- PATCH(PUT) : 데이터 수정 요청
- DELETE : 데이터 삭제 요청
HTTP 상태 코드
클라이언트가 보낸 요청이 성공했는지 실패했는지 알려 주는 코드입니다. 상태 코드는 100~500번대까지 5개 그룹으로 나뉩니다.
| 상태 코드 | 설명 |
|---|
| 1XX(정보) | 요청이 수신돼 처리 중입니다. |
| 2XX(성공) | 요청이 정상적으로 처리됐습니다. |
| 3XX(리다이렉션 메시지) | 요청을 완료하려면 추가 행동이 필요합니다. |
| 4XX(클라이언트 요청 오류) | 클라이언트의 요청이 잘못돼 서버가 요청을 수행할 수 없습니다. |
| 5XX(서버 응답 오류) | 서버 내부에 에러가 발생해 클라이언트 요청에 대해 적절히 수행하지 못했습니다. |
HTTP 메시지 구성
HTTP 요청과 응답은 다음과 같은 요소로 구성됩니다.
- 시작 라인 : HTTP 요청 또는 응답 내용이 있습니다.
- 헤더 : HTTP 전송에 필요한 부가 정보(metadata)를 포함합니다.
- 빈 라인 : 헤더의 끝을 알리는 빈 줄로, 헤더가 모두 전송되었음을 알립니다.
- 본문 : 실제 전송하는 데이터가 있습니다. (JSON, HTML, XML 등)
2. REST API란?
REST와 API의 개념
- REST(Representational State Transfer) : HTTP URL을 통해 서버의 자원(resource)을 명시하고, HTTP 메서드(POST, GET, PATCH/PUT, DELETE)를 이용해 해당 자원에 CRUD 작업을 수행하는 방식을 말합니다.
- API(Application Programming Interface) : 클라이언트가 서버의 자원을 요청할 수 있도록 제공하는 인터페이스입니다.
- REST API : REST 원칙을 기반으로 설계된 API로, 다양한 클라이언트(웹, 모바일, IoT 등)에서 서버의 데이터를 쉽게 주고받을 수 있도록 합니다.
REST API의 특징
- 클라이언트-서버 구조: 클라이언트와 서버가 서로 독립적으로 동작하며, 서버는 데이터를 제공하는 역할을 합니다.
- 무상태(Stateless): 서버는 요청 간의 상태를 저장하지 않으며, 각 요청은 독립적으로 처리됩니다.
- 캐시 가능(Cacheable): 클라이언트는 응답 데이터를 캐싱하여 성능을 최적화할 수 있습니다.
- 계층적 구조: 클라이언트와 서버 사이에 프록시, 게이트웨이 등의 중간 계층을 둘 수 있습니다.
- 인터페이스 일관성(Uniform Interface): API 설계가 일관되며, URI와 HTTP 메서드를 활용한 명확한 규칙이 있습니다.
REST API의 응답
- REST API는 주로 JSON 형식으로 데이터를 주고받습니다.
- JSON 데이터 : 자바스크립트 방식을 차용한 객체 표현식으로, 키와 값의 쌍으로 이루어진 속성의 집합입니다. 형식은 다음과 같습니다.
{
"key1":"value1",
"key2":"value2"
}
3. REST API의 동작 과정
REST API가 동작하는 흐름을 간단한 예제와 함께 살펴보겠습니다.
3-1. 클라이언트가 서버에 요청을 보내는 과정
- 사용자 요청: 클라이언트가 특정 자원에 대한 요청을 보냅니다.
- 서버 처리: 서버가 요청을 받아 해당 데이터를 조회하거나 조작합니다.
- 응답 반환: 서버는 요청 결과를 JSON 형식으로 반환합니다.
GET /users HTTP/1.1
Host: api.example.com
[
{ "id": 1, "name": "홍길동", "email": "gildong@example.com" },
{ "id": 2, "name": "이순신", "email": "soonshin@example.com" }
]
3-2. RESTful URI 설계 원칙
REST API는 명확하고 일관된 URI를 사용하는 것이 중요합니다.
| 기능 | 예시 |
|---|
| 사용자 목록 조회 | GET /users |
| 특정 사용자 조회 | GET /users/{id} |
| 사용자 생성 | POST /users |
| 사용자 수정 | PATCH /users/{id} |
| 사용자 삭제 | DELETE /users/{id} |
이러한 RESTful URI 설계를 따름으로써 API 사용이 직관적이고 예측 가능해집니다.
4. REST API 보안
REST API를 안전하게 사용하기 위해 다음과 같은 보안 기법을 적용할 수 있습니다.
4-1. 인증과 권한 관리
- JWT(JSON Web Token): 토큰 기반 인증 방식으로, 사용자의 인증 정보를 포함한 토큰을 발급하여 API 요청 시 활용
- OAuth 2.0: 사용자 권한을 관리하는 표준 프로토콜로, Google, Facebook 등의 서비스에서 널리 사용됨
4-2. 데이터 암호화
- HTTPS 사용: 데이터를 암호화하여 보안을 강화
- API 키 및 토큰 사용: 인증된 사용자만 API를 사용할 수 있도록 제한
4-3. 요청 제한 및 로깅
- Rate Limiting: 특정 시간 내 요청 횟수를 제한하여 API 남용 방지
- 로깅 및 모니터링: API 요청 및 응답을 기록하여 보안 위협을 감지