응용 계층¶
1. HTTP / HTTPS¶
HTTP (HyperText Transfer Protocol)¶
웹에서 데이터를 주고받는 프로토콜입니다. 비상태(Stateless) 특성을 가집니다.
| 버전 | 특징 |
|---|---|
| HTTP/1.0 | 요청마다 연결/종료 |
| HTTP/1.1 | Keep-Alive (연결 재사용), 파이프라이닝 |
| HTTP/2.0 | 멀티플렉싱, 헤더 압축, 서버 푸시 |
| HTTP/3.0 | QUIC(UDP 기반), 연결 속도 향상 |
HTTPS¶
HTTP + TLS(SSL) 암호화. 443 포트 사용.
- 데이터 기밀성, 무결성, 서버 인증 제공
- 인증서(Certificate)를 통해 서버 신원 확인
2. HTTP 메서드¶
| 메서드 | 설명 | 멱등성 |
|---|---|---|
| GET | 리소스 조회 | 있음 |
| POST | 리소스 생성 | 없음 |
| PUT | 리소스 전체 수정 | 있음 |
| PATCH | 리소스 부분 수정 | 없음 |
| DELETE | 리소스 삭제 | 있음 |
| HEAD | GET과 동일하나 바디 제외 | 있음 |
| OPTIONS | 지원 메서드 조회 | 있음 |
멱등성: 같은 요청을 여러 번 해도 결과가 동일
HTTP 상태 코드¶
| 코드 범위 | 의미 |
|---|---|
| 1xx | 정보 (처리 중) |
| 2xx | 성공 (200 OK, 201 Created) |
| 3xx | 리다이렉션 (301 Moved, 304 Not Modified) |
| 4xx | 클라이언트 오류 (400 Bad Request, 401 Unauthorized, 403 Forbidden, 404 Not Found) |
| 5xx | 서버 오류 (500 Internal Server Error, 503 Service Unavailable) |
3. REST API¶
REpresentational State Transfer — HTTP를 활용한 아키텍처 스타일입니다.
REST 6원칙¶
- 클라이언트-서버 분리: 역할 명확히 구분
- 무상태(Stateless): 요청 간 상태 저장 안 함
- 캐시 가능: 응답에 캐시 가능 여부 명시
- 균일한 인터페이스: 일관된 URL 구조와 메서드 사용
- 계층 구조: 클라이언트는 중간 서버 존재 여부 알 필요 없음
- 코드 온 디맨드(선택): 서버가 클라이언트에 코드 전송 가능
RESTful URL 설계¶
GET /users → 사용자 목록 조회
GET /users/1 → ID 1 사용자 조회
POST /users → 사용자 생성
PUT /users/1 → ID 1 사용자 전체 수정
PATCH /users/1 → ID 1 사용자 부분 수정
DELETE /users/1 → ID 1 사용자 삭제
4. 쿠키 / 세션 / JWT¶
HTTP의 무상태 특성을 보완하기 위한 상태 유지 방법입니다.
쿠키 (Cookie)¶
- 클라이언트(브라우저) 에 저장
- 서버가
Set-Cookie헤더로 전달 - 이후 요청마다 자동으로 포함
- 만료 시간 설정 가능
- 단점: 보안 취약(탈취 위험), 용량 제한(4KB)
세션 (Session)¶
- 서버에 상태 저장, 클라이언트는 세션 ID만 쿠키로 보유
- 서버 측에서 관리하여 보안성 높음
- 단점: 서버 메모리 사용, 분산 환경에서 세션 공유 문제
| 구분 | 쿠키 | 세션 |
|---|---|---|
| 저장 위치 | 클라이언트 | 서버 |
| 보안 | 낮음 | 높음 |
| 서버 부하 | 없음 | 있음 |
| 만료 | 설정 가능 | 브라우저 종료 시 |
JWT (JSON Web Token)¶
- 토큰 기반 인증 방식
- 서버에 상태 저장 불필요 → 확장성 좋음 (Stateless)
- 구조:
Header.Payload.Signature
- 장점: 분산 환경에 적합, 서버 부하 없음
- 단점: 토큰 탈취 시 만료 전까지 무효화 어려움
시험 포인트¶
- HTTP vs HTTPS: 암호화 여부 (TLS), 포트(80 vs 443)
- HTTP 메서드: GET(조회), POST(생성), PUT(전체 수정), PATCH(부분 수정), DELETE(삭제)
- 멱등성: GET/PUT/DELETE는 있음, POST/PATCH는 없음
- 상태 코드: 2xx(성공), 3xx(리다이렉트), 4xx(클라이언트 오류), 5xx(서버 오류)
- REST 무상태: 요청 간 서버에 상태 저장 안 함
- 쿠키 vs 세션: 저장 위치(클라이언트 vs 서버)
- JWT: Stateless 토큰, Header.Payload.Signature 구조