org.glassfish.hk2
org.glassfish.hk2 패키지는 Java EE (Enterprise Edition) 및 Jakarta EE 환경에서 사용되는 의존성 주입 프레임워크인 HK2(Hundred Kilobyte Kernel)를 제공하는 GlassFish 프로젝트의 일부임.
HK2는 경량(헤드리스) 의존성 주입 시스템으로, GlassFish 애플리케이션 서버 및 다른 다양한 Java 기반 시스템에서 사용됨.
주요 개념과 기능
1. 의존성 주입
HK2는 객체 간의 의존성을 관리하며, 개발자가 직접 객체를 생성하거나 관리할 필요 없이 의존성을 주입하는 방식으로 애플리케이션을 구성할 수 있게 해줌.
Java EE 환경에서 자주 사용되는 CDI와 비슷한 개념임.
2. 서비스 및 서비스 로케이터
HK2에서는 모든 의존성을 서비스로 관리하며, 이러한 서비스를 찾고 주입하는 데 서비스 로케이터 패턴을 사용함.
이는 HK2의 핵심 기능으로, 서비스 로케이터를 통해 애플리케이션의 서비스 객체를 동적으로 검색하고 제공할 수 있음.
3. 스코프
HK2는 여러 스코프를 지원하여 서비스가 어떻게 생성되고 주입되는지 제어할 수 있음.
예를 들어, 싱클톤 스코프는 애플리케이션 전체에서 동일한 인스턴스를 공유하는 반면, 프로토타입 스코프는 새로운 인스턴스를 반환함.
4. 어노테이션 기반 구성
HK2는 어노테이션을 통해 의존성을 주입하고 서비스 간의 관계를 정의할 수 있음.
@Inject, @Service, @Contract 등의 어노테이션을 사용하여 클래스와 의존성을 설명함.
5. 모듈화 및 확장성
HK2는 가벼운 의존성 주입 프레임워크로 설계되어 있고, 다양한 모듈 및 플러그인을 통해 쉽게 확장할 수 있음.
이로 인해 애플리케이션의 모듈화 및 유지보수에 유리한 구조를 제공함.
6. OSGi 호환성
HK2는 OSGi(모듈 시스템)와 호환됨.
따라서 OSGi를 사용하는 환경에서도 모듈 간 의존성을 관리할 수 있음.
7. GlassFish 통합
HK2는 GlassFish 서버의 핵심 구성 요소 중 하나임.
GlassFish는 이 프레임워크를 사용하여 내부 서비스 및 외부 애플리케이션 의존성을 관리함.
HK2의 구조
1. 서비스 계약
이는 인터페이스로 표현됨.
서비스가 제공할 기능을 정의함.
2. 서비스 구현
계약에 따른 구체적인 서비스 구현을 제공함.
각 구현은 @Service 어노테이션으로 정의됨.
3. 서비스 로케이터
이 객체는 의존성을 검색하고 적절한 서비스를 인스턴스화하는 역할을 담당함.
HK2의 장점
1. 경량성
HK2는 매우 가볍기 때문에 성능 저하 없이 애플리케이션의 확장성과 유연성을 제공함.
2. 유연한 의존성 관리
동적으로 객체를 주입하고 관리할 수 있는 유연한 의존성 관리 시스템임.
3. 표준과의 호환성
CDI 및 OSGi와 같은 표준 기술과 호환성이 뛰어남.
예시 코드
import org.glassfish.hk2.api.ServiceLocator;
import org.glassfish.hk2.utilities.ServiceLocatorUtilities;
import javax.inject.Inject;
public class MainApp {
public static void main(String[] args) {
// ServiceLocator 생성
ServiceLocator locator = ServiceLocatorUtilities.createAndPopulateServiceLocator();
// 의존성 주입된 서비스 가져오기
MyApp app = locator.getService(MyApp.class);
app.run();
}
}
@Service
public class MyApp {
private final MyService service;
// 의존성 주입
@Inject
public MyApp(MyService service) {
this.service = service;
}
public void run() {
service.performTask();
}
}
@Service
public class MyService {
public void performTask() {
System.out.println("Task performed!");
}
}
MyApp 클래스는 MyService를 의존성으로 받고 있음.
HK2는 이를 자동으로 주입하여 performTask() 메소드를 호출할 수 있게 함.
org.glassfish.hk2 정리
org.glassfish.hk2 패키지는 경량 의존성 주입 시스템인 HK2를 제공함.
Java EE 및 GlassFish 기반 애플리케이션의 모듈화와 의존성 관리를 돕는 강력한 도구임.
HK2는 유연하고 확장 가능한 구조로 다양한 Java 애플리케이션에서 사용되며, 의존성 주입과 서비스 관리 기능을 효율적으로 제공함.
'Data Engineering > Zeppelin' 카테고리의 다른 글
[Zeppelin] Helium (1) | 2024.10.02 |
---|---|
[Zeppelin] 앵귤러와 리액트 (2) | 2024.09.29 |
[Zeppelin] org.eclipse.jetty (0) | 2024.09.20 |
[Zeppelin] io.micrometer.core.instrument 패키지 (0) | 2024.09.20 |
[Zeppelin] Maven 기본 구조 (0) | 2024.09.20 |