Spring 웹 애플리케이션을 개발할 때 특정 객체를 Spring 컨테이너가 관리하는 Bean으로 등록하고 싶은 경우에는 @Bean 어노테이션 또는 @Component 어노테이션을 사용합니다. @Bean과 @Component 둘 다 Component Scan을 통해 Spring Bean으로 등록되고 Life Cycle이 관리되지만, 사용 방법과 용도에 따라 차이가 있습니다. 이번 포스팅에서는 이 두가지 방식이 어떤 차이를 가지는 지 알아보고자 합니다. @Bean 먼저 @Bean 어노테이션은 메서드 레벨에 선언하는 어노테이션으로, 생성자 메서드를 통해 Spring Bean을 등록합니다. 해당 어노테이션은 독립적으로 사용할 수 없고, 클래스 레벨에 @Component를 포함하고 있는 어노테이션을 함께 선언해..
Study/Spring Framework
Spring Web MVC 란? Spring Web MVC란 Spring Framework와 Servlet API를 기반으로 하는 웹 애플리케이션 프레임워크로, 주로 Spring MVC라고 줄여서 부릅니다. 이 Spring MVC는 이름에서 유추할 수 있듯이, 웹 요청을 Model-View-Controller로 역할을 분리해 처리하는 MVC 패턴을 사용한다는 특징이 있고 (그 중에서도 Controller 역할을 Servlet이 수행하고 결과를 JSP를 통해 리턴하는 MVC2 패턴을 사용) 데이터 바인딩 및 검증 기능을 제공하며, Interceptor를 제공해 요청을 처리하기 전 후로 보안 / 로깅과 같은 작업을 수행할 수 있다는 특징이 있습니다. Spring MVC의 장단점은 다음과 같습니다. 장점 Mo..
Bean Scope 란 ? Bean Scope(빈 스코프)란 Bean으로 등록한 객체가 생성되고 소멸 될 때까지 생존하는 범위를 의미한다. Spring에서 제공하는 Bean Scope는 총 6가지로 Singletone / Prototype / Request / Session / Application / WebSocket 가 있다. Spring의 기본 Bean Scope는 Singletone이고 원한다면 Bean을 등록할 때 설정을 변경할 수 있다. 단, 애플리케이션의 동작과 메모리 사용 등에 큰 영향을 끼치는 설정이기 때문에 주의해서 사용해야 한다. 빈 스코프 설정 방법 빈 스코프는 XML 또는 자바 어노테이션으로 지정할 수 있는데 예시는 아래와 같다. 📌 XML 방식 📌 자바 어노테이션 방식 @Con..
빈 생명주기 콜백 스프링 빈이 생성될 때 초기화 콜백, 소멸될 때 소멸전 콜백을 호출해주는 기능이다. 주로 데이터베이스 커넥션 풀, 네트워크 소켓 처럼 애플리케이션 시작시점에 미리 연결해놓고 종료시점에 연결을 종료하는 작업에 사용된다. 초기화 콜백은 의존관계 주입 이후, 소멸 콜백은 컨테이너 종료 직전 호출된다. ✍🏻 스프링 빈의 이벤트 라이프 사이클 (싱글톤 기준) 출처 : https://catsbi.oopy.io/3a9e3492-f511-483d-bc65-183bb0c166b3 스프링이 지원하는 콜백 기능 구현 방법 1. InitializingBean , DisposableBean 인터페이스 사용 특정 빈에 InitializingBean, DisposableBean 인터페이스를 구현해서 초기화 작업은..
Spring Container란 ? 스프링 컨테이너(Spring Container)는 스프링에서 제공하는 DI 컨테이너로, 스프링 컨테이너가 관리하는 자바 객체인 스프링 빈(Bean)의 생성, 연결, 실행 등 모든 생명 주기를 관리하는 역할을 한다. 스프링 컨테이너는 스프링 빈을 컨테이너에 등록하고 DI 받아서 사용하므로, 역할과 책임을 분리하게 되고 변경에 용이한 애플리케이션을 개발할 수 있는 장점이 있다. Spring Container의 종류 스프링 컨테이너는 BeanFactory, ApplicationContext 인터페이스가 있고, 주로 ApplicationContext를 스프링 컨테이너라고 한다. (BeanFactory 인터페이스를 구현한 클래스로 다양한 편의기능이 포함되어있음) BeanFact..
IoC (Inversion of Control) 란 ? IoC(Inversion of Control) 란 제어의 역전이라는 뜻으로 프로그램의 제어 흐름 (객체 생성 , 객체 간 의존관계 주입, 실행 등)을 외부에서 관리하는 기술을 말한다. IoC를 사용하지 않는 경우에는 프로그래머가 클라이언트에 객체의 생성 부터 객체 간의 연결 및 실행하는 코드를 직접 작성해서 프로그램의 제어 흐름을 조종했다. 이러한 방식은 의존관계를 맺은 객체의 구현체가 변경 되면 클라이언트의 코드를 수정해야 하기 때문에 객체지향의 단일책임 원칙(SRP), 개방-폐쇄 원칙(OCP), 의존관계 역전(DIP)을 위반할 수 있다. 그래서 클라이언트 내부가 아닌, 외부에서 객체의 생성과 객체 간의 연결, 실행을 제어를 하도록 하는 IoC를 ..