[요약] 01. 스프링의 주요 특징

Dami·2025년 4월 23일

스프링 프레임워크는 자바 애플리케이션을 연결하는데, 사용된다.
애플리케이션의 여러 부분을 연결하는 데 필요한 모든 기술을 제공하고 관리하는 것을 목표로 한다.
개발자가 비즈니스 로직 개발 업무만 집중 할 수 있도록 해줌.

스프링의 특징

1. 경량 컨테이너(Lightweight Container)

스프링은 POJO(Plain Old Java Object)를 기반으로 하며,
무거운 EJB처럼 복잡한 컴포넌트 없이도 비즈니스 로직을 구현할 수 있다.

필요한 의존성만 설정해서 사용할 수 있어 가볍고 유연합니다.

✅ 2. 제어의 역전(IoC, Inversion of Control)

객체의 생성과 의존성 관리를 개발자가 아니라 스프링 컨테이너가 대신함.
이를 통해 코드 간 결합도를 낮추고, 확장성과 유지보수성을 높인다.

클래스가 종속 인스턴스를 직접 작성하면 클래스 간의 밀접한 결합이 형성,
유지보수가 어려움.

이를, IoC컨테이너라는 새로운 구성요소로 넘어가면서 느슨한 결합을 맺음

클래스 간의 결합을 느슨하게 하면 장기적으로 애플리케이션을 유지하고 관리하는 데 도움을 준다. 또한 단위 테스트가 가능하다.

✅ 3. 의존성 주입(DI, Dependency Injection)

객체 간의 의존 관계를 설정파일(XML 또는 어노테이션)로 정의해서 객체 간 결합을 줄이고 재사용성과 테스트 용이성을 확보

왜 의존 관계를 갖게 되는 걸까?
애플리케이션의 일부는 데이터 통신, 일부는 UI, 일부는 비즈니스 로직 처리 등을 맡음.
애플리케이션을 쉽게 유지&관리리 하려면, SRP(Single Responsibility Principle) 설계 방식을 지키는 것이 중요.
따라서, 의존 관계를 줄이고, 특정 책임을 갖게 하는 것이 중요하다.

느슨하고 단단한 결합을 만드는 단계별 방법
1. 인터페이스 작성(같은 인터페이스를 구현한 객체끼리 유연한 대체 가능)
➡️ 하지만, 여전히 서로 밀접하게 결합되어 있음
2. 생성자 주입(외부로부터 주입받음)
➡️ 외부 누가 만들 것인가? 의 문제에 봉착함
3. 스프링 컨테이너가 객체를 생성 및 관리, 주입해줌.
➡️ 스프링 IoC컨테이너가 의존관계를 식별, 인스턴스화, 연결해줌.

스프링 컨테이너가 빈을 생성 및 연결하는 방법
1. 어떤 빈을 생성해야 하나?
: xml, 어노테이션, 자바방식으로 식별
2. 빈의 의존관계를 식별하는 방법?
: 필요한 객체를 매개변수로 만들고, 인스턴스 변수에 @Autowired 사용.

✅ 4. 관점 지향 프로그래밍(AOP, Aspect-Oriented Programming)

공통 기능(예: 로깅, 보안, 트랜잭션 등)을 핵심 로직과 분리해서 개발할 수 있도록 지원

핵심 기능에 집중하고, 부가 기능은 AOP로 분리하여 코드의 모듈성과 가독성을 향상시켜 줌.

✅ 5. 풍부한 모듈 제공

Spring MVC, Spring Data, Spring Security, Spring Boot 등 20개 이상의 다양한 모듈을 통해 웹, 데이터베이스, 보안, 배포 등 다양한 요구사항을 쉽게 처리할 수 있다.

개발자는 원하는 모듈을 선택할 수 있다.
또한 아키텍처의 유연성이 있다. 즉, 특정 프레임워크를 사용하고 싶지 않다면 다른 프레임워크로 쉽게 대체 할 수 있다.

✅ 6. 트랜잭션 관리 지원

선언적 트랜잭션(어노테이션 기반)과 프로그래밍 방식 모두 지원하며, DB뿐만 아니라 메시지 큐 등도 트랜잭션 대상이 될 수 있다.

✅ 7. 유연한 테스트 지원

의존성 주입 덕분에 단위 테스트 작성이 쉬워지고, 스프링은 JUnit 등 테스트 프레임워크와의 연동 기능도 풍부

✅ 8. Spring Boot를 통한 빠른 개발

복잡한 설정 없이 자동 구성(Auto Configuration), 내장 톰캣, 간단한 배포 등으로 빠르고 쉽게 애플리케이션을 개발할 수 있게 해줌.

스프링 모듈

🌱 Core 모듈

모듈설명
Core Container스프링의 핵심 기능을 제공하는 컨테이너. Bean 생성, DI(의존성 주입), 생명주기 관리 등을 담당함
- CoreDI와 IoC를 위한 기본 기능 제공
- BeansBean 생성, 설정, 관리 등을 처리
- ContextApplicationContext를 포함하여 국제화, 이벤트 전달, 리소스 로딩 기능 제공
- Expression Language (SpEL)객체 그래프 탐색 및 조작을 위한 표현식 언어 지원

🛠️ AOP (Aspect Oriented Programming)

모듈설명
AOP관점 지향 프로그래밍(AOP) 지원. 로깅, 보안, 트랜잭션 관리 등을 핵심 로직과 분리하여 적용 가능
AspectsAspectJ와의 통합 지원을 위한 모듈

🧵 Data Access / Integration

모듈설명
JDBCJDBC를 더 쉽게 사용할 수 있도록 템플릿 방식 제공 (예외 처리, 리소스 관리 자동화 등)
ORMHibernate, JPA, MyBatis 등 ORM 프레임워크와 통합 지원
JMSJava Messaging Service와의 통합을 지원
Transactions선언적 트랜잭션, 프로그래밍 방식 트랜잭션을 지원하는 일관된 트랜잭션 관리 API 제공

🌐 Web & Remote

모듈설명
Web웹 애플리케이션 개발을 위한 기본 기능 제공 (multipart 처리, 서블릿 지원 등)
Web MVCDispatcherServlet 기반의 Spring MVC 프레임워크. 요청-응답 처리 구조
Web Websocket웹소켓을 통한 실시간 양방향 통신 지원
Web Reactive비동기 논블로킹 웹 애플리케이션 개발을 위한 WebFlux 제공 (Reactive Streams 기반)
RemotingRMI, Hessian, Burlap, HTTP Invoker 등을 통한 원격 서비스 호출 지원

💻 Test

모듈설명
Test단위 테스트, 통합 테스트 지원 (JUnit, TestNG 기반), 모킹, 웹 환경 테스트 등 가능

🔧 기타 지원 모듈

모듈설명
Security (Spring Security)인증, 권한 부여 등 보안 관련 기능 제공
Spring Boot설정을 최소화하고 빠르게 스프링 애플리케이션을 시작할 수 있도록 도와주는 프레임워크
Spring Data데이터 접근 추상화를 통해 다양한 저장소와 일관된 방식으로 데이터 처리 가능
Spring Batch대용량 배치 작업 처리를 위한 프레임워크
Spring Cloud마이크로서비스 아키텍처(MSA)를 위한 다양한 클라우드 네이티브 기능 제공

0개의 댓글