본문 바로가기

Spring/Core

(43)
[Core] Bean Lifecycle 이번 장에서는 빈의 생명주기와 콜백에 대해서 알아본다. 글의 하단부에 참고한 강의와 공식문서의 경로를 첨부하였으므로 자세한 사항은 강의나 공식문서에서 확인한다. 모든 코드는 깃허브 (링크)에 올려두었다. 빈의 생명주기와 콜백 어플리케이션은 시작 시점과 종료 시점에 진행해야하는 작업들이 있다. 스프링 빈 또한 이러한 초기화 작업과 종료 작업이 필요하며 어떻게 사용하는지에 대해서 알아보도록 한다. 테스를 위해 데이터베이스 커넥션을 담당하는 DBConnectionService를 생성하였다. @Slf4j public class DBConnectionService { private String host; private String user; private String password; public DBConnec..
[Core] Specific Bean 이번 장에서는 다양한 의존관계 주입 방법(링크)에 이어 중복 빈 처리에 대해서 알아본다. 글의 하단부에 참고한 강의와 공식문서의 경로를 첨부하였으므로 자세한 사항은 강의나 공식문서에서 확인한다. 모든 코드는 깃허브 (링크)에 올려두었다. 조회 된 빈이 2개 이상인 경우 우리는 아래와 같이 DiscountPolicy를 구현한 두 개의 할인 정책이 있다. @Component public class FixedDiscountPolicy implements DiscountPolicy {} @Component public class RatioDiscountPolicy implements DiscountPolicy {} 이렇게 동일한 역할(Interface)을 구현한 구현체가 복수개인 상황에서 @Autowired를 ..
[Core] Auto Dependency Injection 이번 장에서는 다양한 의존관계 주입 방법에 대해서 알아본다. 글의 하단부에 참고한 강의와 공식문서의 경로를 첨부하였으므로 자세한 사항은 강의나 공식문서에서 확인한다. 모든 코드는 깃허브 (링크)에 올려두었다. 의존관계 주입 방법 의존관계 주입(Dependency Injection)에는 크게 4가지 방법이 있다. 생성자 주입(Constructor Injection) 수정자 주입(Setter Injection) 필드 주입(Field Injection) 일반 메서드 주입 일반적인 상황이라면 생성자 주입을 사용해야하며 특별한 상황에만 수정자 주입을 사용해야한다. 필드 주입은 테스트 코드를 작성하는 경우에만 사용한다. 왜 이러한 결론을 내리게 되었는지 하나씩 알아보도록 한다. 생성자 주입(Constructor I..
[Core] Component Scan 이번 장에서는 @Configuration과 싱글톤(링크)에 이어 컴포넌트 스캔에 대해서 알아본다. 글의 하단부에 참고한 강의와 공식문서의 경로를 첨부하였으므로 자세한 사항은 강의나 공식문서에서 확인한다. 모든 코드는 깃허브 (링크)에 올려두었다. Component Scan 우리는 지금까지 DI 컨테이너에 빈을 등록할 때 자바 코드와 XML을 사용하여 빈을 등록하였다. 하지만 이러한 방식으로 빈을 등록하게 되는 경우 실무에서 쏟아져 나오는 수많은 클래스들을 관리하기란 쉽지 않고 손이 많이 간다. 스프링에서 이러한 문제를 인지하고 편리하게 빈을 등록할 수 있도록 컴포넌트 스캔(Component Scan)이라는 기능을 제공하였다. 새로운 구성 정보를 가지는 AutoSpringApplicationConfig파일..
[Core] @Configuration & Singleton 이번 장에서는 DI Container와 싱글톤(링크)에 이어 @Configuration과 싱글톤에 대해서 알아본다. 글의 하단부에 참고한 강의와 공식문서의 경로를 첨부하였으므로 자세한 사항은 강의나 공식문서에서 확인한다. 모든 코드는 깃허브 (링크)에 올려두었다. @Configuration @Configuration은 구성(설정) 파일을 위한 클래스에 사용되는 어노테이션이다. 정확히 어떠한 역할을 하는지 테스트를 통해서 알아보도록 한다. DI 컨테이너의 관리를 받는 SpringApplicationConfig 클래스를 확인해본다. @Configuration public class SpringApplicationConfig { @Bean public MemberService memberService() { ..
[Core] DI Container & Singleton 이번 장에서는 스프링 빈과 싱글톤에 대해서 알아본다. 글의 하단부에 참고한 강의와 공식문서의 경로를 첨부하였으므로 자세한 사항은 강의나 공식문서에서 확인한다. 모든 코드는 깃허브 (링크)에 올려두었다. 싱글톤(Singleton) 싱글톤이 적용되지 않은 순수 자바 DI 컨테이너 스프링은 기업용 온라인 서비스 기술을 지원하기 위해 탄생하였다. 이러한 웹 애플리케이션은 일반적으로 동시에 여러 고객의 요청을 처리해야한다. 아래는 스프링을 사용하지 않은 순수 자바를 사용한 DI 컨테이너 코드다. public class PureApplicationConfig { public MemberService memberService() { return new MemberServiceImpl(memberRepository()..
[Core] BeanFactory & ApplicationContext 이번 장에서는 스프링 컨테이너와 빈 (링크)에 이어서 BeanFactory와 ApplicationContext에 대해서 알아본다. 글의 하단부에 참고한 강의와 공식문서의 경로를 첨부하였으므로 자세한 사항은 강의나 공식문서에서 확인한다. 모든 코드는 깃허브 (링크)에 올려두었다. BeanFactory 스프링 컨테이너인 ApplicationContext의 최상위 인터페이스이며 빈을 관리하고 조회하는 역할을 한다. 스프링 컨테이너와 빈을 살펴본 장에서 사용한 대부분의 기능이 BeanFactory가 제공하는 기능이다. ApplicationContext BeanFactory의 모든 기능을 상속받고 있으며 추가로 필요한 기능들을 상속받아서 우리가 필요한 대부분의 기능을 가지고 있다. 각 인터페이스의 역할은 아래와 ..
[Core] Container & Bean 이번 장에서는 스프링 컨테이너와 스프링 빈에 대해서 알아본다. 글의 하단부에 참고한 강의와 공식문서의 경로를 첨부하였으므로 자세한 사항은 강의나 공식문서에서 확인한다. 모든 코드는 깃허브 (링크)에 올려두었다. 스프링 컨테이너 일반적으로 ApplicationContext를 스프링 컨테이너라고 한다. 정확히는 ApplicationContext는 인터페이스이며 이를 구현한 구현체들이 스프링 컨테이너가 된다. 설정(구성) 정보를 가지고 있는 ApplicationConfig클래스는 아래와 같다. @Configuration public class ApplicationConfig { @Bean protected MemberService memberService() { return new MemberServiceIm..