스코프: 어떠한 빈 객체의 스코프는 해당 빈이 생성되고 유지되는 기간을 의미한다. 즉 빈이 존재할 수 있는 범위를 뜻함. 스프링이 제공 하는 주요 스코프 1. 싱글톤 2. 프로토타입 3. 웹 관련 스코프 -request, session, application 1. 싱글톤 - 기본 스코프로, 스프링 컨테이너의 시작과 종료까지 유지되는 가장 넓은 범위의 스코프. 2. 프로토타입 - 프로토타입 빈의 생성과 의존 관계 주입, 초기화까지 관여하고 더는 관리하지 않는다. - 또한 프로토타입 스코프를 스프링 컨테이너에 조회하면 스프링 컨테이너는 항상 새로운 인스턴스를 생성해서 반환한다. - 프로토타입 빈은 이를 조회한 클라이언트가 관리해야 한다. @PreDestroy 같은 종료 메소드 호출도 마찬가지. - 싱글톤과 ..
애플리케이션 시작 시점과 종료 시점에 초기화 작업과 절차적인 종료 작업을 위해 개발자가 그 시점들을 정확히 알아야 할 필요가 있을 수 있다. 스프링은 이러한 초기화 작업과 종료 작업을 위해 빈 생명주기의 콜백 시점을 알려주는 기능을 제공한다. 빈 생명주기: 빈이 생성되고 초기화되는 단계부터 더 이상 사용되지 않아서 소멸되는 단계까지를 의미 콜백: 빈(객체)의 생명 주기 동안 특정 시점에 호출되는 메서드 스프링 빈의 이벤트 라이프사이클: 1. 스프링 컨테이너 생성 2. 스프링 빈 생성 3. 의존관계 주입 4. 초기화 콜백 5. 사용(빈이 다른 곳에서 사용된다는 뜻) 6. 소멸전 콜백 7. 스프링 종료 package hello.core.lifecycle; import javax.annotation.PostC..
롬북은 자바 언어 기반으로 코드를 간결하고 깔끔하게 만들어주는 라이브러리임. 제공하는 기능 1. 어노테이션 기반 코드생성 2. 게터 세터 자동 생성 3. 생성자 자동 생성 4. 빌더 패턴 지원 5. 자동 자원 관리 @Component public class OrderServiceImpl implements OrderService { private final MemberRepository memberRepository; private final DiscountPolicy discountPolicy; public OrderServiceImpl(MemberRepository memberRepository, DiscountPolicy discountPolicy) { this.memberRepository = m..
*컴포넌트 스캔: 설정 정보가 없어도 스프링이 자동으로 스프링 빈을 등록하는 기능 //구성을 스프링으로 관리하기 위한 @Configuration @Configuration public class AppConfig { //스프링 컨테이너에 객체들을 관리 하기 위해 @Bean으로 등록 //스프링 컨테이너에 등록된 객체들을 '스프링 빈' 이라고 한다 @Bean public MemberService memberService() { return new MemberServiceImpl(memberRepository()); } @Bean public MemberRepository memberRepository() { return new MemoryMemberRepository(); } @Bean public Orde..
//앱 구성을 스프링으로 관리하기 위한 @Configuration @Configuration public class AppConfig { //스프링 컨테이너에 객체들을 관리 하기 위해 @Bean으로 등록 //스프링 컨테이너에 등록된 객체들을 '스프링 빈' 이라고 한다 @Bean public MemberService memberService() { return new MemberServiceImpl(memberRepository()); } @Bean public MemberRepository memberRepository() { return new MemoryMemberRepository(); } @Bean public OrderService orderService() { return new OrderSe..
*웹 어플리케이션에서 클라이언트의 요청에 따른 객체 생성이 빈번히 일어나면 공간 상, 성능 상 큰 제약이 따를 수 있다. 예를 들면 다음과 같이 순수 자바 코드로 AppConfig를 구성하는 경우이다. public class AppConfig { public MemberService memberService() { return new MemberServiceImpl(new MemoryMemberRepository()); } public OrderService orderService() { return new OrderServiceImpl( new MemoryMemberRepository(), new FixDiscountPolicy()); } } AppConfig.memberSerivce.~ 의 형태로 여..
1. 단일 책임 원칙 -한 클래스는 하나의 책임만 가져야 한다 -변경이 있을 때 파급 효과가 적으면 단일 책임 원칙을 잘 따른 것이다. 2. OCP (Open/CLosed Principle) 개방-폐쇄 원칙 --> 중요! -소프트웨어 요소는 확장에는 열려 있으나 변경에는 닫혀 있어야 한다. -다형성을 활용 -하지만 다형성을 사용한다고해서 OCP 원칙을 지킬 수 있는 것은 아니다. 예를 들어 아래와 같이 MemberRepository 인터페이스의 구현체로 MemorymemberRespository를 JdbcMemberRepository로 확장한다고 했을 때 MemberService 클래스를 변경해야 함. public class MemberSerivce { private MemberRepository mem..
*스프링 프레임워크 -핵심 기술: 스피링 DI 컨테이너, AOP, 이벤트, 기타 -웹 기술: 스프링 MVC, 스프링 WebFlux -데이터 접근 기술: 트랜잭션, JDBC, ORM 지원, XML 지원 -기술 통합: 캐시, 이메일, 원격접근, 스케줄링 -테스트: 스프링 기반 테스트 지원 -언어: 코틀린, 그루비 *스프링 부트 -스프링을 편리하게 사용할 수 있도록 지원하는 것 -단독으로 실행할 수 있는 스프링 애플리케이션을 쉽게 생성 (www.start.spring.io) -톰캣 같은 웹서버를 내장해서 별도의 웹 서버를 설치하지 않아도 됨 -손쉬운 빌드 구성을 위한 starter 종속성 제공 --> starter 가 서로 종속되는 라이브러리를 다 땡겨 -스프링과 3rd parth 라이브러리 자동 구성 -->..