Spring Annotation 사용해보기

2024. 4. 14. 05:10Spring Boot/Spring Core

반응형

들어가며

어노테이션(Annotations)은 Spring Boot의 주요 기능 중 하나이다.

어노테이션은 어플리케이션의 주요 설정이나 기능을 적용할 때 사용되는데, 마치 주석처럼 사용되기 때문에 다른 명칭이 생겼다.

자주 사용되는 어노테이션을 하위 프레임워크별로 분류해본다.

Spring Core

@Autowired

Spring 어플리케이션에 Bean을 자동으로 등록한다.

이 경우 같은 타입의 Bean이 여러 개 존재하면 충돌이 일어날 수 있는데, 이 경우에는 @Qualifier 어노테이션을 사용한다.

@Bean

Spring Container에 의해 관리될 Bean으로 동작하게 한다.

  • name : bean의 이름 설정
  • initMethod : bean이 context에 등록될 때 실행될 메서드 결정 (@PostContstruct로 대체 가능)
  • destroyMethod : bean이 context에서 해제될 때 실행될 메서드 결정 (@Predestroy로 대체 가능)
@Configuration
public class AppConfig {
    @Bean(name = "comp", initMethod = "turnOn", destroyMethod = "turnOff")
    Computer computer() {
        return new Computer();
    }
}

public class Computer {
    @PostConstruct
    public void turnOn() {
        System.out.println("Turn On");
    }

    @PreDestroy
    public void turnOff() {
        System.out.println("Turn Off");
    }
}

@Component

@ComponentScan이 활성화될 때 component로 등록될 클래스임을 명시한다.

@ComponentScan

@Configuration 어노테이션이 붙은 클래스를 스캔하여 어플리케이션 구성요소에 포함시킨다.

@Configuration

내부에서 @Bean을 정의하고 활용할 클래스로 작동하게 한다.

이 어노테이션이 있는 클래스는 Spring Container에 위임되며, Bean을 생성하고 런타임에 bean을 통해 request를 처리한다.

@PropertySource

@Component와 마찬가지로 Spring 환경에 요소를 등록한다.

@Repository

@Component의 세부 구현체로, DAO클래스에 접근하는 레포지토리 클래스임을 명시한다.

@Required

등록된 Bean에 setter 메서드를 제공한다.

@Service

@Component의 세부 구현체로, 비즈니스 로직을 다루는 서비스 클래스임을 명시한다.

Spring MVC

@Controller

@Component의 내부 구현채로, 웹 요청 핸들러인 컨트롤러 클래스임을 명시한다.

@DeleteMapping

HTTP DELETE 요청을 매핑한다. 정보를 삭제할 때 사용된다.

@RequestMapping(method = RequestMethod.DELETE) 으로 대체 가능하다.

@GetMapping

HTTP GET 요청을 매핑한다. 정보를 조회할 때 사용된다.

@RequestMapping(method = RequestMethod.GET) 으로 대체 가능하다.

@PatchMapping

HTTP PATCH 요청을 매핑한다.

@RequestMapping(method = RequestMethod.PATCH) 으로 대체 가능하다.

@PathVariable

URI에 삽입되는 경로 변수임을 명시한다.

@PostMapping

HTTP POST 요청을 매핑한다. 정보를 생성할 때 사용된다.

@RequestMapping(method = RequestMethod.POST) 으로 대체 가능하다.

@PutMapping

HTTP PUT 요청을 매핑한다. 정보를 생성하거나 수정할 때 사용된다.

@RequestMapping(method = RequestMethod.PUT) 으로 대체 가능하다.

@RequestBody

HTTP 요청에 사용되는 body 파라미터를 MessageConverter를 사용해 바인딩한다.

@RequestHeader

HTTP 요청에 사용되는 헤더 요소(method 파라미터)임을 명시한다.

@RequestMapping

컨트롤러로 들어오는 요청을 라우팅하는 경로를 매핑한다.

@RequestParam

요청에 사용되는 query 파라미터임을 명시한다.

@ResponseBody

요청의 응답값을 직렬화하여 JSON 또는 XML 형태로 바인딩한다.

@RestController

@Controller + @ResponseBody

Spring Transaction Management

@Transactional

메서드의 트랜젝션을 선언한다.

Spring Security

@EnableWebSecurity

@Configuration 어노테이션과 함께 사용되며, Spring Security 설정을 사용할 것임을 명시한다.

Spring Boot

@EnableAutoConfiguration

Spring 어플리케이션이 실행될 때 classpath에 있는 bean, configuration, 메서드를 등록한다.

현재는 대부분 @SpringBootApplication으로 대체되어 사용된다.

@SpringBootApplication

@EnableAutoConfiguration + @ComponentScan + @Configuration

Resources

반응형