spring 19

[스프링 핵심 원리] 08. 빈 스코프

1. 빈 스코프란스코프는 스프링 컨테이너의 시작과 종료 사이에 빈이 존재할 수 있는 범위를 뜻한다. 스프링은 다음과 같은 다양한 스코프를 지원한다.- 싱글톤: 기본 스코프, 스프링 컨테이너의 시작과 종료까지 유지되는 가장 넓은 범위의 스코프이다.- 프로토타입: 스프링 컨테이너는 프로토타입 빈의 생성과 의존관계 주입까지만 관여하고 더는 관리하지 않는 매우 짧은 범위의 스코프이다.- 웹 관련 스코프 (5번에서 자세히) 2. 프로토타입 스코프싱글톤 스코프의 빈을 조회하면 스프링 컨테이너는 항상 같은 인스턴스의 스프링 빈을 반환한다.반면에 프로토타입 스코프를 스프링 컨테이너에 조회하면 스프링 컨테이너는 항상 새로운 인스턴스를 생성해서 반환한다.여기서 핵심은 스프링 컨테이너는 프로토타입 빈을 생성하고, 의존관계 ..

Spring 2025.01.23

[스프링 핵심 원리] 07. 빈 생명주기 콜백

1. 빈 생명주기 콜백- 데이터베이스 커넥션 풀이나, 네트워크 소켓처럼 애플리케이션 시작 시점에 필요한 연결을 미리 해두고, 애플리케이션 료 시점에 연결을 모두 종료하는 작업을 진행하려면, 객체의 초기화와 종료 작업이 필요하다.- 스프링은 의존관계 주입이 완료되면 스프링 빈에게 콜백 메서드를 통해서 초기화 시점을 알려주는 다양한 기능을 제공한다. 또한 스프링은 스프링 컨테이너가 종료되기 직전에 소멸 콜백을 준다. 스프링 빈의 이벤트 라이프사이클: 스프링 컨테이너 생성 > 스프링 빈 생성 > 의존관계 주입 > 초기화 콜백 > 사용 > 소멸전 콜백 > 스프링 종료 public class NetworkClient { private String url; public NetworkClient() { ..

Spring 2025.01.22

[스프링 핵심 원리] 06. 의존관계 자동 주입

1. 의존관계 주입 방법기본적으로 @Autowired는 스프링 빈에만 작동한다. 순수한 자바 테스트 코드에는 작동하지 않는다.@Componentpublic class OrderServiceImpl implements OrderService { private final MemberRepository memberRepository; private final DiscountPolicy discountPolicy; @Autowired public OrderServiceImpl(MemberRepository memberRepository, DiscountPolicy discountPolicy) { this.memberRepository = memberRepository; ..

Spring 2025.01.21

[스프링 핵심 원리] 05. 컴포넌트 스캔

1. @ComponentScan, @Component@Configuration@ComponentScan()public class AutoAppConfig {}@Componentpublic class MemoryMemberRepository implements MemberRepository {}- 스프링은 Bean 설정 정보가 없어도 자동으로 스프링 빈을 등록하는 컴포넌트 스캔 기능을 제공한다.- 기존의 AppConfig와는 다르게 @Bean으로 등록한 클래스가 하나도 없다.- 스프링 빈의 기본 이름은 클래스명을 사용하되 맨 앞글자만 소문자를 사용한다. (직접 지정도 가능) 2. @Autowired@Componentpublic class MemberServiceImpl implements MemberSer..

Spring 2025.01.20

[스프링 핵심 원리] 04. 싱글톤 컨테이너

1. 싱글톤이 없는 웹 애플리케이션public class SingletonTest { @Test @DisplayName("스프링 없는 순수한 DI 컨테이너") void pureContainer() { AppConfig appConfig = new AppConfig(); //조회: 호출할 때 마다 객체를 생성 MemberService memberService1 = appConfig.memberService(); MemberService memberService2 = appConfig.memberService(); //참조값이 다른 것을 확인 System.out.println("memberService1 = " + m..

Spring 2025.01.20

[스프링 핵심 원리] 02. 객체 지향 설계 적용 예제

1. 요구사항과 설계회원- 회원을 가입하고 조회할 수 있다.- 회원은 일반과 VIP 두 가지 등급이 있다.- 회원 데이터는 자체 DB를 구축할 수 있고, 외부 시스템과 연동할 수 있다. (미확정) 주문과 할인 정책- 회원은 상품을 주문할 수 있다.- 회원 등급에 따라 할인 정책을 적용할 수 있다.- 할인 정책은 모든 VIP는 1000원을 할인해주는 고정 금액 할인을 적용해달라. (나중에 변경 될 수 있다.)- 할인 정책은 변경 가능성이 높다. 회사의 기본 할인 정책을 아직 정하지 못했고, 오픈 직전까지 고민을 미루 고 싶다. 최악의 경우 할인을 적용하지 않을 수 도 있다. (미확정) 2. 회원 도메인 설계 3. 주문과 할인 도메인 설계4. 관심사의 분리DIP와 OCP를 위해 애플리케이션의 전체 동작 방식..

Spring 2025.01.16

[스프링 핵심 원리] 01. 객체 지향 설계와 스프링

스프링 생태계https://spring.io/projects Spring | ProjectsProvides core support for dependency injection, transaction management, web apps, data access, messaging, and more. 6.2.1+ 7 versionsspring.io 스프링의 핵심- 객체 지향 언어가 가진 강력한 특징을 살려내는 프레임워크- 좋은 객체 지향 애플리케이션을 개발할 수 있게 도와주는 프레임워크- 다형성을 극대화해서 이용할 수 있게 도와준다. 다형성의 본질- 인터페이스를 구현한 객체 인스턴스를 실행 시점에 유연하게 변경할 수 있다.- 클라이언트를 변경하지 않고, 서버의 구현 기능을 유연하게 변경할 수 있다. 역할과 ..

Spring 2025.01.15

스프링 공부 계획 변경

원래는 이 강의를 듣고 Spring으로 간단한 프로젝트를 진행하려 했었다.그러나 스프링의 내용이 워낙 방대하다 보니까 강의를 완강해도 아직 Spring이 어렵고 정리가 안된 느낌을 많이 받았다.프로젝트는 뒤로 미루고 인프런에 김영한 강사님의 스프링 강의를 통해 다시 처음부터 꼼꼼히 공부하려 한다.이런 시행착오도 있어 봐야 내가 더 성장할 거라고 믿는다.

My Page 2025.01.14