Programming/Spring
스테레오 타입 어노테이션(Stereotype Annotation)
khj1999
2025. 2. 10. 21:30
스프링 스테레오타입 어노테이션 정리
스프링에서 스테레오타입 어노테이션(Stereotype Annotation)은 특정 클래스를 스프링 빈(Bean) 으로 자동 등록하고 역할을 명확하게 표현하는 기능을 한다.
이 어노테이션을 사용하면 XML 설정 없이도 빈을 자동으로 등록할 수 있다.
1. 주요 스테레오타입 어노테이션 종류
어노테이션 역할 대상
@Component | 기본적인 스프링 빈 등록 | 모든 스프링 관리 객체 |
@Controller | MVC의 컨트롤러 역할 | 웹 요청을 처리하는 클래스 |
@Service | 비즈니스 로직 처리 | 서비스 계층 클래스 |
@Repository | 데이터 접근 객체 (DAO) | 데이터베이스 관련 클래스 |
이들은 모두 @Component의 확장 기능이며, 특정 계층을 구분하기 위해 사용된다.
2. @Component - 가장 기본적인 스테레오타입
(1) 역할
- 모든 스프링 빈을 등록할 때 사용
- 특정 계층에 대한 의미가 없고, 단순히 스프링 컨테이너가 관리해야 할 객체를 지정할 때 사용
(2) 사용법
import org.springframework.stereotype.Component;
@Component
public class MyComponent {
public void doSomething() {
System.out.println("Component 실행됨!");
}
}
3. @Controller - Spring MVC 컨트롤러
(1) 역할
- 웹 요청을 처리하는 클래스에 사용됨
- 주로 Spring MVC의 컨트롤러로 활용됨
- 내부적으로 @Component를 포함하고 있어 빈으로 등록됨
(2) 사용법
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
@RequestMapping("/example")
public class MyController {
@GetMapping("/hello")
@ResponseBody
public String sayHello() {
return "Hello, Spring!";
}
}
(3) 특징
- @ResponseBody를 사용하지 않으면 기본적으로 뷰 페이지를 반환함
- REST API 개발 시에는 @RestController를 사용 (내부적으로 @Controller + @ResponseBody 조합)
4. @Service - 서비스 계층
(1) 역할
- 비즈니스 로직을 담당하는 서비스 클래스에 사용됨
- 실제적인 데이터 처리, 트랜잭션 관리 등을 수행
- 내부적으로 @Component를 포함하여 빈으로 등록됨
(2) 사용법
import org.springframework.stereotype.Service;
@Service
public class MyService {
public String process() {
return "비즈니스 로직 실행!";
}
}
5. @Repository - 데이터 접근 객체(DAO)
(1) 역할
- 데이터베이스와의 연결을 처리하는 DAO(Data Access Object) 클래스에서 사용됨
- @Component의 확장 기능이며, 예외 변환(AOP 활용) 기능을 포함함 → 데이터 접근 중 발생하는 SQLException 등을 Spring DataAccessException으로 변환하여 일관된 예외 처리를 지원
(2) 사용법
import org.springframework.stereotype.Repository;
import java.util.Arrays;
import java.util.List;
@Repository
public class MyRepository {
public List<String> getData() {
return Arrays.asList("Data1", "Data2", "Data3");
}
}
6. 스테레오타입 어노테이션과 @ComponentScan
(1) 컴포넌트 스캔을 활성화해야 자동 등록됨
- @Component, @Service, @Repository, @Controller를 사용하려면 스프링이 빈을 검색할 패키지를 지정해야 한다.
- XML 설정 방식과 Java 설정 방식이 있음.
(2) XML 설정 방식
<context:component-scan base-package="com.example"/>
(3) Java 설정 방식
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
@Configuration
@ComponentScan(basePackages = "com.example")
public class AppConfig {
}
7. @Component와 @Bean의 차이
비교 항목 @Component @Bean
사용 위치 | 클래스 레벨 | 메서드 레벨 |
빈 등록 방식 | 자동 스캔 | 수동 등록 |
유연성 | 클래스 자체를 빈으로 등록 | 특정 객체를 직접 생성 후 반환 |
예제 | @Component class A {} | @Bean public A a() { return new A(); } |
8. 결론
- @Component는 기본적인 빈 등록 어노테이션이며, @Service, @Repository, @Controller는 역할에 따라 확장됨
- @ComponentScan을 사용해야 스프링이 자동으로 빈을 등록할 수 있음
- DAO 클래스에는 @Repository를, 비즈니스 로직에는 @Service를, 컨트롤러에는 @Controller를 사용하여 코드의 역할을 명확히 구분하는 것이 좋음