Spring MVC
Spring MVC는 스프링 프레임워크를 구성하는 모듈이다. 정싱 명칭은 Spring Web MVC이다. 서블릿 API를 기반으로 작성된 웹 프레임워크이고 `프론트 컨트롤러 패턴`과 `MVC 아키텍처 패턴`을 사용한다. 견고한 웹 애플리케이션을 만드는데 도움이 되는 풍부한 기능을 제공하고 `annotation`과 `reflection API`를 적극 사용한다.
위의 그림처럼 프론트 컨트롤러인 `DispatcherServlet`을 중심으로 동작하고 MVC(Model-View-Controller)가 협력해서 웹 요청과 응답을 처리하는 방식이다. HTTP요청이 들어오면 DispatcherServlet으로 전달을 한다. DispatcherServlet은 적절한 컨트롤러를 찾아서 요청을 위임하고 위임받은 컨트롤러는 ModelAndView를 생성하고 이를 DispatcherServlet에게 돌려준다.
※`MVC`
화면의 구성요소와 데이터를 담은 모델, 화면 출력 로직을 담은 뷰, 애플리케이션 제어 로직을 담은 컨트롤러로 구분한 아키텍쳐 패턴
※`프론트 컨트롤러 패턴`
컨트롤러를 대표해서 모든 요청과 응답을 대응한다. 그릐고 요청 및 응답에 대한 횡단 관심사를 적용시키고, 적절한 하위 컨트롤러에게 작업 위임, 뷰 선택 및 결과를 출력 하는 패턴이다.
※`Annotation`
코드의 메타-데이터로 작성,컴파일 또는 런타임에 활용하는 기법이다. JDK가 제공하는 빌트인과 직접 작성하는 커스텀으로 분류된다.
※ `Reflection API`
클래스나 객체의 메소드,필드 등의 정보를 확인 또는 이용할 수 있는 API이다. 객체의 생성이나 메소드 호출을 동적으로 할 수 있는 강력한 기법
// Without reflection
Duck duck = new Duck();
duck.quack();
// With reflection
Object duckObject = Class.forName("examples.spring.Reflection$Duck").newInstance();
Method quack = duckObject.getClass().getDeclaredMethod("quack", new Class<?>[0]);
quack.invoke(duckObject);
class Duck {
void quack() {
System.out.println("꽥꽥!");
}
}
Spring Boot
스프링 부트는 스프링 단독 실행 및 즉시 운영 가능한 애플리케이션 개발에 도움을 준다. 기본으로 설정된 스프링 플랫폼 및 서드 파티 라이브러리 사용을 통해 생산성을 증대시키고 최소한의 설정으로 애플리케이션 개발 빛 구동이 가능하다.
기본적으로 UTF-8 인코딩을 위한 서블릿 필터가 등록되어있다. 또한 정적 자원과 WebJars에 대한 위치 설정 및 요청 연결 템플릿 엔진 설정 및 기본 뷰 리졸버를 구성하고 있다. 또한, JSON/XML을 다룰 수 있는 메시지 변환기를 등록하였다.
스프링 부트는 스프링 MVC와 기타 라이브러리를 기본적으로 구성해서 세팅한 상태이다. 최소한의 설정을 통해 애플리케이션 개발 및 구동이 가능하다. 스프링만 사용하면 톰캣을 별도로 설치하고, 패키징한 파일을 톰캣에 배포해야한다. 부트는 톰캣이 자동으로 설치되고 톰캣 내부에 자동으로 코드를 가지고 있어서 생산성이 좋다.
주요 애노테이션
1. `@ComponentScan`
`@Component`,`@Service`,`@Repository`,`@Controller`,`@Configuration`이 붙은 클래스 Bean들을 찾아서 Context에 bean등록 시켜주는 애노테이션
2. `@RequestMapping`
요청 URL을 어떤 메서드가 처리할지 mapping해주는 애노테이션
3. `@GetMapping` , `@PostMapping`
`@RequestMapping(Method=RequestMethod.GET` 과 같은 기능을 함
4. `@Valid`
유효성 검증이 필요한 객체임을 지정한다.
5. `@Autowired`
Type에 따라 알아서 Bean을 주입한다.
6. `@ConfigurationProperties`
스프링 부트는 application.properties 파일을 이용해서 설정을 제공한다. 부트가 제공하는 프로퍼티뿐만 아니라 커스텀 프로퍼티를 추가할 수 있다.
'Spring & Spring Boot' 카테고리의 다른 글
Feign Client (0) | 2020.10.08 |
---|---|
스프링 - 비동기 처리 @async (0) | 2020.08.16 |
컨트롤러 테스트 @WebMvcTest vs @SpringBootTest (0) | 2020.07.16 |
RequestContextHolder (0) | 2020.06.29 |
스프링 웹 프로그래밍 (1) (0) | 2020.02.22 |
댓글