Spring/[인프런] 스프링 핵심 원리- 기본편

    빈 스코프

    빈 스코프

    빈 스코프 목차 빈 스코프란? 프로토타입 스코프 프로토타입 스코프 - 싱글톤 빈과 함께 사용시 문제점 프로토타입 스코프 - 싱글톤 빈과 함께 사용시 Provider로 문제 해결 웹 스코프 request 스코프 예제 만들기 스코프와 Provider 스코프와 프록시 빈 스코프란? 지금까지 우리는 스프링 빈이 스프링 컨테이너의 시작과 함께 생성되어서 스프링 컨테이너가 종료될 때 까지 유지된다고 학습했다. 이것은 스프링 빈이 기본적으로 싱글톤 스코프로 생성되기 때문이다. 스코프는 번역 그대로 빈이 존재할 수 있는 범위를 뜻한다. 스프링은 다음과 같은 다양한 스코프를 지원한다. 싱글톤: 기본 스코프, 스프링 컨테이너의 시작과 종료까지 유지되는 가장 넓은 범위의 스코프이다. 프로토타입: 스프링 컨테이너는 프로토타입..

    빈 생명주기 콜백

    빈 생명주기 콜백

    빈 생명주기 콜백 목차 빈 생명주기 콜백 시작 인터페이스 InitializingBean, DisposableBean 빈 등록 초기화, 소멸 메서드 지정 애노테이션 @PostConstruct, @PreDestory 의존관계 주입 (생성자 주입은 예외) 스프링 빈은 객체를 생성하고, 의존관계 주입이 다 끝난 다음에야 필요한 데이터를 사용할 수 있는 준비가 완료된다. 따라서 초기화 작업은 의존관계 주입이 모두 완료되고 난 다음에 호출해야 한다. 그런데 개발자가 의존관계 주입이 모두 완료된 시점을 어떻게 알 수 있을까? 스프링은 의존관계 주입이 완료되면 스프링 빈에게 콜백 메서드를 통해서 초기화 시점을 알려주는 다양한 기능을 제공한다. 또한 스프링은 스프링 컨테이너가 종료되기 직전에 소멸 콜백을 준다. 따라서 ..

    의존관계 자동 주입

    의존관계 자동 주입

    의존관계 자동 주입 목차 다양한 의존관계 주입 방법 옵션 처리 생성자 주입을 선택해라! 롬복과 최신 트랜드 조회 빈이 2개 이상 - 문제 @Autowired 필드 명, @Qualifier, @Primary 애노테이션 직접 만들기 조회한 빈이 모두 필요할 때, List, Map 자동, 수동의 올바른 실무 운영 기준 다양한 의존관계 주입 방법 의존관계 주입은 크게 4가지 방법이 있다. 생성자 주입 수정자 주입(setter 주입) 필드 주입 일반 메서드 주입 생성자 주입 이름 그대로 생성자를 통해서 의존 관계를 주입 받는 방법이다. 지금까지 진행했던 방법이 바로 생성자 주입이다. 특징 생성자 호출시점에 딱 1번만 호출되는 것이 보장된다. 불변, 필수 의존관계에 사용 @Component public class ..

    컴포넌트 스캔

    컴포넌트 스캔

    컴포넌트 스캔 목차 컴포넌트 스캔과 의존관계 자동 주입 시작하기 탐색 위치와 기본 스캔 대상 필터 중복 등록과 충돌 컴포넌트 스캔과 의존관계 자동 주입 시작하기 지금까지 스프링 빈을 등록할 때는 자바 코드의 @Bean이나 XML의 등을 통해서 설정 정보에 직 접 등록할 스프링 빈을 나열했다. 예제에서는 몇개가 안되었지만, 이렇게 등록해야 할 스프링 빈이 수십, 수백개가 되면 일일이 등록하기도 귀 찮고, 설정 정보도 커지고, 누락하는 문제도 발생한다. 역시 개발자는 반복을 싫어한다. (무엇보다 귀찮다 ㅠ ㅠ) 그래서 스프링은 설정 정보가 없어도 자동으로 스프링 빈을 등록하는 컴포넌트 스캔이라는 기능을 제공한 다. 또 의존관계도 자동으로 주입하는 @Autowired 라는 기능도 제공한다. 코드로 컴포넌트 스..

    싱글톤 컨테이너

    싱글톤 컨테이너

    싱글톤 컨테이너 목차 웹 애플리케이션과 싱글톤 싱글톤 패턴 싱글톤 컨테이너 싱글톤 방식의 주의점 @Configuration과 싱글톤 @Configuration과 바이트코드 조작의 마법 웹 애플리케이션과 싱글톤 스프링은 태생이 기업용 온라인 서비스 기술을 지원하기 위해 탄생했다. 대부분의 스프링 애플리케이션은 웹 애플리케이션이다. 물론 웹이 아닌 애플리케이션 개발도 얼마든지 개발 할 수 있다. 웹 애플리케이션은 보통 여러 고객이 동시에 요청을 한다. 스프링 없는 순수한 DI 컨테이너 테스트 package hello.core.singleton; import hello.core.AppConfig; import hello.core.member.MemberService; import org.assertj.core..

    스프링 컨테이너와 스프링 빈

    스프링 컨테이너와 스프링 빈

    스프링 컨테이너와 스프링 빈 목차 스프링 컨테이너 생성 컨테이너에 등록된 모든 빈 조회 스프링 빈 조회 - 기본 스프링 빈 조회 - 동일한 타입이 둘 이상 스프링 빈 조회 - 상속 관계 BeanFactory와 ApplicationContext 다양한 설정 형식 지원 - 자바 코드, XML 스프링 빈 설정 메타 정보 - BeanDefinition 스프링 컨테이너 생성 스프링 컨테이너가 생성되는 과정을 알아보자. // 스프링 컨테이너 생성 ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class); ApplicationContext 를 스프링 컨테이너라 한다. ApplicationContext 는..

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

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

    스프링 핵심 원리 이해2 - 객체 지향 원리 적용 목차 새로운 할인 정책 개발 새로운 할인 정책 적용과 문제점 관심사의 분리 AppConfig 리팩터링 새로운 구조와 할인 정책 적용 전체 흐름 정리 좋은 객체 지향 설계의 5가지 원칙의 적용 IoC, DI, 그리고 컨테이너 스프링으로 전환하기 새로운 할인 정책 개발 새로운 할인 정책 확장 악덕 기획자: 서비스 오픈 직전에 할인 정책을 지금처럼 고정 금액 할인이 아니라 좀 더 합리적인 주문 금액당 할인하는 정률(%) 할인으로 변경하고 싶어요. 예를 들어서 기존 정책은 VIP가 10000원을 주문하든 20000원을 주문하든 항상 1000원을 할인했는데, 이번에 새로 나온 정책은 10%로 지정해두면 고객이 10000원 주문시 1000원을 할인해주고, 20000..

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

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

    스프링 핵심 원리 이해1 - 예제 만들기 목차 프로젝트 생성 비즈니스 요구사항과 설계 회원 도메인 설계 회원 도메인 개발 회원 도메인 실행과 테스트 주문과 할인 도메인 설계 주문과 할인 도메인 개발 주문과 할인 도메인 실행과 테스트 프로젝트 생성 사전 준비물 Java 11 설치 IDE: IntelliJ 또는 Eclipse 설치 스프링 부트 스타터 사이트로 이동해서 스프링 프로젝트 생성 https://start.spring.io 프로젝트 선택 Project: Gradle Project Spring Boot: 2.3.x Language: Java Packaging: Jar Java: 11 Project Metadata groupId: hello artifactId: core Dependencies: 선택하지..

    객체 지향 설계와 스프링

    객체 지향 설계와 스프링

    객체 지향 설계와 스프링 목차 자바 진영의 추운 겨울과 스프링의 탄생 스프링이란? 좋은 객체 지향 프로그래밍이란? 좋은 객체 지향 설계의 5가지 원칙(SOLID) 객체 지향 설계와 스프링 자바 진영의 추운 겨울과 스프링의 탄생 자바 진영의 표준 기술이었던 Enterprise Java Beans (EJB), 복잡하고 어려우며 의존적이고 느렸음. → EJB 컨테이너의 대체, Spring → EJB 엔티티빈 기술을 대체, 하이버네이트 기반 JPA 표준 인터페이스 스프링 역사 2002년 로드 존슨 책 출간 EJB의 문제점 지적 EJB 없이도 충분히 고품질의 확장 가능한 애플리케이션을 개발할 수 있음을 보여줌 여기에 지금의 스프링 핵심 개념과 기반 코드가 들어있음 BeanFactory, ApplicationCon..