0215 - 0221
0215
빈 생명주기 콜백
데이터베이스 커넥션 풀이나, 네트워크 소켓처럼 애플리케이션 시작 시점에 필요한 연결을 미리 해두고 종료시점에 연결을 모두 종료하는 작업을 진행하려면 객체의 초기화와 종료 작업이 필요하다.
- 스프링은 의존관계 주입이 완료되면 스프링 빈에게 콜백 메서드를 통해서 초기화 시점을 알려주는 다양한 기능을 제공한다.
- 또한 스프링은 스프링 컨테이너가 종료되기 직전에 소멸 콜백을 준다.
스프링 빈의 이벤트 라이프 사이클
스프링 컨테이너 생성 -> 스프링 빈 생성 -> 의존관계 주입 -> 초기화 콜백 -> 사용 -> 소멸전 콜백 -> 스프링 종료
- 객체의 생성과 초기화를 분리하자
- 객체를 생성하는 부분과 초기화하는 부분을 명확하게 나누는 것이 유지보수 관점에서 좋다.
- 내부 값들만 약간 변경하는 정도로 단순한 경우에는 생성자에서 한 번에 다 처리하자
- 스프링은 크게 3가지 방법으로 빈 생명주기 콜백을 지원한다.
인터페이스 InitializingBean, DisposableBean
- 스프링 전용 인터페이스를 구현해서 메소드를 재정의하여 사용하기 때문에 해당 코드가 스프링 전용 인터페이스에 의존하고 초기화, 소멸 메서드 이름을 변경할 수 없다.
- 거의 사용하지 않는다.
빈 등록 초기화, 소멸 메서드 지정
- 설정 정보에
@Bean(initMethod = "init", destroyMethod = "close")
처럼 초기화, 소멸 메서드를 지정할 수 있다. - 메서드 이름을 자유롭게 줄 수 있고, 스프링 빈이 스프링 코드에 의존하지 않는다.
- 코드가 아니라 설정 정보를 사용하기 때문에 코드를 고칠 수 없는 외부 라이브러리에도 초기화, 종료 메서드를 적용할 수 있다.
- @Bean의 destroyMethod는 기본값이 추론으로 등록되어 있어서
close
,shutdown
라는 이름의 메서드를 자동 호출 해준다.
애노테이션 @PostConstruct, @PreDestroy
- 호출하고자 하는 메서드에 애노테이션 하나만 붙이면 되므로 매우 편리하다.
- 스프링에 종속적인 기술이 아니라 스프링이 아닌 다른 컨테이너에서도 동작한다.
- 유일한 단점은 외부 라이브러리에서는 적용하지 못하는 것이다.
-> @PostContruct, @PreDestroy애노테이션을 사용하자. 코드를 고칠 수 없는 외부 라이브러리를 초기화, 종료해야 하면 @Bean의 initMethod
, destroyMethod
를 사용하자
0216 ~ 0219
장염 바이러스로 인해 휴식
0220 ~ 0221
몸이 아파서 기존에 진행해야 할 프로젝트의 마감을 지키기 위해 주말 시간동안 프로젝트를 진행하였다.
- 로컬에서 진행하던 프로젝트를 상용 서버로 올려서 테스트를 했다.
- 로컬에서는 잘 작동하던 것들도 상용에서는 안되는 것도 존재 한다는 것을 알게 되었다.
- 대표적으로 쿠키의 경우에는 어디에 있는 쿠키를 삭제할 것인지 URL을 지정해줘야만 작동한다는 것을 알게 되었다.
logoutMethod() {
const cookie = Cookie.get();
jsCookie.do
for(let c in cookie) {
if(c != 'savedEmail' || c != 'notToday'){
remove(c,{domain:'도메인명'});
}
}
this.checkLogin();
}
- 위와 같이 도메인명을 지정해줘야 쿠키가 제대로 삭제된 것을 확인했다.
- 예상에 없던 일로 많은 것이 미뤄지게 되었는데 그만큼 더 열심히 해야겠다고 다짐했다.