본문 바로가기

SPRING/Spring

[스프링| 스프링 입문 | 코드로 배우는 스프링] API

// @GetMapping 애노테이션은 이 메서드가 GET 요청을 처리하도록 지정합니다. URL 경로는 "hello-api"입니다.
@GetMapping("hello-api")

// @ResponseBody 애노테이션은 메서드에서 반환하는 객체를 HTTP 응답 본문으로 직접 쓰도록 지시합니다.
@ResponseBody

// helloApi 메서드 정의: 클라이언트로부터 "name" 파라미터를 받아서 처리합니다.
public Hello helloApi(@RequestParam("name") String name) {
    // Hello 클래스의 인스턴스를 생성합니다.
    Hello hello = new Hello();

    // 입력 받은 이름을 Hello 객체의 name 필드에 설정합니다.
    hello.setName(name);

    // 설정된 Hello 객체를 반환합니다. @ResponseBody에 의해 JSON 형태로 클라이언트에 전달됩니다.
    return hello;
}

// Hello 클래스를 정의하는 부분입니다. 이 클래스는 name 필드를 가지고 있습니다.
static class Hello {
    // name 필드를 private로 선언하여 외부 접근을 제한합니다.
    private String name;

    // getName 메서드: name 필드의 값을 반환합니다.
    public String getName() {
        return name;
    }

    // setName 메서드: name 필드에 새로운 값을 설정합니다.
    public void setName(String name) {
        this.name = name;
    }
}

API와 @ResponseBody 애노테이션 설명

API: 이 코드에서 정의한 API는 **/hello-api**라는 경로로 GET 요청을 받아 name 파라미터를 요구합니다. 클라이언트가 /hello-api?name=YourName 형태로 요청을 보내면, 서버는 Hello 객체를 생성하고 요청에서 받은 name 값을 객체에 설정한 후, 이 객체를 JSON 형식으로 클라이언트에 반환합니다.

@ResponseBody: Spring에서 @ResponseBody 애노테이션은 컨트롤러 메서드의 반환 값을 HTTP 응답 본문에 직접 작성하도록 합니다. 이 애노테이션을 사용하면 반환 객체가 자동으로 JSON 형태로 변환되어 클라이언트에 전송됩니다. 이 과정에서 내부적으로 Jackson과 같은 라이브러리가 사용됩니다.

 

@ResponseBody는 Spring Framework의 중요한 애노테이션 중 하나로, 컨트롤러 메서드가 반환하는 값을 HTTP 응답 본문에 직접 작성하도록 지시합니다. 이 애노테이션을 사용하면 Spring MVC가 자동으로 반환 객체를 적절한 형식 (보통 JSON 또는 XML)으로 변환하여 클라이언트에게 보내주게 됩니다.

작동 방식

  1. 데이터 변환: @ResponseBody 애노테이션이 붙은 메서드가 객체를 반환하면, Spring은 이 객체를 HTTP 응답 본문에 쓰기 위해 자동으로 JSON이나 XML로 변환합니다. 이 변환 과정은 HttpMessageConverter 인터페이스를 구현한 클래스들에 의해 처리됩니다. JSON 변환의 경우 주로 MappingJackson2HttpMessageConverter가 사용되며, Jackson 라이브러리를 기반으로 작동합니다.
  2. 컨텐트 협상: 클라이언트의 Accept 헤더를 통해 클라이언트가 어떤 형식의 데이터를 수신하길 원하는지 확인합니다. 예를 들어, 클라이언트가 Accept: application/json을 요청 헤더에 포함시켰다면, 응답은 JSON 형식으로 변환됩니다.
  3. 응답 설정: 최종적으로 변환된 데이터는 HTTP 응답 본문에 쓰여지고, 클라이언트로 전송됩니다. 이 과정에서 HTTP 응답의 Content-Type 헤더는 자동으로 설정되어 클라이언트에게 응답 데이터의 형식을 알려줍니다.

사용 이유 및 장점

  • 간결성: @ResponseBody를 사용하면 별도의 뷰를 생성하지 않고도 데이터를 직접 반환할 수 있어 RESTful API 개발에 효율적입니다.
  • 유연성: 다양한 형식의 응답을 쉽게 구성할 수 있어 클라이언트의 요구사항에 맞춘 데이터 제공이 가능합니다.
  • 통합성: Spring의 @RestController 애노테이션은 @Controller와 @ResponseBody를 합친 것으로, API 개발을 더욱 통합적으로 할 수 있도록 돕습니다.

@ResponseBody 애노테이션은 REST API를 구현할 때 클라이언트와 서버 간의 데이터 교환을 간단하고 효과적으로 만들어 줍니다. 따라서 개발자는 비즈니스 로직과 데이터 처리에 더 집중할 수 있습니다.

Getter와 Setter 설명

Getter와 Setter: 이들은 Java에서 캡슐화 원칙을 실현하는 메서드입니다. private 변수에 대해 외부에서 접근할 수 있도록 public 메서드를 제공합니다.

  • Getter (getName): name 필드의 값을 외부로 읽을 수 있도록 제공합니다.
  • Setter (setName): 외부에서 name 필드의 값을 설정할 수 있게 합니다. 이 메서드는 사용자 입력을 객체의 상태로 설정하는 데 사용됩니다.