백엔드

스프링에서 Bean을 등록하는 방법을 알아보자.

Bhark 2024. 3. 30. 18:55
목차
1. Bean이란 무엇일까?
2. Bean을 수동으로 등록하는 방법
3. Bean을 자동으로 등록하는 방법

 

Bean이란 무엇일까?

스프링에서 IoC 컨테이너에 보관되어 관리되는, 어플리케이션에서 중추적인 역할을 담당하는 여러 객체들을 Bean이라고 부른다. 좀 더 쉽게 설명하자면, 그냥 스프링에서 만들어서 관리하면서 쓰는 유용한 객체들을 Bean이라고 한다.

Bean의 생성, 의존성 주입, 관리는 모두 스프링 IoC 컨테이너의 도움을 받게된다. Bean을 POJO라고 부르는 경우도 있는데 말 그대로 그냥 일반적인 객체임을 강조하기 위해 POJO라고 부른다.

 

Bean을 수동으로 등록하는 방법

만약에 Bean을 수동으로 직접 등록하고 싶다면, 설정 클래스 파일에 @Configuration을 적용해 주고, 그 내부에서 스프링 Bean으로 등록할 메서드에 대해 @Bean 어노테이션을 적용시켜 주면 스프링 컨테이너에 등록된다.

 

해당 코드는 MyConfig라는 설정 파일을 이용해 helloMyBean()을 Bean 객체로 등록한다.

스프링 컨테이너는 @Configuration이 붙어 있는 클래스를 찾아 파싱 후, @Bean이 붙은 Object를 Bean 객체로 등록하게 된다.

 

그렇다면 @Configuration 없이 @Bean만 사용하면 안될까?

만약 Bean 객체로 등록된 어떤 클래스 내에서 @Bean을 이용해 Bean 객체로 등록하는 것도 가능하다. 하지만, @Configuration은 CGLIB 라이브러리를 이용해 프록싱을 하여, 해당 @Bean 객체가 싱글톤으로 등록됨을 보장해준다.

 

스프링 컨테이너는 기본적으로 Bean 객체를 싱글톤으로 관리하기 때문에 반드시 @Configuration 어노테이션을 함께 사용할 것을 권한다.

 

Bean을 자동으로 등록하는 방법 - @Component 이용하기

@Component 역시 @Bean과 같이 Bean으로 등록하고 싶은 Object에 붙여 주지만, 스프링에서는 컴포넌트 스캔(Component Scan)을 이용해서 @Component가 붙은 모든 Object를 Bean으로 자동 등록 시켜준다.

 

 

또한, @Bean의 경우 메서드에 적용시키며, 보통 외부 라이브러리 같이 개발자가 직접 변경이 어려운 대상에 사용하는 것이 권장된다.

반면, @Component의 경우, 클래스에만 사용하고, 개발자가 직접 변경이 가능한 대상에 사용한다는 차이 또한 존재한다.

 

@Component를 사용하는 또 다른 어노테이션

클래스 레벨에 적용되는 @Component 어노테이션은 주로 스프링에서 자주 사용되는 다른 어노테이션들 속에 포함된 경우가 많다. 대표적인 몇 가지 어노테이션들을 함께 알아보자.

  1. @Controller : 스프링 MVC 패턴에서 해당 클래스에 대해 Controller 역할 지정. Controller는 모델 객체를 만들어 View에 담아서 이를 반환해 주는 역할이다.
  2. @RestController : @Controller와 역할은 같으나, View 반환이 아닌 주로 JSON이나 XML형태로 된 객체를 반환하기 위해 사용한다.
  3. @Service : 스프링 MVC 패턴에서 해당 클래스에 대해 Service의 역할 지정. Service는 주로 사용자의 요구사항을 처리하는 실질적은 비즈니스 로직을 작성하는 layer이다.
  4. @Repository : 스프링 MVC 패턴에서 해당 클래스에 대해 Repository의 역할 지정. Repository는 주로 DB 등 외부와의 통신을 담당한다.
  5. @Configuration : Bean 등록을 위해 사용하는 @Configuration 어노테이션 역시, 그 내부에는 @Component가 붙어 있다.

'백엔드' 카테고리의 다른 글

var, let, const에 대해 알아보자.  (0) 2024.03.23