Choose a default theme

You can change your theme from the menu

Spring Framework

Spring Framework는 JVM 애플리케이션의 객체 구성과 여러 기반 기능을 제공하는 프레임워크이다. 핵심에는 제어의 역전 컨테이너와 의존성 주입이 있으며, 웹과 데이터 접근, 트랜잭션 처리 등과 연결된다. Spring Boot는 이 프레임워크를 활용하는 별도의 프로젝트이다.

분야

JVM 애플리케이션 프레임워크

제어의 역전과 의존성 주입

의존성 주입에서는 객체가 사용할 협력 객체를 스스로 찾아 만들기보다 생성자 등의 경로로 제공받는다. 컨테이너가 객체 생성과 연결을 담당하면 구체 구현을 바꾸거나 테스트용 구현을 제공할 때 결합을 줄일 수 있다.

예를 들어 주문 서비스가 결제 구현을 생성자 인자로 받도록 설계하면, 실제 결제 어댑터와 시험용 구현을 같은 계약 아래 연결할 수 있다. 다만 컨테이너에 등록했다는 사실 자체가 도메인 설계나 테스트 품질을 보장하는 것은 아니다.

빈과 애플리케이션 컨텍스트

Spring 컨테이너가 관리하는 객체를 빈이라고 부른다. 빈의 정의에는 어떤 객체를 만들고 어떤 의존성을 연결할지에 대한 정보가 포함된다. 애플리케이션 컨텍스트를 이해할 때는 빈의 생명주기와 범위, 설정이 적용되는 위치를 함께 살펴본다.

AOP와 프록시

Spring AOP는 프록시를 사용해 호출 주변에 공통 동작을 적용한다. 인터페이스를 이용하는 JDK 프록시와 클래스를 확장하는 방식의 프록시는 적용 조건과 제약이 다르다. 따라서 어노테이션이 있다는 이유만으로 모든 호출에 동일한 부가 동작이 적용된다고 가정해서는 안 된다.

트랜잭션이나 다른 공통 기능의 동작을 분석할 때에는 실제 호출 경로가 어떤 객체를 거치는지 확인한다. 프록시의 역할은 핵심 로직과 반복되는 기반 처리를 분리하는 데 있으며, 그 경계를 숨기는 마법으로 이해하지 않는 것이 좋다.

Spring 생태계에서의 위치

Spring Boot는 설정과 실행 구성을 간소화하고, Spring Security와 Spring Data 등은 별도 문제 영역을 다룬다. 프로젝트 이름을 모두 Spring Framework의 동의어로 취급하면 책임 범위와 버전 호환성을 설명하기 어렵다.

함께 읽기

Spring Boot

참고 자료