[Spring] 스프링은 왜 Proxy 전략을 선택했을까? Bean Scope와 함께 파헤쳐보기
·
Spring
들어가며Proxy 전략 이야기를 하기전에 먼저 Bean Scope에 대해서 알아보자. Spring에서 Scope란 Bean이 언제 생성되고, 언제까지 살아있는가를 정의하는 개념이다. 즉 빈의 생명주기를 결정하는 방법이라고 생각하면 편하겠다. Spring은 아무 설정도 하지 않으면 기본적으로 싱글톤으로 빈을 제공한다. 즉 아래 코드와 같은 경우 @Componentpublic class OrderService { } 애플리케이션 시작 시점에 한 번 생성컨테이너가 종료될 때까지 하나의 인스턴스만 유지모든 요청, 모든 스레드에서 같은 객체 사용인 것이다. 여기서 Spring의 기본 철학은 상태를 갖지 않는 객체를 하나 만들어 계속 재사용하자라는 것을 엿볼 수 있다.하지만 모든 객체를 싱글톤으로 쓰기에는 현실적으..
[Spring] 의존성 주입하려는데, 조회되는 빈이 두개라면? (NoUniqueBeanDefinitionException 발생)
·
Spring
들어가며@CompnentScan으로 객체를 빈으로 안전하게 관리하기 위해 클래스에 @Component를 많이 붙히곤 한다. 하지만 프로그램의 완성도가 올라가면 올라갈수록 추상화의 정도가 어느정도 높아진다고 생각을 하는데, 그렇다면 다음과 같은 코드에서 문제가 생기고 만다.@Componentpublic class OnePlusOneEvent implements OfferEvent { @Override public void apply() { System.out.println("1+1 이벤트"); }}@Componentpublic class TwoPlusOneEvent implements OfferEvent { @Override public void apply() { ..
[Spring] 스프링 컨테이너가 빈을 관리하는 방식이 너무 궁금해서 Application.run(.class, args) 해부해보기
·
Spring
들어가며빈과 컨테이너는 스프링 기반의 프로젝트를 진행하다 보면 너무나 당연하게 쓰게 되는 개념이다. 자주 쓰는 프레임워크가 정확히 어떤 이유로 어떻게 기능을 제공하는지 알고 있어야, 여러가지가 꼬인 문제가 생겼을 때 근본적으로 해결할 수 있는 개발자가 될 수 있다고 생각해서 개념을 정리하고 있었다. 그러다가 정확히 코드로 어떻게 제공중인지도 궁금해져서 메인함수에 쓸쓸하게 혼자 있던 Application.run()메서드를 해부해보았다. 그 이해 흐름을 작성한 글이다.본론으로🧐 스프링은 왜 컨테이너와 빈이라는 개념을 제공할까?스프링 컨테이너가 객체들을 빈으로 관리하여 필요시에 해당 객체를 찾아서 반환해준다는 식의 표현을 많이 접할 수 있다. 하지만 왜 굳이 객체를 컨테이너로 관리하며 반환해줄까? 아래 코드..