기록과 정리

스프링(Spring)에서 자주쓰는 어노테이션 정리 본문

IT/Spring

스프링(Spring)에서 자주쓰는 어노테이션 정리

zepetto 2020. 3. 3. 13:18

Spring 환경에서 자주쓰는 Anotation에 대해 정리해보았다.

 

@Configuration
기능 : 어노테이션기반 환경 구성
속성 : 스프링 컨테이너가 Bean 정의를 생성하고 런타임시 그 Bean들의 요청을 처리할 것을 선언하게 된다.
동작 방식 : 선언하면 스프링에게 이 클래스는 환경구성 파일이고 @Bean 어노테이션임을 알려주게 된다.
활용 방법 : AnnotationConfigApplicationContext 를 이용하여 Bean의 정의를 가져올 수 있다.

@Bean
기능 : Container에 Bean을 등록하는 메타데이터를 기입하는 어노테이션
속성 : name이라는 값을 이용하여 원하는 id로 bean 등록 가능
동작 방식 : @Configuration이 선언된 class에 메서드 위로 @Bean 선언, 직접적인 컨트롤하지 못하는 객체의 인스턴스를 생성하는 메서드를 만들고 해당 메서드에 @Bean 등록
활용 방법 :  개발자가 직접 제어가 불가능한 외부 라이브러리등을 Bean으로 만드려할때 사용

@Component
기능 : Container에 Bean을 등록하는 메타데이터를 기입하는 어노테이션
속성 : @Bean과 다르게 name이 아닌 value로 id 지정
동작 방식 : class 위로 @Component 선언
활용 방법 : 개발자가 직접 컨트롤 가능한 Class를 Bean으로 등록하기 위한 어노테이션 

@Autowired
기능 : 컨테이너 안에 존재하는 Bean을 자동으로 주입해주는 어노테이션
속성 : 주입되어야하는 객체 역시 Bean 등록이 되어야 함, 생성자에서 의존성을 주입받는 경우 생략 가능
동작 방식 : 스프링 컨테이너에 등록된 Beand을 자동으로 주입하는 방식
활용 방법 : XML이나 @Configuration에 의해 등록된 Bean이 아닌 @repository로 시켜도 바로 Bean 사용가능

@RequestMapping
기능 : URL을 컨트롤러의 메서드와 매핑할 때 사용하는 스프링 프레임워크의 어노테이션
속성 : value-URL 조건 부여, method-HTTP Request method 값, params-파라미터를 조건으로 부여, consumes-Content-Type request 헤더가 일치하는지 확인, produces-Accept request 헤더가 일치하는 지 확인,@GetMapping, @PostMapping, @PutMapping, @DeleleMapping 대체가능
동작 방식 : 클래스나 메서드 선언부에 @RequestMapping과 함께 URL 선언
활용 방법 : 요청 URL을 지정하여 클라이언트가 보내는 URL 요청을 받고, 그에 따른 어떤 메서드를 처리할지 결정

@ResponseBody
기능 : 자바 객체를 HTTP 요청의 body 내용으로 매핑하는 어노테이션
동작 방식 : @RestController의 경우 상관없지만, @Controller의 경우 리턴 값에 어노테이션을 붙여준다. 
활용 방법 : Ajax를 통해 클라이언트에게 요청에 따른 응답을 제공할 수 있다.

@RequestBody
기능 : HTTP 요청의 body 내용을 자바 객체로 매핑하는 역할 
속성 : GET 메소드의 요청의 경우 쿼리스트링 형식으로 전달되기 때문에 데이터를 전달 받을 수 없다.
동작 방식 : controller의 메서드에 파라미터 받는 부분에 어노테이션 선언을 해준다
활용 방법 : Ajax에서 json 형태의 데이터를 controller에서 응답할 수 있다.

@RequestParam
기능 : 단일 파라미터를 받을 때 사용하는 어노테이션
속성 : 단일 데이터를 받을 때는 굳이 사용하지 않아도 전달 받을 수 있다., require=false를 통해 필수키 아님을 지정 가능, 다른 변수명으로 지정 가능
동작 방식 : @RequestParam("가져올 데이터의 이름") [데이터타입] [가져온데이터를 담을 변수]
활용 방법 : 쿼리스트링으로 보내어지는 data를 java에서 받을 수 있다.

@RestController
기능 : Restful 웹 서비스의 컨트롤러임을 명시하는 어노테이션, @Controller에서 @ResponseBody가 추가된 것
동작 방식 : 클라이언트에게 보내어진 요청을 DispatcherServlet이 요청을 인터셉트 후, RestController에서 요청 처리후 데이터를 반환 
활용 방법 : API서버로 활용하거나 Android 앱 개발시 데이터 반환시 이용 가능

@PathVariable
기능 : @RequestParam과 같이 값을 전달할때 사용하며 URL에서 각 구분자에 들어오는 값을 처리할 때 사용하는 어노테션
동작 방식 : 쿼리스트링이 아닌 {idx}와 같은 url 구분자에 들어오는 값 처리
활용 방법 : url에서 각 구분자에 들어오는 값을 처리해야 할 때 사용

@PropertySource
기능 : properties 값을 가져오기 위해 선언
속성 : value 값으로 property 파일 위치 지정 ,ignoreResouceNotFound = true를 통해 선언된 properties 중 없는 properties는 무시할 수 있음, name으로 id값 지정 가능
동작 방식 : @PropertySource 어노테이션에 properties의 위치를 넣어주면 주입하려는 객체에 자동 주입된다. 
활용 방법 : Class 명 위에 @PropertiySource(value='참조할 properties')와 같이 적용

@Qualifier
기능 : 동일한 타입의 Bean 객체가 두개가 있을 경우 , 해당 Bean에 id값을 지정함으로써 사용 가능하도록 사용하는 어노테이션 
동작 방식 : 주입하려는 Bean Class 상단에 @Qualifier("[해당 id]")를 설정해주고 주입하려는 객체 @Autowired와 함께 선언
활용 방법 : 동일한 부모 객체에게 상속받은 두 객체를 주입해야할 경우 사용 가능

@ModelAttribute
기능 : 데이터를 보낼때 , VO 객체를 만들어서 보낼 수 있다.
동작 방식 : @Controller의 파라미터 부분에 @ModelAttribute("가져올 데이터의 이름") [데이터타입] [가져온데이터를 담을 변수]
활용 방법 : 데이터의 이름을 원하는대로 수정하여 보낼 수 있다.

@Value
기능 : properties값들을 어노테이션을 통해 불러올 수 있다.
동작 방식 : 가져오려는 properties의 값을 @Value("${[가져오려는 값 id]}") 선언 후, 변수 선언
활용 방법 : @Component에 Bean에 등록된 객체를 불러 그 안에 선언된 @Value 어노테이션을 통해 properties 파일을 호출할 수 있다.

@ComponentScan
기능 : @Compnent 및 streotype(@Service, @Repository, @Controller)를 스캔하여 Bean으로 등록해주는 어노테이션
속성 : basePackages를 통해 스캔할 위치 지정 가능, basePackagesClasses를 통해 해당 Class가 위치한 곳에서만 Bean등록 
동작 방식 : @Configuration을 통해 Bean설정 파일임을 알려주소 @ComponentScan을 이용해 Bean 등록

@CookieValue
기능 : HTTP 쿠키값을 스프링 컨트롤러에 파라미터로 전달 받게 하는 어노테이션
속성 : 해당 쿠키가 없다면 500에러 발생,required - 필수여부 설정 , defaultValue - 기본값 설정
동작 방식 : @Controller의 파라미터 부분에 @CookieValue("가져올 데이터의 이름") String [가져온데이터를 담을 변수] 
활용 방법 : 쿠키를 확인해야하는 경우, view 로부터 controller단에 cookie value를 받을 수 있다.

'IT > Spring' 카테고리의 다른 글

DispatcherServlet이란?  (0) 2021.01.24
Bean의 스코프  (0) 2021.01.24
@Component와 컴포넌트 스캔이란?  (0) 2021.01.22
@Autowire 어노테이션 정리  (0) 2021.01.22
Spring IoC 컨테이너 & Bean  (0) 2021.01.21