오늘은 Spring MVC에 대해 적어보려고 한다. Spring MVC란 Spring framework에서 사용하는 MVC패턴으로 아래의 구조를 가진다.
전체적인 흐름은 다음과 같다.
필자는 요청이 들어오면 그에 응답하는 View가 아닌 JSON 객체를 응답하기에 @ResponseBody 어노테이션을 활용해 자바 객체인 Model을 JSON 형식으로 반환했다.
이런 Spring MVC 구조에서 개발자인 우리가 주로 관여하는 부분은 보라색으로 표시된 Controller, Service, Repository이다. 이전의 포스트에서 우리는 Spring은 DI를 IoC 컨테이너에게 위임하는 것을 알 수 있었다. 하지만 모든 객체가 IoC 컨테이너에 의해 관리되지 않는다. Bean이라는 특정 객체에만 의존성 주입이 적용되는데 Controller, Service, Repository가 바로 Bean 객체이다.
IoC 컨테이너 안에서 Bean이라는 객체의 생성부터 삭제까지 관리된다고 말했다. 여기서 Bean scope란 Bean 객체가 존재할 수 있는 범위를 뜻한다. Bean scope 기본설정은 싱글톤이다.
싱글톤은 IoC 컨테이너가 시작될 때 Bean도 단 하나만 생성되며 IoC 컨테이너가 종료될 때까지 단 하나의 Bean 객체만 존재하는 것을 보장한다.
다음으로 프로토타입이 있는데 이 경우 빈의 생성과 의존관계 주입까지만 관여하고 더는 관리하지 않는다. 그렇기에 요청이 오면 항상 새로운 인스턴스를 생성하여 반환하고 이후에 관리하지 않는다.
참고 - 예제로 배우는 스프링 입문