스프링 부트 핵심 콘셉트가 뭘까?(복습)
💡학습 목표💡
- 제어의 역전(IoC)과 의존성 주입(DI)
- 빈(Bean)과 스프링 컨테이너
- 관점 지향 프로그래밍(AOP)
- 이식 가능한 서비스 추상화(PSA)
- Application Context, context 개념을 직접 조사하고 정리하기 (과제)
사전 기반 지식
1. 스프링 프레임워크(Spring Framework)
- 일반적인 정의: 스프링 프레임워크는 자바 플랫폼을 위한 강력한 애플리케이션 프레임워크입니다. 객체 지향 프로그래밍의 원칙에 기반하여 애플리케이션을 구성하고 관리하는 방식으로, 주로 엔터프라이즈급 애플리케이션을 구축할 때 사용됩니다.
- 설정 방식: 스프링은 초기 설정이 복잡할 수 있습니다. XML 설정 파일이나 자바 기반의 설정 클래스를 통해 다양한 기능을 직접 구성해야 합니다.
- 기능: 스프링은 의존성 주입(DI), AOP(관점 지향 프로그래밍), 트랜잭션 관리, 데이터 액세스, 웹 애플리케이션 개발, 보안 등 광범위한 기능을 제공합니다. 그러나 이 모든 기능을 사용하기 위해서는 상당한 양의 설정 작업이 필요합니다.
2. 스프링 부트(Spring Boot)
- 일반적인 정의: 스프링 부트는 스프링 프레임워크의 서브 프로젝트로, 스프링 기반 애플리케이션을 더 쉽고 빠르게 개발할 수 있도록 도와줍니다. 특히 복잡한 설정을 자동화하고, 기본적인 기능을 쉽게 사용할 수 있도록 다양한 도구와 설정을 제공합니다.
- 설정 방식: 스프링 부트는 "Convention over Configuration(관례에 따른 설정)" 철학을 따릅니다. 즉, 개발자가 기본 설정을 크게 수정할 필요 없이, 자동 설정 기능을 통해 많은 부분이 자동으로 설정됩니다. 이를 통해 초기 설정이 간단해지고, 생산성이 크게 향상됩니다.
- 기능: 스프링 부트는 내장 웹 서버(예: Tomcat, Jetty)를 제공하여 별도의 웹 서버 설정 없이 애플리케이션을 실행할 수 있습니다. 또한, 다양한 스타터 의존성(Starter Dependency)을 통해 필요한 기능을 쉽게 추가할 수 있으며, 간단한 명령어로 프로젝트를 빠르게 시작할 수 있습니다.
💡 참고
스프링 부트와 스프링이 다른 도구라고 생각할 수 있습니다. 하지만 스프링 부트는 스프링에 속한 도구입니다.
즉, 스프링 부트는 스프링 프레임워크의 일부로, 스프링의 기본 기능을 활용하면서 개발자의 편의성을 극대화하기 위해 만들어졌습니다.
스프링 부트의 핵심 개념
스프링 부트 핵심 콘셉트 이해하기
1. 제어의 역전(IoC)과 의존성 주입(DI)
제어의 역전(Inversion Of Control): 일반적으로 프로그램의 흐름(제어)은 개발자가 결정합니다. 하지만 스프링에서는 제어의 역전이 이루어집니다. 즉, 객체의 생성 및 라이프사이클 관리가 스프링 프레임워크에 의해 자동으로 제어됩니다. 쉽게 말해, 프로그램의 흐름을 스프링이 관리하는 것입니다. 의존성 주입(Dependency Injection): 애플리케이션을 개발할 때, 클래스 간의 의존 관계가 발생합니다. 이 의존성을 코드에서 직접 관리하는 대신, 스프링이 필요한 의존성을 자동으로 주입해줍니다. 예를 들어, UserService 클래스가 UserRepository를 필요로 할 때, 개발자는 이를 직접 생성하는 대신, 스프링이 이 두 객체를 연결(주입)해줍니다. 이렇게 하면 코드가 더 유연하고 테스트하기 쉬워집니다.
public class A {
b = new B(); // 개발자가 직접 new 키워드로 B 클래스를 생성
}
public class A {
@Authowired
private B b; // 코드에서 직접 객체를 생성하지 않고 어디선가 받아서 b에 할당 됨
}
2. 빈(Bean)과 스프링 컨테이너
스프링 컨테이너: 스프링 애플리케이션의 중심입니다. 이 컨테이너는 애플리케이션이 필요로 하는 빈을 생성하고, 이 빈들 간의 의존성을 주입하며, 애플리케이션이 실행될 때 빈을 사용할 수 있도록 관리합니다. 즉, 빈이 생성되고 소멸되기까지의 생명주기를 이 스프링 컨테이너가 관리 합니다. @Autowrired 같은 애너테니션을 사용해 빈을 주입받을 수 있게 DI도 지원 합니다.
빈(Bean): 스프링에서 빈은 스프링 컨테이너가 관리하는 객체를 의미합니다. 스프링은 애플리케이션이 실행될 때 필요한 객체(빈)를 자동으로 생성하고 관리합니다. XML 파일 설정, 애너테이션 추가 등의 방법등을 제공 합니다.
@Component // 클래스 MyBean 을 빈으로 등록 합니다.
public class MyBean {}