새소식

Java/Spring

Spring Bean 등록을 위한 어노테이션(@Component, @Controller, @Service, @Repository, @Configuration+@Bean)

  • -

Spring Bean 을 등록하는 이유는 여러가지가 있다.

 

📌 장점

항목 설명
의존성 주입(DI) 스프링이 객체를 관리해주므로 생성자 주입 등 다른 의존 객체도 자동 주입 가능
싱글톤 유지 기본적으로 Spring Bean 은 싱글톤으로 관리해 매번 새로 생성되지 않고 재사용
AOP 사용 가능 @Transactional, @Async 등 AOP 기능 사용 가능
생명주기 관리 @PostConstruct, @PreDestroy 등을 통해 초기화 및 종료 로직을 관리 가능
유지보수 용이 스프링 컨테이너가 관리하므로 설정, 테스트, 확장 등에 유리함

 

 

✅ 1. @Component

  • 기본적인 Bean 등록 어노테이션
  • Spring 이 클래스파일 경로를 스캔할 때(@ComponentScan) Bean 등록을 위한 어노테이션들이 붙은 클래스들을 Bean 으로 등록한다.
@Component
public class MyComponent {
}

 

📌 기본 개념: 이 클래스는 Bean 클래스이니까 등록해주세요

📌 기능: 특별한 역할을 의미하지 않음 (기본적인 컴포넌트)

 

✅ 2. @Service, @Repository, @Controller (== @Component의 특수화)

  • @Component 를 확장한 특수 목적 어노테이션
  • 내부적으로는 전부 @Component 와 동일하게 동작한다.
  • 단, 역할이 명확해지고 AOP나 예외 변환 처리 등에서 의미를 가진다.

 

어노테이션 역할 부가 기능
@Service 서비스 계층 특별한 부가 기능은 없지만 비즈니스 로직을 담는 클래스라는 의미
@Controller 웹 계층 DispatcherServlet 과 연결되어 HTTP 요청 처리
@Repository DAO 계층 DB 관련된 로직과 예외를 Spring 의 DataAccessException 으로 변환 기능 추가

 

@Service
public class UserService {
    // 서비스 로직
}

@Controller
public class UserController {
	// HTTP 요청에 관한 클래스
}

 

📌 권장 사용: 역할에 맞게 구분해서 쓰면 코드 가독성/관리 측면에서 좋음

 

✅ 3. @Configuration + @Bean

  • @Configuration 은 설정 클래스라는 의미
  • 해당 클래스 안에서 @Bean 어노테이션을 사용한 메서드를 수동으로 Bean 등록한다.
@Configuration
public class AppConfig {
    
    @Bean
    public MyService myService() {
        return new MyService(); // 직접 생성해서 Bean으로 등록
    }
}

 

📌 주요 특징

  • 의존성 구성이나 외부 라이브러리 객체 설정에 주로 사용된다.
  • 해당 방식의 Bean 은 Spring 이 자동 관리하지 않는 객체도 쉽게 등록할 수 있다.
  • @Configuration 은 프록시(ProxyBeanMethods = true) 가 적용되어 싱글톤 보장된다.

 

🔍 요약

어노테이션 등록 방식 사용 시점 특징
@Component 자동 스캔 일반 클래스 가장 기본적인 Bean 등록 방법
@Service 자동 스캔 서비스 클래스 역할 구분용, 특별한 기능 없음
@Repository 자동 스캔 DB 처리 클래스 예외 변환 기능 포함
@Controller 자동 스캔 웹 컨트롤러 요청-응답 처리
@Configuration + @Bean 수동 등록 외부 라이브러리 설정, 유연한 Bean 정의 세밀한 제어 가능

 

 

 

 

 

Contents