Spring Core/02. Spring Container와 빈 관리
-
이번 포스트에서는 Spring이 관리하는 빈의 생명주기(Life Cycle)에 대해 살펴보자.빈의 생명 주기 빈의 생명 주기스프링의 빈은 다음과 같은 생명 주기를 갖는다.생성자를 호출하여 객체를 생성한다.1의 과정을 통해 생성자 주입을 하거나 별도의 setter 메서드를 이용해서 의존성을 주입한다.아직 빈을 활용하기 이전에 초기화 메서드를 실행한다. 초기화 메서드에서는 빈에서 사용하려는 자원을 초기화 할 수 있다.빈을 사용한다.빈을 다 사용한 후 소멸 메서드를 실행한다. 소멸 메서드에서는 빈에서 사용했던 자원의 정리 작업을 진행할 수 있다. 초기화 및 소멸 메서드초기화 메서드와 소멸 메서드에 대해 살펴보자. 초기화 메서드소멸 메서드주요 용도빈에서 사용하려는 자원의 초기화빈에서 사용한 자원의 정리호출 시점..
07. 빈의 생명주기이번 포스트에서는 Spring이 관리하는 빈의 생명주기(Life Cycle)에 대해 살펴보자.빈의 생명 주기 빈의 생명 주기스프링의 빈은 다음과 같은 생명 주기를 갖는다.생성자를 호출하여 객체를 생성한다.1의 과정을 통해 생성자 주입을 하거나 별도의 setter 메서드를 이용해서 의존성을 주입한다.아직 빈을 활용하기 이전에 초기화 메서드를 실행한다. 초기화 메서드에서는 빈에서 사용하려는 자원을 초기화 할 수 있다.빈을 사용한다.빈을 다 사용한 후 소멸 메서드를 실행한다. 소멸 메서드에서는 빈에서 사용했던 자원의 정리 작업을 진행할 수 있다. 초기화 및 소멸 메서드초기화 메서드와 소멸 메서드에 대해 살펴보자. 초기화 메서드소멸 메서드주요 용도빈에서 사용하려는 자원의 초기화빈에서 사용한 자원의 정리호출 시점..
2024.02.23 -
이번 포스트에서는 빈의 스코프에 대해 살펴보자.빈의 스코프(Scope) CoffeeShop 시스템새롭게 하나의 CoffeeShop을 개업한다고 생각해보자. CoffeeShop에는 Barista가 근무할텐데 이 Barista는 손이 엄청 빠르기 때문에 아무리 많은 주문이 들어와도 순식간에 처리할 수 있다. 즉 맛있게 커피를 만들 수 있는 단 한 명만 필요하다. 그리고 CoffeeShop은 인기가 많아서 엄청나게 많은 Coffee가 팔리고 있다.일단 이 일과 관련된 3개의 클래스를 작성해보자.@Data@AllArgsConstructorpublic class Coffee { // Coffee는 stateful 하다. private String client; private String menu..
06. 빈의 스코프이번 포스트에서는 빈의 스코프에 대해 살펴보자.빈의 스코프(Scope) CoffeeShop 시스템새롭게 하나의 CoffeeShop을 개업한다고 생각해보자. CoffeeShop에는 Barista가 근무할텐데 이 Barista는 손이 엄청 빠르기 때문에 아무리 많은 주문이 들어와도 순식간에 처리할 수 있다. 즉 맛있게 커피를 만들 수 있는 단 한 명만 필요하다. 그리고 CoffeeShop은 인기가 많아서 엄청나게 많은 Coffee가 팔리고 있다.일단 이 일과 관련된 3개의 클래스를 작성해보자.@Data@AllArgsConstructorpublic class Coffee { // Coffee는 stateful 하다. private String client; private String menu..
2024.02.22 -
이번 포스트에서는 Profile에 대해 살펴보자. 환경의 분리와 프로파일프로젝트를 진행하다 보면 상황에 따라 다양한 개발 환경을 적용하는 것은 비일비재한 일이다. 예를 들어 DB를 이용해서 개발할 때 개발자들은 자신의 로컬 컴퓨터에 DB를 설치하고 비지니스 로직을 개발한다. 이후 테스트 서버에서 기능을 검증하고 최종적으로 운영 환경에서 애플리케이션을 서비스한다. 이 과정에서 비지니스 로직 자체는 거의 변하지 않는다. 하지만 DB 서버의 주소, 사용자 계정등 인프라 관련 설정은 각 단계(환경)마다 크게 달라질 수 있다. 이런 상황에서 각 환경에 맞춰 설정 파일을 수시로 수정하는 작업은 상당히 번거롭고 주의가 필요하다. 이런 문제를 조금이나마 해결하기 위해 환경에 따른 설정을 미리 준비해두고, 필요에 따라..
05. Profile이번 포스트에서는 Profile에 대해 살펴보자. 환경의 분리와 프로파일프로젝트를 진행하다 보면 상황에 따라 다양한 개발 환경을 적용하는 것은 비일비재한 일이다. 예를 들어 DB를 이용해서 개발할 때 개발자들은 자신의 로컬 컴퓨터에 DB를 설치하고 비지니스 로직을 개발한다. 이후 테스트 서버에서 기능을 검증하고 최종적으로 운영 환경에서 애플리케이션을 서비스한다. 이 과정에서 비지니스 로직 자체는 거의 변하지 않는다. 하지만 DB 서버의 주소, 사용자 계정등 인프라 관련 설정은 각 단계(환경)마다 크게 달라질 수 있다. 이런 상황에서 각 환경에 맞춰 설정 파일을 수시로 수정하는 작업은 상당히 번거롭고 주의가 필요하다. 이런 문제를 조금이나마 해결하기 위해 환경에 따른 설정을 미리 준비해두고, 필요에 따라..
2020.06.17 -
묵시적 DI앞선 포스트에서 @Configuration과 @Bean을 이용해서 명시적으로 빈을 선언하는 방법에 대해 알아보았다. 이 방식은 빈 설정이 빈 클래스 외부 즉 @Configuration 클래스에 존재하는 형태로 비지니스 로직과 빈 관리 로직이 잘 분리되어 관심사의 분리라는 주제에 아주 이상적이다. 단 이 방식은 빈을 만들 때 마다 설정 파일에 명시적으로 빈을 선언해주어야 한다. 묵시적 빈 설정묵시적인 빈 설정 방식은 빈으로 사용할 클래스에 @Component 라고 선언한다. 즉 빈에 대한 설정이 빈 클래스 내부에 존재하기 때문에 관심 사항의 분리라는 부분에서는 일보 후퇴하는 복합적인 관심사를 다루게 된다. @Component라고 선언된 클래스는 바로 빈이 되는것은 아니고 뒤에서 언급할 @C..
04. DI 처리 - 묵시적 DI묵시적 DI앞선 포스트에서 @Configuration과 @Bean을 이용해서 명시적으로 빈을 선언하는 방법에 대해 알아보았다. 이 방식은 빈 설정이 빈 클래스 외부 즉 @Configuration 클래스에 존재하는 형태로 비지니스 로직과 빈 관리 로직이 잘 분리되어 관심사의 분리라는 주제에 아주 이상적이다. 단 이 방식은 빈을 만들 때 마다 설정 파일에 명시적으로 빈을 선언해주어야 한다. 묵시적 빈 설정묵시적인 빈 설정 방식은 빈으로 사용할 클래스에 @Component 라고 선언한다. 즉 빈에 대한 설정이 빈 클래스 내부에 존재하기 때문에 관심 사항의 분리라는 부분에서는 일보 후퇴하는 복합적인 관심사를 다루게 된다. @Component라고 선언된 클래스는 바로 빈이 되는것은 아니고 뒤에서 언급할 @C..
2020.06.17 -
스프링은 DI를 어떻게 처리할까? 다음의 그림을 살펴보자.개발자는 비즈니스 로직을 담은 빈(Bean)들을 POJO 형태로 작성한다. 개발자는 각 빈들을 어떻게 생성하고 has-a 관계를 맺어줄지에 대한 설명서인 메타정보를 작성해서 스프링 컨테이너에게 전달한다.스프링 컨테이너는 메타정보에 근거해 빈 객체를 만들고 setter/생성자를 호출해서 의존성을 주입한다.클라이언트 코드에서 컨테이너에게 빈을 요청하면컨테이너는 관리하고 있던 빈 객체를 반환해 준다.이런 DI를 처리하는 방식은 메타정보를 만드는 방식에 따라 명시적 DI와 묵시적 DI로 나뉜다. Java Config를 활용한 명시적 DI 명시적 DI명시적 DI란 빈을 생성하고 의존성을 주입하는 코드를 별도의 파일에 "이것은 빈입니다." 라고 작성해주는 것..
03. DI 처리 - 명시적 DI스프링은 DI를 어떻게 처리할까? 다음의 그림을 살펴보자.개발자는 비즈니스 로직을 담은 빈(Bean)들을 POJO 형태로 작성한다. 개발자는 각 빈들을 어떻게 생성하고 has-a 관계를 맺어줄지에 대한 설명서인 메타정보를 작성해서 스프링 컨테이너에게 전달한다.스프링 컨테이너는 메타정보에 근거해 빈 객체를 만들고 setter/생성자를 호출해서 의존성을 주입한다.클라이언트 코드에서 컨테이너에게 빈을 요청하면컨테이너는 관리하고 있던 빈 객체를 반환해 준다.이런 DI를 처리하는 방식은 메타정보를 만드는 방식에 따라 명시적 DI와 묵시적 DI로 나뉜다. Java Config를 활용한 명시적 DI 명시적 DI명시적 DI란 빈을 생성하고 의존성을 주입하는 코드를 별도의 파일에 "이것은 빈입니다." 라고 작성해주는 것..
2020.06.16 -
이번 포스트에서는 IoC 컨테이너로써 스프링의 주요 특징 중 하나인 DI(Dependency Injection)의 개념과 필요성에 대해 알아보자.참고로 pom.xml에 설정했던 와는 무관하다. 생활에서의 의존성과 의존성 주입 그리고 Ioc Container 의존성우리는 멀리 떨어져있는 사람들과 통화(business logic)를 하려고 한다. 통화를 위해서는 당연히 전화기를 가져야(has a) 한다. 이처럼 통화를 위해 반드시 전화기를 사용하는 것을 '전화기에 의존하고 있다'라고 하고 이때 '전화기는 우리의 의존성'이 된다.의존성인 전화기를 갖기 위해서 전통적으로는 직접 구매를 했지만 요즘은 렌탈이나 구독 서비스가 등장하고 있다. "아이폰13, 매달 4만원에 쓴다"…윤곽 드러난 애플의 구독서비스"아이폰..
02. Dependency와 Dependency Injection이번 포스트에서는 IoC 컨테이너로써 스프링의 주요 특징 중 하나인 DI(Dependency Injection)의 개념과 필요성에 대해 알아보자.참고로 pom.xml에 설정했던 와는 무관하다. 생활에서의 의존성과 의존성 주입 그리고 Ioc Container 의존성우리는 멀리 떨어져있는 사람들과 통화(business logic)를 하려고 한다. 통화를 위해서는 당연히 전화기를 가져야(has a) 한다. 이처럼 통화를 위해 반드시 전화기를 사용하는 것을 '전화기에 의존하고 있다'라고 하고 이때 '전화기는 우리의 의존성'이 된다.의존성인 전화기를 갖기 위해서 전통적으로는 직접 구매를 했지만 요즘은 렌탈이나 구독 서비스가 등장하고 있다. "아이폰13, 매달 4만원에 쓴다"…윤곽 드러난 애플의 구독서비스"아이폰..
2020.06.15 -
이번 포스트에서는 스프링 애플리케이션의 구성 요소에 대해서 살펴보자. Spring Application의 구성 요소 기본적인 구조Spring 애플리케이션은 POJO + 메타 정보 + 스프링 프레임워크(IoC Container) 3 가지로 구성된다. 비즈니스 로직을 가지고 있는 POJO와 애플리케이션 구성 정보를 가지는 메타정보를 IoC Container인 스프링 프레임워크가 조합해서 스프링 애플리케이션을 구성하게 된다.이 요소들에 대해서 좀 더 상세하게 알아보자. POJOPOJO란 Plain Old Java Object의 약자로 말 그대로 이전부터 사용하던 평범한 자바 객체를 의미하는데 객체를 만들 때 특별히 무언가를 상속받아서 확장 할 필요가 없다는 것을 강조하기 위한 말이다.스프링 이전의 프레임워크..
01. Spring Application의 구성 요소이번 포스트에서는 스프링 애플리케이션의 구성 요소에 대해서 살펴보자. Spring Application의 구성 요소 기본적인 구조Spring 애플리케이션은 POJO + 메타 정보 + 스프링 프레임워크(IoC Container) 3 가지로 구성된다. 비즈니스 로직을 가지고 있는 POJO와 애플리케이션 구성 정보를 가지는 메타정보를 IoC Container인 스프링 프레임워크가 조합해서 스프링 애플리케이션을 구성하게 된다.이 요소들에 대해서 좀 더 상세하게 알아보자. POJOPOJO란 Plain Old Java Object의 약자로 말 그대로 이전부터 사용하던 평범한 자바 객체를 의미하는데 객체를 만들 때 특별히 무언가를 상속받아서 확장 할 필요가 없다는 것을 강조하기 위한 말이다.스프링 이전의 프레임워크..
2020.06.15