// @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)으로 변환하여 클라이언트에게 보내주게 됩니다.
작동 방식
- 데이터 변환: @ResponseBody 애노테이션이 붙은 메서드가 객체를 반환하면, Spring은 이 객체를 HTTP 응답 본문에 쓰기 위해 자동으로 JSON이나 XML로 변환합니다. 이 변환 과정은 HttpMessageConverter 인터페이스를 구현한 클래스들에 의해 처리됩니다. JSON 변환의 경우 주로 MappingJackson2HttpMessageConverter가 사용되며, Jackson 라이브러리를 기반으로 작동합니다.
- 컨텐트 협상: 클라이언트의 Accept 헤더를 통해 클라이언트가 어떤 형식의 데이터를 수신하길 원하는지 확인합니다. 예를 들어, 클라이언트가 Accept: application/json을 요청 헤더에 포함시켰다면, 응답은 JSON 형식으로 변환됩니다.
- 응답 설정: 최종적으로 변환된 데이터는 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 필드의 값을 설정할 수 있게 합니다. 이 메서드는 사용자 입력을 객체의 상태로 설정하는 데 사용됩니다.
'SPRING > Spring' 카테고리의 다른 글
[스프링| 스프링 입문 | 코드로 배우는 스프링] 회원 도메인과 리포지토리 만들기 (0) | 2024.04.23 |
---|---|
[스프링| 스프링 입문 | 코드로 배우는 스프링] 비즈니스 요구사항 정리 (0) | 2024.04.23 |
[스프링| 스프링 입문 | 코드로 배우는 스프링] MVC와 템플릿엔진 (1) | 2024.04.21 |
[되기시리즈 스프링부트3| 04장 스프링부트와 테스트 ] Given-When-Then패턴 (0) | 2024.02.15 |
[되기시리즈 스프링부트3| 03장 스프링부트3 구조 이해하기] (0) | 2024.02.14 |