서론
Annotation은 정말 많다. 하지만 대부분의 Annotation 이름들이 굉장히 직관적이기에 아직까지는 어렵지 않다.
오늘은 컴포넌트와 관련된 Annotatino들과 Controller단에서 자주 사용하는 Annotatino들을 정리해보자.
Spring의 대표적인 Annotation
- @Component
개발자가 생성한 클래스를 Spring의 Bean으로 등록할 때 사용하는 Annotation이다. Spring은 해당 Annotation을 보고 Spring의 Bean으로 등록한다.
- @Bean
@Bean Annotation은 개발자가 제어가 불가능한 외부 라이브러리와 같은 것들을 Bean으로 등록할 때 사용한다.
- @Controller
Spring에게 해당 클래스가 Controller의 역할을 한다고 명시하기 위해 사용하는 Annotation이다.
- @RequestHeader
Request의 header 값을 가져올 수 있으며, 해당 Annotation을 쓴 메소드의 파라미터에 사용한다.
- @RequestMapping
@RequestMapping(value = "")와 같은 형태로 작성하며, 요청 들어온 URI의 요청과 Annotation value 값이 일치하면 해당 클래스나 메소드가 실행된다. Controller 객체 안의 메서드와 클래스에 적용 가능하며, 아래와 같이 사용한다.
클래스 단위에 사용하면 하위 메소드에 모두 적용된다.
메소드에 적용되면 해당 메소드에서 지정한 방식으로 URI를 처리한다.
- GetMapping
RequestMapping(Method = RequestMethod.GET)과 똑같은 역할을 한다.
- @PostMapping
RequestMapping(Method = RequestMethod.POST)와 똑같은 역할을 한다.
- RequestParam
URL에 전달되는 파라미터를 메소드의 인자와 매칭시켜, 파라미터를 받아서 처리할 수 있는 Annotation으로 아래와 같이 사용한다. JSON 형식의 Body를 MessageConverter를 통해 Java 객체로 변환시킨다.
- RequestBody
Body에 전달되는 데이터를 메소드의 인자와 매칭시켜, 데이터를 받아서 처리할 수 있는 Annotation으로 아래와 같이 사용한다. 클라이언트가 보내는 HTTP 요청 본문(JSON 및 XML 등)을 Java 객체로 변환한다.
- ModelAttribute
클라이언트가 전송하는 HTTP parameter, Body 내용을 Setter 함수를 통해 1:1로 객체에 데이터를 연결한다.
RequestBody와 다르게 HTTP Body 내용은 multipart/form-data 형태를 요구한다.
@RequestBody가 json을 받는 것과 달리 @ModelAttribute의 경우에는 JSON을 받아 처리할 수 없습니다.
- @ResponseBody
@ResponseBody는 메소드에서 리턴되는 값이 View 출력되지 않고 HTTP Response Body에 직접 쓰여지게 된다.
return 시에 JSON, XML과 같은 데이터를 반환한다.
- @PathVariable
method parameter 앞에 사용하면서 해당 URL에서 {특정값}을 변수로 받아 올 수 있다.
HTTP 요청에 대해 매핑되는 request parameter 값이 자동으로 Binding된다.
URI에서 각 구분자에 들어오는 값을 처리해야 할 때 사용한다.