코드와이
[웹] 스프링 프레임워크 본문
스프링 프레임워크
- 개념
- POJO 기반의 Enterprise 애플리케이션 개발을 쉽고 편하게 할 수 있도록 한다.
- Spring이 하부구조를 처리하기 때문에 개발자는 애플리케이션 개발에 집중할 수 있다.
- 동적인 웹 사이트 개발하기 위한 여러가지 서비스를 제공한다.
- 전자 정부 표준 프레임워크 기반의 기술
- 특징
- 경량 컨테이너
- 자바 객체를 담고 있는 컨테이너
- 자바 객체의 생성, 소멸과 같은 라이프사이클을 관리
- 언제든지 스프링 컨테이너로부터 필요한 객체를 가져와 사용할 수 있다
- JDBC를 비롯한 MyBatis, iBatis, Hibernate, JPA 등 DB처리를 위해 널리 사용되는 라이브러리와 연동을 지원한다.
- 경량 컨테이너
- Bean이란
- 컨테이너 안에 들어있는 객체
- 필요할 때 컨테이너에서 가져와서 사용
- @Bean을 사용하거나 xml 설정을 통해 일반 객체를 Bean에 등록할 수 있고, Bean으로 등록된 객체를 쉽게 주입할 수 있다.
- Bean 생명주기
- 객체 생성 -> 의존 설정 -> 초기화 -> 사용 -> 소멸
- 스프링 컨테이너에 의해 생명주기 관리
- 스프링 컨테이너 초기화 시 빈 객체 생성, 의존 객체 주입 및 초기화
- 스프링 컨테이너 종료 시 빈 객체 소멸
- Bean Scope
- singleton(default)
- 애플리케이션에 Bean 등록 시 singleton scope로 등록
- Spring IoC 컨테이너 당 한 개의 인스턴스만 생성
- 컨테이너 Bean 가져다 주입할 때 항상 같은 객체 사용
- 메모리나 성능 최적화에 유리
- prototype
- 컨테이너에서 Bean 가져다 쓸 때 항상 다른 인스턴스 사용
- 모든 요청에서 새로운 객체 생성
- GC에 의해 Bean 제거
- singleton(default)
- Container
- 컨테이너는 보통 인스턴스의 생명주기를 관리하며, 생성된 인스턴스들에게 추가적인 기능을 제공한다.
- 적절한 설정만 되어 있다면 누구의 도움 없이 개발자가 작성한 코드를 스스로 참조하여 알아서 객체의 생성과 소멸을 제어한다.
- 이런 컨테이너 기능을 제공하는 것이 Spring 프레임워크의 특징이자 IoC 패턴이다.
- IoC
- 객체의 생성에서부터 생명주기의 관리까지 모든 객체에 대한 제어권이 바뀐 것을 말한다.
- 개발자에 의해 제어되는 것이 아니라 프레임워크의 내부에서 설정한 대로 진행되는 현상이다.
- DI
- Spring 프레임워크에서 지원하는 IoC의 형태
- DI는 클래스 사이의 의존관계를 빈 설정 정보를 바탕으로 컨테이너가 자동적으로 연결해주는 것을 말한다.
- 개발자는 빈 설정 파일에 의존관계가 필요하다는 정보만 추가하면 된다.
- 클래스를 재사용할 가능성을 높이고, 다른 클래스와 독립적으로 클래스를 테스트할 수 있다.
- 세가지 방법
- Constructor Injection
- Method(Setter) Injection
- Field Injection
- AOP
- 개발자가 핵심 로직에 집중할 수 있도록 소스 코드에서 여러 번 반복해서 쓰이는 코드를 Aspect로 모듈화하여 핵심 로직에서 분리 및 재사용
- POJO
- 환경에 종속되지 않는 것이 장점
- Java에서 제공하는 API 외에 종속되지 않음
- Spring MVC
- DTO
- 계층(Controller, View, Business Layer) 간 데이터 교환을 위한 객체
- DAO
- DB에 접근하기 위한 로직을 담은 객체
- Filter vs Interceptor
- Filter, Interceptor
- 애플리케이션에서 자주 사용되는 기능을 분리하여 관리할 수 있도록 Spring이 제공하는 기능
출처 : https://github.com/WeareSoft/tech-interview/blob/master/contents/spring.md
- 서버 실행 시 Servlet이 올라오는 동안 init 후 doFilter 실행
- Dispatcher Servlet을 지나쳐 Interceptor의 preHandler 실행
- 컨트롤러를 거쳐 내부 로직 수행 후, Interceptor의 postHandler 실행
- doFilter 실행
- Servlet 종료 시 destroy
- 애플리케이션에서 자주 사용되는 기능을 분리하여 관리할 수 있도록 Spring이 제공하는 기능
- Filter 특징
- Dispatcher Servlet 이전에 수행되고, 응답 처리에 대해서도 변경 및 조작 수행이 가능하다
- Spring Context 외부에 존재하며 Spring과 무관한 자원에 대해 동작
- 일반적으로 web.xml에 설정
- 예외 발생 시 Web Application에서 예외 처리
- 인코딩 변환, XSS 방어 등
- init(), doFilter(), destroy()
- Interceptor 특징
- Dipatcher Servlet 이후 Controller 호출 전, 후에 끼어들어 기능 수행
- Spring Context 내부에서 Controller의 요청과 응답에 관여하며 모든 Bean에 접근 가능
- 일반적으로 servlet-context.xml에 설정
- 예외 발생 시 @ControllerAdvice에서 @ExceptionHandler를 사용해 예외 처리
- 로그인 체크, 권한 체크, 로그 확인 등
- preHandler(), postHandler(), afterCompletion()
- 차이점 요약
- Filter는 WAS단에 설정되어 Spring과 무관한 자원에 대해 동작하고 Interceptor는 Spring Context 내부에 설정되어 컨트롤러 접근 전, 후에 가로채서 기능 동작
- Filter는 doFilter() 메소드만 있지만 Interceptor는 preHandler()와 postHandler()로 명확하게 분리
- Interceptor의 경우 AOP 흉내 가능
- handlerMethod(@RequestMapping을 사용해 매핑된 @Controller의 메소드)를 파라미터로 제공하여 메소드 시그니처 등 추가 정보를 파악해 로직 실행 여부 판단가능
- Filter, Interceptor
'웹' 카테고리의 다른 글
JPA란 (0) | 2021.11.30 |
---|---|
[웹] Elasticsearch 보안 설정 및 적용 (0) | 2021.10.09 |
[웹] Elasticsearch 기본 예제 (0) | 2021.09.29 |
[웹] JPA (0) | 2021.08.08 |
[웹] Spring(3) Interceptor (0) | 2021.08.07 |