스프링에서 rest방식을 공부하는데, rest방식 말고 퀴리스트링으로 데이터를 전달해주면 맵핑된 메서드의 매개변수에서 어노테이션 생략해도 전달된 파라미터 값들을 매개변수 이름이랑 같거나 매개변수의 객체의 필드명이랑 같으면 알아서 맵핑해주잖아, 그런데 왜 rest방식에서는 uri에 값들을 주소처럼 넣어주고 그걸 @PathVariable로 받아야 하는거야?

RESTful API에서 URI에 값을 넣어서 데이터를 전달하는 방식은 경로 변수(Path Variable)를 사용하는 것이며, 이는 HTTP의 URL 자체에 데이터를 표현하는 방식입니다. 반면에 쿼리 스트링(Query String)은 URL 끝에 "?"로 시작하여 키-값 쌍으로 데이터를 전달하는 방식입니다.

스프링에서는 RESTful API에서 URI를 활용하여 데이터를 전달할 때, @PathVariable 어노테이션을 사용하여 경로 변수에 값을 매핑합니다. 이는 RESTful API의 자원을 나타내는 경로에서 식별자(identifier) 역할을 하는 값들을 추출하기 위한 방식입니다. @PathVariable 어노테이션을 사용하면 URI의 일부를 메서드의 매개변수로 매핑할 수 있습니다.

예를 들어, 아래와 같은 URI가 있다고 가정해봅시다.

bashCopy code
GET /users/{id}

위 URI에서 {id}는 변수로, 실제 값을 전달할 수 있는 자리입니다. 이 경우, id라는 경로 변수에 해당하는 값을 메서드의 매개변수로 받기 위해 @PathVariable 어노테이션을 사용합니다.

반면에, 쿼리 스트링을 사용하여 데이터를 전달하는 경우에는 @RequestParam 어노테이션을 사용하여 쿼리 스트링의 키-값 쌍을 메서드의 매개변수에 매핑합니다.

RESTful API에서는 URI 자체에 데이터를 표현하는 것이 관례적이며, 이를 활용하여 자원의 고유한 식별자를 표현하고 다양한 요청을 처리할 수 있습니다.

[](data:image/svg+xml,%3csvg%20xmlns=%27http://www.w3.org/2000/svg%27%20version=%271.1%27%20width=%2738%27%20height=%2738%27/%3e)

uri 자체에 데이터를 표현하는 특별한 이유가 있어?

URI(Uniform Resource Identifier)는 리소스를 식별하기 위한 고유한 주소로, RESTful API에서는 URI를 활용하여 자원을 나타냅니다. URI 자체에 데이터를 표현하는 것은 RESTful API의 아키텍처 원칙 중 하나인 "자원(resource)의 표현(representation)"을 따르기 위한 것입니다. 이는 RESTful API의 핵심 개념 중 하나로, 자원을 고유한 URI로 식별하고 해당 자원의 상태를 표현하는 것을 의미합니다.

URI 자체에 데이터를 표현함으로써 몇 가지 이점이 있습니다.

  1. 자기서술적인 URI: URI 자체에 데이터를 표현하면, URI만으로도 해당 자원의 정보를 파악할 수 있어서 자기서술적인(self-descriptive)인 API를 설계할 수 있습니다. URI를 보고 어떤 자원에 접근하고 있는지 명확하게 이해할 수 있습니다.
  2. 간결한 URI: URI에 데이터를 표현하면, 쿼리 스트링을 사용하지 않고도 URI 자체에 필요한 데이터를 표현할 수 있습니다. 이로써 URI가 더 간결하고 직관적으로 보일 수 있습니다.
  3. 검색 가능한 URI: URI에 데이터를 표현하면, 검색 엔진이나 기타 도구를 활용하여 URI를 검색하고 필요한 정보를 추출하기 쉬워집니다. 이는 API를 활용한 자원 검색에 유용할 수 있습니다.