🍀Spring/기본

스프링 빈의 생명주기 관리빈이 생성되거나 소멸되는 경우 특정한 작업을 하고싶은 경우가 있다.예를 들어, 빈이 생성될 때 데이터베이스 커넥션 풀을 미리 생성하는 경우이다. 이러한 작업을 위해 스프링 빈의 초기화 작업과 종료 작업을 처리하는 방법을 알아보자.  스프링 빈의 이벤트사이클스프링 컨테이너 생성 → 빈 생성 → 의존관계 주입 →  초기화 콜백  → 사용 → 소멸전 콜백 →  스프링 종료 초기화 콜백: 빈이 생성되고 빈의 의존관계 주입이 완료된 후 호출된다.소멸전 콜백: 빈이 소멸되기 직전에 호출된다. 스프링 빈 생명주기 콜백 사용방법인터페이스(InitializingBean, DisposableBean) 사용설정 정보 초기화 메서드, 종료 메서드 지정@PostConstruct, @PreDestroy ..
다양한 의존관계 주입 방법1. 생성자 주입2. 수정자 주입 (setter 주입)3. 필드 주입4. 일반 메서드 주입 생성자 주입생성자에 @Autowired: @Component를 통해 스프링 빈에 등록될 때 스프링 컨테이너가 해당 빈을 찾아 주입 해준다.@Componentpublic class OrderServiceImpl implements OrderService { private final MemberRepository memberRepository; private final DiscountPolicy discountPolicy;// @Autowired public OrderServiceImpl(MemberRepository memberRepository, DiscountPolicy ..
@ComponentScan@ComponentScan은 @Component 및 @Service, @Repository, @Controller, @Configuration등과 같이 @Component가 붙어있는 Class들을 자동으로 Scan하여 스프링 Bean으로 등록해주는 역할을 수행한. @Component는 클래스에 사용되며, 빈으로 등록될 때에는 클래스명을 사용하여 등록한다.이때, 클래스의 맨 앞글자만 소문자로 바꿔서 저장한다. 만약 Member 클래스의 경우에는 Bean으로 등록되는 경우 member로 등록되는 것이다.   컴포넌트 스캔과 자동 의존관계 주입이 어떻게 동작하는지 그림으로 알아보자. 1. @ComponentScan  2. Autowired 의존관계 자동 주입 생성자에 @Autowire..
웹 애플리케이션과 싱글톤 스프링은 태생이 기업용 온라인 서비스 기술을 지원하기 위해 탄생했다.웹 애플리케이션은 보통 여러 고객이 동시에 요청을 한다. -> 우리가 만들었던 스프링 없는 순수한 DI 컨테이너인 AppConfig는 요청을 할 때 마다 객체를 새로 생성한다.-> 고객 트래픽이 초당 100이 나오면 초당 100개 객체가 생성되고 소멸된다 메모리 낭비가 심하다.-> 해결 방안은 해당 객체가 딱 1개만 생성되고 공유하도록 설계하면 된다. (싱글톤 패턴) 싱글톤 패턴클래스의 인스턴스가 딱 1개만 생성되는 것을 보장하는 디자인 패턴객체 인스턴스를 2개 이상 생성하지 못하도록 막아야 한다.private 생성자를 사용해서 외부에서 임의로 new 키워드를 사용하지 못하도록 막아야 한다.싱글톤 패턴을 적용한 ..
스프링 컨테이너 생성스프링 컨테이너가 생성되는 과정을 알아보자  1. 스프링 컨테이너 생성//스프링 컨테이너 생성ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class);  2. 스프링 빈 등록스프링 컨테이너는 @Bean 어노테이션이 달린 메서드를 스프링 빈에 등록한다. 이때 빈 이름은 메서드 이름을 사용하며 빈 이름을 직접 부여할 수 도 있다.@Bean(name = "memberService2")  3. 스프링 빈 의존관계 설정 - 준비  4. 스프링 빈 의존관계 설정 - 완료   컨테이너에 등록된 모든 빈을 조회해보자.package hello.core.beanfind;import h..
새로운  할인 정책 개발이번에는 주문한 금액의 %를 할인해주는 새로운 정률 할인 정책을 추가해보자. RateDiscountPolicy 추가 package hello.core.discount;import hello.core.member.Grade;import hello.core.member.Member;public class RateDiscountPolicy implements DiscountPolicy { private int discountPercent = 10; //10% 할인 @Override public int discount(Member member, int price) { if (member.getGrade() == Grade.VIP) { ret..
비즈니스 요구사항과 설계회원- 회원을 가입하고 조회할 수 있다.- 회원은 일반과 VIP 두 가지 등급이 있다.- 회원 데이터는 자체 DB를 구축할 수 있고, 외부 시스템과 연동할 수 있다. (미확정) 주문과 할인 정책- 회원은 상품을 주문할 수 있다.- 회원 등급에 따라 할인 정책을 적용할 수 있다.- 할인 정책은 모든 VIP는 1000원을 할인해주는 고정 금액 할인을 적용해달라. (나중에 변경 될 수 있다.)- 할인 정책은 변경 가능성이 높다. 회사의 기본 할인 정책을 아직 정하지 못했고, 오픈 직전까지 고민을 미루 고 싶다. 최악의 경우 할인을 적용하지 않을 수 도 있다. (미확정)  회원 도메인 설계  회원 도메인 개발회원 등급package hello.core.member;public enum Gr..
스프링이란?스프링은 '특정한 하나'로 볼 수 있지만, 여러 기술들의 모음으로 볼 수 있다. 그러한 기술들에는 다음과 같은 종류가 있다. 스프링 프레임워크스프링 부트 (스프링 프레임 워크의 모든 기술들을 편리하게 사용할 수 있도록 도와줌)스프링 데이터 (CRUD를 편리하게 사용할 수 있도록 도와줌)스프링 시큐리티 (보안 관련 기능을 편리하게 사용할 수 있도록 도와줌)스프링 세션 (세션 기능을 편리하게 사용할 수 있도록 도와줌)스프링 Rest Docs (api문서를 편리하게 사용할 수 있도록 도와줌)스프링 배치 (배치처리에 특화)스프링 클라우드 (클라우드 기술에 특화)  스프링 프레임워크• 핵심 기술: 스프링 DI 컨테이너, AOP, 이벤트, 기타• 웹 기술: 스프링 MVC, 스프링 WebFlux• 데이터 ..
먼저 빈(Bean)에 대해 알아보자. 빈(Bean) 스프링(Spring) 컨테이너가 관리하는 자바 객체를 빈(Bean)이라 한다. 스프링의 특징에는 제어의 역전(IoC)가 있다. 지금까지 사용자가 new연산을 통해 객체를 생성하고 메소드를 호출했지만 제어의 역전이 적용 된 경우에는 객체의 생성과 사용자의 제어권을 스프링에게 넘긴다. 사용자는 직접 new를 이용해 생성한 객체를 사용하지 않고, 스프링에 의하여 관리당하는 자바 객체를 사용한다. 이 객체를 '빈(bean)' 이라 한다.   @Controllerpublic class MemberController { private final MemberService memberService; @Autowired public MemberControl..
테스트 코드 작성시 자주 사용되는 Given-When-Then 에 대해 알아보자. given-when-then은 곧 - [준비 - 실행 - 검증] 이다. given테스트를 위해 준비를 하는 과정이다.  테스트에 사용하는 변수, 입력 값 등을 정의하거나, Mock 객체를 정의하는 구문도 given에 포함된다. 예시로 회원가입 테스트에 대해 알아보자.//Given Member member = new Member(); member.setName("hello");멤버 객체를 정의하고 멤버의 이름을 hello라고 저장하였다.  when실제로 액션을 하는 테스트를 실행하는 과정이다. //When Long saveId = memberService.join(member);saveI..
말동말동현
'🍀Spring/기본' 카테고리의 글 목록