[Web] 스프링 프레임워크와 스프링 부트

2022. 10. 27. 21:09·Programming/Web
728x90

스프링 프레임워크

스프링 프레임워크(Spring Framwork)는 자바 기반의 오픈소스 프레임워크로 Java EE에서 요구하는 수준의 복잡한 기능을 Java EE를 사용하지 않고 구현하기 위해 시작되었다.

2002년 로드 존슨(Rod Johnson)의 저서 <<Expert One-on-One J2EE Design and Development>>에서 제시한 코드와 아이디어를 발전시켜 2004년 처음 발표된 이후 현재 가장 대표적인 자바 오픈소스 프레임워크가 되었다.

스프링 프레임워크는 높은 수준의 스프링 기반 애플리케이션을 손쉽게 만들어주는 스프링(spring.io) 프로젝트 중 하나로, 20개 이상의 서로 다른 모듈로 구성된다. 프로젝트 규모와 필요 기능에 따라 스프링 프레임워크를 기본으로 여러 모듈을 조합한 형태로 사용하게 된다.

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

  • 경량 컨테이너: 객체 생성, 소멸과 같은 생명 주기를 관리하며 스프링 컨테이너로부터 필요한 객체를 얻어올 수 있다.
  • 제어의 역행 지원: 메서드나 객체의 호출 제어권이 사용자가 아니라 프레임워크에 있어서 필요에 따라 스프링에서 사용자의 코드를 호출한다.
  • 의존성 주입 지원: 각각의 계층이나 서비스 간에 의존성이 존재할 경우 프레임워크가 서로 연결해준다.
  • 관점 지향 프로그래밍 지원: 트랜잭션이나 로깅, 보안과 같이 여러 모듈에서 공통적으로 사용하는 기능의 경우 해당 기능을 분리하여 관리할 수 있다.

스프링의 주요 프로젝트

스프링은 여러 서브 프로젝트로 구성되어 있으며, 각각의 프로젝트는 또 여러 모듈로 구성되어 있다. 따라서 실제 개발에서는 세부 프로젝트의 모듈을 조합해 개발하게 된다. 

 

대표적인 스프링 프로젝트

  • 스프링 부트: 보다 간편하게 스프링 프로젝트를 시작할 수 있도록 해준다. 특히 마이크로서비스 개발 및 웹 애플리케이션 개발에 적합하다.
  • 스프링 데이터: 데이터베이스 연동을 위한 보다 편리한 개발을 지원한다. 전통적인 JDBC에서 부터 JPA(Java Persistence API)까지 모두 지원하며, Redis, MongoDB와 같은 NoSQL을 위한 전용 모듈도 제공한다. 또한 Spring Data Rest는 데이터베이스와 연동되는 REST API 개발의 대부분을 자동화해준다.
  • 스프링 배치: 대량의 데이터를 일괄 처리하기 위한 솔루션으로 대형 시스템에서 주로 사용한다. 편리한 설정과 데이터 작업 시 발생하는 문제에 대한 대응 및 관리 기능이 뛰어나다.
  • 스프링 시큐리티: 보안과 관련된 여러 기능을 통합 제공한다. 모든 웹 애플리케이션이나 서비스 개발에 필요한 사용자 인증과 권한 부여를 위한 기본 인프라를 제공하며 OAuth2를 통한 인증도 지원한다.
  • 스프링 HATEOAS: REST API에 대해 하이퍼 미디어 기반으로 서비스 정보를 제공하는 기능이다. API 구조 파악이나 테스트에 유용한다.

스프링 5.x 개선 사항 및 주요 버전

최신 버전의 스프링 5.x는 4.x에서 다음과 같은 주요 변화를 이루었다.

  • 자바 11, 12 지원
  • 리액티브 프로그래밍 지원
  • 함수형 웹 프레임워크
  • 코틀인 언어 지원
  • 서블릿 3.1, JMS 2.0, JPA2.1, JAX-RS 2.0 등 API 버전 지원 개선
  • 하이버네이트5, Jackson 2.6, Junit5 등 지원
  • 아파치 톰캣, 제티, 네티, 언더토우 등 서버 지원
스프링 프레임워크의 버전
현재 스프링 프레임워크는 5.x 버전이다. 일반적으로 대규모 시스템은 한번 개발하면 오랫동안 유지되며, 급격한 변경보다는 점진적으로 보완하는 형태로 시스템을 유지보수한다. 따라서 현재 구현된 많은 스프링 프레임워크 기반 시스템은 아직까지도 4.x 기반을 유지하는 경우가 많다.

스프링 부트

스프링 부트는 스프링 프레임워크 기반의 프로젝트를 빠르고 간편하게 시작할 수 있게 해준다. 스프링 프레임워크는 방대한 구성요소를 가지고 있으며 프로젝트를 시작하기 위해 여러 설정과 필요한 구성요소를 개발자가 직접 정의해주어야 하기 때문에 시작 단계에서부터 많은 어려움을 겪을 수 있다.

스프링 부트는 스프링에 대한 전문적인 지식이 없어도 특정 목적의 개발환경과 프로젝트 구조를 자동으로 생성하고 바로 사용할 수 있도록 도와준다. 또한 톰캣, 제티와 같은 WAS도 내장하고 있으며, 별도의 웹 서버 설치나 실행 없이 스프링 부트 애플리케이션을 실행하는 것으로 웹 애플리케이션의 구동이 가능하다.

특히 최근 유행하고 있는 MSA 기반의 서비스 개발에 유용하며 스프링 프레임워크를 처음 접하는 개발자에게도 권장된다.

스프링 부트 2.0에서부터 기존 구조에서 많은 개선이 있었는데, 가장 큰 차이점으로 리액티브 스택(Reactive Stack)과 서블릿 스택(Servlet Stack)을 구분하고 있다는 점을 꼽을 수 있다.

리액티브 스택

새로운 비동기 논블로킹 I/O 구조를 사용하며 멀티코어 시스템의 정점을 살리고 대규모 사용자 접속을 처리하는 데 유용한 구조로 설계되어 있다.  또한 네티, 언더토우 및 서블릿 3.1 이상의 컨테이너를 사용하며 Spring WebFlux라고 하는 새로운 프레임워크를 사용해 개발된다. 물론 아파치 톰캣 8.5 이상도 사용할 수 있다. 기본적으로 NoSQL 데이터베이스와 연동을 지원한다.

서블릿 스택

기존과 같이 서블릿 API에 기반한 동기 방식의 블로킹 I/O 구조를 사용하며 하나의 요청은 하나의 스레드로 처리된다. 아파치 톰캣과 같은 서블릿 컨테이너를 사용하며, 전통적인  Spring MVC 기반의 서버 프로그램 개발과 JPA, JDBC, NoSQL 데이터베이스 지원을 포함한다.

기존 스프링 부트와 동일한 방식의 개발 모델과 API 구조로 이해하면 된다.

 

언제 리액티브 스택을 사용할까?
최신의 스프링 프레임워크 사양이라고 해서 무조건 사용해야 하는 것은 아니다. 프로젝트 성격에 따라 모델을 선택해 사용하는데, 일반적으로 리액티브 스택은 다음과 같은 구현에 적합하다.

  • 비동기-논블로킹 리액티브 개발
  • 효율적으로 동작하는 고성능 웹 애플리케이션
  • 서비스 간 호출이 많은 마이크로 서비스 아키텍처(MSA) 구현

리액티브 프로그래밍

리액티브 프로그래밍이란 변화에 반응하는 프로그램 모델을 말하며 기본적으로 비동기 I/O 기반으로 데이터 흐름과 변화 전파에 중점을 둔 프로그래밍 패러다임을 말한다. React, Rxjava와 같이 최근 유행하고 있는 각종 프레임워크와 라이브러리의 기본 철학으로, 기존의 프로그램이 작성된 순서에 따라 진행되는 것에 비해 리액티브 프로그래밍은 데이터의 흐름을 먼저 정의하고 데이터가 변경되었을 때 연관된 함수나 수식이 업데이트되는 방식으로 이해할 수 있다.

리액티브 프로그래밍이 주목을 받는 이유는 리액티브 프로그래밍 기법을 통해 개발의 효율을 높여주며, 적은 스레드 개수로 더 많은 부하를 처리할 수 있게 해주기 때문이다.

'Programming > Web' 카테고리의 다른 글

[Web] WebMVC와 RestController 모듈  (0) 2022.10.31
[Web] IoC(Inversion of Control), DI(Dependency Injection), AOP(Aspect-Oriented Programming)  (1) 2022.10.31
[Web] REST 클라이언트  (0) 2022.10.27
[Web] JAX-RS  (0) 2022.10.26
[Web] REST API  (0) 2022.10.26
'Programming/Web' 카테고리의 다른 글
  • [Web] WebMVC와 RestController 모듈
  • [Web] IoC(Inversion of Control), DI(Dependency Injection), AOP(Aspect-Oriented Programming)
  • [Web] REST 클라이언트
  • [Web] JAX-RS
arajo
arajo
  • arajo
    아라 메모장
    arajo
  • 전체
    오늘
    어제
    • 분류 전체보기 (509)
      • Language (298)
        • HTML (55)
        • CSS (11)
        • JavaScript (70)
        • TypeScript (8)
        • Python (33)
        • Java (119)
        • C (0)
        • C# (2)
      • Programming (92)
        • Programming (14)
        • Web (51)
        • Apache (1)
        • MySQL (23)
        • AWS (3)
      • Framework | Library (26)
        • Framework | Library (3)
        • Vue.js (2)
        • React.js (5)
        • React Native (4)
        • Node.js (1)
        • Ajax (1)
        • Bootstrap (8)
        • Spring (1)
        • Flutter (1)
      • etc (2)
      • 휴식 (19)
        • 책 (13)
        • 일기 (5)
        • 게임 일기 (1)
      • A (71)
        • 공부 (18)
        • 기타 (6)
        • 일 (47)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    CSS
    object
    MySQL
    JavaScript
    타입스크립트
    Python
    자바스크립트
    제어문
    next.js
    event
    web
    react
    Java
    TypeScript
    리액트
    객체
    array
    파이썬
    HTML
    변수
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
arajo
[Web] 스프링 프레임워크와 스프링 부트
상단으로

티스토리툴바