상세 컨텐츠

본문 제목

HTTP GET vs POST

[공부] IT 강의 수강/IT 05

by 기뮹디_ 2025. 5. 9. 13:26

본문

 

목적 데이터를 요청(조회)할 때 사용 데이터를 생성/변경할 때 사용
데이터 전달 방식 URL에 쿼리 파라미터로 전달 (?key=value) HTTP Body에 담아서 전달
노출 여부 주소창에 보임 (보안에 취약) 주소창에 안 보임
데이터 크기 제한적 (브라우저마다 다름) 상대적으로 큼
캐싱 캐싱 가능 기본적으로 캐싱 안 함
안전성/멱등성 안전하고 멱등적 멱등성 없음 (같은 요청 여러 번 보내면 부작용 발생 가능)

 

GetMapping

@RestController
public class UserController {

    // 예: /user?id=123
    @GetMapping("/user")
    public User getUser(@RequestParam Long id) {
        return userService.getUserById(id);
    }
}

 

  • 클라이언트는 URL에 파라미터를 붙여서 요청함
  • 조회용 API에 주로 사용

 

PostMapping

@RestController
public class UserController {

    @PostMapping("/user")
    public User createUser(@RequestBody UserDto userDto) {
        return userService.createUser(userDto);
    }
}

 

 

  • 클라이언트는 JSON 등을 body에 담아 전송
  • 생성/수정/삭제용 API에 주로 사용

 

 

API 호출 예시

GET http://localhost:8080/user?id=123
POST http://localhost:8080/user
Body: { "name": "Alice"
           , "email": "alice@example.com" }

 

 

                               @RequestParam                                           @RequestBody

데이터 위치 URL의 쿼리 파라미터 HTTP Request Body
형식 예시 /user?id=10&name=kim { "id": 10, "name": "kim" }
사용 상황 단순 파라미터 전달 (주로 GET) JSON, 복잡한 객체 전달 (POST/PUT 등)

 

 

Spring MVC에서 파라미터를 넘기는 종류

쿼리 파라미터 @RequestParam URL의 ?key=value 형식 /user?id=1
경로 변수 @PathVariable URL 경로에 값 포함 /user/1
JSON 바디 @RequestBody JSON으로 넘긴 데이터 전체 { "name": "kim" }
폼 데이터 @ModelAttribute 폼 입력값 바인딩 (GET/POST) name=kim&age=20
헤더 @RequestHeader 요청 헤더에서 값 추출 Authorization 등
쿠키 @CookieValue 요청 쿠키에서 값 추출 JSESSIONID 등
세션 HttpSession 세션에서 사용자 정보 등 꺼낼 때 session.getAttribute("user")

 

 

ModelAttribute

전달 형식

POST /register
Content-Type: application/x-www-form-urlencoded

name=Alice&email=alice@example.com&age=30

DTO 클래스 정의

public class UserForm {
    private String name;
    private String email;
    private int age;

    // 반드시 기본 생성자 + getter/setter 필요
}

 

RequestBody와 차이점

                                       @ModelAttribute                                                                  @RequestBody

데이터 포맷 application/x-www-form-urlencoded application/json
HTTP 메서드 GET, POST 주로 POST, PUT
바인딩 방식 필드명 기반 (파라미터 → DTO) JSON → 객체 변환 (Jackson)
중첩 객체 지원 ❌ 불편 ✅ 쉽게 가능
요청 데이터 위치 URL or Form HTTP Body
사용 예 로그인, 검색, 폼 제출 회원가입, 게시글 등록 등

 

 

 

 

HTTP Header와 Body

✅ 3. 헤더와 바디의 차이점

🔸 헤더의 특징

  • 메타데이터: 데이터를 어떻게 처리할지, 데이터의 성격을 지정하는 정보
  • 클라이언트와 서버 간의 상호작용을 정의: 예를 들어, 어떤 형식의 데이터가 오갈지, 인증은 어떻게 처리할지 등
  • 각각의 요청/응답에 필수적으로 들어가는 정보가 많음 (ex. Content-Type, Authorization 등)

🔸 바디의 특징

  • 실제 데이터: 요청이나 응답의 핵심 데이터가 담기는 부분
  • 유동적인 데이터: 바디에는 데이터 포맷이 다양할 수 있음 (ex. JSON, XML, 폼 데이터, 파일 등)
  • 바디의 크기는 가변적이고 커질 수 있음 (ex. 파일 업로드 시)

               헤더 (Header)                                                               바디 (Body)

내용 요청/응답의 메타데이터 (ex. 인증, 형식) 요청/응답의 실제 데이터 (ex. JSON, HTML)
목적 요청/응답의 특성 설정, 처리 방법 명시 데이터 전송 (파일, 폼, JSON 등)
크기 크기가 작고 짧은 정보들 크기가 커질 수 있음
예시 Content-Type, Authorization { "username": "kim", "password": "1234" }

 

 

 

 

 

 

 

 

반응형

관련글 더보기