본문 바로가기

Java/Spring

[Spring Boot] Path Variable - 가변 URI 사용

728x90
반응형

 

 

 

이번에는 우리가 정의한 URI 값을 변경할 수 있도록, 즉 변수를 사용하여 Endpoint를 활용해 보도록 하겠음.

 

API의 URI를 클라이언트에서 활용할 때에는 정의된 형태로만 호출해야 함. API는 Application Programming Interface이고 Interface는 곧 약속이므로 이 API를 제공하는 사람이 정의해 놓은 방식대로 사용해야 한다는 것. 정의되지 않은 URI를 호출하면 HTTP Status Code 중에서 Page Not Found(또는 Not Found) 에러를 반환하고 정의되지 않은 메서드를 호출하면 Method Not Allowed를 받게 됨.

 

이처럼 고정된 API만 사용하는 것이 아니라 만약 URI에 가변적인 데이터를 추가해 사용할 수 있다편 편리할 것임. 그렇다면 가변 형태의 URI는 어떻게 쓸 수 있을까?

 

http://localhost:8080/books/1
http://localhost:8080/books/123

 

 

위의 두 URL은 books까지는 동일하나 맨 마지막의 1 또는 123이라는 데이터만 변경되어 사용되는 것을 볼 수 있음. 마지막 데이터를 바꿔 줌으로써 첫 번째 URL과 두 번째 URL은 전혀 다른 형태의 데이터 값으로 사용되는 것임. 이러한 경우를 가변 형태의 주소 값 또는 가변 형태의 데이터라고 이야기함.

 

 

 

만약 Spring Boot에서 이러한 가변 형태의 데이터를 사용하려 한다면 전체 주소 값을 내에서 { } 내에 가변 데이터 값을 지정시켜 줄 수 있음. 또한 가변 데이터에 지정된 변수 값이 실제 parameter에 전달될 수 있게끔 @PathVariable이라는 어노테이션을 쓰면 사용자가 입력한 전달 데이터가 자동으로 해당 변수에 지정되는 방식으로 작성할 수 있게 됨.

 

@RestController
public class HelloWorldController{
    // GET
    // URI: /hello-world
    // @RequestMapping(method=RequestMethod.GET, path="/hello-world")
    @GetMapping(path="/hello-world")
    public String helloWorld(){
        return "Hello World!";
    }
    
    @GetMapping(path="/hello-world-bean")
    public HelloWorldBean helloWorldBean(){
        return new HelloWorldBean("Hello World!");
    }
    
    @GetMapping(path="/hello-world-bean/path-variable/{name}")
    public HelloWorldBean helloWorldBeanPathVariable(@PathVariable Stirng name){
        return new HelloWorldBean(String.format("Hello World, %s", name));
    }
  
}


@PathVariable의 기능을 사용해 보기 위해 이전에 작성한 HelloWorldController 내에 세 번째 메서드를 만듦. 기존 "/hello-world-bean"에 하위 경로로 /path-variable을 입력한 뒤 다시 그 아래에 가변 데이터로 {name}을 추가함. 또한 이 가변 데이터를 전달 받게 될 변수(String name)를 지정하고 해당 매개변수 앞에는 @PathVariable 어노테이션을 추가해 URI의 {name}과 매개변수인 name이 같으니 매핑 작업을 해달라고 선언해 놓을 수 있음.


cf) 물론 @PathVariable에서 선언한 파라미터의 변수명과 실제 URI에 지정한 가변 데이터의 변수명을 다르게 설정할 수도 있지만 가능한 한 같은 이름으로 만들어 주는 것이 좋음.

 

이제 프로젝트를 실행하고 웹 브라우저를 통해 확인해 보겠음. helloWorldBeanPathVariable()에서는 가변 데이터가 포함된 형태로 메시지를 리턴하고 있으므로, URI의 가변 데이터 위치에 여러 데이터를 입력해 보면 원하는 데이터가 name이라는 변수에 변경되어 들어감으로써 전혀 다른 데이터를 사용하는 것처럼 보이게 할 수 있음.

 

 

 

 

 

 

출처

본 포스트는 인프런 이도원 강사님의 "Spring Boot 3.x 를 이용한 RESTful Web Services 개발" 강의를 참고해 직접 작성 및 정리한 글입니다.

 

 

 

 

 

728x90
반응형