본문 바로가기

Spring

(14)
섹션 9. 빈 스코프 빈 스코프란? 기본적으로 스프링 빈은 싱글톤 스코프로 생성이 됩니다. 스코프란 빈이 존재할 수 있는 범위를 뜻합니다. 스프링의 다양한 스코프 지원 싱글톤 : 기본 스코프, 스프링 컨테이너의 시작과 종료까지 유지되는 가장 넓은 범위의 스코프 프로토타입 : 스프링 컨테이너는 프로토타입 빈의 생성과 의존관계 주입까지만 관여하고 더는 관리하지 않는 매우 짧은 범위의 스코프 웹 관련 스코프 request : 웹 요청이 들어오고 나갈때 까지 유지되는 스코프 session : 웹 세션이 생성되고 종료될 때 까지 유지되는 스코프 applicaion : 웹의 서블릿 컨텍스와 같은 범위로 유지되는 스코프 컴포넌트 스캔 자동 등록 @Scope("prototype") @Component public class HelloBea..
섹션 8. 빈 생명주기 콜백 빈 생명주기 콜백 시작 데이터베이스 커넥션 풀, 네트워크 소켓처럼 애플리케이션 시작 시점에 필요한 연결을 미리 하고, 애플리케이션 종료 시점에 연결을 모두 종료하는 작업을 하려면 객체의 초기화와 종료 작업이 필요하다. 스프링을 통해 초기화 작업과 종료 작업을 어떻게 진행되는지 알아보자 테스트결과 url이 null로 세팅이 됩니다. 객체를 생성하는 단계에는 url이 없고, 객체를 생성한 다음에 외부에서 수정자 주입을 통해 setUrl()이 호출이 되어야 url이 존재하게 된다. 위 테스트를 보면 스프링 빈은 객체 생성 -> 의존관계 주입하는 라이플사이클을 가진다. 개발자가 의존관계 주입이 모두 완료된 시점을 어떻게 알 수 있을까? 스프링은 의존관계 주입이 완료되면 스프링 빈에게 콜백 메서드를 통해서 초기화..
섹션 7. 의존관계 자동 주입 다양한 의존관계 주입 방법 의존관계 주입 4가지 생성자 주입 수정자 주입(setter 주입) 필드 주입 일반 메서드 주입 생성자 주입 생성자를 통해서 의존 관계를 주입하는 방법 특징 생성자 호출시점에 딱 1번만 호출되는 것이 보장 불변, 필수 의존관계에 사용 생성자가 1개만 있을 경우 @Autowired를 생략해도 된다. @Autowired를 제거해도 생성자에 자동으로 주입된다. 생성자 주입은 빈이 생성되면서도 같이 의존관계가 맺어진다. 만약 연관 관계된 빈이 생성이 안되어있으면 생성을 한다. 수정자 주입(setter 주입) setter라고 불리는 필드의 값을 변경하는 수정자 메서드를 통해서 의존관계를 주입하는 방법 특징 선택, 변경이 가능성이 있는 의존관계에 사용 자바빈의 프로퍼티 규약의 수정자 메서드..
섹션 6. 컴포넌트 스캔 컴포넌트 스캔과 의존관계 자동 주입 시작하기 자바 코드의 @Bean이나 XML의 등을 통해서 설정 정보에 직접 등록할 스프링 빈을 나열했다. 이제는 스프링이 설정 정보가 없어도 자동으로 스프링 빈을 등록하는 컴포넌트 스캔 기능을 지원한다. 또한 의존 관계도 자동으로 주입하는 @Autowired라는 기능도 제공한다. @ComponentScan @Component가 붙은 클래스들을 찾아서 자동으로 스프링 빈으로 등록 excludeFilters는 컴포넌트 스캔에서 제외할 대상을지정 @Configuration도 @Component를 가지고 있음 현재 AppConfig에 @Configuration이 설정되어있으므로 @Configuration를 스프링 빈 등록 제외 @Component(name = "") 으로..
섹션 5. 싱글톤 컨테이너 웹 애플리케이션과 싱글톤 대부분의 스프링 어플리케이션은 웹 어플리케이션이다. 웹 어플리케이션은 보통 여러 고객이 동시에 요청한다. 스프링이 없는 순수한 자바 코드로 고객이 여러번 요청이 요청마다 객체가 생성이 된다. 순수 DI 컨테이너로 MemberService 생성 시 요청 개수만큼 객체 생성(주소값이 다름) 고객 트래픽이 초당 100이 나오면 초당 100개 + @ 객체가 생성되고 소멸된다 -> 메모리 낭비가 심하다 해결방안은 해당 객체가 딱 1개만 생성되고 공유하도록 설계하면 된다 -> 싱글톤 패턴 싱글톤 클래스의 인스턴스가 딱 1개만 생성되는 것을 보장하는 디자인 패턴 객체 인스턴스를 2개 이상 생성하지 못하도록 막아야 한다. private 생성자를 사용해서 외부에서 임의로 new 키워드를 사용..
섹션 4. 스프링 컨테이너와 스프링 빈 스프링 컨테이너 생성 ApplicationConext는 스프링 컨테이너라고 부릅니다. ApplicationConext는 인터페이스이므로 다형성이 적용 되어있고 AnnotaionConfigApplicationConext는 ApplicationConext의 구현체 입니다. XML 기반, Groovy으로도 스프링 컨테이너를 만들 수 있지만 잘 사용하지 않습니다. * 스프링 컨테이너를 부를 때 "BeanFactory", "ApplicationContext"로 구분해서 이야기하지만 "BeanFactory"를 직접 사용하는 경우는 거의 없으므로 "ApplicationContext"를 스프링 컨테이너라고 부릅니다. 스프링 컨테이너의 생성 과정 new AnnotationConfigApplicationContext(Ap..
섹션 3. 스프링 핵심 원리 이해2 - 객체 지향 원리 적용 새로운 할인 정책 개발 기획자의 요구 - 기존 정액 할인 -> 정률 할인으로 변경 하고 싶습니다. - ex) 기존 정책은 VIP가 10,000원을 주문하든 , 20,000원을 주문하든 항상 1,000원만 할인 새로나온 정책은 10%로 지정해두면 고객이 10,00 0원 주문 시 1,000원 할인, 20,000원 주문 시 2,000원 할인 RateDiscountPolicy 추가 DiscountPolicy 역학을 RateDiscountPolicy로 구현을 해줍니다. 할인률은 10프로 설정합니다. RateDiscountPolicyTest 추가 테스트는 성공 케이스, 실패 케이스 2개 만들어 줘야 합니다. VIP가 아닐 경우 할인 금액은 0원이므로 두번째 케이스는 실패가 나옵니다. SonarLint의 추천으로 i..
섹션 2. 스프링 핵심 원리 이해1 - 예제 만들기 프로젝트 생성 저는 최신 버전으로 구성을 해보았습니다. 현재 3.1.1에 지원하는 spring framework 버전은 6.0.10이고 Spring framework 버전별 자바 지원 버전은 밑에와 같습니다. 초기설정 비지니스 요구사항 회원 회원을 가입하고 조회할 수 있다. 회원은 일반과 VIP 두 가지 등급이 있다. 회원 데이터는 자체 DB를 구축할 수 있고, 외부 시스템과 연동할 수 있다.(미확정) 주문과 할인 정책 회원은 상품을 주문 할 수 있다. 회원 등급에 따라 할인 정책을 적용할 수 있다. 할인 정책은 모든 VIP는 1,000원 할인해주는 고정 금액 할인을 적용해달라.(나중에 변경 가능) 할인 정책은 변경 가능성이 높다. 회사의 기본 할인 정책을 아직 정하지 못했고, 오픈 직전까지 고민을 미루..