Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

코드와이

[웹] 스프링 프레임워크 본문

[웹] 스프링 프레임워크

코드와이 2021. 11. 29. 01:25

스프링 프레임워크

  • 개념
    • 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 제거
  • 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
      1. 서버 실행 시 Servlet이 올라오는 동안 init 후 doFilter 실행
      2. Dispatcher Servlet을 지나쳐 Interceptor의 preHandler 실행
      3. 컨트롤러를 거쳐 내부 로직 수행 후, Interceptor의 postHandler 실행
      4. doFilter 실행
      5. Servlet 종료 시 destroy
    • 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의 메소드)를 파라미터로 제공하여 메소드 시그니처 등 추가 정보를 파악해 로직 실행 여부 판단가능

 

'' 카테고리의 다른 글

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