목록전체 글 (261)
당니의 개발자 스토리
스코프와 Provider 스코프와 Provider, 첫번째 해결방안은 Provider를 사용하는 건데요. 간단하게 ObjectProvider를 사용해볼게요. LogDemoController에서, 이렇게 하면, MyLogger를 의존관계 주입받는 게 아니라, MyLogger 찾을 수 있는, 즉 dependency lookup으로 찾을 수 있는 기능을 가진 ObjectProvider가 주입이 되죠. 그러면 주입 시점에 주입을 받을 수 있으므로, 여기서 myLogger를 받는 거예요. 이렇게 하고 다시 돌려보면, 또 똑같은 오류가 발생합니다. 이제 LogDemoService로 들어가서, 여기서도 ObjectProvider를 주입받으면, 실제로 LogDemoController에 요청이 와서, 컨트롤러에 고객 요..
request 스코프 예제 만들기 이번 시간에 request 스코프 예제를 만들어 볼 건데, 예제 코드로 바로 동작하는 거 보여드릴게요. 일단 웹 스코프는 웹 환경에서만 동작하기 때문에 웹이 동작하도록 라이브러를 추가하겠습니다. 이걸 복사해서 붙여넣고 코끼리를 눌러줍니다. 받는데 시간이 좀 걸립니다. 그 다음에 External Library를 들어가면, web과 관련된 기술들이 들어온 걸 확인할 수 있습니다. 이렇게 추가해놓고 뭘 실행해야 되냐면, 스프링 부트인 CoreApplication이 있을 거예요. 여기서 main 메서드를 실행하면 특별한 문제가 없으면 잘 실행될 거예요. 예전에는 이게 없었는데, 이게 뜨면 웹 기술이 들어가면서 스프링 부트에 서버가 띄워진 겁니다. 자 그래서 http://loca..
웹 스코프 이번 시간부터는 웹 스코프에 대해서 알아보겠습니다. 우리가 지금까지 싱글톤과 프로토타입 스코프를 학습했죠. 정리해보면 싱글톤은 스프링 컨테이너의 시작과 끝, 그리고 프로토타입 같은 경우에는 생성하고 의존관계 주입하고 초기화 한 다음에 바로 딱 던지고 끝. 종료도 없는 프로토타입이 좀 특별하죠. 이번에는 웹 스코프에 대해서 알아보겠습니다. 웹 스코프는 웹 환경에서만 동작하기 때문에 웹 스코프라고 한 거고요. 웹 스코프의 빈은 프로토타입이랑 다르게 스프링이 어쨌든 빈의 종료 시점까지 관리를 해줘요. 그래서 종료 메서드가 호출이 됩니다. 일단 웹 스코프는 여러가지 종류가 많이 있는데요. 우선 request는 만약에 웹에서 HTTP 서버에 누군가 접속을 하면 서버를 타고 응답이 오겠죠. 그래서 그 H..
프로토타입 스코프 - 싱글톤 빈과 함께 사용시 Provider로 문제 해결 이번 시간에는 프로토타입 스코프를 싱글톤 빈과 함께 사용할 때 Provider 라는 걸 사용해서 문제를 해결하는 방법에 대해서 알려드리겠습니다. 싱글톤 빈과 프로토타입 빈을 함께 사용할 때, 어떻게 하면 사용할 때 마다 항상 새로운 프로토타입 빈을 생성할 수 있을까요? 이전 시간에 살짝 해봤죠. 가장 간단한 방법은 싱글톤 빈이 프로토타입을 사용할 때마다 스프링 컨테이너에 getBean()으로 새로 요청하는 거예요. 이전 시간에 코드로 작성해봤죠. ClientBean이 @Autowired로 ApplicationContext를 주입받아서 logic()에서 prototypeBean의 addCount()를 호출할 때마다 컨테이너에서 프로..
프로토타입 스코프 - 싱글톤 빈과 함께 사용시 문제점 이번 시간에는 프로토타입 스코프를 싱글톤 빈과 함께 사용할 때 어떤 문제가 생기는지 알아보겠습니다. 스프링 컨테이너에 프로토타입 스코프의 빈을 요청하면, 항상 새로운 객체 인스턴스를 생성해서 반환해준다고 했잖아요. 그런데 그러지 않을 때가 있습니다. 언제냐면 프로토타입 빈을 싱글톤 빈과 함께 사용할 때는 의도한 대로 잘 동작하지 않아요. 이거를 코드와 그림으로 굉장히 자세히 설명을 드릴게요. 자 먼저 그냥 스프링 컨테이너에 프로토타입 빈을 직접 요청하는 예제를 한번 보겠습니다. 클라이언트 A가 PrototypeBean라는 이름의 빈을 요청해요. 그 요청을 받았어요. 그럼 스프링 컨테이너에서 새로 만들어서 반환하잖아요? 반환한 인스턴스의 참조값을 Pro..
프로토타입 스코프 프로토타입 스코프에 대해서 알아보겠습니다. 싱글톤 같은 경우에는 기본으로 만들면 싱글톤으로 된다고 했죠. 싱글톤 스코프의 빈을 조회하면 스프링 컨테이너는 싱글톤이니까 항상 같은 인스턴스의 스프링 빈을 반환하는게 보장이 된다고 했었죠. 반면에 프로토타입 스코프를 스프링 컨테이너에서 조회하면, 스프링 컨테이너는 조회할 때마다 항상 새로운 인스턴스를 만들어서 반환을 해줍니다. 그림으로 비교를 해보면, 클라이언트 A, B, C가 memberService 라는 초록 색깔 스프링 빈을 요청하는데, 이 빈의 스코프가 싱글톤입니다. 그러면 3번 요청을 해도 항상 같은 거를 반환해주죠. 그래서 스프링 컨테이너에 싱글톤 스코프의 빈을 요청하면, 스프링 컨테이너는 본인이 이미 관리하던 스프링 빈을 반환하는..
9. 빈 스코프 이번 시간부터는 빈 스코프에 대해서 알아보겠습니다. 빈 스코프가 뭐냐면요. 지금까지 우리는 스프링 컨테이너가 만들어질 때 스프링 빈들도 함께 생성이 되고 스프링 컨테이너에 의해서 관리되고 놀다가 스프링이 종료되기 직전에 스프링 빈들도 함께 종료된다고 얘기를 했잖아요. 그게 왜 그러냐면, 스프링 빈이 기본적으로 싱글톤 스코프로 생성되기 때문이에요. 스코프는 번역 그대로 이 빈이 존재할 수 있는 범위를 뜻하거든요. '이 빈은 언제부터 언제까지야' 이런 겁니다. 싱글톤 스코프 같은 경우에는 기본 스코프예요. 기본이지만 스프링 컨테이너의 시작과 종료까지, 가장 생명주기가 긴, 즉 스프링 컨테이너와 똑같은 생명주기를 가지는 스코프입니다. 그리고 스프링이 다른 스코프도 지원하는데요. 프로토타입 이라..
애노테이션 @PostConstruct, @PreDestroy 이번 시간에는 애노테이션으로 적용하는 방법인데요. 결론부터 말씀드리면 이 방법을 쓰시면 됩니다. 스프링에서도 그냥 이걸 권고하고 있습니다. @PostConstruct, @PreDestroy가 있는데요. 이름만 봐도 딱 느낌이 오죠? @PostConstruct는 객체 생성이 된 이후에, @PreDestroy는 소멸되기 전에 아주 이름 잘 지었죠? 바로 코드로 설명드리겠습니다. 이제 이 부분은 지워주고, 우리가 아까 만든 메서드에다가 애노테이션을 각각 달면 끝입니다. 이렇게 하고 돌려보겠습니다. 돌려보면 깔끔하게 되죠. 이건 이제 패키지가 중요해요. 스프링 3.0 이전에는 javax였는데, jakarta로 바꼈습니다. jakarta로 시작하면 ja..