[Web] 스프링 프레임워크

2022. 10. 20. 01:44·Programming/Web
728x90

스프링 프레임워크

자바 웹 개발에서 빼놓을 수 없는 것이 바로 스프링 프레임워크다. 자바 웹 개발의 핵심은 자바와 서블릿이라 볼 수 있지만 학습용이 아닌 실제 기업에서 개발하는 서비스의 경우 성능과 안정성, 보안, 다른 서비스와의 연계 등 단순한 기능 외에 고려할 사항이 많다. 이러한 문제를 해결하기 위해 Java EE(Enterprise Edition)가 탄생했으나 스펙의 복잡함과 구현의 어려움으로 인해 현업에 완전히 정착되지 못했다.

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

스프링 프레임워크에 사용되는 주요 특징

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

스프링 부트

스프링 프레임워크는 핵심 프레임워크 외에 여러 서브 프로젝트로 구성되어 있으며 실제 사용은 주로 스프링 부트를 통해 이루어진다. 스프링 부트(Spring Boot)는 스프링 프레임워크 프로젝트를 손쉽게 시작할 수 있도록 하며 개발과 관련한 스프링 구성요소를 편하게 관리할 수 있도록 한다.

스프링 부트 2의 주요 특징은 리액티브 스탯(Reactive Stack)과 서블릿 스택(Servlet Stack)을 구분하고 있다는 점이다.

서블릿 스택(Servlet Stack)

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

리액티브 스택(Reactive Stack)

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

 

최신 스프링 프레임워크의 사양이라고 해서 무조건 사용해야 하는 것은 아니고 필요에 따라 모델을 선택해 사용할 수 있다.

일반적으로 리액티브 스택은 다음과 같은 구현에 적합하다.

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

동기(블로킹)/비동기(논블로킹)

동기 방식은 요청 후 응답을 받기까지 대기하는 방식을 말한다. 대기하는 동안 다른 일을 처리할 수 없는 상태(블로킹)가 되어 요청에 시간이 걸리는 경우 비효율적인 방법이다. 비동기 방식은 즉각적인 응답 결과가 필요 없는 경우 요청 후 응답을 기다리지 않고 다른 일을 하다가 응답이 오면 그때 해당 응답을 처리하는 방식으로 대기시간 없이 다른 일을 할 수 있다는 장점이 있다.

예를 들어 고객센터에 전화해서 질문을 하고 센터 직원이 잠시 알아보겠다고 하고 대기하라고 하면 계속 전화기를 들고 기다려야 하는 것이 동기 방식이다. 반면 센터 직원이 알아본 후 전화하겠다며 전화를 끊고 나중에 다시 전화해 알려주는 형식이 비동기 방식이다.

스프링 프레임워크의 조합

스프링 프레임워크 자체는 매우 방대하기 때문에 프로젝트 규모와 성격에 따라 적절한 요소를 조합해 사용해야 한다. 일반적으로 많이 사용하는 조합은 다음과 같다.

  • Spring Boot(Spring Framework) : MVC Web, REST API 개발
  • Spring Data JDBC/JPA/MongoDB/REST : 데이터 베이스 연동
  • Spring Security : 로그인 관리 및 OAuth2 인증 연동

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

[Web] 서블릿 클래스 구조와 생명 주기  (0) 2022.10.20
[Web] 서블릿의 개요  (0) 2022.10.20
[Web] REST API와 JAX-RS  (0) 2022.10.20
[Web] 서블릿과 JSP  (0) 2022.10.19
[Web] 웹 프로그래밍의 기초(JavaScript)  (0) 2022.10.19
'Programming/Web' 카테고리의 다른 글
  • [Web] 서블릿 클래스 구조와 생명 주기
  • [Web] 서블릿의 개요
  • [Web] REST API와 JAX-RS
  • [Web] 서블릿과 JSP
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)
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

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

  • 최근 글

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

티스토리툴바