IT 기초지식/CS 스터디
[CS스터디] Spring 3.
예린_dev
2022. 6. 5. 12:31
- DI 종류는 어떤것이 있고, 이들의 차이는 무엇인가요?
- DI는 클래스 사이의 의존관계를 빈 설정 정보를 바탕으로 컨테이너가 자동적으로 연결해주는 것을 말한다.
- 의존성 주입의 종류: Field Injection, Setter Injection, Constructor Injection
- Field Injection
- @Autowired
private SampleService sampleService; - 자신의 내부에 놓고 주입하는 방식
- 간편하지만 참조 관계를 눈으로 확인하기 어렵다. 따라서 남발하게 되면 참조 관계가 꼬일 수 있다.
- @Autowired
- Setter Injection
- @Autowired
private void setsampleService(SampleService sampleService){
this.sampleSercie = sampleService;
};
- @Autowired
- Constructor Injection
- @Autowired
private SampleService(SampleDAO sampleDAO){
this.sampleDAO = sampleDAO;
}; - 생성자를 통해 의존성을 주입하는 방식이다.
- 총 3가지 주입 방식 중 가장 권장되는 주입 방식이다.
- @Autowired
- 필드 주입 방식과 생성자 주입 방식의 결과가 다른 이유
- 의존성을 주입하는 시점이 생성자 / 필드, setter 방식이 다르기 때문이다.
- 필드, setter 주입 방식의 경우, 빈 객체를 먼저 생성한 뒤에 의존성을 주입하기 때문에 빈 객체를 생성하는 시점에는 순환 참조가 발생하는지 알 수 있는 방법이 없다. (생성 -> 주입)
- 생성자 주입 방식의 경우, 빈 객체를 생성하는 시점에 생성자의 파라미터 빈 객체를 찾아 먼저 주입한 뒤에 주입받은 빈 객체를 이용하여 생성한다.(주입 -> 생성)
- final 키워드 사용으로 불변성을 통한 오류 방지
- 필드, setter 주입 방식은 예기치 못한 상황으로 빈 객체가 변경될 수 있어 이로 인한 오류가 발생할 수 있다.
- 생성자 주입 방식의 경우, final을 사용할 수 있고 이를 통해 객체 생성 시점에 필수적으로 빈 객체 초기화를 수행해야 하기 때문에 null이 아님을 보장할 수 있고, 초기화된 객체는 변경될 수 없다.
- Autowiring 과정에 대해서 설명해주세요.
- 컨테이너에서 타입을 이용해 의존 대상 객체를 검색하고, 할당할 수 있는 빈 객체를 찾아 주입한다.
- 해당 타입의 빈을 찾아서 필드에 할당
- Spring Web MVC의 Dispatcher Servlet의 동작 원리에 대해서 간단히 설명해주세요.
- Dispatcher Servlet은 적합한 컨트롤러와 메소드를 찾아 요청을 위임해야 한다.
- 1. 클라이언트의 요청을 디스패처 서블릿이 받음
- 2. 요청 정보를 통해 요청을 위임할 컨트롤러를 찾음
- 3. 요청을 컨트롤러로 위임할 핸들러 어댑터를 찾아서 전달함
- 4. 핸들러 어댑터가 컨트롤러로 요청을 위임함
- 5. Business Login을 처리함
- 6. 컨트롤러가 반환값을 반환함
- 7. HandlerAdapter가 반환값을 처리함
- 8. 서버의 응답을 클라이언트로 반환함
- 프론트 컨트롤러 패턴이란 무엇인가요?
- 요청 경로마다 서블릿을 정의하는 것은 공통된 로직(한글인코딩처리 등)을 중복 작성한다는 비효율적인 측면이 있다. 서블릿을 개별적으로 다루어 공통된 로직을 여러번 작성하지 말고 공통된 로직을 하나의 서블릿만으로 앞단에 두어 모든 클라이언트의 요청을 처리하면 공통된 로직을 매번 작성하지 않아도 되서 개발자는 핵심 로직에만 집중할 수 있을 것이다. 이러한 디자인 패턴을 프론트 컨트롤러 패턴이라고 한다.
- 프론트 컨트롤러 패턴의 이점
- 1. 컨트롤러를 구현할 때 직접 서블릿을 다루지 않아도 된다.
- 2. 공통 로직 처리가 가능하다.
- 스프링은 프론트 컨트롤러 패턴을 따르고 이를 DispatcherServlet이 담당한다.
- Spring boot 자동 구성은 DispatcherServlet을 자동으로 등록하고 구성한다.
반응형