Spring Framework 어노테이션 총정리 | @Component, @Service 활용법

Heejun Kim·2024년 12월 26일

Spring

목록 보기
3/6

Spring Framework를 사용할 때, 다양한 애노테이션을 통해 애플리케이션을 효율적으로 구성하기 때문에 자주 사용하는 애노테이션들을 정리해봤다.

1. @Configuration

  • 역할: Java 설정 파일로 사용할때 사용함

  • 기능: Spring 컨테이너에서 이 클래스 내의 @Bean 메서드를 기반으로 Bean 정의를 생성한다.

    @Configuration
    public class MovieAppConfig {
    
        @Bean
        public Movie horrorMovie() {
            return new HorrorMovie();
        }
    }
    
  • @Bean 애노테이션을 통해 메서드에서 반환되는 객체를 Spring Bean으로 등록한다.
  • Java 기반 설정 파일을 활용하면 애플리케이션 구성을 유연하게 관리할 수 있다.

2. @ComponentScan

  • 역할: 애노테이션을 사용해 특정 패키지에서 컴포넌트를 스캔한다.
  • 기능: 지정된 패키지와 하위 패키지에 있는 @Component, @Service, @Controller, @Repository 애노테이션이 붙은 클래스를 스캔한다.
    @Configuration
    @ComponentScan(basePackages = "com.example.movieapp")
    public class MovieAppConfig {
    }
  • 패키지를 명시하지 않으면 현재 클래스의 패키지를 기준으로 스캔한다.
  • 하위 패키지도 자동으로 포함되기 때문에 전체 구조를 한 번에 스캔할 수 있다.

3. @Component

  • 역할: Spring Bean으로 등록할 때 사용함
  • 특징:
    1) @Component는 가장 일반적인 컴포넌트 애노테이션으로, 클래스가 Spring Bean임을 나타낸다.
    2) @Service, @Repository, @Controller는 @Component를 역할별로 확장한 애노테이션이다.

4. @Service

  • 역할: 비즈니스 로직을 처리하는 클래스에 사용
  • 특징:
    1) 주로 서비스 계층에서 사용하는 컴포넌트를 정의할 때 쓴다.
    2) 실제로 @Component와 동일하게 동작하지만, 비즈니스 로직임을 명시적으로 나타내기 위해 사용한다.

5. @Controller

  • 역할: HTTP 요청을 처리하는 컨트롤러 클래스에 사용, 웹 애플리케이션과 REST API에 컨트롤러를 정의하는 데 사용
  • 특징:
    1) MVC 패턴에서 컨트롤러 역할을 한다.
    2) REST API를 정의할 때는 @RestController를 사용한다.

6. @Repository

  • 역할: 데이터베이스 접근 계층을 정의할 때 사용
  • 특징: DAO(Data Access Object) 클래스를 나타내며 DB 예외를 Spring의 예외로 변환하는 데 도움을 준다.

7. @Primary

  • 역할: 동일한 타입의 여러 Bean 중 기본으로 선택될 Bean을 지정한다.
@Primary
@Bean
public Movie horrorMovie() {
    return new HorrorMovie();
}

8. @Qualifier

  • 역할: 특정 Bean을 선택해서 의존성을 주입할 때 사용
  • 특징:
    @Primary는 기본 Bean을 지정하지만, @Qualifier는 더 세부적으로 특정 Bean을 명시할 수 있다.
@Bean
public Movie horrorMovie() {
    return new HorrorMovie();
}

@Bean
public Movie actionMovie() {
    return new ActionMovie();
}

@Autowired
public void setMovie(@Qualifier("actionMovie") Movie movie) {
    this.movie = movie;
}

9. @Lazy

  • 역할: 초기화를 지연시키고 싶을 때 사용함
  • 특징:
    Spring Bean은 기본적으로 애플리케이션 컨텍스트가 시작될 때 초기화되지만, @Lazy를 붙이면 필요할 때 초기화한다. 클래스 또는 메서드 단에서 사용가능하다.
@Lazy
@Component
public class ExpensiveMovieProcessor {
// 예시) 초기화 비용이 큰 프로세서
}

10. @Scope

  • 역할: Bean의 생명 주기를 지정하고 싶을 때 사용,
    참고로 기본은 싱글톤 사용
  • 종류:
    1) singleton: 하나의 인스턴스를 공유.
    2) prototype: 요청 시마다 새 인스턴스를 생성.
@Scope("prototype")
@Component
public class MovieSession {
}

11. @PostConstruct

  • 역할: 의존성 주입 후 초기화 작업을 수행할 메서드를 지정함.
@Component
public class MovieDataLoader {

    @PostConstruct
    public void loadInitialMovies() {
        // 초기 영화 데이터 로드 작업
    }
}

12. @PreDestroy

  • 역할: 컨테이너가 종료되기 전에 실행할 메서드를 지정할때 사용.
@Component
public class MovieResourceCleaner {

    @PreDestroy
    public void cleanUp() {
        // 리소스 해제 작업
    }
}

13. @Named

  • 역할: CDI(Contexts and Dependency Injection)를 사용할 때 주로 사용함
  • 특징: @Component와 비슷한 역할을 하지만, 표준 Java 애노테이션이다.

14. @Inject

  • 역할: 의존성 주입을 할 때 이 CDI 애노테이션을 사용함
  • 특징:
    @Autowired와 거의 동일하게 동작한다.

0개의 댓글