Spring Framework/[인프런] Spring 핵심 원리 9

Chapter 09. 빈 스코프(Bean Scope)

9.1 빈 스코프(Bean Scope) Def) 빈 스코프(Bean Scope)란? 지금까지 스프링 빈은 스프링 컨테이너의 시작과 함께 생성되었다가 스프링 컨테이너가 종료될 때까지 유지된다고 살펴봤다. 이것은 빈이 기본적으로 싱글톤 스코프로 생성되기 때문이다. 스코프는 빈이 존재할 수 있는 범위를 뜻한다. 싱글톤: 기본 스코프, 스프링 컨테이너의 시작과 종료 시점까지 유지되는 가장 넓은 범위의 스코프이다. 프로토타입: 스프링 컨테이너는 프로토타입 빈의 생성과 의존관계 주입까지만 관여하고 더는 관리하지 않는 매우 짧은 범위의 스코프이다. 웹 관련 스코프 request: 웹 요청이 들어오고 나갈 때까지 유지되는 스코프 session: 웹 세션이 생성되고 종료될 때까지 유지되는 스코프 application: ..

Chapter 08. 빈 생명주기(Bean Life Cycle) 콜백

8.1 빈 생명주기 콜백 시작 빈 생명주기 콜백 시작 데이터베이스 커넥션 풀이나 네트워크 소켓처럼 애플리케이션 시작 시점에 필요한 연결을 미리해두고 애플리케이션 종료 시점에 연결을 모두 종료하는 작업을 진행하려면 객체의 초기화와 종료 작업이 필요하다. ex) 외부 네트워크에 미리 연결하는 객체를 하나 생성한다고 가정할 때, 실제로 네트워크에 연결하는것은 아니고 단순히 문자만 출력하도록 했다. 이 'NetworkClient'는 애플리케이션 시작 시점에 'connect()'를 호출해서 연결을 맺어두어야하고 애플리케이션이 종료되면 'disconnect()'를 호출해서 연결을 끊어야한다. 스프링 빈은 '객체 생성' => '의존 관계 주입' 과 같은 라이프 사이클을 사진다. Ex) - NetoworkClient를..

Chapter 07. 의존 관계 자동 주입

7.1 다양한 의존 관계 주입(Dependency Injection) 방법 Def) 의존 관계 주입(DI): 하나의 객체가 다른 객체의 의존성을 제공하는 테크닉이다. - @Autowired: 의존 관계 주입할 때, 사용하는 애너테이션이며 IoC컨테이너에 존재하는 빈을 찾아서 주입하는 역할을 한다. - 객체의 의존성을 가지는 부분에 애너테이션을 사용해서 의존성을 주입할 수 있다. 의존 관계 주입 생성자 주입: 생성자를 통해 의존 관계를 주입한다. 생성자 호출 시점에 딱 1번만 호출되는 것이 보장된다. 불변, 필수 의존관계에서 사용된다. 생성자가 1개만 있으면 @Autowired를 생략해도 자동으로 주입된다. (스프링 빈에만 해당) 수정자 주입(setter): setter를 통해서 의존 관계를 주입하는 방법..

Chapter 06. 컴포넌트 스캔(@ComponentScan)

6.1 컴포넌트 스캔과 의존관계 자동 주입 시작하기 @ComponentScan 지금까지 배운 내용과 다르게 빈이 많아진다면 하나씩 등록하기 귀찮고 누락하는 문제가 생긴다. 그래서 스프링은 설정 정보가 없어도 자동으로 스프링 빈을 등록하는 컴포넌트 스캔 기능을 제공한다. @Autowired: 의존관계를 자동으로 주입한다. 생성자에 붙이면 매개변수에 맞는 것을 찾아와서 의존관계를 주입 @ComponentScan은 스프링 빈을 자동으로 끌어 올려준다 @ComponentScan을 사용하면 @Configuration이 붙은 설정 정보도 자동으로 등록되므로 AppConfig, TestConfig 등 앞서 만들어두었던 설정 정보도 함께 등록되고 실행되어 버린다. @Configuration 소스코드를 열어보면 @Com..

Chapter 05. 싱글톤 컨테이너

5.1 웹 어플리케이션과 싱글톤 웹 애플리케이션과 싱글톤 스프링은 기업용 온라인 서비스 기술을 지원하기 위해 탄생했다. 대부분 스프링 애플리케이션은 웹 애플리케이션이다. 웹 애플리케이션은 보통 여러 고객이 동시에 요청한다. 요청이 올 때마다 수많은 객체를 만들 수 있을까? Ex) 스프링 없는 순자 자바 DI 컨테이너 package hello.core.singletone; import hello.core.AppConfig; import hello.core.member.MemberService; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; public class SingletonTest { @Test @Display..

Chapter 04. 스프링 컨테이너와 스프링 빈

4.1 스프링 컨테이너 생성 (1) 스프링 컨테이너 생성 ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class); 어노테이션 자바 config기반의 스프링을 만들라는 뜻이다. 일반적으로, 인터페이스 ApplicationContext는 '스프링 컨테이너'라고 한다. 사실, 'ApplicationContext'의 최상위에는 'Bean Factory'가 있다. XML 기반으로 만들 수 있다. 스프링 컨테이너를 생성할 때는 구성 정보를 지정해줘야한다. => 'AppConfig.class' (2)스프링 빈 등록 빈 이름(key), 반환된 값은 빈의 객체로 등록 빈 이름은 항상 달라야한다! 같은 이름..

Chapter 03. 스프링 핵심 원리 이해2 - 객체 지향 원리 적용

3.1 새로운 할인 정책 개발 새로운 할인 정책 기획자가 서비스 오픈 직전에 할인 정책을 정률제로 바꾸고 싶다고 하면 어떻게 해야할까? Ex) - RateDiscountPolicy 클래스를 만든다. package hello.core.discount; import hello.core.member.Grade; import hello.core.member.Member; public class RateDiscountPolicy implements DiscountPolicy { private int discountPercent = 10; @Override public int discount(Member member, int price) { if(member.getGrade() == Grade.VIP){ retur..

Chapter 02. 스프링 핵심 원리 이해1 - 예제 만들기

2.1 프로젝트 생성 - Java 11설치 - https://start.spring.io/ -> 다음과 같이 설정한다. generate 한 다음에 압축을 풀고 open - 기본 설정인 Gradle을 아래와 같이 인텔리제이로 바꿔야 속도가 빨라진다. 2.2 비즈니스 요구사항과 설계 회원 회원가입하고 회원을 조회 가능하다. 회원 등급: 일반 / VIP 회원 데이터는 자체 DB를 구축할 수 있고 외부 시스템과 연동 가능 (미확정) 주문과 할인정책 회원은 상품 주문 가능 등급에 따라 할인 정책 적용 가능 모든 VIP는 1000원을 할인해주는 고정 금액 할인을 적용해달라 (나중에 변경될 수 있다.) 할인 정책은 변경 가능성이 높다. 회사의 기본 할인 정책을 아직 정하지 못했고 오픈 직전까지 변경될 수 있다. 심지..

Chapter 01. 객체 지향 설계와 스프링

1.1 자바 진영의 추운 겨울과스프링의 탄생 EJB(Enterprise Java Beans, 엔터프라이즈 자바빈즈)란? 기업 환경의 시스템을 구현하기 위한 서버 측 컴포넌트 모델이다. 즉, 애플리케이션의 업무 로직을 가지고 있는 서버 애플리케이션이다. 자바 표준 기술 ORM (객체 관계 매핑, 자바 객체를 데이터베이스에 편하게 꺼내 쓸 수 있다. ) EJB의 단점: 어렵고 비싸다. 복잡하고 느리다. EJB에 의존적 스프링의 역사 - release 2002년 「Expert One -on- One J2EE Design and Development」 - Rod Johnson (로드 존슨) 출간 => EJB의 문제점을 비판한다. 이를 기반으로 스프링 발전 2003년 6월에 최초로 아파치 2.0 라이선스로 공개된..