MVC 패턴과 Spring 프레임워크
사실과 다른 내용이 있으면 피드백 부탁드립니다.
MVC 패턴
- MVC 패턴이 무엇인가?
- 왜 MVC 패턴을 써야하는가?
- 비즈니스가 복잡해지니까
- 모델/뷰/컨트롤러를 분리할 필요성 제기
- 하나의 복잡한 프로그램보단 단순한 여러개의 프로그램의 모음이 유지보수하기 용이하다.
MVC 패턴이 왜 나왔을까?
정적 웹페이지
- 말 그대로 정적 웹사이트
- Q. 정적 웹페이지의 단점?
동적 웹페이지 (MVC 1도 포함)
- WWW은 문서 이상의 기능을 수행한다.
- 쇼핑몰, 게임, 비디오, ...
- 이제 다이나믹 웹 페이지를 만들 수 있음
- 데이터 저장소도 따로 있음 (DBMS)
- 서블릿: Java 소스코드 안에 HTML이
- JSP: HTML 안에 Java 코드가
- 프로그램이 커지면 코드 가독성이 떨어진다.
- 뷰(HTML) 코드와 서버(Java) 코드를 분리하고 싶다
- 1 source/20,000 lines vs 200 sources/100 lines
Q. MVC 패턴인 좋은건 알겠는데 어떻게 구현하지?
Spring 프레임워크
- IoC, Inversion of Control
- Q1. 프레임워크와 라이브러리의 차이?
- Q2. 인스턴스 생성 주체
- 스프링 IOC 컨테이너
- 인스턴스의 생명주기를 관리: 객체 생성은 누가?
- 스프링 Bean
- Lifecycle of Spring Beans
- Singleton, Stateless?
- Lifecycle of Spring Beans
- DI, Dependency Injection
- @Autowired @Inject
- Q. 주입받는 인스턴스가 생성되지 않는다면?
- 인스턴스를 생성하는데 필요한 또다른 인스턴스들
- Injection 방법들
- Field Injection: Autowired
- Constructor Injection: Contructor argument
- @Autowired @Inject
- AOP, Aspect Oriented Programming
- 비즈니스와 별개의 동작: 로깅, 보안, ...
- 원하는 부분에 Point-cut을 추가
- AOP를 Controller 레이어에서 구현 가능?:
@ControllerAdvice
- Spring MVC
- Dispatcher Servlet
- Q. 이미지, html 같은 정적(static) 파일들의 처리는?
- Handler
- AnnotationMethodHandlerAdapter
- Controller
- Model (include business logic)
- View Resolver
- JSP, XML, JSON, Velocity, ...
- Content Negotiation
- Dispatcher Servlet
- 어노테이션
- 어노테이션 종류
@Controller
@Service
@Repository
@Component
@Bean
@Autowired
@Configuration
@SpringBootApplication
- Q. 컨트롤러 클래스에 @Controller 대신 @Service를 붙이면 어떻게 될까?
- Q. Component와 Bean의 차이?
- 어노테이션만 붙이면 다 알아서 되나?
- 어노테이션 종류
- Spring Boot: https://start.spring.io/
- Spring XML 설정
- Default 설정
...
59.9 Use Jetty instead of Tomcat The Spring Boot starters (spring-boot-starter-web in particular) use Tomcat as an embedded container by default. You need to exclude those dependencies and include the Jetty one instead. Spring Boot provides Tomcat and Jetty dependencies bundled together as separate starters to help make this process as easy as possible.
...