ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [SPRING] 스프링의 정의 / 특징 / 동작 원리
    study/spring 2020. 7. 21. 19:36

    스프링 프레임워크란?

    자바 엔터프라이즈 개발을 편하게 해주는 경량급 오픈 소스 애플리케이션 프레임워크

     

    Lightweight Java Application Framework

    POJO 기반의 Enterprise Application 개발을 쉽고 편하게 할 수 있도록 하기 위해 사용한다.

    일반적인 프레임워크의 경우 과도한 엔지니어링 기술을 탑재하여 무겁고 고가의 WAS를 갖추어야만 동작했지만 스프링 프레임워크는 엔터프라이즈 개발에서 필요로 하는 기술을 포함하고 있지만 가볍고 단순히 환경에서 사용할 수 있다.

     

    애플리케이션 프레임워크

    소프트웨어 개발자가 응용 소트프웨어의 표준 구조를 구현하기 위해 사용하는 소프트웨어 프레임워크로 구성

    즉, 프로그래밍에서 특정 OS를 위한 응용 프로그램 표준 구조를 구현하는 클래스와 라이브러리의 모임

     

    프레임워크의 장/단점

    장점 - 개발 시간을 줄일 수 있고 오류로부터 자유로울 수 있다.

    단점 - 프레임워크에 너무 의존하면 개발 능력이 떨어져서 프레임워크 없이 개발하는 것이 힘들어진다.

     

    Q. 프레임워크와 라이브러리의 차이점은??

    A. 라이브러리는 개발자가 모든 개발의 흐름을 제어한다. 개발자가 주가 되어 필요한 기능을 호출하고 능동적으로 사용하는 데에 반해 프레임워크는 개발자가 아닌 프로그램이 흐름을 제어한다는 데에 있다. 한마디로 프로그램의 주도성이 누구에게 있는가의 차이.

     

    특징

    - IoC ( Inversion of Control ) : 제어의 역행

    제어의 주체가 개발자가 아닌 프레임워크라는 뜻으로 때에 따라 프레임워크가 작성된 코드를 호출하는 기술

    객체의 생명주기의 관리까지 모든 객체에 대한 제어권을 프레임워크가 가진다.

     

    - DI ( Dependency Injection ) : 의존 주입

    의존성 객체를 개발자가 생성하지 않고 클래스를 Bean으로 등록해놓으면 Bean으로 등록된 객체를 프레임워크가 찾아서 알아서 주입해주는 기술 => 모듈간의 결합도를 낮춤

     

    Q. 의존성이란?

    A. 현재 객체가 다른 객체와 상호작용하고 있다면 다른 객체들은 현재 객체의 의존이라고 한다.

     

    - AOP ( Aspect Oriented Programming )

    각 코드마다 공통된 관심사를 분리하여 모듈화하는 프로그래밍 기법

    객체지향적으로 프로그래밍을 했음에도 로그, 트랜잭션, 성능확인 등 공통적인 관심사가 중복되는 문제점을 해결하기 위해 프록시 패턴을 사용하여 코드를 분리하여 관리하는 기술

     

    - PSA ( Portable Service Abstraction ) => 추상화되어 코드가 간결

    POJO 프로그래밍을 지원하기 위해 다양하게 구현되어있는 인터페이스를 같은 방식으로 사용하도록 중간에 인터페이스 어댑터 역할을 해주는 레이어를 추가하는 방법

    실제로 다 구현을 해줘야 되는 것들을 스프링이 다 구현해놓고 어노테이션으로 만들어 놓아 어노테이션만 선언하면 내부적으로 다 동작이 되도록 추상화 한 것

    ex ) servlet 을 상속받지 않고 @Controller 를 사용하는 것

         @Transactional 이라는 것으로 트랜잭션 관련 일을 대체하는 것

     

    - POJO

    EJB 등에서 사용되는 Java Bean이 아닌 Getter와 Setter로 구성된 가장 순수한 형태의 기본 클래스

    "POJO는 getter 와 setter를 가진 단순한 자바 오브젝트"가 아니라 "getter와 setter를 가진 가장 단순한 자바 오브젝트는 POJO"다.

    이전에는 원하는 엔터프라이즈 기술이 있다면 그 기술을 사용할 객체를 만들어서 사용하였다.

    EJB에서는 클래스들이 extends, implements 를 사용한 복잡한 코드들이 많았다.

    그럴 경우 각 클래스 간의 의존도가 생기고 추후 변경이 필요할 경우 코드에서 수정해야 할 부분이 많아지는 등의 문제가 생긴다.

    기술을 사용할 객체를 만들어 사용하려다보니 불필요한 상속과 같이 기술에 맞는 환경에 의존하게 되면서 확장성이 매우 떨어지는 단점이 있었다. 

    POJO는 extends, implements를 없애고 대신 어노테이션을 사용함으로써 의존도를 낮췄다.

    하지만 스프링은 PSA 기술을 사용하여 POJO 프레임워크로 만들 수 있었다.

    가장 대표적인 예시는 JPA(인터페이스)와 ORM(기술)이다.

    스프링은 ORM 프레임워크를 사용하기 위해 JPA라는 표준 인터페이스를 두었기 때문에 스프링은 ORM 기술에 종속되는 환경을 만들지 않고 엔터프라이즈 기술을 도입할 수 있었다.

     

     

     

    Spring MVC 구조의 처리과정

    Spring MVC 동작원리

    1. DispatcherServlet

    애플리케이션으로 들어오는 모든 Request를 받는 부분. Request를 실제로 처리할 Controller에게 전달하고 그 결과값을 받아서 View에 전달하여 적절한 응답을 생성할 수 있도록 흐름을 제어

    2. HandlerMapping

    Request URL에 따라 각각 어떤 Controller가 실제로 처리할 것인지 찾아주는 역할

    3. Controller

    Request를 직접 처리한 후 그 결과를 다시 DispatcherServelt에 돌려주는 역할

    4. ModelAndView

    Controller가 처리한 결과와 그 결과를 보여줄 View에 관한 정보를 담고 있는 객체

    5. ViewResolver

    View 관련 정보를 갖고 실제 View를 찾아주는 역할

    6. View

    Controller가 처리한 결과값을 보여줄 View를 생성

     

    참고

    POJO

    https://m.blog.naver.com/writer0713/220700687650

     

    [java] POJO란?

    자바와 스프링 공부를 하면서 여러 자료를 찾아보는데 항상 POJO라는 단어가 많이 등장했다. 도대체 P...

    blog.naver.com

    스프링 동작원리

    https://starkying.tistory.com/entry/Spring-MVC-%EB%8F%99%EC%9E%91%EC%9B%90%EB%A6%AC-%EA%B5%AC%EC%84%B1%EC%9A%94%EC%86%8C

     

    Spring MVC 동작원리 / 구성요소

    Spring MVC의 동작 원리 1. DispatcherServlet이 브라우저로부터 요청을 받는다. 2. DispatcherServlet은 요청된 URL을 HandlerMapping 객체에 넘기고, 호출해야 할 Controller 메소드(핸들러) 정보를 얻는다. 3...

    starkying.tistory.com

     

Designed by Tistory.