🍎 Spring/김영한 스프링 핵심원리 12

[김영한 스프링 핵심원리 - 기본편] 10. 빈 스코프

1. 빈 스코프란? 스프링 빈은 기본적으로 싱글톤(Singleton) 스코프로 생성된다. 하지만 필요에 따라 다른 범위(Scope)를 지정하여 빈의 라이프사이클을 조절할 수 있다. 스프링에서 지원하는 주요 스코프스코프설명싱글톤 (Singleton)기본 스코프. 애플리케이션 실행부터 종료까지 유지됨프로토타입 (Prototype)요청할 때마다 새로운 빈 인스턴스가 생성됨requestHTTP 요청이 시작될 때 빈이 생성되고, 끝날 때 소멸됨session웹 세션이 유지되는 동안 빈이 유지됨application웹 애플리케이션이 실행되는 동안 유지됨websocket웹 소켓 연결이 유지되는 동안 유지됨    2. 프로토타입 스코프 싱글톤 vs 프로토타입 싱글톤 스코프는 같은 객체를 계속 반환하지만, 프로토타입 스코프..

[김영한 스프링 핵심원리 - 기본편] 9. 빈 생명 주기 콜백

스프링 빈 생명 주기스프링 IoC 컨테이너 생성 -> 스프링 빈 생성 -> 의존 관계 주입 -> 초기화 콜백 메소드 호출 -> 사용 -> 소멸 전 콜백 메소드 호출 -> 스프링 종료 스프링은 의존 관계 주입이 완료 되면 스플이 빈에게 콜백 메소드를 통해 초기화 시점을 알려주며,스프링 컨테이너가 종료되기 직전에도 소멸 콜백 메소드를 통해 소멸 시점을 알려줌      빈 생명 주기 콜백의 필요성콜백 이란?주로 콜백 함수를 부를 때 사용되는 용어이며 콜백 함수를 등록하면 특정 이벤트가 발생 했을 때 해당 메소드가 호출 된다.즉, 조건에 따라 실행 도리 수도 실행 되지 않을 수도 있는 개념이다 스프링 빈은 초기화 작업과 종료 작업이 나눠서 진행 된다간단히 말해서 객체 생성 -> 의존 관계 주입이라는 라이프 사이..

[김영한 스프링 핵심원리 - 기본편] 8. 의존 관계 자동 주입

1. 다양한 의존 관계 주입 방법생성자 주입수정자 주입필드 주입일반 메서드 주입  생성자 주입 생성자를 통해 의존 관계를 주입 받는 방법생성자 호출 시점에 딱 1번만 호출되는 것이 보장불변, 필수 의존관계에 사용 생성자가 딱 1개만 있으면 @Autowired를 생략해도 자동 주입 (스프링 빈에만 해당)@Componentpublic class OrderServiceImpl implements OrderService { private final MemberRepository memberRepository; private final DiscountPolicy discountPolicy; @Autowired public OrderServiceImpl(MemberRepository memberReposit..

[김영한 스프링 핵심원리 - 기본편] 7. 컴포넌트 스캔

1. 컴포넌트 스캔과 의존관계 자동 주입 시작하기컴포넌트 스캔은 @ComponentScan의존 관계 주입은 @Autowired 어노테이션을 활용하여 한다 자세한 설명은 아래에서!!  컴포넌트 스캔을 사용하려면 @ComponentScan 을 설정 정보에 붙여주면 된다기존 Appconfig 와 다르게 @Bean으로 클래스를 등록하지 않아도 된다@Configuration@ComponentScanpublic class AutoAppConfig { }}    각 클래스가 컴포넌트 스캔의 대상이 되도록 @Component 어노테이션을 붙여준다 @Componentpublic class RateDiscountPolicy implements DiscountPolicy@Componentpublic class MemberS..

[김영한 스프링 핵심원리 - 기본편] 6. 싱글톤 컨테이너

1. 싱글톤 패턴클래스의 인스턴스가 딱 1개만 생성되는 것을 보장하는 디자인 패턴이다 이러한 싱글톤 패턴에는 다양한 문제점이 발생한다싱글톤 패턴을 구현하는 코드 자체가 많이 들어감의존관계상 클라이언트가 구체 클래스에 의존 -> DIP dnlqks클라이언트가 구체 클래스에 의존해서 OCP 원칙을 위반할 가능성이 높음테스트하기 어려움내부 속성을 변경하거나 초기화 하기 어려움private 생성자로 자식 클래스를 만들기 어려움결론적으로 유연성 떨어짐안티 패턴으로 불리기도 함이러한 문제점을 해결하는 것이 싱글톤 컨테이너    2. 싱글톤  컨테이너 스프링 컨테이너는 싱글톤 문제점 해결 + 객체 인스턴스를 싱글톤으로 관리함 스프링 컨테이너를 사용하는 테스트 코드@Test@DisplayName("스프링 컨테이너와 싱..

[김영한 스프링 핵심원리 - 기본편] 5. 스프링 컨테이너와 스프링 빈

이번 강의에서는 스프링 컨테이너의 전반적인 작동 원리와 스프링 빈을 활용한 테스트 코드를 작성해보았다.스프링 컨테이너와 스프링 빈 개념에 대해 정확히 숙지해두도록 하자!!스프링 컨테이너 생성ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class); 스프링 컨테이너는 스프링 프레임워크의 핵심 컴포넌트이다.스프링 컨테이너는 자바 객체의 생명 주기를 관리하며, 생성된 자바 객체들에게 추가적인 기능을 제공한다.스프링에서는 자바 객체를 빈(Bean)이라 한다. 즉, 스프링 컨테이너는 내부에 존재하는 빈의 생명주기를 관리(빈의 생성, 관리, 제거 등)하며, 생성된 빈에게 추가적인 기능을 제공하는..

[김영한 스프링 핵심원리 - 기본편] 4. 객체 지향 원리 적용(3)

이번에는 IoC, DI, 그리고 컨테이너에 대해 간략하게 공부했다.제어의 역전 IoC(Inversion of Control) 기존 프로그램 - 클라이언트 구현 객체가 스스로 필요한 서버 구현 객체 생성, 연결, 실행 => 구현 객체가 프로그램의 제어 흐름 스스로 조종AppConfig 등장 - 구현 객체는 자신의 로직을 실행하는 역할만 담당, 제어흐름은 AppConfig가 가져감 이렇듯 프로그램의 제어 흐름을 직접 제어하는 것이 아니라 외부에서 관리하는 것을 제어의 역전(IoC) 라고 함 프레임워크 vs 라이브러리프레임워크 : 내가 작성한 코드를 제어하고, 대신 실행 (ex. JUnit)라이브러리 : 내가 작성한 코드가 직접 제어의 흐름을 담당     의존 관계 주입 DI(Dependency Injecti..

[김영한 스프링 핵심원리 - 기본편] 4. 객체 지향 원리 적용(2)

이번에는 기존에 작성해둔 AppConfig 코드를 리팩토링하고전체적인 흐름을 정리해보는 시간을 가졌다. AppConfig 리팩토링기존에 작성해둔 코드는 중복도 있고 역할에 따른 구현이 잘 보이지 않는다 위의 그림 처럼 각각의 역할과 구현이 잘 보이도록 수정할 필요가 있다. AppConfig 수정public class AppConfig { public MemberService memberService() { return new MemberServiceImpl(memberRepository()); } public OrderService orderService() { return new OrderServiceImpl( memberRepository(), discountPolicy()); ..

[김영한 스프링 핵심원리 - 기본편] 4. 객체 지향 원리 적용(1)

이번 강의에서는 DIP 와 OCP를 위반한 코드를 점검해보고AppConfig 코드 작성을 통해 문제점을 해결하는 방법에 대해 배웠다.개인적으로 개념에 대해 큰 틀은 알고 있었지만, 헷갈리는 부분이 많았었다.이번 강의를 통해 기초적인 토대를 다시 세울 수 있어서 좋았다.다음 강의 얼른 들어야집..새로운 할인 정책 개발기존 할인 정책 - 고정 금액 할인기획자가 새로 요구한 할인 정책 -> 주문 금액당 할인하는 정률 % 할인   RateDiscountPolicyimport hello.core.member.Grade;import hello.core.member.Member;public class RateDiscountPolicy implements DiscountPolicy { private int dis..

[김영한 스프링 핵심원리 - 기본편] 3. 예제 만들기

이번 강의에서는 회원, 주문, 할인 도메인 설계 및 테스트까지 진행하였다.인터페이스와 구현체에 관해 기초적인 부분을 이해할 수 있어서 좋았다.평소에 프로젝트를 설계할 때 이부분에 관해서 깊게 생각해 본적이 없는데 앞으로 신경..써야함을 뼈저리게 느꼈다.1. 회원 도메인 설계 회원 도메인 요구 사항은 아래와 같다회원 가입 / 조회 가능회원은 일반/VIP 두가지 등급회원 데이터는 자체 DB 구축할 수 있고, 외부 시스템과 연동 가능성 있음(미확정)협력 관계의 다이어그램을 보자면 위와 같다. 회원 클래스의 다이어그램을 보자면 위와 같은데, 이때 이 그림은 정적이라고 볼 수 있다.  회원 객체 다이어그램은 위와 같은데 이 때 이 그림은 동적이다.   2. 회원 도메인 개발회원 등급 public enum Grad..