Dev/Spring

[Spring] Spring 이란

syuare 2025. 5. 2. 20:22

 

백엔드 개발을 공부하다보면 Java 이후 자연스레 접하게 되는 것 중 하나가 Spring이다.

 

Spring

Java 기반의 프레임워크(Framework) 이다.

웹 어플리케이션, 마이크로서비스, 데이터 베이스 연동 등 활용된다.


Spring Framework

Spring은 IoC(Inversion of Control)와 DI(Dependency Injection) 원칙을 기반으로 작동한다.

  • IoC(제어의 역전, Inversion of Control): 프로그램의 실행의 제어 흐름을 외부로 넘기는 설계 원칙
    • 객체의 생성과 관리를 개발자가 아닌 Spring 컨테이너에 의해 이루어지는 원칙이다.
    • 이를 통해 어플리케이션의 구성 요소들을 더 유연하게 관리할 수 있다.
  • DI(의존성 주입, Dependency Injection): 객체가 직접 필요한 의존 객체를 직접 생성하지 않고 외부로 부터 주입받는 것
    • 객체 간의 의존성을 주입하는 방식으로 객체들이 서로 의존성을 느끼지 않게 되고,
    • 테스트가 용이해지며 코드가 유연해진다.
  • AOP(Aspect-Oriented Programming): 어플리케이션의 핵심 비즈니스 로직을 수정하지 않고 부가적인 관심사를 처리할 수 있는 기능
더보기

Spring은 Spring Framework를 포함하여 그와 관련된 여러 기술과 도구들을 포괄적으로 지칭한다.

즉, Spring이라 함은 Spring Framwork 외에도 아래에 서술할 Spring Boot, Cloud, Data, Security 등 포함한 다양한 모듈과 도구 전체를 말한다.

  • Spring을 하나의 생태계라고 부르기도 한다.

 

Spring Core

IoC 컨테이너의 핵심이 되는 부분으로 어플리케이션에서 객체를 생성하고 관리하는 역할을 한다.

Bean 객체를 정의하고 관리하는데 Spring은 ApplicationContext라는 컨테이너를 통해 처리한다.

 

*Bean: Spring IoC 컨테이너에서 관리하는 객체

*ApplicationContext: Bean을 관리하는 핵심 컨테이너. 어플리케이션의 다양한 구성 요소를 초기화하고 의존성을 주입한다.


Spring Boot

Spring Framework의 설정을 최소화하고, 빠르게 어플리케이션을 개발할 수 있도록 도와주는 설정 중심의 프레임워크.

기본적으로 자동 설정(auto-configuration) 기능을 제공하고 복잡한 설정을 간단하게 만들어준다.

  • 자동 설정: 어플리케이션에 필요한 대부분의 설정을 자동으로 처리한다.
    • 예) 데이터베이스 연결, 템플릿 엔진 설정, 보안 설정 등
  • 내장 서버: Tomcat, Jetty와 같은 서버를 내장하고 있어서 어플리케이션을 별도의 서버에 배포할 필요없이 바로 실행할 수 있다.
  • 프로덕션 준비: metrics, health checks, externalized configuration 등을 지원하여 실제 운영 환경에서 유용하게 사용된다.

*metrics: 어플리케이션의 성능 지표를 수집, 모니터링하며 시스템 상태를 추적하는데 사용된다.

*health checks: 어플리케이션의 상태를 점검하고 외부에서 쉽게 확인할 수 있도록 한다.

*externalized configuration: 어플리케이션의 설정 값을 코드 외부에서 관리하여, 환경에 따라 동적으로 설정을 변경할 수 있도록 한다.


Spring MVC

웹 어플리케이션 개발을 위한 모듈. Model - View - Controller 디자인 패턴을 기반으로 한다.

클라이언트 요청을 처리하고 적절한 응답을 생성하는 역할을 한다.

 

*Controller: 클라이언트의 요청을 받아 처리 > 응답을 반환한다.

*Model: 비즈니스 로직을 처리하고 데이터를 반환한다.

*View: 사용자에게 보여줄 화면을 구성한다. (JSP, HTML 등 템플릿 사용)


Spring Data

데이터베이스와 연동을 간소화하고, 다양한 데이터 저장소와의 통합을 쉽게 만들어주는 모듈

특히 JPA와 통합이 잘되어 있어서 ORM을 통해 데이터 베이스 작업을 손쉽게 할 수 있다.

 

*JPA(Java Persistence API): 객체와 관계형 데이터베이스 간의 매핑을 자동으로 처리해주는 API

*ORM(Object-Relational Mapping): 객체 지향 프로그래밍과 관계형 데이터베이스 간의 매핑을 자동화하여, 개발자가 SQL을 작성하는 번거로움을 덜고 객체 지향적으로 데이터베이스 작업을 할 수 있게 해주는 기술


Spring Security

어플리케이션의 인증(Authentication)과 권한(Authorization)을 처리하는 보안 모듈

로그인, 세션 관리, 권한 부여 등 보안 관련 작업을 효율적으로 처리할 수 있다.


Spring Cloud

마이크로서비스 아키텍처를 지원하는 모듈

마이크로서비스를 구축할 때 필요한 기능들을 제공한다. (서비스 등록/발견, API 게이트웨이, 분산 트랜잭션 처리 등)


Spring Batch

대규모 데이터 처리 작업을 위한 프레임워크

대용량 파일을 읽고, 처리하고, 저장하는 배치 작업을 효율적으로 처리할 수 있도록 도와준다.


Spring WebFlux

비동기 및 논블로킹 방식으로 웹 어플리케이션을 개발할 수 있게 도와주는 모듈

특히 Reactive 프로그래밍을 지원하는데, 이벤트 기반 비동기 처리를 사용하여 실시간 데이터 스트리밍 처리나 대규모 동시 접속 처리를 효율적으로 처리할 수 있도록 한다.

 

*비동기(Asynchronous): 요청을 처리할 때, 특정 작업을 기다리지 않고 다른 작업을 계속 처리하는 방식

*논블로킹(Non-blocking): 작업이 완료되기 전까지 다른 작업이 대기하지 않는 방식


Spring을 왜 사용하는 것일까?

Java 자체는 범용적인 프로그래밍 언어이기에, 다양한 분야에서 사용되는데,

Spring은 Java의 기반 위에서 웹 어플리케이션 개발이나 서버 사이드 개발을 효율적으로 도와주는 핵심 도구이기에 사용한다.

  • 웹 어플리케이션 개발에 최적화
    • Java는 웹 서버, RESTful API 등을 구축하는데 사용되는데,
    • Spring은 이를 더욱 효율적으로 처리할 수 있게 도와준다.
  • 대규모 시스템 구축: 복잡한 비즈니스 로직을 처리하고, 유지보수 가능한 시스템을 만들도록 도와준다.
  • 높은 생산성: Spring의 자동 설정, DI, IoC 컨테이너와 같은 기능들이 개발자가 반복적으로 작업하는 것을 자동화해주고, 어플리케이션 구조를 간소화해준다.

이러한 이유로 Spring은 현재 많은 기업에서 사용되는 언어이다.

 

'Dev > Spring' 카테고리의 다른 글

[Spring] 연관 관계 매핑  (0) 2025.05.19
[Spring] JPA  (0) 2025.05.15
[Spring] IP / Port / Domain / URL  (0) 2025.05.13
[Spring] 클라이언트 - 서버 간 통신 흐름  (0) 2025.05.09
[Spring] HTTP 기본 구조  (0) 2025.05.07