Etc/2020

Spring Framework 기본 정리

메바동 2020. 5. 12. 10:38
728x90

 

Spring Framework(스프링 프레임워크)

Spring Framework란?

Srping Framework란?

  • Java 플랫폼을 위한 오픈소스 애플리케이션 프레임워크로서 엔터프라이즈급 애플리케이션을 개발하기 위한 모든 기능을 종합적으로 제공하는 경량화된 솔루션
  • 엔터프라이즈급 개발이란 기업을 대상으로 하는 개발. 즉, 대규모 데이터 처리와 트랜잭션이 동시에 여러 사용자로부터 행해지는 매우 큰 규모의 환경을 엔터프라이즈 환경이라 일컬음
  • Spring Framework는 경량 컨테이너로 자바 객체를 담고 직접 관리. 객체의 생성 및 소멸 그리고 라이프 사이클을 관리하며 언제든 Spring 컨테이너로부터 필요한 객체를 가져와 사용할 수 있음. 이는 Spring이 IoC 기반의 Framework임을 의미

Spring Framework는 IoC기반, IoC란?

  • IoC는 Inversion of Control 의 약자로 말 그대로 제어의 역전
  • 일반적으로 프로그램은 객체 결정 및 생성 -> 의존성 객체 생성 -> 객체 내의 메소드 호출의 작업을 반복, 이는 각 객체들이 프로그램의 흐름을 결정하고 각 객체를 구성하는 작업에 직접적으로 참여한 것. 즉, 모든 작업을 사용자가 제어하는 구조
  • IoC에서의 객체는 자기가 사용할 객체를 선택하거나 생성하지 않음. 또한 자신이 어디에서 만들어지고 어떻게 사용되는지 또한 모름. 자신의 모든 권한을 다른 대상에 위임함으로써 제어권한을 위임받은 특별한 객체에 의해 결정되고 만들어짐. 즉, 제어의 흐름을 사용자가 컨트롤하지 않고 위임한 특별한 객체에 모든 것을 맡기는 구조
  • IoC란 기존 사용자가 모든 작업을 제어하던 것을 특별한 객체에 모든 것을 위임하여 객체의 생성부터 생명주기 등 모든 객체에 대한 제어권이 넘어간 것을 말함

IoC의 구성요소, DI와 DL

  • IoC는 DI와 DL에 의해 구현
  • DL(Dependency Lookup) - 의존성 검색
    컨테이너에서는 객체들을 관리하기 위해 별도의 저장소에 빈을 저장. 저장소에 저장되어 있는 빈을 개발자들이 컨테이너에서 제공하는 API를 이용하여 사용하고자 하는 빈을 검색하는 방법
  • DI(Dependency Injection) - 의존성 주입
    의존성 주입이란 객체가 서로 의존하는 관계가 되게 의존성을 주입하는 것. 객체지향 프로그램에서의 의존성이란 하나의 객체가 어떠한 다른 객체를 사용하고 있음을 의미
    IoC에서의 DI는 각 클래스 사이에 필요로 하는 의존관계를 빈 설정 정보를 바탕으로 컨테이너가 자동으로 연결 해 주는 것

Spring Framework의 특징, POJO

  • POJO(Plain Old Java Object)란 말 그대로 평범한 자바 오브젝트
  • 이전 EJB(Enterprise JavaBeans)는 확장, 재사용이 가능한 로직을 개발하기 위해 사용되었는데 EJB는 한 가지 기능을 위해 불필요한 로직이 과도하게 들어가는 단점이 존재
  • POJO는 getter/setter를 가진 단순 자바 오브젝트로 정의
    단순 오브젝트는 의존성이 없고 추후 테스트 및 유지보수가 편리한 유연성의 장점을 가짐
    이러한 장점들로 인해 객체지향적인 다양한 설계와 구현이 가능

Spring Framework의 특징, AOP

  • AOP(Aspect Oriented Programming)란 말 그대로 관점 지향 프로그래밍
  • 대부분 소프트웨어 개발 프로세스에서 사용하는 방법은 OOP(Object Oriented Programming)
  • OOP는 객체지향 원칙에 따라 관심사가 같은 데이터를 한 곳에 모아 분리하고 낮은 결합도를 갖게 하여 독립적이고 유연한 모듈로 캡슐화를 하는 것을 일컬음.
    이러한 과정 중 중복된 코드들이 많아지고 가독성, 확장성, 유지보수성을 떨어트림
  • AOP에서는 핵심기능과 공통기능을 분리시켜 핵심 로직에 영향을 끼치지 않게 공통기능을 끼워 넣는 개발 형태
    이러한 방식으로 무분별하게 중복되는 코드를 한 곳에 모아 중복되는 코드를 제거할 수 있어지고, 공통기능을 한 곳에 보관함으로써 공통 기능 하나의 수정으로 모든 핵심기능들의 공통기능을 수정할 수 있어 효율적인 유지보수가 가능하며 재활용성이 극대화

Spring Framework의 특징, MVC (Model2)

  • MVC(Model View Controller)란 사용자 인터페이스와 비즈니스 로직을 분리하여 개발하는 것
  • MVC는 Model1과 Model2로 나누어져 있으며 일반적인 MVC는 Model2를 지칭
  • Model
    Model은 데이터 처리를 담당하는 부분
    Model 부분은 Service 영역과 DAO 영역으로 나누어지게 되고 여기서 중요한 것은 Service 부분은 불필요하게 HTTP 통신을 하지 않아야 하고 Request나 Response와 같은 객체를 매개변수로 받아선 안됨
    또한 Model 부분의 Service는 View에 종속적인 코드가 없어야 하고 View 부분이 변경되더라도 Service 부분은 그대로 재사용할 수 있어야 함
    Model에서는 View와 Controller의 어떠한 정보도 가지고 있어서는 안 됨
  • View
    View는 사용자 Interface를 담당하며 사용자에게 보이는 부분
    View는 Controller를 통해 모델에 데이터에 대한 시각화를 담당하며 View는 자신이 요청을 보낼 Controller의 정보만 알고 있어야 하는 것이 핵심
    Model이 가지고 있는 정보를 저장해서는 안되며 Model, Controller에 구성 요소를 알아서는 안 됨
  • Controller
    Controller에서는 View에 받은 요청을 가공하여 Model(Service 영역)에 이를 전달하는 역할
    Model로부터 받은 결과를 View로 넘겨주는 역할
    Controller에서는 모든 요청 에러와 모델 에러를 처리
    View와 Model의 정보를 알고 있어야 함
  • 이렇게 Model, View, Controller를 나누면 소스를 분리함으로써 각 소스의 목적이 명확해지고 유지 보수하는 데 있어서 용이
  • Model의 Service 영역은 자신을 어떠한 Controller가 호출하든 상관없이 정해진 매개 변수만 받는다면 자신의 비즈니스 로직을 처리할 수 있어야 함. 즉, 모듈화를 통해 어디서든 재사용이 가능하여야 함
    View의 정보가 달라지더라도 Controller에서 Service에 넘겨줄 매개변수 데이터 가공만 처리하면 되기 때문에 유지보수 비용을 절감할 수 있는 효과가 있음. 또한, Service 영역의 재사용이 용이하기 때문에 확장성 부분에서도 큰 효과를 볼 수 있는 장점이 있음

Spring Framework의 구조

  • Spring Core
    Spring Core는 Spring Container를 의미
    core라는 말 그대로 Container는 Spring Framework의 핵심이며 그중 핵심은 Bean Factory Container
    Bean Factory Container가 핵심인 이유는 Bean Factory는 Ioc 패턴을 적용하여 객체 구성부터 의존성 처리까지 모든 일을 처리하는 역할을 하고 있기 때문
  • Spring Context
    Spring Context는 Spring Framework의 context 정보들을 제공하는 설정 파일
    Spring Context에는 JNDI, EJB, Validation, Scheduling, Internaliztion 등 엔터프라이즈 서비스들을 포함
  • Spring AOP
    Spring AOP 모듈은 Spring Framework에서 관점 지향 프로그래밍을 할 수 있고 AOP를 적용할 수 있게 도와주는 모듈
  • Spring DAO
    DAO란 Data Access Object의 약자로 Database Data에 접근하는 객체
    Spring JDBC DAO는 추상 레이어를 지원함으로써 코딩이나 예외처리하는 부분을 간편화 시켜 일관된 방법으로 코드를 짤 수 있게 도와줌
  • Spring ORM
    ORM이란 Object Relational Mapping의 약자로 간단하게 객체와의 관계를 설정하는 것
    Spring에서는 MyBatis(iBATIS), Hibernate, JDO 등 인기 있는 객체 관계형 도구 (OR도구)를 사용할 수 있도록 지원
  • Spring Web
    Spring에서 Web Context 모듈은 애플리케이션 모듈에 내장되어 있고 Web 기반의 응용프로그램에 대한 Context를 제공하여 일반적인 Web Application 개발에 필요한 기본적인 기능을 지원
    그로 인해 Jakarta Struts와의 통합을 지원
  • Spring MVC
    Spring MVC에서는 Model2 구조로 애플리케이션을 만들 수 있도록 지원
    MVC(Model-View-Controller) 프레임워크는 웹 애플리케이션을 작성하기 위한 완전한 기능을 갖춘 MVC를 구현
    MVC 프레임워크는 전략 인터페이스를 통해 고급 구성 가능하며 JSP, Velocity, Tiles, iText 및 POI를 포함한 수많은 뷰 기술을 지원




기본 동작 순서 및 구조







  • 전체적인 실행 순서
    Request -> DispatcherServlet -> HandlerMapping -> Controller -> Service -> DAO -> DB -> DAO -> Service -> Controller -> DispatcherServlet -> ViewResolver -> View -> Response
  1. 클라이언트가 Request 요청을 하면 DispatcherServlet이 요청을 가로챔
    이때 DispatcherServlet이 모든 요청을 가로채는 것이 아닌 web.xml에 <url-pattern>에 등록된 내용만 가로챔

     <servlet>
         <servlet-name>dispatcher</servlet-name>
         <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    
         <init-param>
             <param-name>contextConfigLocation</param-name>
             <param-value>/WEB-INF/dispathcer-servlet.xml</param-value>
         </init-param>
         <load-on-startup>1</load-on-startup>
     </servlet>
     <servlet-mapping>
         <servlet-name>dispatcher</servlet-name>
         <url-pattern>*.do</url-pattern>
     </servlet-mapping>
    

    로 설정하면 *.do 만 가로채게 됨

  2. DispatcherServlet이 가로챈 요청을 HandlerMapping에게 보내 해당 요청을 처리할 수 있는 Controller를 찾음

  3. 실제 로직 처리 (Controller -> Service -> DAO -> DB -> DAO -> Service -> Controller)

  4. 로직 처리 후 ViewResolver를 통해 view 화면을 찾음

  5. View 화면을 최종 클라이언트에게 전송

여기서 사용되는 방식을 일반적으로 MVC 모델2 라고 함




Spring MVC 모델 2 (MVC 패턴)

Spring Framework(스프링 프레임워크)를 사용하게 되면 MVC 패턴을 많이 듣게 됨
MVC 패턴이란 애플리케이션을 Model, View, Controller의 세 영역으로 구분하여 동작하게 만드는 방식

  • 장점 : 비즈니스 로직과 프레젠테이션 로직이 분리
    즉, 디자이너와 개발자의 영역이 분리될 수 있음
    ※ 비즈니스 로직 : 구현 / 프레젠테이션 로직 : 최종 사용자에게 노출
Model View
비즈니스 데이터를 다루는 영역, 비즈니스 데이터는 DBMS에 의해 관리되고 SQL을 통해 구현 프레젠테이션 로직을 담당하는 영역, 일반적으로 자바는 JSP를 통해 구현




Spring Filter, INterceptor, AOP 차이 및 정리

구분 Filter (필터) Interceptor (인터셉터) AOP (관점지향프로그래밍)
실행 위치 서블릿(Dispatcher Servlet 바깥) 서블릿(Dispatcher Servlet 안쪽) 메소드
실행순서 1 2 3
설정 파일 위치 web.xml xml, java xml, java
실행 메소드 init(필터 인스턴스 초기화)
doFilter(전/후 처리)
destroy(필터 인스턴스 종료)
preHandler(컨트롤러 실행 전)
postHandler(컨트롤러 실행 후)
afterCompletion(view 페이지 렌더링 후)
pointcut(포인트컷)
(@after, @before, @around 등)



  • Requset가 들어오면 Filter를 거친 후 Interceptor가 호출됨
    그 후 Controller 내에 Service, Dao 등의 로직이 실행되게 될 텐데, 그 안의 함수들을 처리할 때 AOP를 통해 전/후처리가 가능
  • 전체 순서 : ServletRequest -> Filter -> dispatcherServlet -> Interceptor -> AOP -> 함수 -> AOP -> Interceptor -> dispatcherServlet -> Filter -> ServeltResponse






  1. 히진쓰의 서버사이드 기술 블로그, 히진 : [Spring] Spring Framework란? 기본 개념 핵심 정리
  2. 전디버거의 코딩이야기, 전재훈 : Spring Framework (스프링프레임워크) 기본 동작 순서 및 구조
  3. 전디버거의 코딩이야기, 전재훈 : Spring MVC 모델 2 (MVC 패턴)
  4. 전디버거의 코딩이야기, 전재훈 : Spring Filter, Interceptor, AOP 차이 및 정리
  5. 갓대희의 작은공간, 갓대희 : [Spring] 스프링 이란?

 

728x90