본문 바로가기
BACK-END/SPRING

[SPRING] @ResponseBody란?

by 썬키 2023. 2. 23.
 

[SPRING] dispatcherServlet, ViewResolver, Controller

[SPRING] 스프링 설치 및 프로젝트 설정 이번 포스트에서는 스프링을 설치하고, 프로젝트 생성 및 초기 설정에 대해 다뤄보려고 한다. 스프링 설치 우선, 스프링은 아래의 링크에서 다운받을 수 있

itsmesunky.tistory.com

 

 

 

지난 포스트에서는 사용자의 URL 요청이 들어오면 dispatcherServlet이 해당 URL과 매핑되는

Controller를 찾아서 메소드를 실행한 다음 viewResolver를 통해 해당 view로 이동하는 과정을 살펴보았다.

 

그런데, 이번 포스트에서는 사용자의 요청 URL과 매핑되는 Controller

@ResponseBody 어노테이션이 작성되면 어떤 흐름으로 진행되는지 알아보려고 한다.

 

 

코드

 

@GetMapping("hello.do")
@ResponseBody
public String hello(String name) {
	return "hello " + name;
}

 

HelloController에 위와 같은 코드를 작성하고 'hello.do?name='

URL 요청을 보내면 다음과 같은 결과를 확인할 수 있다.

 

결과

 

페이지 소스 보기로 확인한 결과

 

위의 코드와 이미지를 보면 알 수 있듯이 @ResponseBody 어노테이션이 붙어있으면

viewResolver를 통해 return 값에 있는 view로 가는 것이 아닌 값 그대로를 출력하는 것을 확인할 수 있다.

어노테이션 생김새 그대로 HTTP 프로토콜의 Body 부분에 출력을 하겠다는 뜻이 된다.

 

그렇다면 String 값만 출력할 수 있냐 궁금증이 생길텐데 그렇지 않다.

@ResponseBody 는 객체를 출력할 수도 있다.

 

코드

 

@GetMapping("hello-class.do")
@ResponseBody
public Hello helloCls(String name) {
    Hello hello = new Hello();
    hello.setName(name);
    return hello;
}

static class Hello (
	private String name;
    
    public String getName(){
    	return name;
    }
    
    public void setName(String name){
    	this.name = name;
    }
);

 

 

@ResponseBody 를 통해 객체를 출력해보기 위해 static class를 작성하고 인스턴스화 해주었다.

그리고 hello-class.do?name= 을 통해 들어오는 parameter 값으로

hello 클래스 변수의 값을 초기화 해주는 코드를 작성했다.

 

결과

 

 

hello 객체가 JSON 형태로 출력된 것을 확인할 수 있다.

 

이처럼, @ResponseBody 는 문자열ㆍ객체 그대로를 출력한다는 것을 확인할 수 있다.

그렇다면 이 처리는 누가 해주는 것일까?

 

위의 그림은 인프런 김영한 - 스프링 입문 강의를 참고하였습니다.

 

이미지를 참고하면 HttpMessageConverter 라는 객체가 그 역할을 하는 것으로 확인이 된다.

return 값이 객체이면 JSONConverter가 작동, return 값이 String이면 StringConverter가 작동한다.

따라서 브라우저에서는 그에 맞는 데이터를 문자열 형식으로 확인할 수 있는 것이다.

 

이 포스트를 통해 스프링에서 @ResponseBody 어노테이션을 만나면

어떻게 동작하는지 이해가 되었으면 좋겠다.

댓글