백엔드 개발을 공부하다보면 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 |