spring_boot_annotation
Annotation
여기에서 찾아보고 없으면 웹서핑 후 추가 부탁드립니다.
 
A
B
C
 @ComponentScan
 @Component와 @Service, @Repository, @Controller, @Configuration이 붙은 클래스 Bean들을 찾아서 Context에 bean등록을 해주는 Annotation
 
 @Component로 다 쓰지 왜 굳이 @Repository, @Service, @Controller등을 사용하냐면 예를들어 @Repository는 DAO의 메소드에서 발생할 수 있는 unchecked exception들을 스프링의 DataAccessException으로 처리할 수 있기 때문이다. 또한 가독성에서도 해당 애노테이션을 갖는 클래스가 무엇을 하는지 단 번에 알 수 있다.
 
 @Configuration
 @ConfigurationProperties
  mail.host = mailserver@mail.com
  mail.port = 9000
  mail.defaultRecipients[0] = admin> @il.com
  mail.port = 9000
  mail.defaultRecipients[0] = admin@mail.com
  mail.defaultRecipients[1] = customer@mail.com
 @CookieValue
 쿠기 값을 파라미터로 전달 받을 수 있는 방법
 
 해당 쿠기가 존재하지 않으면 500 에러를 발생시킨다.
 
 속성으로 required가 있는데 default는 true다. false를 적용하면 해당 쿠키 값이 없을 때 null로 받고 에러를 발생시키지 않는다.
 
 public String view(@CookieValue(value=“auth”)String auth){…}; 쿠키의 key가 auth에 해당하는 값을 가져옴
 
 @CrossOrigin
 @ControllerAdvice
 @Cacheable
 메서드 앞에 지정하면 해당 메서드를 최초에 호출하면 캐시에 적재하고 다음부터는 동일한 메서드 호출이 있을 때 캐시에서 결과를 가져와서 리턴하므로 메서드호출 횟수를 줄여주는 애노테이션
 
 주의할 점은 입력이 같으면 항상 출력이 같은 메서드(=순수 함수)에 적용해야한다.
 
 그런데 또 항상 같은 값만 뱉어주는 메서드에 적용하려면 조금 아쉬울 수 있다. 따라서 메서드 호출에 사용되는 자원이 많고 자주 변경되지 않을 때 사용하고 나중에 수정되면 캐시를 없애는 방법을 선택할 수 있다.
 
 @Cacheable(value=“cacheKey”), @Cacheable(key=“cacheKey”)
 
 @CachePut
 @CacheEvict
 캐시에서 데이터를 제거하는 트리거로 동작하는 메소드
 
 캐시된 데이터는 언제가는 지워져야한다. 그러지 않으면 결과값이 변경이 일어났는데도 기존의 데이터(캐시된 데이터)를 불러와서 오류가 발생할 수 있다.
 
 물론 캐시 설정에서 캐시 만료시간을 줄 수도 있다.
 
 @CacheEvict(value=“cacheKey”), @CacheEvict(value=“cacheKey”, allEntries=true)
 @CacheConfig
 
D
E
 @EnableAutoConfiguration
 @ExceptionHandler(ExceptionClassName.class)
 @EnableEurekaServer
 @EnableDiscoveryClient
 
F
G
 @GetMapping
 @RequestMapping(Method=RequestMethod.GET)과 같음
 
 @PostMapping, @PutMapping, @PatchMapping, @DeleteMapping은 유추 가능함.
 
 @GeneratedValue
 
H
I
J
K
L
M
 @ModelAttribute
class Person{
 
    String id;
 
    public void setId(String id){ this.id = id;}
 
}
 
N
O
P
 @PostConstruct, @PreConstruct
 @PreDestroy
 @PropertySource
 @PathVariable
 
Q
 @Qualifier(“id123”)
 @Autowired와 같이 쓰이며, 같은 타입의 빈 객체가 있을 때 해당 아이디를 적어 원하는 빈이 주입될 수 있도록 하는 애노테이션
 
 (같은 타입이 존재하는 경우 ex) 동물, 원숭이, 닭, 개, 돼지)
 
 @d와 같이 쓰이며, 같은 타입의 빈 객체가 있을 때 해당 아이디를 적어 원하는 빈이 주입될 수 있도록 하는 애노테이션
 
 (같은 타입이 존재하는 경우 ex) 동물, 원숭이, 닭, 개, 돼지)
 
 
R
 @Required
 @Resource
 @RequestMapping
 요청 URL을 어떤 메서드가 처리할지 mapping해주는 애노테이션이다.
 
 컨트롤러나 컨트롤러의 메서드에 적용한다.
 
 @RequestMapping(“/list”), @RequestMapping(“/home, /about”);
 
 @RequestMapping(“/admin”, method=RequestMethod.GET)
 
 @RequestAttribute
 @RequestBody
 @RequestHeader
 Request의 header값을 가져올 수 있다. 메소드의 파라미터에 사용
 
 @RequestHeader(value=“Accept-Language”)String acceptLanguage 로 사용 ⇒ ko-KR,ko;q=0.8,en-US;q=0.6
 
 @RequestParam
 @RequestPart
 @ResponseBody
 view가 아닌 JSON 형식의 값을 응답할 때 사용하는 애노테이션으로 문자열을 리턴하면 그 값을 http response header가 아닌 response body에 들어간다.
 
 만약 객체를 return하는 경우 JACKSON 라이브러리에 의해 문자열로 변환되어 전송된다.
 
 context에 설정된 resolver를 무시한다고 보면된다. (viewResolver)
 
 @RestControllerAdvice
 @ResponseStatus
 @RequiredArgsConstructor
 초기화 되지 않는 final 필드나, @NonNull이 붙은 필드에 대해 생성자를 생성해 줍니다. 
 
 주로 의존성 주입(Dependenct Injection) 편의성을 위해서 사용되곤 합니다. 
 
 
S
 @SpringBootApplication
 @SessionAttributes
 @Scheduled
 
T
 @Transactional
 데이터베이스 트랜잭션을 설정하고 싶은 메서드에 애노테이션을 적용하면 메서드 내부에서 일어나는 데이터베이스 로직이 전부 성공하게되거나 데이터베이스 접근중 하나라도 실패하면 다시 롤백할 수 있게 해주는 애노테이션
 
 @Transaction(readOnly=true, rollbackFor=Exception.class) : readOnly는 읽기전용임을 알리고 rollbackFor는 해당 Exception이 생기면 롤백하라는 뜻
 
 @Transaction(noRollbackFor=Exception.class)는 해당 Exception이 나타나도 롤백하지 말라는 뜻
 
 @Transaction(timeout = 10)은 10초안에 해당 로직을 수행하지 못하면 롤백하라는 뜻.
 
 
U
V
 @Value
 properties에서 값을 가져와 적용할 때 사용한다.
 
 @Value(“${value.from.file}”)
 
 private String valueFromFile; 이라고 구성되어 있으면 value.from.file의 값을 가져와서 해당 변수에 주입해준다.
 
 spEL을 이용해서 조금 더 고급스럽게 쓸 수 있다.
 
 @Value(#{systemProperties['priority'] ?: 'some default'})
 
 @Valid
 
W
X
Y
Z