Anyway

[Spring] 스테레오 어노테이션(Stereotype Annotation) 본문

Java/Spring

[Spring] 스테레오 어노테이션(Stereotype Annotation)

dyana 2024. 8. 29. 09:23

 

🤔 현재 spirng boot로 개발하고 있는데 이전 spring 개발했을 때에 비해 못 보던 어노테이션도 많아지고 Bean 관련해서도 그냥 갖다 써보기만 했지 막상 개념을 들여다보니 정리할 필요가 있어 쓰게 됐다. 

 

[Stereotype Annotation이란?]

스테레오 타입 어노테이션은 스프링 프레임워크에서 특정 역할을 가진 클래스를 나타내기 위해 사용하는 어노테이션을 말한다. 

익숙한 @Controller, @Service, @Repository, @Component가 바로 스테레오 타입의 어노테이션들이다. 

Spring의 Component Scan 단계에서 자동으로 Bean으로 등록되며 해당 클래스의 역할에 따라 구분된다.

 

[Stereotype Annotation의 목적]

  • 역할 명확화 : 
    각 클래스의 역할을 명확히 하여 애플리케이션의 구조를 이해하기 쉽게 만든다.
  • 컴포넌트 스캔 :
    스프링의 컴포넌트 스캔을 통해 클래스들이 자동으로 스프링 컨테이너에 등록되도록 한다.
  • 빈 관리 :
    스프링이 해당 클래스의 객체를 빈으로 관리하고 필요 시 의존성 주입을 통해 다른 빈과 연결할 수 있도록 지원한다. 

Stereotype Annotation인 @Controller, @Service, @Repository, @Component에 대해 하나씩 정리해보았다. 

 

1. @Component

  • 기본 개념 :
    @Component는 스프링이 자동으로 탐지하고 관리할 수 있는 범용적인 빈으로 클래스를 표시한다. 
    이 어노테이션은 특정한 역할을 지정하지 않고 단순히 스프링 컨테이너에 의해 관리되어야 하는 클래스임을 나타낸다.
  • 사용 예 :
    일반적인 유틸리티 클래스나 로직을 처리하는 클래스에 붙여서 사용한다.  

2. @Controller

  • 기본 개념 :
    @Controller는 웹 애플리케이션에서 요청을 처리하고 그 결과를 View로 반환하는 역할을 하는 클래스를 나타낸다.
    이 어노테이션이 붙은 클래스는 주로 HTTP 요청을 처리하는 메서드를 포함하며 스프링 MVC 패턴에서 중요한 역할을 한다. 
  • 사용 예 :
    웹 애플리케이션에서 HTTP 요청을 처리하고 그 결과를 반환하는 컨트롤러 클래스에 사용된다.
  • 추가 기능 :
    @RequestMapping과 같은 어노테이션과 함께 사용하여 특정 경로에 대한 요청을 매핑한다. 

3. @Service

  • 기본 개념 :
    @Service는 비즈니스 로직을 처리하는 서비스 클래스를 나타낸다. 
    이 어노테이션을 붙이면 스프링은 이 클래스를 빈으로 관리하며 다른 컴포넌트에서 이를 의존성 주입받아 사용할 수 있다.
  • 사용 예 :
    비즈니스 로직을 처리하는 클래스에 사용된다. 예를 들어 사용자 관리, 결제 처리 등의 로직을 담고 있는 클래스에 주로 사용한다.

4. @Repository

  • 기본 개념 :
    @Repository는 데이터 접근 계층을 담당하는 클래스를 나타낸다.
    이 어노테이션을 붙이면 스프링이 해당 클래스를 빈으로 관리할 뿐만 아니라 예외를 데이터 접근 관련 예외로 변환해주는 추가적인 기능도 제공한다.
  • 사용 예 :
    데이터베이스와의 상호작용을 담당하는 클래스에 사용된다. 예를 들어 JPA를 사용하는 DAO클래스에서 많이 사용된다. 

 

[스프링이 Bean으로 관리하는 의미]

  • 빈 관리 : 
    스프링 컨테이너는 애플리케이션에서 필요한 객체들을 생성하고 그 객체들의 생명주기를 관리한다.
    스테레오 타입의 어노테이션을 붙이면 해당 클래스의 객체가 스프링이 컨테이너의 의해 자동으로 생성되고 관리된다.
  • 의존성 주입 :
    스프링은 관리되는 빈을 다른 빈에 주입하여 사용할 수 있도록 지원한다.
    이를 통해 애플리케이션의 결합도를 낮추고 코드의 유지보수성을 높일 수 있다. 

 

따라서 스테레오 타입의 어노테이션들은 스프링이 애플리케이션의 특정 역할을 담당하는 클래스를 관리하도록 지시하는 어노테이션이다.
이 어노테이션들을 사용하면 스프링이 해당 클래스를 빈으로 등록하고 의존성 주입 등을 통해 다른 컴포넌트에서 사용할 수 있게 된다.