240607
오늘의 학습
● 1. @UniqueConstraint
● 2. 스프링 빈의 라이프 사이클
● 3. PostConstruct & PreDestroy
@UniqueConstraint
DB 컬럼에 unique제약 조건을 추가해주는 애너테이션이다. 묶어서 unique 제약조건 또한 걸 수 있다.
해당 애너테이션은 @Table 애너테이션의 uniqueConstraints {} 바디 내부에 만들어서 이용할 수 있다.
@Table(uniqueConstraints = {
@UniqueConstraint(columnNames = {"user_id", "board_id"})
})
이렇게 여러 컬럼들을 묶어서 제약조건을 줄 수 있다. 두 개가 묶여서 unique인 것이다.
스프링 빈의 라이프사이클
스프링 빈의 라이플 사이클을 통해 동작원리를 알 수 있다. 여기서 보여주는 라이프 사이클이란, 스프링의 서버가 동작되는 시점부터 종료 되는 시점까지 과정 내부에서 수행되는 일련의 과정을 보여주는 것이다.
1. 초기화를 진행하지 않은 라이프 사이클
스프링 컨테이너 생성 > 스프링 빈 생성 > 의존관계 주입 > 사용 > 스프링 종료
2. 초기화를 진행한 라이프 사이클
스프링 컨테이너 생성 > 스프링 빈 생성 > 의존관계 주입 > 초기화 콜백 > 사용 > 소멸전 콜백 > 스프링 종료
여기서 초기화 콜백과 소멸전 콜백을 해주는 애너테이션을 알아 볼 것이다.
@PostConstruct
@Documented
@Retention (RUNTIME)
@Target(METHOD)
public @interface PostConstruct {
}
객체의 초기화를 위해 사용하는 애너테이션이다. 객체의 초기화란, 기본적으로 해당 객체의 멤버 변수의 값을 세팅하는 것이다. 해당 애너테이션의 특징으로는 바로 위의 코드를 보면 애너테이션 Target이 Method로 한정이 되어있다. 즉, 메서드 영역에서만 사용이 가능한 애너테이션이다. 그렇다는건, 정리하면 메서드를 이용해 객체의 초기화를 한다는 의미이다.
메서드를 이용해 객체를 초기화 하려면 해당 메서드를 호출을 해야하므로 저 애너테이션은 메서드를 호출해주는 역할을 도와준다. 여기서 근데 의문점이 들 것이다. " 근데 왜? 굳이? 생성자로 초기화 해도 될 것 같은데 저런 애너테이션을 이용해 메서드를 호출해 초기화를 진행하는 걸까? " 라는 의문이 들 것이다. 이유는, 생성자를 이용해 초기화를 할 때는 기본적으로 값만을 세팅을 한다면 문제가 생기지는 않지만 무거운 작업인 커넥션이나, 다른 메서드를 호출해서 수행해야하는 무거운 동작을 수행하면 좋지 못하다. 또한, 객체를 생성하는 부분과 초기화를 하는 부분을 나누면 유지보수에도 좋다.
PostConstruct 애너테이션이 붙은 메서드가 들어있는 객체 즉, Bean객체가 의존관계 주입이 끝나는 시점에 해당 애너테이션 붙은 메서드를 호출해준다. 따라서 해당 @PostConstruct 메서드는 해당 빈의 의존 관계 주입이 완료된 후에 즉시 실행됩니다. 이는 다른 빈들의 의존성 주입이 완료되기 전에 실행됩니다. 모든 빈들의 의존 관계 주입이 완료된 후에 실행되는 것이 아닙니다. ( 객체에 new를 통해 넣어주는 동시에 바로 수행 되는 작업, 쉽게 말하면
@PreDestroy
해당 Bean이 소멸될 때 수행되는 메서드이다. 동작은 위와 유사하다.
# 오늘의 회고
#
'내일배움캠프 Spring 5기' 카테고리의 다른 글
내일배움캠프 38일차 TIL - 뉴스피드 프로젝트 (0) | 2024.06.12 |
---|---|
내일배움캠프 37일차 TIL - 시큐리티 수정 중 (2) | 2024.06.10 |
내일배움캠프 35일차 TIL - Enum (0) | 2024.06.05 |
내일배움캠프 34일차( [13일의 금요일] 뉴스피드 프로젝트 ) (2) | 2024.06.04 |
내일배움캠프 33일차 TIL - Git-Hub Fork (0) | 2024.06.03 |