스프링 Annotation 정리

MinSeong Kang·2022년 5월 1일
0

spring

목록 보기
5/18

새로 알게된 annotation은 주기적으로 추가하여 정리할 예정입니다.

Annotation 이란?

Annotation이란 사전상 주석의 의미이지만, Java에서는 주석 이상의 특별한 기능을 가지고 잇다. Java 코드에 추가하여 사용할 수 있는 메타데이터의 일종으로, 스프링 프레임워크에서 해당 클래스의 역할을 정의하거나, Bean을 주입하는 등 여러가지 역할을 할 수 있다.

@Component

클래스를 Spring의 Bean으로 등록할 때 사용
: @Controller, @Service, @Repository

@ComonentScan

@Component, @Service, @Repository, @Controller, @Configuration이 붙은 클래스 Bean들을 찾아서 Context에 Bean 등록한다. @SpringBootApplication은 @ComponentScan을 포함하고 있다.

@Bean

개발자가 제어가 불가능한 외부 라이브러리와 같은 것들을 Bean으로 만들 때 사용

@RequestMapping(value="")

요청으로 들어온 요청의 URL과 value 값이 일치하면 해당 클래스나 메소드가 실행된다. Class 단위에 사용하면 하위 메소드 공통으로 적용 가능하며, 메소드에 적용하면 해당 메소드만 적용할 수 있다.

  • @GetMapping = @RequestMapping(Method=RequestMethod.GET)
  • @PostMapping = @RequestMapping(Method=RequestMethod.POST)

@RequestParam

URL에 전달되는 쿼리 파라미터를 메소드의 인자와 매칭시켜, 파라미터를 받아서 처리할 수 있다. (쿼리 파라미터, 쿼리 스트링이 동작하는 방식에서 사용 - 정렬이나 필터링이 필요할 때)

@RequestMapping(value = "/user", method=RequestMethod.GET)
public ModelAndView getUerByName(@RequestParam("name") String name) 
{
	...
}

@PathVariable

@RequestMapping 값의 {템플릿 변수}와 매핑시켜, 동일한 이름을 같는 파라미터에 매핑시킨다. (경로를 변수로서 사용한다. - 리소스를 식별할 때)

@RequestMapping(value = "/user/{name}", method=RequestMethod.GET)
public ModelAndView getUerByName(@PathVariable("name") String name) 
{
	...
}

@RequestBody

요청 Body에 전달되는 데이터를 메서드의 인자와 매칭시켜, 데이터를 받아서 처리할 수 있다.

@ModelAttribute

클라이언트가 전송하는 HTTP parameter, Body 내용을 Setter 함수를 통해 1대1로 매칭시켜 객체에 데이터를 바인딩한다.

@ResponseBody

메서드에서 리턴하는 값이 View로 출력하지 않고 HTTP Response Body에 직접 쓰여진다.

@RestController

@Controller + @ResponseBody 결합 형태의 어노테이션으로, Json/Xml 형태로 객체 데이터를 반환한다.

@Autowired

필드, 생성자, setter 메서드에 사용되어 필요한 의존 객체의 "타입"에 해당하는 빈을 찾아 주입한다.

@Transactional

스프링이 제공하는 트랜잭션 AOP 적용

@SpringBootTest

스프링 AOP와 같이 스프링이 제공하는 기능을 적용하기 위해서는 스프링 컨테이너가 필요하다. @SpringBootTest를 통해 테스트시 스프링 부트를 통해 스프링 컨테이너를 생성한다. 테스트에서 @Autowired를 통해 스프링 컨테이너가 관리하는 빈을 사용할 수 있다.

@TestConfiguration

테스트 안에서 내부 설정 클래스를 만들어서 이 애너테이션을 붙이면, 스트링 부트가 자동으로 만들어주는 빈들에 추가로 필요한 스프링 빈을 등록하고 테스트를 수행할 수 있다.


Lombok

코드를 크게 줄여주어 가독성을 크게 높일 수 있는 라이브러리이다.

@Setter

클래스의 모든 필드의 setter method를 생성해준다.

@Getter

클래스의 모든 필드의 getter method를 생성해준다.

@AllArgsConstructor

클래스의 모든 필드 값을 파라미터로 받는 생성자를 생성해준다.

@NoArgsConstructor

클래스의 기본 생성자를 자동으로 생성해준다.

@Data

@Getter, @Setter, @EqualsAndHashCode, @AllArgsConstructor을 포한한 Lombok에서 제공하는 필드와 관련된 코드를 생성한다. - 모든 기능을 허용하는 것은 문제에 노출될 가능성이 높아 사용하지 않는 것이 좋다.

참고 자료

http://melonicedlatte.com/2021/07/18/182600.html
https://2ham-s.tistory.com/290

0개의 댓글