[스프링] Spring 핵심 개념

Lil_Young·2025년 10월 23일

Spring

목록 보기
1/6
post-thumbnail

Spring 이란?

  • 자바 기반의 엔터프라이즈 애플리케이션 개발을 쉽게 해주는 오픈소스 프레임워크
  • 목표는 객체지향적 설계 + 개발 생산성 + 유지보수성 향상

Spring이 등장한 이유

  • 과거 EJB(Enterprise Java Bean)의 복잡한 설정, 무거운 실행 구조를 대체하기 위해 등장
  • POJO 기반 경량 컨테이너로, 단순한 객체 관리 및 DI 지원을 핵심으로 함

Spring의 핵심 개념

  1. POJO
    • 특별한 상속/규약 없이 순수 자바 객체로 구성
  2. IoC/DI
    • 객체 생성과 의존성 관리를 프레임워크가 담당
  3. AOP
    • 로깅, 보안, 트랜잭션과 같은 공통 기능을 모듈화하여 하나의 책임을 가지게 하는 기법
  4. PSA
    • 스프링이 제공하는 일관된 추상화 계층을 통해 개발자가 특정 기술(JDBC, JMS, 트랜잭션 등)에 종속되지 않고 하나의 통일된 방식으로 서비스에 접근할 수 있도록 한 개념

Spring Container 개념

  1. 스프링에서 의존관계 주입을 이용하여 애플리케이션을 구성하는 여러 빈(Bean)들의 생명주기(Lifecycle)와 애플리케이션의 서비스 실행 등을 관리하며 생성된 인스턴스들에게 기능을 제공하는 것을 부르는 말이다.
  2. 컨테이너에 적절한 설정만 있다면 프로그래머의 개입 없이도 작성된 코드를 컨테이너가 빈을 스스로 참조한 뒤 알아서 관리한다.
  3. 스프링 컨테이너를 언급할때는 빈 팩토리(BeanFactory) 와 애플리케이션 컨텍스트(ApplicationContext) 두 가지로 다룬다.
  • BeanFactory
    • 스프링 컨테이너의 기본적인 형태
    • Bean의 생성 및 의존성 주입만 담당
    • 지연 로딩 방식 사용 → 요청이 들어올 때 Bean 생성
    • 기능이 단순해서 거의 사용하지 않음
  • ApplicationContext
    • BeanFactory를 확장한 상위 컨테이너
    • Bean 관리뿐 아니라 다음 기능을 추가로 제공
      • 국제화(i18n)
      • 이벤트 리스너
      • 환경 설정(Profile)
      • AOP / 트랜잭션 관리
    • 즉시 로딩 방식 사용 → 컨테이너 초기화 시 모든 Bean 생성
    • 대부분의 프로젝트에서 사용하는 표준 컨테이너

스프링 공식 문서에서는 두 컨테이너 중 특별한 이유가 없다면 ApplicationContext를 사용해야 한다고 나와있다.

이유는 BeanFactory의 모든 기능을 포함하는 것은 물론이고 추가 기능들을 제공하기 때문이다.

  • 작동 과정
1. 설정 파일(@Configuration or XML) → Bean 정의 읽음
2.  Container 생성 (ApplicationContext)
3. Bean 등록 및 의존성 주입 (DI)
4. Bean 초기화 → 서비스 실행
5. 애플리케이션 종료 시 Bean 소멸

스프링 프레임워크의 주요 모듈들

  • 코어 : DIIoC에 대한 핵심 기능 제공 (BeanBean FactoryApplication Context)
  • 횡단 관심 : AOP에서 핵심기능 외에 중간중간 삽입되어야 할 기능들
  • 웹 : 웹 서비스를 위한 기능들
  • 비즈니스 : 비즈니스 로직을 실행, 선언적 트랜잭션 관리
  • 데이터 : 데이터베이스 및 외부 인터페이스와의 상호작용

흐름

개발자 코드(POJO)
		↓
Spring Container (ApplicationContext)
		↓
Bean 등록 & 관리 (IoC)
		↓
의존성 주입 (DI)
		↓
공통 관심사 처리 (AOP)
		↓
애플리케이션 실행 (MVC 구조 기반)

0개의 댓글