# 웹 통신의 Foundational Trio: HTTP, REST API, JSON
📝 필기 (Notes)
- HTTP (HyperText Transfer Protocol): 클라이언트와 서버 간의 약속(프로토콜)
- 핵심 특징:
- OSI 7계층 중 응용 계층 프로토콜
- 요청(Request)과 응답(Response) 모델 기반
- 무상태(Stateless): 각 요청은 이전 요청과 독립적. 서버가 클라이언트 상태를 저장하지 않음.
- 주요 구성 요소:
- Methods (요청의 의도/동사): 자원에 수행할 작업을 명시
- GET: 데이터 조회 (Read) - 멱등성 O, 안전성 O
- POST: 데이터 생성 (Create) - 멱등성 X
- PUT: 자원 전체 교체 (Replace) - 멱등성 O
- PATCH: 자원 일부 수정 (Modify) - 멱등성 O
- DELETE: 데이터 삭제 (Delete) - 멱등성 O
- Message Structure (메시지 구조):
- Start-line: 요청/응답의 핵심 정보 (예:
GET /users HTTP/1.1, HTTP/1.1 200 OK)
- Headers: 메시지의 메타데이터 (예:
Content-Type, Authorization)
- Body: 실제 전송될 데이터 (Payload)
- Status Code (응답 결과):
- 2xx: 성공 (Success)
- 4xx: 클라이언트 오류 (Client Error)
- 5xx: 서버 오류 (Server Error)
- REST (Representational State Transfer): 일관성 있는 API 설계 철학 (아키텍처 스타일)
- 핵심 원칙:
- 자원(Resource) 중심 설계: 모든 것을 명사(URI)로 표현 (예:
/users/123)
- 행위(Verb)는 HTTP Method로 표현:
CRUD 연산을 POST, GET, PUT/PATCH, DELETE에 매핑
- 무상태성(Statelessness): 서버가 클라이언트 상태를 저장하지 않음.
- 장점: 서버 설계 단순화, 수평적 확장(Scale-out) 용이
- RESTful API: REST 원칙을 잘 따른 API
- JSON (JavaScript Object Notation): 시스템 간 데이터 교환을 위한 표준 '언어'
- 목적: 서로 다른 프로그래밍 언어/플랫폼 간의 데이터 교환을 위함
- 핵심 구조:
- Key-Value 쌍: 모든 데이터의 기본 단위 (예:
"name": "Cornell")
- 객체(Object
{}): 하나의 묶음 정보. Key-Value 쌍의 집합.
- 배열(Array
[]): 여러 정보(객체, 값 등)의 순서가 있는 목록.
- 특징: 텍스트 기반, 사람이 읽기 쉬움, 경량(lightweight)
🔑 단서 / 질문 (Cues / Questions)
- HTTP가 **'무상태(Stateless)'**라는 것의 본질적 의미는 무엇이며, 이 특징이 서버 설계에 어떤 결정적 이점을 제공하는가?
- *멱등성(Idempotency)**의 개념을 설명하고, POST는 멱등성이 없고 PUT, DELETE는 멱등성을 갖는 이유를 구체적인 예시로 설명할 수 있는가?
- REST의 핵심 철학인 **'자원(Resource) 중심 설계'**가 왜 API의 일관성과 예측 가능성을 높여주는가?
- 서로 다른 언어로 만들어진 클라이언트와 서버가 문제없이 소통할 수 있는 이유는 무엇이며, 여기서 JSON의 역할은 무엇인가?
GET /rooms/1/messages 요청에 대한 성공 응답 메시지(HTTP Status, Header, Body) 전체를 HTTP, REST, JSON의 관점에서 각각 설명할 수 있는가?
📜 요약 (Summary)
HTTP라는 약속(프로토콜)을 통해 클라이언트와 서버가 대화하고, REST라는 잘 짜인 설계 가이드라인을 따라 API의 주소(URI)와 행동(Method)을 명확히 정의하며, 그 대화의 내용물은 JSON이라는 표준 형식의 '언어'로 주고받습니다. 이 세 가지 요소의 조화는 현대 웹 서비스가 확장 가능하고, 예측 가능하며, 독립적으로 개발될 수 있게 만드는 핵심 기반입니다.
🚀 심화 학습을 위한 질문
학습한 내용을 더 깊이 이해하고 다른 지식과 연결하기 위한 질문들입니다. 잠시 시간을 내어 스스로 답을 생각해보세요. 정답은 없습니다. 당신의 논리적인 추론 과정이 중요합니다.
-
연결 및 통합 (Connection & Integration)
오늘 배운 HTTP와 REST의 '무상태(Stateless)' 원칙은 사용자의 로그인 상태를 어떻게 유지해야 하는가에 대한 새로운 질문을 던집니다. 이전에 학습했을 법한 '세션/쿠키' 방식이나 'JWT(JSON Web Token)' 방식은 이 '무상태성' 원칙과 어떻게 조화를 이루거나, 혹은 어떤 절충점을 찾아 동작하는 걸까요?