HTTP 메서드(GET, POST 등)의 차이점은 무엇인가요?

김상욱·2024년 12월 4일

HTTP 메서드(GET, POST 등)의 차이점은 무엇인가요?

HTTP 메서드는 클라이언트와 서버 간의 통신 방식에서 클라이언트가 서버에 어떤 작업을 요청할지 지정하는 방법입니다. 각각의 HTTP 메서드는 특정한 목적과 특징을 가지고 있다.

GET

목적 : 서버에서 데이터를 요청하여 가져옴.
특징

  • 요청 파라미터(데이터)가 URL 쿼리 문자열에 포함.
    ex) https://example.com/search?q=apple&sort=asc
  • 데이터를 읽기 전용으로 사용. 서버의 데이터를 가져오기만 하며, 서버 상태나 데이터에는 영향을 미치지 않는 것이 원칙.
  • 브라우저나 프록시 서버가 GET 요청 결과를 캐싱할 수 있음. 이로 인해 동일 요청에 대해 응답 속도가 빨라질 수 있음.
  • URL의 길이 제한 때문에 보낼 수 있는 데이터의 크기가 제한.
  • 서버 데이터에 영향을 미치지 않으므로 안전성이 보장되고 동일 요청을 여러 번 보내도 결과가 같기에 멱등성이 보장된다.
    ex) 게시물 목록 보기, 검색 결과 요청, 사용자 프로필 읽기

POST

목적 : 서버에 데이터를 보내거나 제출
특징

  • 요청 데이터는 URL이 아니라 요청의 Body에 데이터를 담아 전송
  • 서버의 데이터베이스에 새로운 데이터가 추가되거나, 특정 처리가 실행
  • 본문에 데이터를 담기 때문에 데이터 크기 제한이 없으며 파일 업로드 같은 작업에 적합
  • 서버 데이터에 영향을 미치기에 안정성이 보장되지 않고 동일 요청을 여러 번 보내면 서버 상태가 계속 변할 수 있기에 멱등성도 보장되지 않음
    ex) 회원 가입 정보 제출, 게시물 작성, 파일 업로드

PUT

목적 : 서버에 데이터를 새로 저장하거나 기존 데이터를 대체
특징

  • 업데이트나 생성할 리소스의 URL을 명시적으로 지정
  • 기존 데이터를 완전히 대체한다. 변경하려는 필드 외의 기존 데이터는 삭제.
  • 동일 요청을 여러 번 보내도 결과가 같아 멱등성이 보장된다.
    ex) 사용자 프로필 정보 수정, 파일 덮어쓰기

DELETE

목적 : 서버에서 리소스를 삭제
특징

  • 지정된 리소스를 삭제한다. ex) /user/123에서 사용자 ID 123 삭제
  • 동일 요청을 여러 번 보내도 결과가 같음.(이미 삭제된 리소스에 대한 요청은 성공 상태로 응답)
    ex) 게시물 삭제. 사용자 계정 삭제.

PATCH

목적 : 리소스의 일부 데이터를 수정
특징 : PUT이 전체 데이터를 갱신한다면, PATCH는 일부 필드만 수정

목적 : GET과 유사하지만 응답 본문은 제외하고 헤더만 요청
특징 : 리소스 유효성 검증, 응답 상태 코드 확인

OPTIONS

목적 : 서버가 지원하는 메서드와 옵션 확인
특징 : CORS(교차 출처 리소스 공유) 설정 확인에 사용

TRACE

목적 : 요청이 서버까지 가는 경로를 확인
특징 : 디버깅 목적으로 사용되며 일반적으로 비활성화


HTTP 메서드(GET, POST 등)의 차이를 이해한 후, 실습을 통해 실제 동작을 경험하는 것은 Java/Spring 백엔드 개발자로서 큰 도움이 됩니다. 아래는 신입/취준 입장에서 실습할 만한 방법들을 정리한 내용입니다.


1️⃣ GET vs POST

실습 아이디어: 간단한 게시판 만들기

목표:

  • GET으로 게시물 목록과 상세 정보를 가져오기
  • POST로 새로운 게시물 작성하기

구현 단계:
1. Controller 생성

  • GET /posts: 게시물 목록 보기
  • GET /posts/{id}: 특정 게시물 보기
  • POST /posts: 새 게시물 작성
  1. Service 및 Repository 생성
    • 데이터베이스 대신 HashMap이나 List를 사용해 게시물 데이터를 저장.
  2. 요청 처리 및 응답
    • GET 요청: 데이터 반환.
    • POST 요청: 클라이언트에서 받은 데이터를 저장.

테스트:

  • POST 요청은 Postman 또는 cURL로 테스트(본문에 JSON 데이터를 담아 요청).
  • GET 요청은 브라우저 주소창을 활용하거나 Postman 사용.

2️⃣ PUT vs PATCH

실습 아이디어: 사용자 프로필 업데이트

목표:

  • PUT으로 프로필 전체를 대체.
  • PATCH로 특정 필드만 수정.

구현 단계:
1. Controller 생성

  • PUT /users/{id}: 프로필 전체 업데이트
  • PATCH /users/{id}: 프로필 일부 업데이트
  1. Service 및 Repository 작성
    • PUT은 기존 데이터를 전부 대체.
    • PATCH는 받은 필드만 업데이트(예: Map<String, Object>를 사용하여 동적으로 처리).
  2. 테스트:
    • PUT: 기존 데이터 전부를 포함한 JSON 요청 전송.
    • PATCH: 수정할 필드만 포함된 JSON 요청 전송.

예제 요청:

PUT /users/1
{
  "name": "John Doe",
  "email": "john.doe@example.com"
}

PATCH /users/1
{
  "email": "new.email@example.com"
}

3️⃣ DELETE

실습 아이디어: 게시물 삭제

목표:

  • DELETE 요청을 통해 게시물 삭제.
  • 이미 삭제된 리소스 요청에 대한 처리 확인.

구현 단계:
1. Controller

  • DELETE /posts/{id}: 게시물 삭제 요청 처리.
  1. 삭제 처리 로직 작성
    • HashMap이나 List에서 ID 기반으로 삭제.
    • 삭제 성공/실패 응답 반환.

테스트:

  • Postman 또는 cURL로 DELETE 요청 전송 후 상태 코드 확인(예: 204 No Content).

4️⃣ OPTIONS & HEAD

실습 아이디어: 서버 정보 확인

목표:

  • OPTIONS로 서버가 지원하는 HTTP 메서드 확인.
  • HEAD로 리소스 메타 정보 확인.

구현 단계:
1. OPTIONS: Spring의 @RequestMapping으로 특정 메서드 구현 없이 자동으로 지원.

@RequestMapping(value = "/posts", method = RequestMethod.OPTIONS)
public ResponseEntity<Void> options() {
    return ResponseEntity.ok().build();
}
  1. HEAD: Spring Boot의 기본 GET 핸들러로 동작 테스트 가능.

테스트:

  • Postman에서 OPTIONS 요청을 보내 지원되는 메서드 확인.
  • HEAD 요청으로 응답 본문 없이 상태 코드 및 헤더 확인.

5️⃣ TRACE

실습 아이디어: 디버깅 요청

목표:

  • TRACE 요청을 보내 서버까지의 경로를 확인.
    주의: 대부분의 서버에서 보안상 TRACE 메서드를 비활성화.

구현:

  • Spring Security 설정으로 TRACE 활성화 후 테스트.
    @RequestMapping(value = "/trace", method = RequestMethod.TRACE)
    public ResponseEntity<String> trace(HttpServletRequest request) {
        return ResponseEntity.ok("Trace response example");
    }

실습을 더 발전시키는 아이디어

  1. RestTemplateWebClient를 활용해 클라이언트에서 HTTP 요청 직접 보내보기.
    • GET, POST, PUT, DELETE 등 실제 서버와 상호작용.
  2. Spring Boot Actuator를 사용해 HEAD와 OPTIONS 메서드 활용.
  3. 간단한 프론트엔드와 연동하여 POST와 PUT 요청 보내기.
    • React, Vue.js, 혹은 HTML + JavaScript로 폼 구현.
  4. SwaggerPostman으로 API 문서화.

실습 환경

  • Postman: REST API 요청 테스트.
  • Spring Boot: 간단한 REST API 서버 생성.
  • H2 데이터베이스: 테스트용 임시 데이터베이스 사용.

추천 도서 & 참고 자료

  • "Spring in Action": Spring Boot와 REST API 활용 예제.
  • Postman API 플랫폼: 다양한 HTTP 요청 테스트.

이러한 실습을 통해 HTTP 메서드의 동작을 확실히 이해할 수 있을 것입니다. 👍

0개의 댓글