Annotation이란?

Annotation이란?

@ExceptionHandler(ExceptionClassName.class)

해당 클래스의 예외를 캐치하여 처리한다.

@ControllerAdvice

Class 위에 ControllerAdvice를 붙이고 어떤 예외를 잡아낼 것인지는

각 메소드 상단에 @Exceptionhandler(예외클래스명.class)를 붙여서 기술한다.

@RestControllerAdvice

@ControllerAdvice + @ResponseBody다.

@EnableEurekaServer

Eureka 서버로 만들어준다.

@EnableDiscoveryClient

Eureka 서버에서 관리될 수 있는 클라이언트 임을 알려주기 위한 Annotation이다.

@Transactional

데이터베이스 트랜잭션을 설정하고 싶은 method에 Annotation을 적용하면 method 내부에서 일어나는

데이터베이스 로직이 전부 성공하게 되거나 데이터베이스 접근중 하나라도 실패하면 다시 롤백할 수 있게 해주는 Annotation이다.

@Transaction(readOnly=true, rollbackFor=Exception.class)에서 ReadOnly는 읽기 전용임을 알리고

rollbackFor는 해당 Exception이 생기면 롤백하라는 뜻이다.

@Transaction(noRollbackFor=Exception.class)는 해당 Exception이 나타나도 롤백하지 말라는 뜻이다.

@Transaction(timeout = 10)은 10초안에 해당 로직을 수행하지 못하면 롤백하라는 뜻이다.

메소드 내에서 Exception이 발생하면 해당 메소드에서 이루어진 모든 DB 작업을 초기화한다.

정확히 얘기하면 이미 넣은걸 롤백시키는건 아니며, 모든 처리가 정상적으로 됐을때만 DB에 커밋하며 그렇지 않은 경우엔 커밋하지 않는것이다.

@Cacheable

method 앞에 지정하면 해당 method를 최초에 호출하면 캐시에 적재하고 다음부터는 동일한 method 호출이 있을 때 캐시에서 결과를 가져와서 return하므로 method 호출 횟수를 줄여주는 Annotation이다.

주의할 점은 입력이 같으면 항상 출력이 같은 method(=순수 함수)에 적용해야 한다.

@CachePut

캐시를 업데이트 하기 위해서 method를 항상 실행하게 강제하는 Annotation이다.

해당 Annotation이 있으면 method 호출을 항상한다. 그러므로 @Cacheable 과 상충되어 같이 사용하면 안된다.

@CacheEvict

캐시에서 데이터를 제거하는 트리거로 동작하는 methodd에 붙이는 Annotation이다.

캐시된 데이터는 언젠가는 지워져야 한다. 그러지 않으면 결과값 변경이 일어났는데도 기존의 데이터를 불러와서 오류가 발생할 수 있다.

물론 캐시 설정에서 캐시 만료시간을 줄 수도 있다.

@CacheEvict(value="cacheKey"), @CacheEvict(value="cacheKey", allEntries=true)

allEntries는 전체 캐시를 지울지 여부를 선택하는 것이다.

@CacheConfig

클래스 레벨에서 공통의 캐시설정을 공유하는 기능이다.

@Scheduled

Linux의 crontab처럼 정해진 시간에 실행해야 하는 경우에 사용한다.

@Scchedule(cron = "0 0 07 * * ?")

"초 분 시 일 월 요일 년(선택)에 해당 메서드 호출

from http://whdodhd.tistory.com/16 by ccl(A) rewrite - 2021-12-03 15:01:19