스프링부트 Annotation
1. Annotation이란?
- Annotation은 클래스와 메서드에 추가하여 다양한 기능을 부여하는 역할을 한다.
- Annotation을 활용하여 Spring Framework는 해당 클래스가 어떤 역할인지 정하기도 하고, Bean을 주입하기도 하며, 자동으로 getter나 setter를 생성하기도 한다.
- 특별한 의미를 부여하거나 기능을 부여하는 등 다양한 역할을 수행할 수 있다.
@Component
개발자가 생성한 Class를 Spring의 Bean으로 등록할 때 사용하는 Annotation입니다. Spring은 해당 Annotation을 보고 Spring의 Bean으로 등록한다.
@ComponentScan
Spring Framework는 @Component, @Service, @Repository, @Controller, @Configuration 중 1개라도 등록된 클래스를 찾으면, Context에 bean으로 등록합니다. @ComponentScan Annotation이 있는 클래스의 하위 Bean을 등록 될 클래스들을 스캔하여 Bean으로 등록해준다.
@Bean
@Bean Annotation은 개발자가 제어가 불가능한 외부 라이브러리와 같은 것들을 Bean으로 만들 때 사용한다.
@Controller
Spring에게 해당 Class가 Controller의 역할을 한다고 명시하기 위해 사용하는 Annotation이다.
@Service
Spring에게 해당 Class가 Service의 역할을 한다고 명시하기 위해 사용하는 Annotation이다.
@RequestHeader
Request의 header값을 가져올 수 있으며, 해당 Annotation을 쓴 메소드의 파라미터에 사용한다.
@RequestMapping
@RequestMapping(value=”“)와 같은 형태로 작성하며, 요청 들어온 URI의 요청과 Annotation value 값이 일치하면 해당 클래스나 메소드가 실행된다.
- Class 단위에 사용하면 하위 메소드에 모두 적용된다.
- 메소드에 적용되면 해당 메소드에서 지정한 방식으로 URI를 처리한다.
@RequestParam
URL에 전달되는 파라미터를 메소드의 인자와 매칭시켜, 파라미터를 받아서 처리할 수 있는 Annotation
Json 형식의 Body를 MessageConverter를 통해 Java 객체로 변환시킨다.
@RequestBody
Body에 전달되는 데이터를 메소드의 인자와 매칭시켜, 데이터를 받아서 처리할 수 있는 Annotation
클라이언트가 보내는 HTTP 요청 본문(JSON 및 XML 등)을 Java 오브젝트로 변환
클라이언트가 body에 json or xml 과 같은 형태로 형태로 값(주로 객체)를 전송하면, 해당 내용을 Java Object로 변환
@ModelAttribute
클라이언트가 전송하는 HTTP parameter, Body 내용을 Setter 함수를 통해 1:1로 객체에 데이터를 연결(바인딩) RequestBody와 다르게 HTTP Body 내용은 multipart/form-data 형태를 요구
@RequestBody가 json을 받는 것과 달리 @ModenAttribute 의 경우에는 json을 받아 처리할 수 없다.
@ResponseBody
@ResponseBody은 메소드에서 리턴되는 값이 View 로 출력되지 않고 HTTP Response Body에 직접 쓰여지게 된다. return 시에 json, xml과 같은 데이터를 return 한다.
@Autowired
Spring Framework에서 Bean 객체를 주입받기 위한 방법은 크게 아래의 3가지가 있다.
Bean을 주입받기 위하여 @Autowired 를 사용한다.
Spring Framework가 Class를 보고 Type에 맞게(Type을 먼저 확인 후, 없으면 Name 확인) Bean을 주입한다.
- @Autowired
- 생성자 (@AllArgsConstructor 사용)
- setter
@GetMapping
RequestMapping(Method=RequestMethod.GET)과 똑같은 역할
@PostMapping
RequestMapping(Method=RequestMethod.POST)과 똑같은 역할
@SpringBootTest
Spring Boot Test에 필요한 의존성을 제공
@Test
JUnit에서 테스트 할 대상을 표시