티스토리 뷰
목차
✅1. Spring Framework란?
Spring은 자바 기반의 엔터프라이즈 애플리케이션을 만들기 위한 경량화된 프레임워크이다.
핵심 철학은 "객체 간의 결합도를 낮추고, 유연하고 확장 가능한 구조"를 만드는 것에 있다.
핵심 철학을 구성하는 키워드
- IoC (제어의 역전)
- DI (의존성 주입)
- AOP (관점 지향 프로그래밍)
2. IoC - Inversion of Control (제어의 역전)
📌 개념
객체의 생성과 생명주기 관리를 "개발자가 아니라 컨테이너(Spring)가 대신하는 것"
개발자가 제어하던 객체 생성/연결을
-> 스프링 컨테이너가 역으로 제어한다는 개념
✅왜 중요한가?
- 객체 간의 강결합을 제거
- 애플리케이션 전체 흐름을 중앙 컨테이너가 제어
- 테스트와 유지보수가 쉬워짐
3. DI - Dependency Injection (의존성 주입)
📌개념
클래스가 의존하는 객체를 직접 생성하지 않고, 외부에서 주입받는 방식
📍DI 방식 종류
| 종류 | 설명 |
| 생성자 주입 | 가장 권장되는 방식, 불변성과 테스트 용이성 확보 |
| 필드 주입 | 간단하지만 테스트 불가능, 프레임워크 의존성 강함 |
| Setter 주입 | 선택적 의존성 주입 시 사용 가능 |
🔎예제
✅나쁜 예 (직접 생성)
class OrderService {
private final OrderRepository repo = new OrderRepository(); // DIP 위반
}
✅좋은 예 (DI 적용)
class OrderService {
private final OrderRepository repo;
public OrderService(OrderRepository repo) {
this.repo = repo; // DIP 만족
}
}
- 객체를 스프링이 대신 주입해줌
- 구현게 교체가 쉬움, 테스트에서도 Mock 주입 가능
4. AOP - Aspect-Priented Programming (관점 지향 프로그래밍)
📌개념
핵심 로직과는 별개인 공통 관심사(로깅, 트랜잭션, 보안 등)를 별도로 분리하여 모듈화하는 기법
📍주요 용도
- 로깅
- 트랜잭션 처리
- 예외 처리
- 보안 검사
- 성능 측정
✅AOP 적용 전
public void doBusiness() {
System.out.println("[LOG] 시작");
// 핵심 로직
System.out.println("[LOG] 종료");
}
✅AOP 적용 후
@Around("execution(* com.example..*(..))")
public Object log(ProceedingJoinPoint joinPoint) {
// 로깅 로직
return joinPoint.proceed(); // 핵심 로직 실행
}
- 핵심 로직은 깔끔하게 남고, 공통 기능은 별도 관리
🔁5. Spring Container와 Bean 관리 흐름
✅IoC 컨테이너 작동 흐름
- 애플리케이션 실행 시, 스프링 컨테이너 (ApplicationContext) 생성
- @Component, @Service, @Repository 등 어노테이션 기반 Bean 등록
- 의존 관계를 파악하여 자동 주입 (DI)
- Bean 생성 -> 초기화 -> 사용 -> 소멸까지 생명주기 관리
6. Spring 핵심 개념과 SOLID 연결
| SOLID 원칙 | Spring 기능과의 연결 |
| SRP | 컴포넌트별 역할 분리 (@Service, @Repository) |
| OCP | 인터페이스 기반 주입 + @ComponentScan |
| LSP | 다형성 기반 구조 설계, Bean 교체 시 안정성 유지 |
| ISP | 역할에 따른 Bean 분리 (@Qualifier 등 활용) |
| DIP | 의존성 주입 구조 = DIP 실현 |
✅ 마무리 요약
- IoC는 제어의 주체를 스프링에게 넘기는 것
- DI는 의존 객체를 외부에서 주입받아 유연성과 테스트성을 높이는 구조
- AOP는 핵심 로직과 부가 기능을 분리하여 유지보수성을 향상
- Spring은 SOLID 원칙을 자연스럽게 실현하도록 설계된 프레임워크
🔜 다음 포스팅에서는 Spring Bean과 생명주기 - Bean의 생성부터 소멸까지, 내부에서는 어떤 일이 벌어질까? 라는 주제로 내용을 다뤄보려고 한다.
'IT > Spring' 카테고리의 다른 글
| 🔄 Spring의 @Transactional 완전 정복 - 개념, 원리, 동작 방식, 트러블 슈팅까지 (0) | 2025.06.11 |
|---|---|
| Spring AOP 완전 정복 - 핵심 로직과 횡단 관심사의 완전 분리 (0) | 2025.06.05 |
| Spring의 DI 방식 완전 정복 - 생성자 / 필드 / 세터 주입, 그리고 언제 어떻게 써야 하는가? (0) | 2025.05.13 |
| Spring Bean과 생명주기 - Bean의 생성부터 소멸까지, 내부에서는 어떤 일이 벌어질까? (0) | 2025.05.12 |
| Spring Framework 소개 (1) | 2024.03.13 |