본문 바로가기
SPRING/개념

[ 개념 ] 스프링 어노테이션(Annotation)이란? 효과적인 사용법 예제

by hak0205 2023. 3. 1.
반응형

어노테이션(Annotation)이란?

스프링 어노테이션(Annotation)은 개발자가 어노테이션을 사용하여 스프링 응용 프로그램을 구성하고 관리할 수 있는 스프링 프레임워크의 기능입니다. 어노테이션은 Java 클래스, 메서드 및 필드에 추가하여 동작 및 목적에 대한 추가 정보를 제공할 수 있는 특수 마커입니다.

Spring은 개발자가 종속성 주입, 트랜잭션 관리, 웹 애플리케이션 개발과 같은 응용 프로그램의 다양한 관점을 구성하는 데 사용할 수 있는 광범위한 어노테이션을 제공합니다. 대표적인 어노테이션은 다음과 같습니다.

  1. @Component : 클래스를 Spring 컨테이너에서 자동으로 감지하고 인스턴스화할 수 있는 Spring 구성 요소로 표시합니다.
  2. @Autowired : Spring 관리 bean에 종속성을 주입합니다.
  3. @RequestMapping : Spring MVC 응용 프로그램의 특정 컨트롤러 메서드에 웹 요청을 매핑합니다.
  4. @Transactional : 메서드 또는 클래스에 대한 트랜잭션 경계를 정의합니다.
  5. @Value: 속성 파일 또는 환경 변수의 값을 Spring bean에 삽입합니다.

어노테이션을 사용하면 개발자가 작성해야하는 구성 코드의 양을 줄이고 응용 프로그램을 모듈식, 유지 관리 및 확장 성으로 만들 수 있습니다.

 

어노테이션(Annotation) 사용법

Spring 주석을 사용하려면 먼저 프로젝트의 클래스 경로에 Spring Framework 종속성을 추가해야 합니다.

Maven 프로젝트의 경우 pom.xml 또는 Gradle 프로젝트의 경우 build.gradle과 같이 프로젝트의 빌드 파일에 필요한 종속성을 포함하여 이 작업을 수행할 수 있습니다.

 

사용법

Spring 종속성을 추가했으면 Java 코드에서 Spring 어노테이션 사용을 시작할 수 있습니다. 다음은 스프링 어노테이션을 사용하는 일반적인 단계입니다.

  1. annotaiton 처리 활성화 : Spring이 코드에서 어노테이션을 탐지하고 처리하려면 Spring 구성 파일에서 어노테이션 처리를 활성화해야 합니다. 예를 들어, 다음 줄을 Spring XML 구성 파일에 추가할 수 있습니다.  <context:annotation-config/>  또는 Java 기반 구성을 사용하고 @Configuration 및 @ComponentScan 어노테이션을 사용하여 구성 클래스에 어노테이션 처리를 사용할 수 있습니다.
  2. 코드에 어노테이션을 추가 : Spring 어노테이션 을 사용하여 클래스, 메서드 및 필드에 어노테이션을 달아 Spring 애플리케이션의 다양한 측면을 구성할 수 있습니다. 예를 들어 @Autowired 어노테이션을 사용하여 Spring에서 관리하는 bean에 종속성을 주입하거나 @RequestMapping 어노테이션을 사용하여 웹 요청을 컨트롤러 메서드에 매핑할 수 있습니다.
  3. 응용프로그램을 빌드하고 실행 : 코드에 어노테이션을 달면 일반적인 방법으로 Spring 응용 프로그램을 빌드하고 실행할 수 있습니다. Spring은 응용프로그램 시작 중에 어노테이션을 감지하고 처리하며, 그에 따라 응용프로그램의 다양한 구성요소를 구성합니다.

효과적인 어노테이션 사용법

다음은 스프링 어노테이션을 효과적으로 사용하는 7가지 팁입니다

  1. 어노테이션을 사용하지 않음 : 어노테이션은 Spring 응용프로그램을 구성하고 관리하는 강력한 도구가 될 수 있지만 이를 신중하게 사용하는 것이 중요합니다. 어노테이션의 남용은 코드를 읽고 유지하기 어렵게 만들 수 있으며 불필요한 종속성과 결합을 초래할 수도 있습니다.
  2. 어노테이션이 달린 클래스 및 메서드에 설명 이름 사용 : 어노테이션을 사용할 때 어노테이션이 달린 클래스와 방법에 대해 설명적이고 의미 있는 이름을 선택하는 것이 중요하다. 이렇게 하면 어노테이션이 달린 구성 요소의 목적과 동작을 더 쉽게 이해할 수 있습니다.
  3. 어노테이션 특성에 표준 명명 규칙 사용 : 사용자 지정 어노테이션을 정의하거나 어노테이션 속성을 사용할 때는 속성 이름에 카멜표기법(단어의 첫 글자를 대문자로 표기, 단 첫번째 단어의 첫글자는 소문자로 표기하는 표기법)을 사용하고 단일 값 속성에 "값"으로 접두사를 붙이는 등 표준 명명 규칙을 따르는 것이 좋습니다.
  4. 특정 사용 사례에 적합한 어노테이션 사용 : Spring은 종속성 주입, 트랜잭션 관리 등 Spring 프레임워크의 다양한 측면을 구성하기 위한 광범위한 어노테이션을 제공합니다. 적절한 구성과 동작을 보장하기 위해 특정 사용 사례에 적합한 어노테이션을 선택하는 것이 중요합니다.
  5. 구성요소 검색에 Spring 스테레오(정형화된)타입 어노테이션 사용 : Spring은 클래스를 Spring 구성요소로 표시하는 데 사용할 수 있는 @Component, @Service 및 @Controller와 같은 스테레오타입 즉, 정형화된 어노테이션을 제공합니다. 이러한 어노테이션을 사용하면 Spring의 구성 요소 스캔 기능을 활용하여 애플리케이션에서 구성 요소를 자동으로 감지하고 구성할 수 있습니다.
  6. 어노테이션 메타데이터를 체계적으로 유지 : 단일 클래스 또는 메서드에서 여러 어노테이션을 사용하는 경우 각 어노테이션과 연관된 메타데이터를 추적하는 것이 어려워질 수 있습니다. 메타데이터를 구성하기 위해 메타 어노테이션을 사용하여 관련 어노테이션을 함께 그룹화하고 별도의 클래스로 정의할 수 있습니다. 
  7. 어노테이션의 사용을 문서화 : 코드가 명확하고 이해할 수 있도록 하기 위해서는 어노테이션의 사용을 코드 어노테이션이나 프로젝트 문서에 문서화하는 것이 중요합니다. 이렇게 하면 다른 개발자가 어노테이션이 달린 구성 요소의 목적과 동작을 이해하는 데 도움이 됩니다.

 

예제

다음은 종속성 주입을 위한 스프링 어노테이션(Annotation)의 사용을 보여주는 예제 코드입니다.

어노테이션을 더욱 더 이해하시는데 도움이 될것입니다.

package com.example.demo;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

@Component
public class MyService {
    
    private final MyRepository myRepository;
    
    @Autowired
    public MyService(MyRepository myRepository) {
        this.myRepository = myRepository;
    }
    
    public void doSomething() {
        myRepository.save("Hello, world!");
    }
}

@Component
public class MyRepository {
    
    public void save(String message) {
        // Save the message to the database
    }
}

이 예에서는 두 가지 스프링 구성 요소인 MyService 및 MyRepository를 정의했습니다. 

My Service는 My Repository에 따라 비즈니스 로직을 수행합니다. @Component 어노테이션을 사용하여 두 클래스를 모두 Spring 구성 요소로 표시했습니다.

또한 @Autowired 어노테이션을 사용하여 MyRepository 인스턴스를 MyService에 삽입했습니다. 이를 통해 스프링은 수동 구성 없이 두 구성 요소 간의 종속성을 자동으로 연결할 수 있습니다. MyService 클래스에는 MyRepository의 save() 메서드를 호출하는 doSomething() 메서드가 있습니다. 이것은 작동 중인 종속성 주입의 사용을 보여줍니다.

이는 단순한 예에 불과하며, 더 복잡한 Spring 애플리케이션을 구성하고 관리하는 데 사용할 수 있는 다른 많은 Spring 어노테이션 및 구성이 있습니다.

 

감사합니다.

반응형

댓글