Peony의 기록 창고 🌼
[Spring] 빈 생명주기 콜백
SpringBoot/Spring Basic 2023. 8. 14. 20:38

빈 생명주기 콜백 데이터베이스 커넥션 풀이나, 네트워크 소켓처럼 애플리케이션 시작 시점에 필요한 연결을 미리 해두고, 애플리케이션 종료 시점에 연결을 모두 종료하는 작업을 진행하려면, 객체의 초기화와 종료 작업이 필요하다. 이번 시간에는 스프링을 통해 이러한 초기화 작업과 종료 작업을 어떻게 진행하는지 알아보자. 스프링 빈은 간단하게 다음과 같은 라이프사이클을 가진다. 객체 생성 → 의존관계 주입 스프링 빈은 객체를 생성하고, 의존 관계 주입이 끝난 다음에야 데이터를 사용할 준비가 완료된다. 따라서 초기화 작업은 의존관계 주입이 모두 완료되고 난 다음에 호출해야 한다. 하지만, 개발자가 의존관계 주입이 완료된 시점을 어떻게 알 수 있을까? 스프링은 스프링빈에게 콜백 메서드를 통해 초기화 시점을 알려주는 ..

[Spring] 의존 관계 자동 주입
SpringBoot/Spring Basic 2023. 8. 3. 20:22

주입 방법 1. 생성자 주입 생성자 주입은 생성자 호출 시점에 딱 1번만 호출되는 것이 보장된다. 주로 불변, 필수 의존 관계에서 사용한다. 만약, 생성자가 1개인 스프링 빈이면? @Autowired를 생략해도 자동으로 주입된다. @Component public class OrderServiceImpl implements OrderService { private final MemberRepository memberRepository; private final DiscountPolicy discountPolicy; @Autowired public OrderServiceImpl(MemberRepository memberRepository, DiscountPolicy discountPolicy) { this...

article thumbnail
[Spring] 컴포넌트 스캔
SpringBoot/Spring Basic 2023. 7. 21. 15:51

지금까지 만든 Appconfig를 보면 @Bean 어노테이션을 붙여서 직접 설정정보에 스프링 빈을 나열하는 형식이었다. 그런데, 내가 만들어야할 스프링 빈이 수백개가 된다면 ? → @ComponentScan을 사용 ! 동작 과정 1. @ComponentScan @Component 어노테이션이 붙은 모든 클래스를 자동으로 스프링 빈에 등록해준다. 이때, 스프링 빈의 기본 이름 : 클래스명 사용, 앞글자만 소문자를 사용한다. MemberServiceImpl 클래스 → Bean 이름 : memberServiceImpl 만약, 클래스에 @Component(“service”)처럼 속성을 설정하면? → service 라는 이름으로 등록된다. 2. @Autowired 의존 관계 자동 주입 생성자에 @Autowired..

article thumbnail
[Spring] 싱글톤 패턴
SpringBoot/Spring Basic 2023. 7. 11. 02:28

싱글톤 패턴 싱글톤 패턴이란? 클래스의 인스턴스가 딱 1개만 생성되는 것을 보장하는 디자인 패턴 싱글톤 패턴을 적용하면 고객의 요청이 올 때 마다 객체를 생성하는 것이 아니라, 이미 만들어진 객체를 공유해서 효율적으로 사용할 수 있다. 하지만 싱글톤 패턴은 다음과 같은 수 많은 문제점들을 가지고 있다. 싱글톤 패턴 문제점 싱글톤 패턴을 구현하는 코드 자체가 많이 들어간다. 의존관계상 클라이언트가 구체 클래스에 의존한다. → DIP를 위반 자연스럽게 OCP 원칙을 위반할 가능성이 높다. 테스트하기 어렵다. 내부 속성을 변경하거나 초기화 하기 어렵다. private 생성자로 자식 클래스를 만들기 어렵다. 결론적으로 유연성이 떨어진다. 안티패턴으로 불리기도 한다. 싱글톤 컨테이너 스프링 컨테이너는 싱글톤 패턴..

article thumbnail
[Spring] 스프링 컨테이너와 스프링 빈
SpringBoot/Spring Basic 2022. 2. 5. 01:08

스프링 컨테이너 ApplicationContext 기존 : 개발자가 AppConfig를 사용해서 직접 객체를 생성 & DI → 스프링 컨테이너 사용 @Configuration이 붙은 AppConfig를 설정(구성) 정보로 사용 : @Bean이라 적힌 메서드를 모두 호출 -> 반환된 객체를 스프링 컨테이너에 등록 스프링 빈 : @Bean이 붙은 메서드의 명을 스프링 빈의 이름으로 사용. 스프링 빈은 applicationContext.getBean() 메서드를 사용해서 찾을 수 O 스프링 컨테이너 생성 @Configuration public class AppConfig { @Bean public MemberService memberService() { //생성자 주입 return new MemberServi..

article thumbnail
[Spring] 객체 지향 설계의 5가지 원칙(SOLID)
SpringBoot/Spring Basic 2022. 2. 5. 01:06

객체 지향 프로그래밍 컴퓨터 프로그램을 여러개의 독립된 단위, 즉 "객체"들의 모임으로 파악하고자 하는 것. 각각의 객체는 메시지를 주고받고, 데이터를 처리할 수 있음. 프로그램을 유연하고 변경이 용이하게 만들기 때문에 대규모 소프트웨어 개발에 많이 사용 객체지향의 특징 추상화(Abstraction) : 여러 객체들의 공통적인 특징을 도출해 내는 것, 현실 객체를 추상화해서 클래스를 구성. 캡슐화(Encapsulation) : 데이터(속성)와 데이터를 처리하는 함수를 하나로 묶는 것, 데이터를 직접 노출시키지 않고 메서드를 이용해 보호. 상속(Inheritance) : 상위클래스의 속성을 하위클래스가 물려받는 것 다형성(Polymorphism) : 하나의 객체가 여러 형태를 가지는 것 다형성의 실세계 비..

article thumbnail
[Spring] Spring 이란 ?
SpringBoot/Spring Basic 2022. 2. 5. 00:39

Spring 단어의 의미스프링 DI 컨테이너 기술(Bean 관리 등)스프링 프레임워크스프링 부트, 스프링 프레임워크 등을 모두 포함한 Spring 생태계 Spring의 핵심 개념"자바 언어 기반의 프레임워크"객체지향 언어가 가진 강력한 특징을 살려내는 프레임워크좋은 객체 지향 어플리케이션을 개발할 수 있게 도와주는 프레임워크  Spring 특징자바 객체와 라이브러리들을 관리, Tomcat과 같은 Was가 내장되어 있어 자바 웹 어플리케이션을 구동할 수 있음경량 컨테이너로 자바 객체를 직접 Spring에서 관리: 객체의 생성및 소멸과 같은 생명주기(Life Cycle)을 관리하며, Spring 컨테이너에서 필요한 객체를 가져와서 사용제어의 역전(IOC, Inversion Of Control): 컨트롤의 제..