스프링/스프링 핵심 원리 - 기본편
-
빈 스코프스프링/스프링 핵심 원리 - 기본편 2024. 1. 4. 00:16
빈 스코프란? 말 그대로 빈이 존재할 수 있는 범위를 의미한다. 스프링 컨테이너가 시작될 때 생성되고, 스프링 컨테이너가 종료될 때까지 유지되는 것이다. 이것은 스프링 빈이 기본적으로 싱글톤 스코프로 생성되기 때문이다. 지원되는 스코프 싱글톤 : 기본 스코프, 스프링 컨테이너의 시작과 종료까지 유지되는 가장 넓은 범위의 스코프이다. 프로토타입 : 스프링 컨테이너는 프로토타입 빈의 생성과 의존관계 주입까지만 관여하고 더는 관리하지 않는 매우 짧은 범위의 스코프이다. 웹 관련 스코프 request : 웹 요청이 들어오고 나갈 때 까지 유지되는 스코프이다. session : 웹 세션이 생성되고 종료될 때 까지 유지되는 스코프이다. application : 웹의 서블릿 컨텍스트와 같은 범위로 유지되는 스코프이다..
-
빈 생명주기 콜백스프링/스프링 핵심 원리 - 기본편 2024. 1. 3. 21:23
빈 생명주기의 필요성 어플리케이션이 시작될 때 DB 연결, 네트워크 소켓 연결 등을 하고 어플리케이션의 종료 시점에 연결을 종료 해야하는 경우에 객체의 초기화 및 종료 작업을 해야한다. 빈 생명주기의 순서 스프링 컨테이너 생성 스프링 빈 생성 의존관계 주입 초기화 콜백 사용 소멸전 콜백 스프링 종료 이러한 순서로 진행되고 콜백방법 인터페이스(InitializingBean, DisposableBean) 설정 정보에 초기화 메서드, 종료 메서드 지정 @PostConstruct, @PreDestory 애노테이션 지원 1. 인터페이스의 경우 인터페이스의 사용 예시 package hello.core.lifecycle; import org.springframework.beans.factory.DisposableBe..
-
의존관계 주입스프링/스프링 핵심 원리 - 기본편 2024. 1. 3. 11:30
의존관계 자동 주입에 대한 설명에 앞서 의존성(Dependency)이란 파라미터나 리턴값 또는 다른객체를 참조하는 것 코드에서 두 모듈(클래스)간의 연결 혹은 관계 예를 들어 클래스 A와 클래스 B가 존재한다고 가정했을 때 A가 B에게 의존한다면 A는 B없이 작동할 수 없다. 하지만 이러한 의존성은 OCP 원칙에 어긋나고 이 때문에 의존성 주입 (DI Dependency Injection) 이란 객체 간의 결합도를 낮추고 유연성을 높이기 위해 의존성을 외부에서 주입하는 디자인 패턴입니다. 그리고 의존성 주입의 방법은 크게 나누어 생성자 주입 수정자 주입 필드 주입 일반 메서드 주입 이 네가지 방법이 있습니다. 생성자 주입 이름 그대로 생성자를 통해서 의존 관계를 주입 받는 방법이다. 생성자 호출 시점에 ..
-
컴포넌트 스캔스프링/스프링 핵심 원리 - 기본편 2024. 1. 1. 19:53
컴포넌트 스캔의 필요성 작성할 프로그램이 많다고 가정했을 때 일일이 등록하기가 어렵다. 컴포넌트 스캔이 적용되는 대상 @Component : 컴포넌트 스캔에서 사용 @Controller : 스프링 MVC 컨트롤러에서 사용 @Service: 스프링 비즈니스 로직에서 사용 @Repository : 스프링 데이터 접근 계층에서 사용 @Configuration : 스프링 설정 정보에서 사용 컴포넌트 스캔 설정 @ComponentScan()의 괄호 안에서 includeFilters 스캔대상을 추가로 지정할 수 있다. excludeFilters 스캔대상의 예외를 지정할 수 있다. FilterType 옵션 ANNOTATION 기본값, 애노테이션을 인식해서 동작한다. ASSIGNABLE_TYPE 지정한 타입과 자식 타..
-
싱글톤스프링/스프링 핵심 원리 - 기본편 2023. 12. 30. 09:58
웹 애플리케이션과 싱글톤 스프링은 태생이 기업용 온라인 서비스 기술을 지원하기 위해 탄생했다. 대부분의 스프링 애플리케이션은 웹 애플리케이션이다. 물론 웹이 아닌 애플리 케이션 개발도 얼마든지 개발할 수 있다. 웹 애플리케이션은 보통 여러 고객이 동시에 요청을 한다. 이전에 만들어본 DI 컨테이너인 AppConfig는 요청할 때 마다 객체를 새로 생성한다. 고객 트랙피이 초당 100이 나오면 100개 객체가 생성되고 소멸된다! ➡ 메모리 낭비가 심하다. 해결방안은 해당 객체가 딱 1개만 생성되고, 공유하도록 설계하면 된다. ➡ 싱글톤 패턴 싱글톤 패턴 클래스의 인스턴스가 딱 1개만 생성되는 것을 보장하는 디자인 패턴이다. 그래서 객체 인스턴스를 2개 이상 생성하지 못하도록 막아야 한다. private 생..
-
빈 팩토리스프링/스프링 핵심 원리 - 기본편 2023. 12. 27. 22:29
BeanFactory 스프링 컨테이너의 최상위 인터페이스다. 스프링 빈을 관리하고 조회하는 역할을 담당한다. getBean()을 제공한다. 지금까지 우리가 사용했던 대부분의 기능은 BeanFactory가 제공하는 기능이다. ApplicationContext BeanFactory 기능을 모두 상속받아서 제공한다. 빈을 관리하고 검색하는 기능을 BeanFactory가 제공해주는데, 그러면 둘의 차이가 뭘까? 애플리케이션을 개발할 때는 빈을 관리하고 조회하는 기능은 물론이고, 수 많은 부가기능이 필요하다. ApplicationContext가 제공하는 부가기능 메세지소스를 활용한 국제화 기능 예를 들어서 한국에서 들어오면 한국어로, 영어권에서 들어오면 영어로 출력 환경변수 로컬 개발 운영등을 구분해서 처리 어플..
-
스프링1스프링/스프링 핵심 원리 - 기본편 2023. 12. 26. 22:47
새로운 할인 정책 개발 다형성 덕분에 코드를 추가로 개발하는 것 자체에는 문제가 없다. 하지만 새로 개발한 정률 할인을 적용하려고 하니 클라이언트 코드인 주문 서비스 구현체도 변경해야함 주문 서비스 클라리언트가 인터페이스인 DiscountPolicy 뿐만 아니라, 구체 클래스인 FixDiscountPolicy도 함계 의존 ➡ DIP(의존성 역전) 위반 관심사의 분리 애플리케이션을 하나의 공연으로 생각 기존에는 클라이언트가 의존하는 서버 구현 객체를 직접 생성하고, 실행함. 비유를 하면 기존에는 남자 주인공 배우가 공연도 하고, 동시에 여자 주인공도 직접 초빙하는 다양한 책임을 가지고 있음 공연을 구성하고, 담당 배우를 섭외하고, 지정하는 책임을 담당하는 별도의 공연 기획자가 나올 시점 공현 기획자인 Ap..