본문 바로가기

SERVER/Spring

(9)
[spring-core-3] 싱글톤 컨테이너 인프런 [스프링 핵심 원리 - 기본편]을 정리한 내용입니다. 싱글톤 컨테이너 문제 정의: 기존의 스프링이 없는 순수한 DI 컨테이너인 AppConfig는 요청을 할 때마다 객체를 새로 생성해도 반환해줬다. 이 경우 트래픽이 클 수록 많은 객체가 생성되고 소멸되며 메모리 낭비가 심한 문제가 있고, 따라서 해결하기 위해 싱글톤 패턴을 사용한다. 싱글톤 패턴 클래스의 인스턴스가 딱 1개만 생성되는 것을 보장하는 디자인 패턴. //1. static 영역에 객체를 딱 1개만 생성해둔다. private static final SingletonService instance = new SingletonService(); //2. public으로 열어서 객체 인스턴스가 필요하면 이 static 메소드를 통해서만 조회하도..
[spring-core-2] 스프링 컨테이너와 스프링 빈 인프런 [스프링 핵심 원리 - 기본편]을 정리한 내용입니다. 스프링 컨테이너 ApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class) - ApplicationContext를 스프링 컨테이너라 한다. - ApplicationContext는 인터페이스이고, AnnotationConfigApplicationContext는 구현체이다. 즉, 역할과 구현으로 나누어 다형성을 적용한 것이다. - 역할과 구현으로 나누었기 때문에 스프링 컨테이너는 xml 기반으로 만들 수도 있고, 애노테이션 기반으로 자바 설정 클래스를 만들 수도 있다. 다양한 설정 형식 지원 - 자바코드, XML - 애노테이션 기반 자바 코드 설정 사용 Applic..
[spring-core-1] 스프링 핵심 원리 이해 인프런 [스프링 핵심 원리 - 기본편]을 정리한 내용입니다. 1. 객체 지향 설계와 스프링 스프링이란? 스프링 프레임워크, 스프링 부트 등을 포함한 스프링 생태계 전체를 아우르는 말. 스프링부트? 스프링을 편리하게 사용할 수 있도록 지원 Tomcat 같은 웹서버를 내장, 별도의 웹서버를 설치할 필요 x starter 종속성 제공으로 쉬운 빌드 구성 가능 프로덕션 준비 기능 제공 관례에 의한 간결한 설정 스프링의 핵심 스프링은 자바 언어 기반의 프레임워크로 객체 지향 언어가 가진 강력한 특징을 살려낼 수 있는 프레임워크. 좋은 객체 지향 프로그래밍이란? 객체 지향 프로그래밍 객체 지향 프로그래밍은 컴퓨터 프로그램을 명령어의 목록으로 보는 시각에서 벗어나 여러 개의 독립된 단위, 즉 "객체"들의 모임으로 파..
[Spring] Component와 @ComponentScan @ComponentScan 스프링의 빈 등록 방법에 대해서 얘기할 때 언급되었던 Component와 @ComponentScan에 대해 알아보자. 스프링부트에서는 @SpringBootApplication 애노테이션을 이용해서 빈을 등록하고 관리한다. 따라서 이전 방식이었던 xml 파일이나 java config 파일을 만들어 사용할 필요가 없었다! (사실 이전 방식에 대해 언급하지 않고 넘어갔어서 이 글을 참고하시길...) 그 이유는 @SpringBootApplication에 이미 @ComponentScan과 @Configuration이 있기때문에 이 자체가 Bean 설정 파일이기 때문이다. 이를 자세히 보면, 다음과 같다. @Target(ElementType.TYPE) @Retention(Retention..
[Spring] Bean Scope의 종류 스프링 빈은 기본적으로 싱글톤 스코프로 설정된다. 하지만 필요에 따라 비싱글톤이 필요한 경우도 많다. 스프링이 지원하는 Bean Scope의 종류에 대해 알아보자! Scope의 종류 싱글톤 스코프: 스프링에서 기본으로 설정되는 스코프. 스프링 컨테이너의 시작부터 종료까지 하나의 객체로 유지된다. 프로토타입 스코프: 스프링 컨테이너는 프로토타입 스코프의 생성과 의존관계 주입, 초기화까지만 관여한다. 이후로 더 관여하지 않고, 프로토타입을 받은 클라이언트가 객체를 관리해야 한다. 따라서 @PreDestroy 같은 종료 메소드가 호출되지 않는다. 또한 싱글톤과는 다르게 요청이 오면 계속 새로운 객체를 생성 후 반환한다. 웹 reqeust: 각각의 요청이 들어오고 나갈때까지 유지된다. session: 세션이 생..
[Spring] Bean Life Cycle(생명주기) 스프링 빈은 기본적으로 [객체 생성 -> 의존관계 주입]이라는 생명주기를 가진다. 예외적으로 생성자 주입만이 객체 생성과 의존 관계 주입이 동시에 일어나는데, 이는 생성자 호출이 될 때 의존관계가 존재하지 않는다면 객체 생성이 불가능하기 때문이다. 하지만 setter 주입이나 field 주입의 경우, 의존관계 없이도 객체를 먼저 생성하는 것이 가능하다. 따라서 객체 생성 후 의존관계를 주입하게 된다. 스프링 빈 이벤트 라이프 사이클 스프링 컨테이너 생성 -> 스프링 빈 생성 -> 의존관계 주입 -> 초기화 콜백 메소드 호출 -> 사용 -> 소멸 전 콜백 메소드 호출 -> 스프링 종료 초기화 콜백 메소드 : 빈 생성 -> 의존관계 주입 후 호출된다. 소멸 전 콜백 메소드 : 빈이 소멸되기 직전에 호출된다...
[Spring] 스프링에서 의존성을 주입하는 방법 스프링에서는 내부에서 new를 통해 의존성 객체를 직접 생성해서 쓰는 방법을 이용하지 않고, 외부에서 의존성을 주입해주는 방법을 통해 모듈 간 결합도를 낮추고 유연성을 높일 수 있다는 얘기를 했었다. 스프링에서는 Bean으로 등록되면 IoC 컨테이너가 알아서 의존성 주입을 해준다! Bean은? 스프링 컨테이너가 생성 및 관리하는 객체를 의미한다. IoC 컨테이너에 등록된 Bean들은 스프링이 의존성 주입 및 관리를 해주게 된다. Bean은 default 싱글톤 패턴으로 관리된다.(싱글톤 패턴이란 객체가 여러 차례 호출되어도, 한번만 생성한 후 참조하도록 하는 것이다) 스프링 IoC 컨테이너는? Bean의 생성 및 의존성을 관리한다. 스프링 컨테이너(IoC 컨테이너)의 종류는? 1) BeanFactory ..
[Spring] IoC와 DI 스프링의 핵심 개념을 나타내는 삼각형 중 가장 처음에 접해볼 만한 IoC와 DI에 대해 이해해보자. DI(Dependency Injection) : 의존성 주입. 의존성이 뭐길래 의존성을 주입한다는 걸까? 먼저 의존성에 대한 이해를 돕기 위해 다음과 같은 코드가 있다고 하자. 개발자가 카페를 생성하고, 카페는 내부적으로 오늘의 커피로 아메리카노를 생성한다. Cafe 객체가 Americano 객체를 사용하는 것은, 다른 표현으로는 Cafe가 Americano에 의존한다고 얘기할 수 있다. 이 경우, 개발자가 직접 new 를 이용해서 아메리카노 객체를 생성하고 있으므로, 내부에서 의존성을 만들고 있다고 볼 수 있다. public class Cafe { private Coffee today; public Ca..