1. 개요
Dropwizard는 고성능 RESTful 웹 서비스의 빠른 개발에 사용되는 오픈 소스 Java 프레임워크입니다 . 경량 패키지를 만들기 위해 인기 있는 라이브러리를 수집합니다. 사용하는 주요 라이브러리는 Jetty, Jersey, Jackson, JUnit 및 Guava입니다. 또한 Metrics 라는 자체 라이브러리를 사용합니다 .
이 사용방법(예제)에서는 간단한 Dropwizard 응용 프로그램을 구성하고 실행하는 방법을 배웁니다. 완료되면 애플리케이션은 저장된 브랜드 List을 얻을 수 있는 RESTful API를 노출합니다.
2. 메이븐 의존성
먼저 dropwizard-core 의존성만 있으면 서비스를 생성할 수 있습니다. pom.xml 에 추가해 보겠습니다 .
<dependency>
<groupId>io.dropwizard</groupId>
<artifactId>dropwizard-core</artifactId>
<version>2.0.0</version>
</dependency>
3. 구성
이제 모든 Dropwizard 응용 프로그램을 실행하는 데 필요한 필수 클래스를 만듭니다.
Dropwizard 애플리케이션은 속성을 YML 파일에 저장합니다. 따라서 리소스 디렉터리에 Introduction-config.yml 파일을 생성합니다 .
defaultSize: 5
io.dropwizard.Configuration을 확장하는 클래스를 생성하여 해당 파일의 값에 액세스할 수 있습니다 .
public class BasicConfiguration extends Configuration {
@NotNull private final int defaultSize;
@JsonCreator
public BasicConfiguration(@JsonProperty("defaultSize") int defaultSize) {
this.defaultSize = defaultSize;
}
public int getDefaultSize() {
return defaultSize;
}
}
Dropwizard는 Jackson을 사용하여 구성 파일을 클래스로 역직렬화합니다 . 따라서 Jackson 어노테이션을 사용했습니다.
다음으로 서비스 사용 준비를 담당하는 기본 애플리케이션 클래스를 생성해 보겠습니다.
public class IntroductionApplication extends Application<BasicConfiguration> {
public static void main(String[] args) throws Exception {
new IntroductionApplication().run("server", "introduction-config.yml");
}
@Override
public void run(BasicConfiguration basicConfiguration, Environment environment) {
//register classes
}
@Override
public void initialize(Bootstrap<BasicConfiguration> bootstrap) {
bootstrap.setConfigurationSourceProvider(new ResourceConfigurationSourceProvider());
super.initialize(bootstrap);
}
}
첫째, main 메서드는 애플리케이션 실행을 담당합니다. 인수를 run 메서드 에 전달하거나 직접 채울 수 있습니다 .
첫 번째 인수는 server 또는 check 일 수 있습니다 . check 옵션은 구성의 유효성을 검증하는 반면 server 옵션은 애플리케이션을 실행합니다 . 두 번째 인수는 구성 파일의 위치입니다.
또한 initialize 메서드는 구성 Provider를 ResourceConfigurationSourceProvider 로 설정하여 애플리케이션이 리소스 디렉터리에서 지정된 구성 파일을 찾을 수 있도록 합니다. 이 메서드를 재정의할 필요는 없습니다.
마지막으로 run 메서드를 사용하면 이 문서의 뒷부분에서 사용할 Environment 및 BaseConfiguration 모두에 액세스할 수 있습니다 .
4. 자원
먼저 브랜드에 대한 도메인 클래스를 생성해 보겠습니다.
public class Brand {
private final Long id;
private final String name;
// all args constructor and getters
}
둘째, 브랜드 반환을 담당할 BrandRepository 클래스를 생성해 보겠습니다 .
public class BrandRepository {
private final List<Brand> brands;
public BrandRepository(List<Brand> brands) {
this.brands = ImmutableList.copyOf(brands);
}
public List<Brand> findAll(int size) {
return brands.stream()
.limit(size)
.collect(Collectors.toList());
}
public Optional<Brand> findById(Long id) {
return brands.stream()
.filter(brand -> brand.getId().equals(id))
.findFirst();
}
}
또한 Dropwizard 자체의 일부이기 때문에 Guava 의 ImmutableList를 사용할 수 있었습니다 .
세 번째로 BrandResource 클래스를 만듭니다 . Dropwizard는 기본적으로 Jersey와 함께 JAX-RS를 구현으로 사용합니다 . 따라서 이 사양의 어노테이션을 사용하여 REST API Endpoints을 노출합니다.
@Path("/brands")
@Produces(MediaType.APPLICATION_JSON)
public class BrandResource {
private final int defaultSize;
private final BrandRepository brandRepository;
public BrandResource(int defaultSize, BrandRepository brandRepository) {
this.defaultSize = defaultSize;
this.brandRepository = brandRepository;
}
@GET
public List<Brand> getBrands(@QueryParam("size") Optional<Integer> size) {
return brandRepository.findAll(size.orElse(defaultSize));
}
@GET
@Path("/{id}")
public Brand getById(@PathParam("id") Long id) {
return brandRepository
.findById(id)
.orElseThrow(RuntimeException::new);
}
}
또한 인수가 제공되지 않은 경우 구성에서 defaultSize를 사용하기 위해 크기를 선택 사항 으로 정의했습니다 .
마지막으로 IntroductionApplication 클래스 에 BrandResource를 등록합니다 . 이를 위해 run 메서드를 구현해 보겠습니다.
@Override
public void run(BasicConfiguration basicConfiguration, Environment environment) {
int defaultSize = basicConfiguration.getDefaultSize();
BrandRepository brandRepository = new BrandRepository(initBrands());
BrandResource brandResource = new BrandResource(defaultSize, brandRepository);
environment
.jersey()
.register(brandResource);
}
생성된 모든 리소스는 이 메소드에 등록되어야 합니다.
5. 애플리케이션 실행
이 섹션에서는 명령줄에서 애플리케이션을 실행하는 방법을 알아봅니다.
먼저 maven-shade-plugin을 사용하여 JAR 파일을 빌드하도록 프로젝트를 구성합니다 .
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<configuration>
<createDependencyReducedPom>true</createDependencyReducedPom>
<filters>
<filter>
<artifact>*:*</artifact>
<excludes>
<exclude>META-INF/*.SF</exclude>
<exclude>META-INF/*.DSA</exclude>
<exclude>META-INF/*.RSA</exclude>
</excludes>
</filter>
</filters>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<transformer
implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>com.baeldung.dropwizard.introduction.IntroductionApplication</mainClass>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
이것은 플러그인의 제안된 구성입니다. 또한 <mainClass> 요소에 기본 클래스에 대한 경로를 포함했습니다 .
마지막으로 Maven을 사용하여 애플리케이션을 빌드합니다 . JAR 파일이 있으면 애플리케이션을 실행할 수 있습니다.
java -jar target/dropwizard-0.0.1-SNAPSHOT.jar
IntroductionApplication 클래스 에 매개변수를 이미 포함했기 때문에 매개변수를 전달할 필요가 없습니다 .
그런 다음 콘솔 로그는 다음으로 끝나야 합니다.
INFO [2020-01-08 18:55:06,527] org.eclipse.jetty.server.Server: Started @1672ms
이제 애플리케이션이 포트 8080에서 수신 대기 중이며 http://localhost:8080/brands 에서 브랜드 엔드포인트에 액세스할 수 있습니다 .
6. 건강검진
애플리케이션을 시작할 때 애플리케이션에 상태 확인이 없다는 알림을 받았습니다. 다행스럽게도 Dropwizard는 애플리케이션에 상태 검사를 추가할 수 있는 쉬운 솔루션을 제공합니다 .
com.codahale.metrics.health.HealthCheck 를 확장하는 간단한 클래스를 추가하여 시작하겠습니다 .
public class ApplicationHealthCheck extends HealthCheck {
@Override
protected Result check() throws Exception {
return Result.healthy();
}
}
이 간단한 메서드는 구성 요소의 상태에 대한 정보를 반환합니다. 여러 상태 확인을 생성할 수 있으며 그 중 일부는 특정 상황에서 실패할 수 있습니다. 예를 들어 데이터베이스에 대한 연결이 실패하면 Result.unhealthy()를 반환합니다 .
마지막으로 IntroductionApplication 클래스 의 run 메서드 에서 상태 확인을 등록 해야 합니다 .
environment
.healthChecks()
.register("application", new ApplicationHealthCheck());
애플리케이션을 실행한 후 http://localhost:8081/healthcheck 에서 상태 확인 응답을 확인할 수 있습니다 .
{
"application": {
"healthy": true,
"duration": 0
},
"deadlocks": {
"healthy": true,
"duration": 0
}
}
보시다시피 상태 확인이 애플리케이션 태그 아래에 등록되었습니다.
7. 결론
이 기사에서는 Maven으로 Dropwizard 애플리케이션을 설정하는 방법을 배웠습니다.
우리는 애플리케이션의 기본 설정이 정말 쉽고 빠르다는 것을 발견했습니다. 또한 Dropwizard에는 고성능 RESTful 웹 서비스를 실행하는 데 필요한 모든 라이브러리가 포함되어 있습니다.
항상 그렇듯이 이러한 예제의 코드는 GitHub 에서 사용할 수 있습니다 .