Spring 90

[Spring][Integration] 1. Task Execution: @Async

Spring은 비동기 작업의 실행을 위한 인터페이스를 제공합니다. Spring은 이러한 인터페이스를 구현하는 구현체도 제공합니다. 스레드 풀을 지원하거나 애플리케이션 서버 환경 내에서의 CommonJ에 위임할 수 있습니다 1. The Spring TaskExecutor Abstraction TaskExecutor Types Spring은 다양한 요구 사항과 환경에 맞게 선택할 수 있는 다양한 TaskExecutor 구현체를 제공합니다. SyncTaskExecutor 호출을 비동기적으로 실행하지 않습니다. 각 호출은 호출하는 쓰레드에서 직접 실행됩니다. 주로 멀티 쓰레딩이 필요하지 않은 상황, 예를 들어 간단한 테스트 케이스에서 사용됩니다. SimpleAsyncTaskExecutor 이 구현체는 쓰레드를 ..

Spring/Spring 2023.10.16

[Spring MVC] 1-2. DispatcherServlet: Special Bean Types

DispatcherServlet는 WebApplicationContext의 대리 구성요소에 작업을 위임하여 요청을 처리합니다. 대리 구성요소는 Spring IoC Container에 Bean으로 등록되어 적절하게 사용됩니다. 대리 구성요소는 Bean으로 등록되므로 커스터마이징할 수 있습니다. 1. HandlerMapping 들어오는 웹 요청을 적절한 핸들러에 연결하는 역할을 담당합니다. 해당 요청을 처리하기 전과 후에 추가적인 작업을 수행하기 위해 인터셉터를 사용합니다. 핸들러 매핑의 구현 타입에 따라 핸들러 매핑의 동작이 달라집니다. 주요 핸들러 매핑 구현체 RequestMappingHandlerMapping @RequestMapping 애노테이션이 있는 메서드에 매핑합니다. SimpleUrlHandl..

Spring/Spring MVC 2023.10.16

[Spring MVC] 1-1. DispatcherServlet: Context Hierarchy

프론트 컨트롤러 애플리케이션에서 요청을 한 곳에서 받아서 적절한 컨트롤러나 핸들러로 라우팅하는 설계 패턴입니다. Spring MVC는 프론트 컨트롤러 패턴 주위에 설계되었습니다. DispatcherServlet Spring MVC에서 프론트 컨트롤러 역할을 담당합니다. 요청에 따라 적절한 컨트롤러나 뷰 리졸버, 예외 핸들러 등으로 라우팅하는 작업을 수행합니다. Java 구성 방식이나 web.xml을 통해 할 수 있습니다. DispatcherServlet은 일반적인 서블릿처럼 선언되고 매핑됩니다. public class MyWebApplicationInitializer implements WebApplicationInitializer { @Override public void onStartup(Servle..

Spring/Spring MVC 2023.10.16

[Spring][Core] 2-8. Bean: Customizing the Nature of a Bean

1. Lifecycle Callbacks Spring은 빈의 생명주기와 상호작용할 수 있는 여러 방법을 제공합니다. 이러한 도구를 활용하여 빈의 초기화 및 파괴 과정에 사용자 지정 동작을 추가할 수 있습니다. BeanPostProcessor 인터페이스 빈 생성 시기에 BeanFactory Hook을 정의하는 인터페이스 입니다. 내부적으로 콜백 인터페이스를 찾아 적절한 메서드를 호출하기 위해 BeanPostProcessor를 사용합니다. 생성 전/후의 콜백함수를 정의할 수 있습니다. postProcessBeforeInitialization(), postProcessAfterInitialization() Initialization Callbacks 초기화 메서드는 컨테이너의 싱글톤 생성 잠금 내에서 실행됩니..

Spring/Spring 2023.10.14

[Spring][Core] 2-7. Bean: Lazy-initialized Beans

1. Lazy-initialized Beans 기본 동작 ApplicationContext는 기본적으로 초기화 과정에서 모든 싱글톤 빈을 즉시 생성하고 설정합니다. 즉시 인스턴스화는 설정 오류나 환경 문제가 컴파일 타임에 조기에 발견됩니다. 오류가 서버 기동중에 발견되는 것을 방지할 수 있습니다. 지연 초기화(Lazy Initialization) 이러한 기본 동작을 원치 않을 때, 빈 정의 단계에서 지연 초기화로 표시하여 싱글톤 빈의 사전 인스턴스화를 방지할 수 있습니다. IoC 컨테이너에게 지연 초기화 된 빈은 즉시 생성이 아닌 첫 요청시에 생성하도록 지시합니다. XML에서의 설정 XML에서 이 동작은 요소의 lazy-init 속성으로 제어됩니다. 예외 사항 지연 초기화 된 빈이 지연 초기화되지 않은 ..

Spring/Spring 2023.10.14

[Spring][Core] 2-6. Bean: Autowiring Collaborators

1. Autowiring Collaborators Autowiring 빈들 사이의 의존성을 자동으로 연결하는 기능입니다. ApplicationContext 내에서 빈들의 종속성을 자동으로 매칭하여 연결해 줍니다. 장점 구성의 간소화 직접적으로 프로퍼티나 생성자 인수를 명시적으로 지정할 필요가 줄어듭니다. 동적인 구성 업데이트 필요한 의존성이 추가시, 구성을 수정할 필요 없이 자동으로 해당 의존성이 적용됩니다. 코드베이스가 안정적이지 않은 개발 초기 단계에서 특히 유용할 수 있습니다. 코드베이스가 안정화되면 명시적인 와이어링으로 전환하는 옵션도 있습니다. XML 기반 구성에서의 자동와이어링 (default) no 자동와이어링이 발생하지 않습니다. byName 프로퍼티 이름을 기반으로 자동와이어링 합니다. ..

Spring/Spring 2023.10.14

[Spring][Core] 2-5. Bean: Dependency Injection

1. Dependency Injection 외부에서 객체 간의 의존성을 주입하는 기법입니다. 개발자가 직접 코드로 수행하는 것이 아니라, 프레임워크의 IoC Container에 의해 자동으로 주입됩니다. 의존성 전달에 대한 제어 흐름의 주체가 개발자에서 IoC Container로 역전됩니다. 이 때문에 "제어 역전"이라는 용어가 사용됩니다. 생성자 주입, 수정자 주입 방식으로 의존성을 주입합니다. public class SimpleMovieLister { // the SimpleMovieLister has a dependency on a MovieFinder private final MovieFinder movieFinder; // a constructor so that the Spring contain..

Spring/Spring 2023.10.14

[Spring][Core] 2-4. Bean: Bean Scopes

1. Bean Scopes 빈 정의를 통해 생성된 빈에게 의존성과 설정 값을 제어할 수 있을 뿐만 아니라, 객체의 생성 범위도 제어할 수 있습니다. 다양한 범위에서 객체를 생성할 수 있습니다. The Singleton Scope (Default) 정확히 하나의 인스턴스만 생성합니다. 캐시에 저장됩니다. 각 IoC Container 들은 이 캐시된 객체를 반환합니다. 싱글톤 빈에 대한 모든 요청은 항상 동일한 공유 인스턴스를 반환합니다. The Prototype Scope 빈 배포의 비싱글톤 형태로, 해당 빈에 대한 요청이 있을 때마다 새로운 빈 인스턴스가 생성됩니다. 다른 빈에 주입되거나 컨테이너에서 getBean() 메소드 호출을 통해 요청될 때마다 새 인스턴스가 만들어집니다. 상태를 가진 모든 빈들에..

Spring/Spring 2023.10.14

[Spring][Core] 2-3. Bean: Naming Beans

1. Naming Beans 식별자 모든 빈은 하나 이상의 식별자를 가지며, 이 식별자는 컨테이너 내에서 고유해야 합니다. 빈은 보통 하나의 식별자만을 가지지만, 추가로 별칭(aliases)으로 사용할 식별자를 더 가질 수 있습니다. Aliasing a Bean outside the Bean Definition 빈에 대한 별칭(alias)을 설정하면 해당 빈을 다양한 이름으로 참조할 수 있게 해줍니다. 이 기능은 특히 큰 시스템에서 여러 하위 시스템 간에 설정을 분할할 때 유용하게 사용됩니다. 각 하위 시스템은 자신만의 객체 정의를 가질 수 있습니다. XML에서 빈 별칭 설정 요소를 사용하여 빈에 대한 별칭을 지정할 수 있습니다. Java 설정에서 빈 별칭 설정 @Bean을 사용하여 별칭을 제공할 수 있..

Spring/Spring 2023.10.14

[Spring][Core] 2-2. Bean: Instantiating Beans

1. Instantiating Beans Instantiation with a Constructor 빈을 생성하는 가장 일반적인 방법은 컨테이너가 빈의 클래스를 직접 인스턴스화하는 것입니다. 이것은 자바에서 new 연산자를 사용하여 객체를 생성하는 것과 유사합니다. XML 기반 : 요소의 class 속성을 통해 이를 지정합니다. Nested class names 중첩 클래스(nested class)는 한 클래스 내부에 정의된 또 다른 클래스입니다. 중첩 클래스를 빈으로 정의하려면 $ 표시를 사용하여 중첩클래스를 표현합니다. (fully qualified name) Instantiation with a Static Factory Method 컨테이너가 정적 팩토리 메서드를 호출하여 빈을 생성하는 것입니다...

Spring/Spring 2023.10.14