본문 바로가기
Framework/Spring Framework

[Spring] 스프링 애플리케이션에서 서버 단에서의 처리 결과를 HTTP Response Body에 바로 담아서 반환해주는 방법 (view 형으로 내보내는 것이 아닌)

by gf0308 2022. 3. 18.

예전에 스프링 애플리케이션에서 서버에서 처리한 결과를 리턴할 때 많이 쓰던 방식은

Model, ModelAndView 같은 객체에 결과 데이터를 담고 ( model.addAttribute() / mv.addObject() )

뷰 경로명을 리턴해주면 ( return “뷰 경로” / mv.setViewName(”뷰 경로”) )

ViewResolver로 해당 뷰를 찾고 데이터를 넘겨주어 최종 결과를 완성해서 표시해주는 방식이었다.

 

근데 이렇게 결과 데이터를 view의 그릇에 담아 표시하는 방식이 아닌

HTTP 응답 몸체(HTTP Response의 Body 부분)에 처리결과를 직접 담아서 바로 내보내 주고, 클라이언트에선 이를 JSON 형태로 받아서 볼 수 있는 방식이 있다.

→ 이를 이용하면 view 없이도 처리결과를 json 형식으로 간편하게 받아 볼 수 있음 → 편리함

@RequestMapping(value = "/getUser", method = RequestMethod.GET)
public @ResponseBody UserDTO getUser(Integer id) { //@ResponseBody  <---- 이게 붙은 방식
	logger.info("==========[UserController.getUser]==========");

	UserDTO resTeo = userDaoIbatis.selectUserById(id);
	return resTeo;
}
//애노테이션 적으로는 해당 컨트롤러에 @ResponseBody 를 사용한 방식.

 

HTTP Response Body에 처리결과를 직접 적재해서 클라이언트로 보내는 방법

이렇게 하기 위해선 다음 3가지 설정이 필요하다

  • (1) JSON Mapper 라이브러리 추가: ‘jackson-mapper-asl’
  • (2) <annotation-driven/> 태그 사용 (servlet 설정 xml 안에서 ex: servlet-context.xml)
  • (3) 해당 컨트롤러 메서드에 @ResponseBody 애노테이션 처리

 

(1) json mapper 라이브러리 추가

(2) servlet 설정 xml에서 <annotation-driven/> 설정 넣기

(3) 해당 컨트롤러 부분에 @ResponseBody 적기

⇒ 이렇게 함으로써 서버에서 처리된 결과는 HTTP Response Body에 직접 매핑되어 적재되고, 바로 클라이언트로 리턴될 수 있다.