본문 바로가기
WEB/Spring

000. 스프링 개념

by hyun-am 2019. 10. 14.

스프링 개념

 

스프링 프레임 워크란

 

스프링 프레임워크(Spring Framework)는 자바 기반의 오픈소스 프레임워크로 자바EE(Enterprise Edition)에서 요구하는 수준의 복잡한 기능들을 자바 EE를 사용하지 않고 구현하고자 시작됨

 

스프링 프레임워크 주요 특징

 

경량 컨테이너로써 객체 생성, 소멸과 같은 라이프 사이클을 관리하며, 스프링 컨테이너로부터 필요한 객체를 얻어올 수 있음

 

제어의 역행(IoC-Inversion of Control) : 컨트롤의 제어권이 사용자가 아니라 프레임워크에 있어서 필요에 따라 스프링에서 사용자의 코드를 호출함

 

의존성 주입(DI-Dependency Injection) : 각각의 계정이나 서비스들 간에 의존성이 존재할 경우 프레임워크가 서로 연결해줌

 

관점 지향 프로그래밍(AOP-Aspect Oriented Programming) : 트랜잭션이나 로깅, 보안과 같이 여러 모듈에서 공통적으로 사용하는 기능의 경우 해당 기능을 분리하여 관리할 수 있습니다.

 

MVC 패턴 (Model - View - Controller) : Controller(서블릿)와 Model(JavaBean) 그리고 View(JSP)가 서로 상호작용 하면서 유지보수가 쉽게 도움을 주는 패턴입니다.

 

 

스프링 프레임워크v5.xx 구조

 

Servlet Stack

 

서블릿 API에 기반한 동기 방식의 blocking I/O 구조를 사용하며, 하나의 요청은 하나의 스레드로 처리됨

Apache Tomcat과 같은 서블릿 컨테이너를 사용하며, 전통적인 Spring MVC 기반의 서버 프로그램 개발과 JPA, JDBC, NoSQL 데이터베이스 지원을 포함

 

Reactive Stack

 

새로운 비동기 non-blocking I/O 구조를 사용하며, 멀티코어 시스템의 장점을 살리고 대규모 사용자 접속을 처리하는데 유용한 구조로 설계됨

 

아래는 스프링프레임워크v5.xx 구조 참고 그림입니다.

 

 

스프링프레임워크 핵심용어

 

IoC

 

제어의 역행(Inversion of Control)이라고 하며, 객체가 자신이 사용할 객체를 직접 생성하거나 선택하지 않는 것으로 프로그램의 제어를 자신이 아닌 다른 곳에 위임하는 것을 말합니다.

 

작업을 수행하는 쪽에서 객체를 생성하는 것이 일반적이 개념이지만 이 개념을 뒤집어 놓았습니다.

 

IoC에서는 객체가 자신이 사용할 객체를 생성하거나 선택하지 않습니다. 

 

객체는 자신이 어떻게 생성되고 어떻게 사용되는지 알 수 없습니다. 

 

모든 객체는 제어 권한을 위임 받은 특별한 객체(컨테이너)에 의해 만들어지고 사용됩니다.

 - 스프링의 경우 스프링 컨테이너라는 곳에서 객체를 생성하고 공급하는 역할을 담당함

 - 스프링 빈(Spring Bean)은 스프링 컨테이너에 의해 관리되는 스프링 객체를 말하는 것으로, 예전에는 XML기반의 설정 파일을 통해 객체와 관계를 정의했으나, 지금은 어노테이션(@)을 통해 설정을 합니다.

 

DI

 

의존성 주입(Dependency Injection)은 IoC를 구현하는 방법 중 하나로, 클래스 간의 의존 관계를 Bean 설정에 기반해 컨테이너가 자동으로 연결해주는 방식입니다.

 

스프링 프레임워크에서는 기본적으로 DI를 사용합니다.

 

자바에서 구현한 DI

class Study{
    private Subject sj;
    public void setSubject(Subject sj){
        this.sj = sj;
    }
    public StudyRun(){
        sj.score();
    }
}

스프링프레임워크에서 구현한 DI

@Component
class Subject{
    void score(){...}
}
class Study{
    @Autowired
    private Subject sj;
    public StudyRun(){
        sj.score();
    }
}

 

AOP

 

관점 지향 프로그래밍(Aspect Oriented Programming)이란 횡단 관심사(Cross-cuttig Concern)의 분리를 허용함으로써 모듈성을 증가시키는 것이 목적인 프로그래밍 패러다임

코드 자체를 수정하지 않는 대신, 기존의 코드에 추가적인 동작인 어드바이스(Advise)를 정의함으로써 추가된 기능이 실행되며, 어느 코드가 포인트컷(Pointcut)을 통해 수정되는지를 별도로 지정하는 구조를 가짐

대표적으로 AOP를 적용하는 분야에는 인증, 로깅, 트랜잭션 등이 있습니다. 

 

댓글