인프런 강의

다양한 의존관계 주입 방법 생성자 주입 수정자 주입(setter 주입) 필드 주입 일반 메서드 주입 생성자 주입 이름 그대로 생성자를 통해서 의존 관계를 주입받는 방법이다. 지금까지 우리가 진행했던 방법이 바로 생성자 주입이다. 생성자 호출시점에 딱 1번만 호출되는 것이 보장된다. 불변, 필수 의존관계에 사용 @Component public class OrderServiceImpl implements OrderService{ private final MemberRepository memberRepository; private final DiscountPolicy discountPolicy; @Autowired public OrderServiceImpl(MemberRepository memberReposi..
컴포넌트 스캔과 의존관계 자동 주입 시작하기 지금까지 스프링 빈을 등록할 때는 자바 코드의 @Bean이나 XML의 등을 통해서 설정 정보에 직접 등 록할 스프링 빈을 나열했다. 예제에서는 몇개가 안되었지만, 이렇게 등록해야 할 스프링 빈이 수십, 수백 개가 되면 일일이 등록하기도 귀찮고, 설정 정보도 커지고, 누락하는 문제도 발생한다. 그래서 스프링은 설정 정보가 없어도 자동으로 스프링 빈을 등록하는 컴포넌트 스캔이라는 기능을 제공한다. 또 의존관계도 자동으로 주입하는 @Autowired 라는 기능도 제공한다. @Configuration @ComponentScan( excludeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION, classes =..
웹 애플리케이션과 싱글톤 스프링은 태생이 기업용 온라인 서비스 기술을 지원하기 위해 탄생했다. 대부분의 스프링 애플리케이션은 웹 애플리케이션이다. 물론 웹이 아닌 애플리케이션 개발도 얼마든지 개발할 수 있다. 웹 애플리케이션은 보통 여러 고객이 동시에 요청을 한다. public class SingletonTest { @Test @DisplayName("스프링이 없는 순수한 DI 컨테이너") void pureContainer() { AppConfig appConfig = new AppConfig(); // 1. 조회: 호출할 때마다 객체를 생성 MemberService memberService1 = appConfig.memberService(); // 2. 조회: 호출할 때마다 객체를 생성 MemberSe..
스프링 컨테이너 생성 // 스프링 컨테이너 생성 ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class); ApplicationContext: 스프링 컨테이너 (인터페이스) 스프링 컨테이너는 XML을 기반으로 만들 수 있고, 애노테이션 기반의 자바 설정 클래스로 만들 수 있다. 직전에 AppConfig를 사용했던 방식이 애노테이션 기반의 자바 설정 클래스로 스프링 컨테이너를 만든 것이 다. 스프링 컨테이너의 생성 과정 1. 스프링 컨테이너 생성 new AnnotationConfigApplicationContext(AppConfig.class) 스프링 컨테이너를 생성할 때는 구성 정보를 지정해..
새로운 할인 정책 개발 고정 금액(1000원) 할인 방식 -> VIP일 경우 10% 할인 1. RateDicountPolicy.class public class RateDiscountPolicy implements DiscountPolicy{ private int discountPercent = 10; @Override public int discount(Member member, int price) { if(member.getGrade() == Grade.VIP) { return price * discountPercent / 100; } else { return 0; } } } ctrl + shift + T => 테스트 자동 생성 2. RateDiscountPolicyTest class RateDisc..
프로젝트 생성 -> initailizr 설정 (의존성 추가 안 함) Application 정상적으로 실행되는지 run 확인 비즈니스 요구 사항과 설계 회원 회원을 가입하고 조회할 수 있다. 회원은 일반과 VIP 두 가지 등급이 있다. 회원 데이터는 자체 DB를 구축할 수 있고, 외부 시스템과 연동할 수 있다. (미확정) -> 외주를 주는 경우 등 -> 역할(인터페이스)과 구현 구분하면 됨 주문과 할인 정책 회원은 상품을 주문할 수 있다. 회원 등급에 따라 할인 정책을 적용할 수 있다. 할인 정책은 모든 VIP는 1000원을 할인해주는 고정 금액 할인을 적용해 달라. (나중에 변경될 수 있다.) 할인 정책은 변경 가능성이 높다. 회사의 기본 할인 정책을 아직 정하지 못했고, 오픈 직전까지 고민을 미루고 싶..
Spring Framework Spring Boot 스프링이라는 단어는 문맥에 따라 다르게 사용된다. 스프링 DI 컨테이너 기술 스프링 프레임워크 스프링 부트, 스프링 프레임워크 등을 모두 포함한 스프링 생태계 스프링 프레임워크가 만들어진 이유 -> 핵심 컨셉 스프링은 자바 언어 기반의 프레임워크이다. -> 자바 언어의 가장 큰 특징은 객체 지향 언어 스프링은 객체 지향 언어가 가진 강력한 특징을 살려내는 프레임워크이다. -> 좋은 객체지향 애플리케이션을 개발할 수 있게 도와주는 프레임워크 좋은 객체지향 프로그래밍 객체지향 프로그래밍 여러 개의 독립된 단위, 즉 '객체'들의 모임 각각의 객체는 메시지를 주고받고 데이터를 처리할 수 있다. (협력) 객체지향 프로그래밍은 프로그램을 유연하고 변경을 용이하게 ..
캐시 기본 동작 캐시가 없을 때 데이터가 변경되지 않아도 계속 네트워크를 통해서 데이터를 다운로드 받아야 한다. 인터넷 네트워크는 매우 느리고 비싸다. 브라우저 로딩 속도가 느리다. 느린 사용자 경험 캐시 적용 첫 번째 요청을 했을 때 응답 결과를 캐시에 저장한다. 이후 들어온 요청에 대해서는 캐시 유효 시간을 검증하고 데이터를 캐시에서 조회한다. 캐시 덕분에 캐시 가능 시간동안 네트워크를 사용하지 않아도 된다. 비싼 네트워크 사용량을 줄일 수 있다. 브라우저 로딩 속도가 매우 빠르다. 빠른 사용자 경험 캐시 시간 초과 캐시 유효 시간이 초과하면, 서버를 통해 데이터를 다시 조회하고, 캐시를 갱신한다. 이때 다시 네트워크 다운로드가 발생한다. 검증 헤더와 조건부 요청1 (Last-Modified & if..
뱅어돔
'인프런 강의' 카테고리의 글 목록