IT기술/MSA (with. springboot)

[MSA] 스테레오타입 어노테이션을 활용한 스프링 빈 설정

후스파 2025. 4. 29. 22:11
반응형

msa diagram

마이크로서비스 아키텍처(MSA)에서는 각 서비스의 모듈화관심사 분리가 핵심입니다.
스프링 프레임워크의 스테레오타입 어노테이션은 클래스의 역할을 명시적으로 정의하고,
의존성 주입(DI)을 통해 서비스 간 결합도를 낮추는 데 필수적인 도구입니다.
아래에서 주요 어노테이션의 역할과 MSA 적용 전략을 설명합니다.

 


 

1. 스테레오타입 어노테이션의 종류와 역할

 

1.1 @Component

  • 기본 목적: 모든 스프링 관리 컴포넌트의 베이스 어노테이션
  • 특징:
    • 다른 스테레오타입 어노테이션(@Service, @Controller 등)의 메타 어노테이션
    • 도메인 계층 외 범용 컴포넌트에 사용 (예: 유틸리티 클래스)
  • MSA 활용:
    @Component
    public class PaymentValidator { 
        // 결제 유효성 검사 로직
    }

 

1.2 @Service

  • 기본 목적: 비즈니스 로직 계층 표시
  • 특징:
    • 트랜잭션 관리, 비즈니스 규칙 적용에 최적화
    • @Component와 기능적 차이는 없으나 계층 구분을 위해 사용
  • MSA 활용:
    @Service
    public class OrderService {
        @Autowired
        private PaymentClient paymentClient;  // 외부 서비스 연동
    }

 

1.3 @Repository

  • 기본 목적: 데이터 접근 계층 표시
  • 특징:
    • SQLException → Spring DataAccessException 자동 변환
    • JPA/Hibernate와 함께 사용 시 영속성 컨텍스트 관리
  • MSA 활용:
    @Repository
    public interface UserRepository extends JpaRepository {
        // 사용자 정의 쿼리
    }

 

1.4 @Controller / @RestController

  • 기본 목적: 웹 요청 처리 계층 표시
  • 특징:
    • @RequestMapping, @GetMapping 등과 조합해 API 엔드포인트 정의
    • @RestController = @Controller + @ResponseBody
  • MSA 활용:
    @RestController
    @RequestMapping("/api/v1/orders")
    public class OrderController {
        @PostMapping
        public ResponseEntity createOrder(@RequestBody OrderRequest request) {
            // 주문 생성 로직
        }
    }

 


 

2. MSA 환경에서의 빈 관리 전략

 

2.1 모듈별 컴포넌트 스캔 범위 제한

  • 문제점: 기본 @ComponentScan은 모든 패키지를 검사 → 불필요한 빈 로딩
  • 해결:
    @SpringBootApplication
    @ComponentScan(basePackages = "com.example.order")
    public class OrderServiceApplication { ... }

 

2.2 동일 타입 빈 충돌 해결

  • @Qualifier: 특정 빈 이름 명시적 지정
    @Service
    public class PaymentService {
        @Autowired
        @Qualifier("creditCardProcessor")
        private PaymentProcessor processor;
    }
  • @Primary: 기본 구현체 우선 지정
    @Bean
    @Primary
    public PaymentProcessor defaultProcessor() { ... }

 

2.3 커스텀 스테레오타입 생성

  • 목적: 도메인 특화 어노테이션으로 가독성 ↑
  • @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Service public @interface DomainService { String value() default ""; } @DomainService public class InventoryService { ... }

 


 

3. MSA에 적합한 어노테이션 사용 가이드

계층 권장 어노테이션 사용 예시
API Gateway @RestController 외부 요청 라우팅
Business @Service 주문 처리, 결제 유효성 검사
Data @Repository MongoDB, MySQL 연동
Common @Component 로깅, 캐싱 유틸리티

 


 

4. 주의사항 및 모범 사례

  1. 의미에 맞는 어노테이션 선택
    • @Service를 DAO 클래스에 사용하는 등 계층 혼동 방지
  2. 생성자 주입 권장
    • @Autowired 대신 생성자로 명시적 의존성 관리
    • @Service public class UserService { private final UserRepository repository; public UserService(UserRepository repository) { this.repository = repository; } }
  3. 커스텀 어노테이션 활용
    • 팀 내 컨벤션 통일을 위해 도메인 특화 어노테이션 정의

 


 

결론

스테레오타입 어노테이션은 MSA 환경에서 서비스 계층을 명확히 구분하고,
의존성 관리를 체계화하는 데 핵심 역할을 합니다.

  • @Component, @Service, @Repository, @Controller를 적절히 조합
  • @Qualifier, @Primary로 빈 충돌 관리
  • 패키지 스캔 범위 제한과 커스텀 어노테이션으로 유지보수성 향상

이를 통해 마이크로서비스의 독립성확장성을 극대화할 수 있습니다.

 

 

[MSA] 스테레오 타입(어노테이션 기반) 스프링 빈 설정

마이크로서비스 아키텍처(MSA)에서는 애플리케이션의 각 구성 요소를 명확히 분리하고 관리하는 것이 중...

blog.naver.com

 

 

[MSA] 스프링 빈 자바(JAVA) 설정 – @Configuration, @ComponentScan, @Import 완벽 이해

마이크로서비스 아키텍처(MSA)에서 각 서비스의 공통 기능을 효율적으로 관리하고, 의존성을 명확하게 분리하기 위해서는 자바 기반의 스프링 빈 설정이 매우 중요합니다. 스프링 프레임워크는

hoosfa.tistory.com

 

반응형