Spring/SpringCore - basic11 스프링 핵심 원리 - 빈 스코프와 웹 스코프( Provider와 Proxy 활용 지연처리 ) Bean Scope지금까지 배운 스프링과 관련한 핵심 원리의 Main은 스프링 컨테이너와 Bean에 대한 이해 및 원리였다.그리고 스프링 Bean은 컨테이너의 시작과 함께 등록되어 컨테이너 종료 시점까지 유지됨을 봤다. 하지만 이는 무조건적인 사항이 아니다.Bean 생성과 소멸에 대한 적용의 범위가 존재하며, 이를 사용하여 개발에 적용할 수 있다.이것을 Bean Scope라고 부른다. Bean Scope는 다음과 같이 지정할 수 있다. 프로토타입 스코프 Bean 컴포넌트 스캔 자동 등록@Scope("prototype")@Componentpublic class HelloBean {} 수동 등록@Scope("prototype")@BeanPrototypeBean HelloBean() { return new .. Spring/SpringCore - basic 2025. 1. 14. 스프링 핵심 원리 - Bean 생명주기 콜백 Repeat is the best medicine for memory Bean 생명주기와 활용 문제 상황 보통 어플리케이션의 동작에는 외부 라이브러리나 api, 네트워크 연결 등등과 같이 다양한 외부 자원들과의 연동을 필요로한다.예를 들어, 데이터베이스의 connection pool, network socket 처럼 어플리케이션의 시작과 함께 필요한 연결을 미리 동작하는 과정이 필요할 것이다. 그리고 이러한 동작 수행에 있어 스프링 컨테이너 생성 및 Bean 등록과 관련한 라이프 사이클과 관련하여 어떻게 필요한 작업을 수행하는 지에 대해서 알아보자. 아래는 간단하게 외부 네트워크에 미리 연결하는 객체의 예시로 어플리케이션의 시작 시점에 connect()으로 연결하고, 종료 시점에는 disConnect().. Spring/SpringCore - basic 2025. 1. 4. 스프링 핵심 원리 - 의존관계 주입 방법들에 대한 원리과 Lombok 활용, 같은 타입의 Bean 충돌 해결과 활용법( @Qualifier, @Primary, 가변적 활용 ) Repeat is the best medicine for memory스프링의 컨테이너에 대한 이해와 Bean 등록 방법들에 대해서 알아보았다.이제 의존성 주입과 관련한 스프링의 원리와 활용법들에 대해서 파악해보겠다. 실제 개발 환경에서 하나의 계층에 있는 객체는 다른 계층의 객체를 필요로 하는 경우가 대부분이다.( 예를 들어, 서비스 계층의 객체는 레파지토리 계층의 객체를 필요로한다. )그리고 이와 관련하여, 의존성 주입 시 @Configuration을 활용한 CGLIB 기술로 싱글톤을 지키는 방법에 대해서도 알아보았다. 더 나아가, 의존관계 주입의 다양한 방법과 원리 및 활용법들에 대해서 살펴보자. 의존관계 주입 방법의 종류 의존관계 주입에는 크게 4가지의 방법이 있다. 각 주입 방법에 대해 파악해보자.. Spring/SpringCore - basic 2024. 12. 31. 스프링 핵심 원리 - ComponentScan의 자동 빈 등록과 빈 탐색 관련 옵션, 빈 중복에 의한 충돌에 대한 고려 Repeat is the best medicine for memory 앞서 스프링에 의한 의존관계 주입에 있어서, @Configuration과 @Bean의 개념과 활용법에 대해서 알아보았다. 그런데, 스프링을 통한 객체들을 관리받기 위해서 모든 클래스에 @Configuration과 @Bean을 붙이는 점을 상상해보면 번거로움과 누락에 의한 문제가 발생할 것이라고 예상할 수 있다. 또 단순 반복적인 작업은 너무나 귀찮다.. 스프링은 역시나 이러한 번거로움을 해결하기 위해서 자동으로 Bean을 등록해주는 ComponentScan이라는 기능을 제공한다.( + @Autowired ) ComponentScan 자동 빈 등록 ComponentScan이 어떤 방법으로 자동 Bean 등록을 도와주는 지 확인해보자... Spring/SpringCore - basic 2024. 12. 30. 스프링 핵심 원리 - 싱글톤 컨테이너(stateless 코드 작성의 필요성과 @Configuration의 바이트 조작(CGLIB)을 통한 싱글톤 작동원리) Repeat is the best medicine for memory 스프링의 싱글톤스프링 컨테이너는 싱글톤이 적용되었다. 그 이유는 어플리케이션의 목적과 특수성을 생각해보면, 아래와 같은 고려 사항들이 있기 때문이다. 위의 내용처럼 웹 어플리케이션은 다수의 고객이 동시에 요청하는 경우가 빈번하게 발생한다.만약, 요청마다 새로운 인스턴스를 만들어 고객의 요청에 대응하는 어플리케이션이라면, 메모리 사용 관점에서 매우 비효율적이다. 이와 같은 상황을 스프링이 적용되지 않은 순수한 DI 환경으로 구성한다면, 아래와 같은 테스트 코드로 표현할 수 있을 것이다. public class SingletonTest { @Test @DisplayName("스프링 없는 순수한 DI 컨테이너") void .. Spring/SpringCore - basic 2024. 12. 28. 스프링 핵심원리 - 스프링 컨테이너 설계 이해, 스프링의 다양한 설정 형식 지원(JAVA/Xml), 스프링 빈 메타 정보(BeanDefinition) Repeat is the best medicine for memory 앞서, 스프링으로 전환과 더불어 스프링 컨테이너의 작동 원리에 대해서 알아보고 있었다.그리고 컨테이너 생성에 있어 ApplicationiContext 부모 타입을 사용해왔고, 구현체로는 AnnotationConfigApplicationContext을 사용하였다. 이번에는 이러한 컨테이너가 어떻게 설계되었는 가에 대해서 살펴보며, 동시에 다양한 설정 형식을 지원해주는 구조를 지닌 스프링의 설계적 측면을 파악하며 알 수 있는 BeanDefinition의 역할을 알아보자. 스프링 컨테이너의 설계 ( 1 ) - BeanFactory지금까지 사용해온 ApplicationiContext는 사실 BeanFactory라는 부모타입을 상속한 인터페이.. Spring/SpringCore - basic 2024. 12. 28. 스프링 핵심 원리 - 스프링 컨테이너와 스프링 빈(컨테이너 생성 원리 및 다양한 Bean 조회 방법들) Repeat is the best medicine for memory 지금까지 다뤘던 내용들은 객체 지향적인 관점을 기준으로 스프링이 하는 역할과 핵심 원리을 이해하기 위한 과정이었다.이제, 스프링 자체에 대한 이해와 학습을 위한 내용들을 정리해보겠다.스프링 컨테이너 생성 방법과 작동 원리 먼저, 스프링 컨테이너가 생성되는 과정에 대해서 알아보자. ApplicationContext applicationContext = new AnnotationConfigApplicationContext(Appconfig.class); 위의 코드 부분이 이전 포스팅에서 스프링 컨테이너를 만드는 로직에 해당한다.코드의 내용은 ApplicationContext 타입의 변수에 사용할 구현체로 어노테이션 기반의 자바 설정을 .. Spring/SpringCore - basic 2024. 12. 27. 스프링 핵심 원리 - 스프링으로 전환 Repeat is the best medicine for memory 제어의 역전(Ioc)과 의존관계 주입(DI) 앞서 순수 자바코드로 진행한 예제를 통해 스프링이 하는 역할에 대해 파악하고 이해하는 과정을 정리하였다. 스프링은 좋은 객체 지향적 설계와 구현을 도와주는 도구이다. 구체적으로는 필요한 구현체를 생성하고 연결해주는 역할을 담당하여 프로그램에 대한 제어 흐름 권한을 AppConfig가 가져갔다. 따라서 해당 객체를 필요로하는 객체( 클라이언트 )는 더 이상 구현체가 아닌 추상체에 의존하면서 실행에 필요한 로직만 수행하게 되었다. 이처럼 프로그램에 있어 제어의 흐름( ex, 클라이언트가 필요한 객체를 직접 호출 ) 직접 관리하는 것이 아닌 외부에서 관리하는 것을 제어의 역전(IoC)으로 부른다.. Spring/SpringCore - basic 2024. 11. 13. 스프링 핵심 원리 - 예제를 통해 이해하는 스프링의 핵심 원리 Repeat is the best medicine for memory스프링 기술에 대한 이야기를 하면 항상 다루는 것이 객체 지향적 코드를 지원해준다는 점이다. 결론적으로 말하자면, 스프링은 다형성과 OCP, DIP를 쉽게 사용할 수 있도록 도와준다. 이를 DI 컨테이너를 제공하여 가능하도록 만들었는데, 이는 의존성 주입으로 클라이언트 측의 코드 변경 없이도 기능의 사용이 가능하도록 지원해주는 방법이다.따라서 쉽게 부품을 교체하듯이 필요한 기능의 구현체에 직접적으로 의존하지 않으면서 개발이 가능하도록 스프링은 지원해준다. 객체 지향의 원칙을 지키면서 개발을 진행하다보면, 결국 스프링과 같은 프레임워크를 만들게 된다.그러나, 이렇게 말하면 무슨 의미인지 와닿지 않기에 직접 코드를 통해서 파악하며 스프링이.. Spring/SpringCore - basic 2024. 11. 7. 스프링 핵심 원리 - 좋은 설계 핵심 원칙(SOLID) Repeat is the best medicine for memory 객체 지향의 좋은 설계 핵심 원칙 객체 지향의 좋은 설계를 위한 핵심원칙에는 일명 ' SOLID '라고 불리는 원칙이 있다.본 블로그의 ' JAVA/객체지향 ' 폴더에 본 내용을 정리하였으니, 이에 대한 내용을 자세히 설명하진 않겠다. 그 중 OCP( 개방 폐쇄 원칙 ) 는 추상화와 다형성을 통해 구현하는데 , 예를 들어 아래와 같은 모습으로 예상할 수 있다. 인터페이스를 통한 추상화와 다형성을 통해 인터페이스를 상속받은 구현체를 필요에 따라 바꾸면서 사용하는 방식이다. 얼핏보면 OCP 원칙인 ' 변경에는 열려있고 이를 사용하는 클라이언트 입장에서는 필요한 구현체의 변경에 영향을 받지 않는 것 '으로 보인다. 그런데, 좀 더 엄밀하.. Spring/SpringCore - basic 2024. 11. 6. 스프링 핵심 원리 - 스프링이란? Repeat is the best medicine for memory 스프링 생태계 스프링으로 개발한다는 것은 위의 그림과 같이 스프링 프레임워크 또는 스프링 부트 사용이 필수적이다. 이외의 오른쪽에 있는 기술들도 제공하는데, 각 용도에 맞춰 필요한 경우 스프링과 함께 편리하게 개발할 수 있도록 도와준다. 이외에도 스프링은 많은 기능들을 제공한다. ( 필요하다면 공식 사이트에 들어가서 확인해보자 ) 이들 중에서 가장 중요한 것은 ' 스프링 프레임워크 ' 자체이며 아래와 같은 사항들이 모두 스프링 프레임워크 안에 들어간 기능이다. 여기에서는 스프링 프레임워크의 핵심 기술들에 대해서 정리하며 학습을 진행하겠다. 단, 스프링 부트를 사용하며 정리할 것인데, 스프링 부트는 스프링 프레임워크의 사용과 관.. Spring/SpringCore - basic 2024. 11. 4. 이전 1 다음