BE Study/Spring 19

빈 생명주기 콜백

빈 생명주기 개요인터페이스 InitializingBean, DisposableBean빈 설정정보 지정Annotation @PostConstruct, @PreDestroy 데이터베이스나 소켓처럼 애플리케이션 시작 시점에 미리 연결해두고 종료 시점에 연결을 모두 종료하는 작업을 하려면, 객체의 초기화와 종료 작업이 필요하다. 스프링 빈은 이전에 배웠듯 아래와 같은 사이클을 가진다.객체 생성 -> 의존관계 주입 스프링은 의존관계 주입이 완료되면 스프링 빈에게 콜백 메서드를 통해서 초기화 시점을 알려주는 다양한 기능을 제공 한다. 또한 스프링은 스프링 컨테이너가 종료되기 직전에 소멸 콜백을 준다. 따라서 안전하게 종료 작업을 진행할 수 있다. 스프링 빈의 이벤트 사이클스프링 컨테이너 생성 -> 스프링 빈 생성 ..

BE Study/Spring 2024.07.03

의존관계 자동 주입

의존관계 자동 주입이란?스프링 프레임워크에서 의존관계 주입(Dependency Injection)은 객체 간의 의존성을 설정하고 관리하는 방법입니다. 이 글에서는 다양한 의존관계 주입 방법, 생성자 주입의 중요성, 롬복을 사용한 최적화, 그리고 다중 빈 조회 시 문제 해결 방법에 대해 설명합니다.다양한 의존관계 주입 방법스프링에서 의존관계 주입은 크게 네 가지 방법으로 나뉩니다:생성자 주입:객체 생성 시점에 한 번만 호출되어 불변성을 보장합니다.필수 의존관계에 사용됩니다.예시 코드:@Componentpublic class OrderServiceImpl implements OrderService{ private final MemberRepository memberRepository; privat..

BE Study/Spring 2024.07.02

컴포넌트 스캔

지금까지는 스프링 빈을 이용해서 수동으로 스프링 컨테이너에 빈을 등록해줬다. 하지만 빈이 수십, 수백 개가 되면설정 정보도 커지고, 가시성이 떨어진다. 반복 작업이 늘며 개발자들이 싫어하는 상황이 나오기도 한다.그래서 스프링은 자동으로 빈을 등록하는 컴포넌트 스캔 기능을 제공한다.또 의존관계도 자동으로 주입하는 @Autowired 라는 기능도 제공한다.package hello.core;import hello.core.member.MemberRepository;import hello.core.member.MemoryMemberRepository;import org.springframework.context.annotation.Bean;import org.springframework.context.annot..

BE Study/Spring 2024.07.02

싱글톤 컨테이너

스프링 애플리케이션은 주로 웹 애플리케이션 개발에 사용한다.그렇다면 웹 애플리케이션의 특징은 뭘까? 동시에 여러 명의 클라이언트가 요청을 한다는 것이다.스프링이 없는 DI 컨테이너라면 매 번 new 생성자를 통해 요청이 올 때마다 새로운 객체를 생성한다. 요청이 올 때마다 새로운 객체를 생성한다면 초당 100의 트래픽이 들어오면 객체를 100개 생성하고 사라진다. 자원 낭비가 심한 형태라고 볼 수 있다. 이를 해결하기 위해 디자인 패턴 중 싱글톤 패턴을 활용해야 한다.  싱글톤 패턴- 클래스의 인스턴스가 딱 1개만 생성되는 것을 보장하는 디자인 패턴이다.- 그래서 객체 인스턴스를 2개 이상 생성하지 못하도록 막아야 한다.- private 생성자를 사용해서 외부에서 임의로 new 키워드를 사용하지 못하도록..

BE Study/Spring 2024.07.01

스프링 컨테이너와 스프링 빈

BeanFactory와 ApplicationContext BeanFactory- 스프링 컨테이너의 최상위 인터페이스다.- 스프링 빈을 관리하고 조회하는 역할을 담당한다.- getBean() 을 제공한다.- 지금까지 우리가 사용했던 대부분의 기능은 BeanFactory가 제공하는 기능이다.ApplicationContext- BeanFactory 기능을 모두 상속받아서 제공한다.- 빈을 관리하고 검색하는 기능을 BeanFactory가 제공해주는데, 그러면 둘의 차이가 뭘까?- 애플리케이션을 개발할 때는 빈을 관리하고 조회하는 기능은 물론이고, 수 많은 부가기능이 필요하다.   다양한 설정 형식 지원 - 자바 코드, XML   스프링 빈 설정 메타 정보 - BeanDefinition BeanDefinitio..

BE Study/Spring 2024.07.01

객체 지향 원리 적용

이전 도메인 구성 및 할인 상품 판매를 순수 자바로 작성했을 때 DIP, OCP 객체 지향 원리를 위배했다.회원 도메인 및 상품 할인 적용 판매 (tistory.com) 회원 도메인 및 상품 할인 적용 판매스프링을 이해하기 앞서 자바만을 가지고 코드를 짜보면서 어떤 구조가 나오는 지 확인해볼 것이다. 다음과 같은 요구사항을 줬다고 가정해보자.- 회원을 가입하고 조회할 수 있다.- 회원은 일subengineer.tistory.com위 포스팅 내용을 참고하면 된다. 이번에는 새로운 할인 정책 적용을 해보면서 문제점을 짚고 다음과 같은 과정을 진행할 것이다.- 관심사 분리- 리팩터링- IOC, DI, 컨테이너- 스프링으로 전환 클라이언트가 할인 정책을 바꾸게 돼서 다음과 같은 요구사항을 제시했다. 기획자: 서..

BE Study/Spring 2024.06.29

회원 도메인 및 상품 할인 적용 판매

스프링을 이해하기 앞서 자바만을 가지고 코드를 짜보면서 어떤 구조가 나오는 지 확인해볼 것이다. 다음과 같은 요구사항을 줬다고 가정해보자.- 회원을 가입하고 조회할 수 있다.- 회원은 일반과 VIP 두 가지 등급이 있다.- 회원 데이터는 자체 DB를 구축할 수 있고, 외부 시스템과 연동할 수 있다. (미확정) 객체 지향에서 추상적 개념만 알고 있으면 실제 어떤 DB를 사용할 지 몰라도 상관 없으니 기본적인 설계를 짤 수 있다.회원 클래스 다이어그램에서 정적으로 이론적인 움직임을 알 수 있고, 객체 다이어그램에서 실제 적용되는 구체적인 객체의 흐름을 나타냈다. package hello.core.member;public class MemberServiceImpl implements MemberService ..

BE Study/Spring 2024.06.29

객체 지향 설계와 스프링

EJB : 엔터프라이즈 자바빈즈(Enterprise JavaBeans; EJB)는 기업환경의 시스템을 구현하기 위한 서버측 컴포넌트 모델이다. 즉, EJB는 애플리케이션의 업무 로직을 가지고 있는 서버 애플리케이션이다. EJB 사양은 Java EE의 자바 API 중 하나로, 주로 웹 시스템에서 JSP는 화면 로직을 처리하고, EJB는 업무 로직을 처리하는 역할을 한다. 자바 초반에는 EJB라는 기술이 보편화되었고 많은 개발자들이 사용했다. 하지만 엔티티 빈에서 제공하는 인터페이스에 맞춰 설계해야하다보니, 점점 객체 지향이라는 근간에서 멀어지게 되었다. 당시 자바의 원초적인 기술인 POJO로 돌아가자는 말도 나올 정도였다. EJB의 단점들을 극복하기 위해 Rod Johnson - Spring, 개빈 킹 -..

BE Study/Spring 2024.06.28

자바 코드로 직접 스프링 빈 등록하기

이전에는 Controller, Service, Repository, Autowired를 활용해서 Annotation을 지정 후 컴포넌트 스캔을 통해 자동으로 스프링이 관리하는 컨테이너에 빈을 등록했다.이번에는 직접 자바 코드로 스프링 빈을 등록해보고 특징에 대해 알아보겠다. package hello.hello_spring.service;import hello.hello_spring.repository.MemberRepository;import hello.hello_spring.repository.MemoryMemberRepository;import org.springframework.context.annotation.Bean;import org.springframework.context.annotatio..

BE Study/Spring 2024.06.26