본문 바로가기
Spring

[Spring] 스프링 프레임워크 개요

by Amy IT 2022. 8. 13.

 

목차

     

    Spring Framework 란?

    Spring의 배경

    • 스프링은 자바 엔터프라이즈(J2EE) 개발을 편리하게 해주는 오픈소스 경량 애플리케이션 프레임워크입니다.
    • 엔터프라이즈급 개발이란 대규모 데이터 처리와 트랜잭션이 동시에 여러 사용자로부터 행해지는 매우 큰 규모의 개발을 의미합니다. 2000년대 초반부터 시작된 엔터프라이즈급 개발은 안정된 품질의 개발을 필요로 했고, 그 결과 많은 프레임워크가 나오게 되었습니다.
    • 프레임워크는 뼈대나 근간을 이루는 코드들의 묶음이라고 할 수 있습니다. 프로그램에 필요한 기본 흐름과 구조를 미리 코드로 만들어 놓았기 때문에, 프레임워크를 사용하면 일정한 품질이 보장되는 결과물을 얻을 수 있습니다.
    • 하지만 EJB로 대표되는 과거 엔터프라이즈급 프레임워크들은 너무 복잡하고 방대해서 그 전체를 이해하고 개발하기 어려웠고, 하나의 기능을 위해 너무 많은 구조가 필요했습니다. 이러한 복잡성을 해결하기 위해 나온 경량화된 프레임워크가 스프링입니다. 
    • Rod Johnson이 'Expert One-on-One J2EE Development without EJB'라는 책을 통해서 EJB를 사용하지 않고 엔터프라이즈 애플리케이션을 개발하는 방법을 소개하였고, 이것이 스프링 프레임워크의 모태가 되었습니다.

     

     

    Spring의 특징

    POJO(Plain Old Java Object) 기반

    • POJO는 평범한 자바 객체입니다.
    • 스프링은 다른 프레임워크들과 달리 객체 간의 관계를 구성할 때 별도의 API 등을 사용하지 않는 POJO의 구성만으로 가능하도록 제작되어 있습니다.
    • 이는 특정 환경이나 기술에 종속되지 않는다는 중요한 의미를 갖습니다.
    • 개발자는 가장 일반적인 형태로 코드를 작성하고 실행할 수 있기 때문에 생산성에서도 유리하고 코드에 대한 테스트 작업 역시 유연하게 할 수 있게 됩니다.

     

    IoC(Inversion of Control) 기반

    • IoC는 제어의 역전입니다.
    • 일반적으로 지금까지 프로그램은 어떤 객체가 자신이 사용할 의존 객체를 직접 생성하여 사용하는 방식이었습니다. 이는 모든 작업을 클라이언트가 제어하는 구조입니다.
    • 하지만 스프링에서는 객체의 생성에서 소멸까지 생명 주기의 관리를 스프링 IoC 컨테이너가 대신 합니다. 기존에 클라이언트가 모든 작업을 제어하던 것을 컨테이너에 위임하여 제어의 흐름이 바뀌었기 때문에 제어의 역전이라고 합니다. 

     

    • IoC는 DL(Dependency Lookup)과 DI(Dependency Injection)에 의해 구현됩니다.
    • DL은 의존성 검색입니다. IoC 컨테이너는 별도의 저장소에서 객체들을 빈(Bean)으로 관리하는데, DL은 이 저장소에서 컨테이너가 제공하는 API를 이용해 개발자가 사용하고자 하는 빈을 검색하는 것을 의미합니다.
    • DI는 의존성 주입으로서, 외부의 컨테이너가 빈 설정 정보를 바탕으로 객체들 사이 의존관계를 연결하고 필요한 객체들을 주입하는 것을 의미합니다. 의존성 주입을 사용하면 종속성과 결합도(coupling)가 낮아져 테스트가 용이해지고 재사용성, 유연성, 확장성을 향상시킬 수 있게 됩니다.

     

    AOP(Aspect Oriented Programming) 지원

    • AOP는 관점 지향 프로그래밍입니다. 
    • 대부분 소프트웨어 개발 프로세스에서 사용하는 방법은 OOP(Object Oriented Programming)입니다. OOP는 객체지향 원리에 따라 관심사가 같은 데이터를 한 곳에 모아 분리하고 낮은 결합도를 갖게 하여 독립적이고 유연한 모듈로 캡슐화를 하는 것을 의미합니다. 하지만 이러한 과정에서 중복되는 코드들이 많아져 가독성, 확장성, 유지보수성이 낮아집니다. 이러한 문제를 보완하기 위해 나온 것이 AOP입니다.
    • 대부분의 시스템이 공통적으로 가지고 있는 보안이나 로그, 트랜잭션과 같이 반드시 처리가 필요한 부분을 스프링에서는 횡단 관심사(cross-concern)라고 합니다. AOP는 이러한 횡단 관심사를 모듈로 분리하는 프로그래밍의 패러다임입니다.
    • 스프링은 AOP 지원을 통해 핵심 비즈니스 로직과 공통 기능을 분리하여 반복적인 코드를 줄이고 개발자가 핵심 비즈니스 로직에만 집중할 수 있도록 합니다. 

     

     

    Spring Framework 모듈

    이미지 출처 https://docs.spring.io/spring-framework/docs/4.0.x/spring-framework-reference/html/overview.html

    Core Container

    • Core와 Beans 모듈은 IoC와 DI 기능을 포함한 프레임워크의 가장 기본적인 부분을 제공합니다.
    • Context 모듈은 Email, JNDI 기능, EJB 연계 등과 같은 다수의 엔터프라이스 서비스를 제공합니다.

     

    Data Access/Integration

    • JDBC 모듈은 JDBC 추상 레이어를 지원함으로써 JDBC 구현을 간편화합니다.
    • ORM 모듈은 Object Relational Mapping의 약자로서, Ibatis, Hibernate, JDO 등 인기있는 객체 관계형 도구를 사용할 수 있도록 지원합니다.

     

    WEB

    • Web 모듈은 웹 애플리케이션 개발을 위한 기본적인 기능을 제공합니다.
    • Web-Servlet 모듈에는 웹 애플리케이션 개발을 위한 MVC(Model-View-Controller) 구현이 포함되어 있습니다. 스프링의 MVC 프레임워크는 도메인 모델과 웹 양식을 명확하게 분리하도록 합니다.

     

     

     

    참고

    코드로 배우는 스프링 웹 프로젝트 (구멍가게 코딩단 지음, 남가람북스)

    https://khj93.tistory.com/entry/Spring-Spring-Framework%EB%9E%80-%EA%B8%B0%EB%B3%B8-%EA%B0%9C%EB%85%90-%ED%95%B5%EC%8B%AC-%EC%A0%95%EB%A6%AC?category=770303 

    https://devlog-wjdrbs96.tistory.com/165

    https://docs.spring.io/spring-framework/docs/4.0.x/spring-framework-reference/html/overview.html

     

     

    댓글