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();
	}
  • 위와 같이 도메인명을 지정해줘야 쿠키가 제대로 삭제된 것을 확인했다.
  • 예상에 없던 일로 많은 것이 미뤄지게 되었는데 그만큼 더 열심히 해야겠다고 다짐했다.

태그:

카테고리:

업데이트: