목록전체 글 (154)
천천히 빛나는
빈 스코프란?지금까지 우리는 스프링 빈이 스프링 컨테이너의 시작과 함께 생성되어서 스프링 컨테이너가 종료될 때까지 유지된다고 학습했다. 이것은 스프링 빈이 기본적으로 싱글톤 스코프로 생성되기 때문이다. 스코프는 번역 그대로 빈이 존재할 수 있는 범위를 뜻한다.스프링은 다양한 스코프를 지원한다.싱글톤: 기본 스코프, 스프링 컨테이너의 시작과 종료까지 유지되는 가장 넓은 범위의 스코프프로토타입: 스프링 컨테이너는 프로토타입 빈의 생성과 의존관계 주입까지만 관여하고 더는 관리하지 않는 매우 짧은 범위의 스코프웹 관련 스코프request: 웹 요청이 들어오고 나갈때까지 유지되는 스코프session: 웹 세션이 생성되고 종료될 떄까지 유지되는 스코프application: 웹의 서블릿 컨텍스트와 같은 범위로 유지되..
빈 생명주기 콜백어플리케이션 서버가 올라올 때 데이터베이스랑 연결을 미리 맺게 된다. TCP/IP 핸드쉐이킹하고 연결하는데 오래걸리니까 미리 커넥션을 10개, 많으면 100개정도 잡아두게 된다. 고객 요청이 오면 미리 연결해 놓은 걸 가지고 재활용할 수 있다. 이걸 데이터베이스 커넥션 풀이라고 한다.데이터베이스 커넥션 풀이나 네트워크 소켓처럼 어플리케이션 시작 시점에 필요한 연결을 미리 해두고, 어플리케이션 종료 시점에 연결을 모두 종료하는 작업을 진행하려면 객체의 초기화와 종료 작업이 필요하다.스프링을 통해서 이러한 초기화 작업과 종료 작업을 어떻게 진행하는지 예제로 알아볼 것이다. 간단하게 서버가 뜰 때 외부 네트워크에 미리 연결을 해놓고, 종료할 때는 미리 외부 네트워크랑 연결을 끊어야 되는 서버가..
의존관계 주입 방법생성자 주입수정자 주입(=setter 주입)필드 주입일반 메서드 주입 생성자 주입이미 지금까지 했던 방식@Componentpublic class OrderServiceImpl implements OrderService{ private final MemberRepository memberRepository; private final DiscountPolicy discountPolicy; @Autowired public OrderServiceImpl(MemberRepository memberRepository, DiscountPolicy discountPolicy) { this.memberRepository = memberRepository; ..
지금까지 스프링 빈을 등록할 때는 자바 코드에 @Bean 하거나 XML 파일에 태그 등을 통해서 설정 정보에 직접 등록할 스프링 빈을 나열했다.이렇게 등록해야 할 스프링 빈이 실무에서 수십, 수백개가 되면 일일이 등록하기도 귀찮고, 누락하는 문제도 발생한다.그래서 스프링은 설정 정보가 없어도 자동으로 스프링 빈으로 등록하는 컴포넌트 스캔이라는 기능을 제공한다.또한 의존관계를 자동으로 주입해주는 @Autowired 도 제공한다.@Configurationpublic class AppConfig { @Bean public MemberService memberService() { System.out.println("call AppConfig.memberService"); r..
웹 애플리케이션과 싱글톤 웹 어플리케이션은 보통 여러 고객이 동시에 요청을 한다.고객이 3번 요청을 하면 객체가 3개 생성된다.@Configurationpublic class AppConfig { @Bean public MemberService memberService() { return new MemberServiceImpl(memberRepository()); } @Bean public MemoryMemberRepository memberRepository() { return new MemoryMemberRepository(); } @Bean public OrderService orderService() { return ..
스프링 컨테이너 생성 ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class);스프링 컨테이너를 생성하는 과정이다.ApplicationContext를 스프링 컨테이너라고 한다. ApplicationContext는 인터페이스이다.스프링 컨테이너는 XML을 기반으로 만들 수도 있고, 애노테이션 기반의 자바 설정 클래스로도 만들 수 있다.AppConfig를 사용했던 방식이 애노테이션 기반의 자바 설정 클래스로 스프링 컨테이너를 만든 것이다.(컨테이너 = 객체를 담고 있는 것) 스프링 컨테이너 생성스프링 컨테이너 안에는 스프링 빈 저장소라는 것이 있다. key는 빈 이름이고 value는 객체가 된다..
새로운 할인 정책 개발 테스트 코드 단축키: ctrl + shift + Tpackage hello.core.discount;import hello.core.member.Grade;import hello.core.member.Member;import org.assertj.core.api.Assertions;import org.junit.jupiter.api.DisplayName;import org.junit.jupiter.api.Test;import static org.junit.jupiter.api.Assertions.*;class RateDiscountPolicyTest { RateDiscountPolicy discountPolicy = new RateDiscountPolicy(); @Tes..
요구사항회원회원을 가입하고 조회할 수 있다.일반과 VIP 두가지 등급이 있다.회원 데이터는 자체 DB를 구축할 수 있고 외부 시스템과 연동할 수 있다. (미확정) 주문과 할인 정책회원은 상품을 주문할 수 있다.회원등급에 따라 할인 정책을 적용할 수 있다.할인 정책은 모든 VIP는 1000원 할인하는 고정 금액 할인을 적용해달라할인 정책은 변경 가능성이 높다. 회사의 기본 할인 정책을 아직 정하지 못했다. (미확정) 일단 메모리 회원 저장소를 만들어서 개발을 진행하기로 했다. 메모리이기 때문에 서버 재부팅되면 메모리가 날라가게 된다. 나중에 DB가 결정되면 구현을 바꾸면 된다. 회원 도메인 개발인터페이스와 구현체를 다른 패키지로 관리하는 것이 좋으나 여기서는 간단히 같은 패키지로 묶었다. 회원 도메인 ..
EJB는 과거의 대규모 엔터프라이즈 시스템에서 매우 유용하게 사용되었고 그 당시에는 강력한 서버 측 컴포넌트를 제공했다.하지만 요즘에는 스프링과 같은 기술들이 간단하고 유연한 개발 방식을 제공해서 보통 스프링을 사용하는 편이다. 스프링은 EJB와 비슷하게 서버측 로직을 처리할 수 있는 기능을 제공하지만, 유연하고 가볍기 때문에 많은 개발자들이 선호한다.EJB는 비용이 굉장히 비쌌다. 현재는 스프링부트, 톰캣 무료로 쓰고 있다.=> 로드 존슨이 EJB 없이도 충분히 고품질의 확장 가능한 애플리케이션을 개발할 수 있음을 보여주고 30,000라인 이상의 기반 기술을 예제 코드로 선보임=> 여기에 지금의 스프링 핵심 개념과 기반 코드가 들어가 있음 스프링이 설정이 너무 어렵고, 톰캣에 올리기 위해 war로 빌드..
Kafka의 기본 구성 (Topic, Consumer, Producer)프로듀서: 카프카에 메시지를 전달하는 서버컨슈머: 카프가의 메시지를 처리하는 서버토픽: 카프카에 넣을 메시지를 구분하는 개념 (카테고리)Kafka는 우리 메시지를 임시로 보관하는 저장소이다. 이 메세지들을 보관할 때 체계적으로 보관하기 위해 토픽 이름을 붙인다.Topic email.send 에서는 이메일 발송에 필요한 메시지만 저장하고, order.created에는 주문 생성하는데 필요한 메시지만 저장하는 것이다. 토픽은 카프카가 분리하는게 아니라, 프로듀서가 Kafka한테 전달하는 것이다. 브로커 = Kafka가 설치되어 실행중인 서버 1대클러스터 = 브로커 여러개 묶음프로듀서 -> 브로커 -> 컨슈머 CLI를 활용한 Kafka..
