Spring Bean

Kkd·2024년 12월 21일
0

매일메일 개념정리

목록 보기
39/93

Spring에서 Bean은 IoC(Inversion of Control) 컨테이너가 관리하는 객체를 의미하며, 개발자는 특정 클래스나 객체를 Bean으로 등록하여 Spring 컨테이너가 이 객체를 생성하고 관리하도록 합니다.
@Component, @Controller, @Service, @Repository는 Spring에서 특정 클래스가 Bean으로 등록되도록 알려주는 스테레오타입 애노테이션입니다. 이 애노테이션들은 역할에 따라 구분되며, Spring의 기능을 보다 명확하고 체계적으로 관리할 수 있게 돕습니다.


1. Spring Bean

  • 개념
    Spring 컨테이너에 의해 생성되고 관리되는 객체를 의미합니다.
  • 등록 방법
    1. XML 설정
      <bean id="exampleBean" class="com.example.ExampleClass" />
    2. Java Config 방식 (@Configuration + @Bean)
      @Configuration
      public class AppConfig {
          @Bean
          public ExampleClass exampleBean() {
              return new ExampleClass();
          }
      }
    3. 스테레오타입 애노테이션 (@Component 등)
      • 스캔 범위 내에서 자동으로 Bean 등록.

2. @Component

  • 기본 애노테이션
    • Spring이 관리해야 할 클래스에 붙이는 가장 일반적인 스테레오타입 애노테이션.
    • 역할에 제한이 없으며, 다른 세부 애노테이션의 부모 역할을 함.
  • 사용 예시
    @Component
    public class MyComponent {
        public void execute() {
            System.out.println("Component executed.");
        }
    }

3. @Controller

  • 역할

    • Spring MVC에서 컨트롤러 역할을 하는 클래스에 사용.
    • 클라이언트의 HTTP 요청을 처리하고, 적절한 응답(View 또는 데이터)을 반환.
  • 특징

    • 자동으로 Bean으로 등록되며, 추가로 Spring MVC의 요청 매핑 기능 활성화.
    • 주로 @RequestMapping이나 @GetMapping, @PostMapping 등과 함께 사용.
  • 사용 예시

    @Controller
    public class MyController {
        @GetMapping("/hello")
        public String sayHello() {
            return "hello";
        }
    }

4. @Service

  • 역할
    • 비즈니스 로직을 처리하는 클래스에 사용.
    • 주로 비즈니스 로직을 처리하거나, 데이터 처리를 위한 메소드를 정의.
  • 특징
    • @Component와 동일하게 Bean으로 등록되지만, 명확한 역할 분리를 위해 사용.
    • 비즈니스 계층의 로직을 담당하므로, 코드 가독성과 유지보수성 향상.
  • 사용 예시
    @Service
    public class MyService {
        public String processLogic() {
            return "Business Logic Processed";
        }
    }

5. @Repository

  • 역할
    • 데이터 액세스 계층(DAO)의 클래스를 나타내는 애노테이션.
    • 데이터베이스와의 상호작용을 처리.
  • 특징
    • @Component와 동일하게 Bean으로 등록.
    • 추가로 예외 변환 기능을 제공(Specific exception을 Spring의 DataAccessException으로 변환).
  • 사용 예시
    @Repository
    public class MyRepository {
        public List<String> fetchData() {
            return List.of("Data1", "Data2");
        }
    }

6. @Component vs. @Controller, @Service, @Repository

  • @Component는 가장 기본적인 애노테이션으로 역할에 관계없이 모든 클래스에 사용할 수 있습니다.
  • 반면, @Controller, @Service, @Repository는 특정 역할을 수행하는 클래스를 나타내며, 명확한 의미를 부여하기 위해 사용됩니다.
  • 세부 애노테이션을 사용하면 코드 가독성과 유지보수성이 향상됩니다.
애노테이션용도특징
@Component범용 클래스Spring Bean으로 등록. 특정 역할에 제한 없음.
@Controller요청/응답 처리 컨트롤러Spring MVC와 연동, 요청 매핑 기능 활성화.
@Service비즈니스 로직 처리 클래스비즈니스 계층 역할 담당. 코드의 가독성과 계층 구조 명확화.
@Repository데이터 액세스 계층DAO 역할 수행. 예외 변환 기능 제공.

7. 정리

  • @Component는 가장 일반적인 애노테이션으로 모든 역할에 사용할 수 있지만, 역할에 따라 세부 애노테이션을 사용하여 코드의 의미를 명확히 하는 것이 좋습니다.
  • 계층 구조를 명확히 하여 협업 및 유지보수성을 높이는 것이 중요합니다.

추가 학습 자료
-Spring Bean Annotations
-@RequestMapping without @Controller registered as handler [SPR-17622]
-General ORM Integration Considerations

profile
🌱

0개의 댓글