HTTP 메서드 완벽 가이드: RESTful API의 기초
HTTP 메서드란?
HTTP 메서드는 클라이언트가 웹 서버에게 요청의 목적과 종류를 알려주는 방법입니다. 각 메서드는 특정한 의미를 가지고 있으며, RESTful API 설계에서 핵심적인 역할을 합니다.
주요 HTTP 메서드
GET
- 리소스 조회에 사용
- 서버의 데이터를 변경하지 않음 (읽기 전용)
- URL에 데이터가 노출되므로 민감한 정보 전송에 부적합
- 캐시 가능
GET /api/users/123 HTTP/1.1
Host: example.com
실제 사용 예:
- 게시글 목록 조회
- 사용자 프로필 정보 조회
- 상품 상세 정보 조회
POST
- 새로운 리소스 생성
- 서버의 상태나 데이터를 변경
- 요청 데이터를 body에 포함
- 멱등성을 보장하지 않음
POST /api/users HTTP/1.1
Host: example.com
Content-Type: application/json
{
"name": "John Doe",
"email": "john@example.com"
}
실제 사용 예:
- 회원 가입
- 게시글 작성
- 댓글 작성
PUT
- 리소스를 완전히 대체
- 해당 리소스가 없으면 생성
- 멱등성 보장
- 전체 리소스를 업데이트할 때 사용
PUT /api/users/123 HTTP/1.1
Host: example.com
Content-Type: application/json
{
"name": "John Doe",
"email": "john@example.com",
"age": 30
}
실제 사용 예:
- 사용자 정보 전체 수정
- 게시글 전체 수정
- 설정 정보 업데이트
PATCH
- 리소스의 일부분만 수정
- 필요한 부분만 전송하여 효율적
- PUT과 달리 일부 필드만 전송 가능
PATCH /api/users/123 HTTP/1.1
Host: example.com
Content-Type: application/json
{
"email": "new.john@example.com"
}
실제 사용 예:
- 사용자 비밀번호 변경
- 게시글 일부 수정
- 상품 재고 수정
DELETE
- 리소스 삭제
- 멱등성 보장
- 보안상 중요한 작업이므로 인증 필요
DELETE /api/users/123 HTTP/1.1
Host: example.com
실제 사용 예:
- 회원 탈퇴
- 게시글 삭제
- 댓글 삭제
HTTP 메서드의 특징
안전성(Safe)
- 서버의 상태를 변경하지 않는 메서드
- GET이 대표적
- HEAD, OPTIONS도 안전한 메서드
멱등성(Idempotent)
- 동일한 요청을 여러 번 보내도 결과가 같음
- GET, PUT, DELETE가 멱등성 보장
- POST는 멱등성을 보장하지 않음
캐시 가능성(Cacheable)
- 응답 결과를 캐시해서 사용할 수 있는 메서드
- GET, HEAD, POST(드물게)
- PUT, DELETE는 캐시 불가능
RESTful API 설계 예시
사용자 리소스
GET /users - 사용자 목록 조회
GET /users/{id} - 특정 사용자 조회
POST /users - 새 사용자 생성
PUT /users/{id} - 사용자 정보 전체 수정
PATCH /users/{id} - 사용자 정보 일부 수정
DELETE /users/{id} - 사용자 삭제
게시글 리소스
GET /posts - 게시글 목록 조회
GET /posts/{id} - 특정 게시글 조회
POST /posts - 새 게시글 작성
PUT /posts/{id} - 게시글 전체 수정
PATCH /posts/{id} - 게시글 일부 수정
DELETE /posts/{id} - 게시글 삭제
실무에서 주의할 점
- 적절한 메서드 선택
- 리소스의 상태 변경 여부 고려
- 멱등성 요구사항 확인
- 캐시 사용 가능성 검토
- 에러 처리
- 각 메서드별 적절한 상태 코드 반환
- 실패 시 명확한 에러 메시지 제공
- 보안
- 중요 데이터는 항상 POST로 전송
- 인증/인가 체크 필수
면접 예상 질문과 답변
Q: "PUT과 PATCH의 차이점은 무엇인가요?"
PUT은 리소스를 완전히 대체하는 메서드로, 모든 필드를 포함해야 합니다.
반면 PATCH는 리소스의 일부만 수정할 수 있어 필요한 필드만 전송하면 됩니다.
실무에서는 PATCH가 더 효율적이지만, 전체 데이터의 정합성이 중요한 경우 PUT을 사용합니다.
Q: "POST와 PUT의 차이점은 무엇인가요?"
POST는 새로운 리소스를 생성하며 멱등성을 보장하지 않습니다.
PUT은 특정 리소스를 생성하거나 대체하며 멱등성을 보장합니다.
또한 PUT은 클라이언트가 리소스의 위치를 알고 있어야 하지만,
POST는 서버가 리소스의 위치를 결정할 수 있습니다.
Q: "GET 메서드에서 body를 사용할 수 있나요?"
HTTP 스펙상으로는 GET 요청에 body를 포함할 수 있지만,
많은 서버와 클라이언트가 이를 무시하므로 권장되지 않습니다.
검색 조건 등은 쿼리 파라미터를 사용하는 것이 바람직합니다.
'개발&프로그래밍' 카테고리의 다른 글
[HTTP] URL 구조 파헤치기 (0) | 2025.02.20 |
---|---|
[HTTP] 쿠키와 세션 완벽 가이드: 웹 인증의 기본 (0) | 2025.02.20 |
[HTTP] 개발자가 꼭 알아야 할 HTTP 상태 응답 코드 (0) | 2025.02.19 |
[HTTP] X-Forwarded-For 헤더 이해하기 (0) | 2025.02.14 |
[IntelliJ] IntelliJ IDEA(2024.1.3 버전)에서 항상 파일 경로 보이게 설정 (0) | 2025.02.13 |
댓글