[Spring] 빈 스코프
·
Programming/Spring
이 글은 인프런에서 김영한 님의 "스프링 핵심원리 - 기본편"을 수강 후 공부한 내용을 정리한 게시글입니다. 부족한 부분이 있다면 언제든 지적 부탁드립니다.✏️ 빈 스코프란?스코프는 빈이 존재할 수 있는 범위를 의미한다.싱글톤: 기본 스코프, 스프링 컨테이너의 시작과 종료까지 유지되는 가장 넓은 범위의 스코프이다.프로토타입: 스프링 컨테이너는 프로토타입 빈의 생성과 의존관계 주입까지만 관여하고 더는 관리하지 않는 매우 짧은 범위의 스코프이다.웹 관련 스코프request: 웹 요청이 들어오고 나갈때 까지 유지되는 스코프이다.session: 웹 세션이 생성되고 종료될 때 까지 유지되는 스코프이다.application: 웹의 서블릿 컨텍스트와 같은 범위로 유지되는 스코프이다컴포넌트 스캔 자동 등록@Scope(..
[Spring] 빈 생명주기 콜백
·
Programming/Spring
이 글은 인프런에서 김영한 님의 "스프링 핵심원리 - 기본편"을 수강 후 공부한 내용을 정리한 게시글입니다. 부족한 부분이 있다면 언제든 지적 부탁드립니다.✏️ 빈 생명 주기 콜백스프링 어플리케이션 시작 시점에 필요한 연결을 미리 해두고 어플리케이션 종료 시점에 연결을 모두 종료하는 객체 초기화 작업과 종료 작업이 필요하다.package hello.core.lifecycle;public class NetworkClient { private String url; public NetworkClient() { System.out.println("생성자 호출, url = " + url); connect(); call("초기화 연결 메시지"); } pub..
[Spring] 의존관계 자동 주입2
·
Programming/Spring
이 글은 인프런에서 김영한 님의 "스프링 핵심원리 - 기본편"을 수강 후 공부한 내용을 정리한 게시글입니다. 부족한 부분이 있다면 언제든 지적 부탁드립니다.다양한 의존 관계 주입 방법에 대해서는 “이전 게시물”을 확인해주세요.이전 게시물 - 의존관계 자동주입 1✏️ 자동 주입 대상을 옵션으로 처리주입할 스프링 빈이 없어도 동작해야 할 때가 있다.그런데 @Autowired 만 사용하면 required 옵션의 기본값이 true 로 되어 있어서 자동 주입 대상이 없으면 오류가 발생한다. 이를 해결하기 위해서는 아래와 같이 3가지 방법을 가지고 옵션처리하여 해결할 수 있다.아래 예시에서 Member 는 스프링 빈이 아니다.@Autowired(required=false) : 자동 주입할 대상이 없으면 수정자 메서..
[Spring] 컴포넌트 스캔 & 의존관계 자동 주입
·
Programming/Spring
이 글은 인프런에서 김영한 님의 "스프링 핵심원리 - 기본편"을 수강 후 공부한 내용을 정리한 게시글입니다. 부족한 부분이 있다면 언제든 지적 부탁드립니다.✏️ 자동으로 스프링 빈을 등록해 → 컴포넌트 스캔(@ComponentScan, @Component)컴포넌트 스캔이란 ?지금까지의 과정에서 자바 코드의 @Bean 이나 XML의  를 통해서 직접 스프링 빈을 등록상당히 귀찮고 누락할 수 있는 가능성이 높다는 문제점을 지닌다.이를 해결하기 위해 컴포넌트 스캔이라는 기능을 통해서 스프링 빈을 자동으로 등록할 수 있다.컴포넌트 스캔 사용하기컴포넌트 스캔을 사용하려면 먼저 @ComponentScan 을 설정 클래스에 붙여준다.기존의 AppConfig와는 다르게 @Bean으로 등록한 클래스가 하나도 없다!Aut..
[Spring] 싱글톤 컨테이너
·
Programming/Spring
이 글은 인프런에서 김영한 님의 "스프링 핵심원리 - 기본편"을 수강 후 공부한 내용을 정리한 게시글입니다. 부족한 부분이 있다면 언제든 지적 부탁드립니다.✏️ 싱글톤 패턴을 사용하는 이유스프링 없는 순수한 DI 컨테이너를 가진 어플리케이션을 사용자에게 배포 했다고 생각해보자.그 어플리케이션이 대박이 나서 동시 접속자수가 만명이 넘는다.그러면 만명 사용자가 동시다발적으로 서버에 요청을 보내게 된다.이 어플리케이션에서의AppConfig 는 아래와 같다package hello.core;import hello.core.discount.DiscountPolicy;import hello.core.discount.RateDiscountPolicy;import hello.core.member.MemberReposit..
[Spring] 스프링 컨테이너와 스프링 빈
·
Programming/Spring
이 글은 인프런에서 김영한 님의 "스프링 핵심원리 - 기본편"을 수강 후 공부한 내용을 정리한 게시글입니다. 부족한 부분이 있다면 언제든 지적 부탁드립니다.✏️ 스프링 컨테이너AppConfigpackage hello.core;import hello.core.discount.DiscountPolicy;import hello.core.discount.RateDiscountPolicy;import hello.core.member.MemberRepository;import hello.core.member.MemberService;import hello.core.member.MemberServiceImpl;import hello.core.member.MemoryMemberRepository;import hello..
[Spring] 스프링의 핵심 원리 이해2 - 객체 지향 원리 적용
·
Programming/Spring
이 글은 인프런에서 김영한 님의 "스프링 핵심원리 - 기본편"을 수강 후 공부한 내용을 정리한 게시글입니다. 부족한 부분이 있다면 언제든 지적 부탁드립니다.✏️ 비즈니스 설계 Remind  ✏️ DIP, OCP 위반 상황 설명 지난 시간에는 정액 할인 정책만 구현하여 의존해두었는데 요구 사항이 정률 할인 정책으로 변경되었다.변경에 따라 RateDiscountPolicy를 구현하고 할인 정책을 변경하려면 클라이언트인 OrderServiceImpl코드를 고쳐야 한다.public class OrderServiceImpl implements OrderService { // private final DiscountPolicy discountPolicy = new FixDiscountPolicy(); priva..