Spring(89)
-
[Spring] 싱글톤 빈과 프로토타입 빈을 함께 사용할 때 생기는 문제점에 대한 나름의 이해
프로토타입 빈의 장점은 데이터를 클라이언트별로 갱신해야할 때이다. 싱글톤은 이게 안된다. 모든 클라이언트가 공유하기 때문이다. 하지만 이를 의도하고 싱글톤 빈에 프로토타입 빈을 넣으면 문제가 생긴다. 우리의 의도는 각 클라이언트마다 새로운 프로토타입 빈을 얻는 것이다. 하지만 싱글톤 빈이 생성되고 프로토타입 빈이 의존관계로 주입되면 클라이언트마다 결과적으로 더 이상 프로토타입 빈이 만들어지지 않는다. 왜냐하면 프로토타입 빈은 요청할때 생기는 것이다. 싱글톤 빈이 요청할때는 의존관계를 주입받을 때인데 이건 딱 한번만 일어나는 것이다. 즉, 하나의 요청이기 때문에 하나의 프로토타입 빈만 만들어지게 되는 것이다. 그렇다면 어떻게 하면 우리의 원래 의도인 클라이언트마다 새로운 프로토타입이 만들어져 싱글톤 빈이 ..
2023.11.02 -
[Spring] 프로토타입 스코프에 대한 나름의 이해
프로토타입 스코프의 빈은 스프링이 빈을 생성하고 의존관계 주입하고 초기화 메서드를 해주는 것까지만 한다. 그 후 관리는 클라이언트가 해야한다. 예를 들어, 빈 종료도 클라이언트가 해야한다. 이와 다르게 싱글톤 스코프 빈은 스프링 컨테이너가 생성부터 종료까지 관리해준다. 프로토타입 스코프 빈은 요청이 올때마다 만들어져 클라이언트에 반환된다. 이를 @PostConstruct가 붙은 초기화 메소드 init을 통해서 확인해 볼 수 있다.@Scope("prototype") static class PrototypeBean { @PostConstruct public void init() { System.out.println("PrototypeBean.init"); } @PreDestroy public void des..
2023.11.02 -
[Spring] 빈 스코프에 대한 나름의 이해
스코프는 생명 주기를 뜻한다. 따라서 빈 스코프라 하면 빈의 생명 주기이다. 빈 스코프는 스코프의 길이에 따라 여러가지가 있다. 1. 싱글톤: 컨테이너의 시작과 끝을 함께한다 2. 프로토타입: 빈이 생성되고 의존관계 주입까지만 관리한다. 3. 웹 관련 스코프 - request - session - application Reference https://www.inflearn.com/course/lecture?courseSlug=%EC%8A%A4%ED%94%84%EB%A7%81-%ED%95%B5%EC%8B%AC-%EC%9B%90%EB%A6%AC-%EA%B8%B0%EB%B3%B8%ED%8E%B8&unitId=55388 학습 페이지 www.inflearn.com
2023.10.28 -
[Spring] 빈 생명 주기 콜백을 위한 방법 3 - @PostConstruct, @PreDestroy
@PostConstruct, @PreDestroy는 javax 패키지에 포함된다. javax는 java의 표준이므로 스프링이 아닌 다른 프레임워크에서도 동작한다. 장점은 1. 매우 편리하다. 2. 컴포넌트 스캔과 잘 어울린다. (@Bean을 굳이 쓸 필요가 없다) 3. 자바 표준이므로 다른 컨테이너에서도 잘 동작한다. 4. 최신 스프링에서 가장 권장하는 방법이다. 유일한 단점은 외부 라이브러리에는 적용할 수가 없다. 결론은 자신의 코드에서는 이 방법을 채택하되 외부 라이브러리에서는 initMethod, destroyMethod를 활용한다. Reference https://www.inflearn.com/course/lecture?courseSlug=%EC%8A%A4%ED%94%84%EB%A7%81-%ED%..
2023.10.27 -
[Spring] 빈 생명 주기 콜백을 위한 방법 2 - initMethod, destroyMethod에 대한 나름의 이해
빈을 등록하는 코드에서 initMethod와 destroyMethod를 명시해준다. @Bean(initMethod = "methodName1", destroyMethod = "methodName2") destroyMethod를 쓰지 않더라도 추론 기능이 있어 close나 shutdown이 있으면 찾아서 끝날때 호출해준다. 추론 기능을 쓰고 싶지 않다면 destroyMethod=""을 해주면 된다. 이 방법의 장점은 1. 스프링 인터페이스에 의존하지 않는다 2. 이름을 변경할 수 있다. 3. 외부 라이브러리에 대해서도 적용할 수 있다.(큰 장점 - 콜백이 필요한 경우가 많기 때문) Reference https://www.inflearn.com/course/lecture?courseSlug=%EC%8A%A4..
2023.10.27 -
[Spring] 빈 생명 주기 콜백을 위한 방법1 - Spring의 인터페이스를 활용한 InitializingBean, DisposableBean에 대한 나름의 이해
InitializingBean과 DisposableBean을 활용해서 빈의 생명주기 콜백을 구현할 수 있다. InitializingBean은 afterPropertiesSet()을 DisposableBean은 destroy()를 override해주면 된다. 이건 초창기에 나온 것이고 지금은 더 나은 방법들이 있어서 사용되지 않는다. 단점은 다음과 같다. 1. 내 코드가 스프링 인터페이스에 의존하게 된다. (이게 왜 단점이지?) 2. 이름을 바꿀 수 없다. 3. 내가 코드를 바꿀 수 없는 외부라이브러리에 적용할 수 없다. 3번의 경우 이 빈이 초기화되거나 끝나면 콜백을 하는 위의 함수들을 넣어주어야 하는데 이걸 못바꾸면 할 수가 없다는 이야기이다. 1번의 이게 왜 단점이지?에 대한 답변은 인터페이스를 구현..
2023.10.27