[코틀린, kotlin / 스프링 mvc] POST, PUT API 비교, 구현방법


1. POST, PUT 비교

공통점

(1) 데이터 전송 : 두 메소드 모두 클라이언트에서 서버로 데이터를 전송하는 데 사용된다.
(2) 보안성 : GET과 달리, POST와 PUT은 HTTP 요청의 본문(body)에 데이터를 포함시켜 전송하기 때문에 URL에 데이터가 노출되지 않는다.

차이점

(1) 목적
- POST : 새로운 데이터를 생성(create)할 때 주로 사용된다. 예를 들어, 새로운 사용자 프로필을 데이터베이스에 추가할 때 POST 메소드가 적합하다.
- PUT : 기존 데이터를 갱신(update)하는 데 사용된다. 예를 들어, 사용자 프로필 정보를 수정할 때 PUT 메소드가 적절하다.

(2) 멱등성
- POST : 멱등하지 않다. 같은 POST 요청을 여러 번 보내면 데이터가 여러 번 생성될 수 있다.
- PUT : 멱등성을 가진다. 같은 PUT 요청을 여러 번 보내도 서버의 상태는 첫 번째 요청 이후 변경되지 않는다.


2. POST, PUT API 구현방법

@RestController
@RequestMapping("/api")
class postAPIController {

    @PostMapping("/post-mapping")
    fun postMapping():String{
        return "item"
    }

    @PostMapping("/post-mapping/object")
    fun postObject(@RequestBody itemData: ItemData): ItemData {
        //@RequestBody 어노테이션은 들어오는 json을 자동으로 ItemData 클래스의 인스턴스로 변환
        //json -> object
        println(itemData)
        //object -> json
        return itemData
    }

}

(1) PostMapping 사용

@PostMapping 어노테이션을 사용하여 "/post-mapping" 경로로 들어오는 HTTP POST 요청을 처리는 것을 나타낸다.

(2) @RequestBody 어노테이션 이해

@RequestBody itemData: ItemData의 @RequestBody 어노테이션은 HTTP 요청 본문에 포함된 json 데이터를 ItemData 타입의 객체로 변환하여 itemData 변수에 저장하도록 지시하는 것이다. 여기서 ItemData는 내가 정의한 data class이며, 이 클래스의 인스턴스는 요청 본문(BODY)에서 받은 데이터를 나타낸다.

(3) PUT API 구현

PUT API는 POST에서 @PostMapping을 사용한 것과 마찬가지로 @PutMapping을 사용하여 구현할 수 있다.
@RestController
@RequestMapping("/api")
class postAPIController {

    @PutMapping("/put-mapping")
    fun postMapping():String{
        return "item"
    }

    @PutMapping("/put-mapping/object")
    fun putObject(@RequestBody itemData: ItemData): ItemData {

        println(itemData)

        return itemData
    }

}