REST는 REpresentational State Transfer의 약자로, 웹 서비스를 개발하기 위한 아키텍처 스타일입니다. 웹 표준 기반 아키텍처로, HTTP 프로토콜을 사용해 데이터 통신을 수행합니다.
http://weather.example.com/seoul
→ 서울의 날씨 자원 접근REST 아키텍처를 기반으로 구축된 웹 서비스를 RESTful 웹 서비스라 합니다. 플랫폼에 독립적이며 클라이언트·서버 구조를 분리합니다.
POST /things # 자원 생성 (CREATE)
→ 201 CREATED
GET /things/13 # 자원 조회 (READ)
→ 200 OK
PUT /things/13 # 자원 수정 (UPDATE)
→ 200 OK
DELETE /things/13 # 자원 삭제 (DELETE)
→ 204 No Content
핵심 패턴: 메서드(명령) + 자원 → 응답 메시지
자원은 다양한 포맷으로 표현될 수 있습니다.
<user>
<id>1</id>
<name>Mahesh</name>
<profession>Teacher</profession>
</user>
{
"id": 1,
"name": "Mahesh",
"profession": "Teacher"
}
{}
로 정의, 이름/값 쌍으로 구성HTTP 요청은 다음 주요 요소로 구성됩니다:
HTTP 응답은 다음 요소로 구성됩니다:
Accept
헤더로 선호하는 표현 방식 제시Content-Type
헤더로 실제 전송 포맷 지정Accept: text/html, application/json
Content-Type: application/json; charset=UTF-8
/users
-
또는 _
# 나쁜 예
GET /.../getUser/1
# 좋은 예
GET /.../users/1
메서드 | URI | 설명 |
---|---|---|
GET | /estore/users | 사용자 목록 조회 |
GET | /estore/users/1 | ID=1 사용자 조회 |
POST | /estore/users | 새 사용자 생성 (ID 서버 할당) |
PUT | /estore/users/2 | ID=2 사용자 업데이트 |
DELETE | /estore/users/1 | ID=1 사용자 삭제 |
OPTIONS | /estore/users | 지원 메서드 목록 조회 |
HEAD | /estore/users | 헤더만 반환, Body 없음 |
무상태의 장점
인증 방식 | 상태 관리 | 설명 |
---|---|---|
세션 기반 | Stateful | 서버가 사용자 세션 데이터 저장 |
토큰 기반 (JWT) | Stateless | 서버에 상태 비저장, 토큰 서명 검증만 수행 |
# JWT 토큰 인증 흐름
1. 서버가 사용자 정보로 JWT 생성·서명 → 클라이언트 전달
2. 클라이언트가 요청 시 JWT 헤더에 포함
3. 서버가 서명 검증 후 요청 처리
헤더 | 설명 |
---|---|
Date | 자원 생성 시각 |
Last-Modified | 자원 마지막 수정 시각 |
Cache-Control | 캐시 제어 기본 헤더 |
Expires | 캐시 만료 일시 |
지시자 | 의미 |
---|---|
public | 모든 캐시 가능한 컴포넌트에 허용 |
private | 클라이언트 전용 캐시만 허용 |
no-store | 어떤 캐시에도 저장 금지 |
max-age=﹤초﹥ | 지정 초만큼 캐시 유효 |
must-revalidate | 만료 시 서버 재검증 필요 |
If-None-Match
에 이전 ETag 전송304 Not Modified
응답 → 클라이언트 캐시 사용베스트 프랙티스: 적절한 인증·인가, HTTPS 사용, 과도한 정보 노출 방지