1. 개요

이 튜토리얼에서는 Apache Meecrowave 프레임 워크 의 기본 기능을 살펴 봅니다 .

Meecrowave는 Apache의 경량 마이크로 서비스 프레임 워크 로 CDI, JAX-RS 및 JSON API와 매우 잘 작동합니다. 설정 및 배포가 매우 간단합니다. 또한 Tomcat, Glassfish, Wildfly 등과 같은 무거운 애플리케이션 서버를 배포하는 번거 로움을 제거합니다.

2. Maven 의존성

Meecrowave를 사용하기 위해 pom.xml에 의존성을 정의 해 보겠습니다  .

<dependency>
    <groupId>org.apache.meecrowave</groupId>
    <artifactId>meecrowave-core</artifactId>
    <version>1.2.1</version>
</dependency>

Maven Central 에서 최신 버전을 확인하십시오 .

3. 단순 서버 시작

Meecrowave 서버를 시작하려면  main  메서드를 작성하고 Meecrowave 인스턴스를 만들고 main bake ()  메서드를 호출  하기 만하면됩니다  .

public static void main(String[] args) {
    try (Meecrowave meecrowave = new Meecrowave()) {
        meecrowave.bake().await();
    }
}

애플리케이션을 배포 패키지로 패키징하는 경우이 기본 방법이 필요하지 않습니다. 이후 섹션에서 이에 대해 살펴 보겠습니다. 메인 클래스는 IDE에서 애플리케이션을 테스트 할 때 유용합니다.

장점으로 IDE에서 개발하는 동안 메인 클래스를 사용하여 애플리케이션을 실행하면 코드 변경으로 자동으로 다시로드되므로 테스트를 위해 서버를 반복해서 다시 시작해야하는 번거 로움을 줄일 수 있습니다.

Java 9를 사용 하는 경우 VM에 javax .xml.bind 모듈을 추가하는 것을 잊지 마십시오 .

--add-module javax.xml.bind

이 방법으로 서버를 생성하면 기본 구성으로 시작됩니다. Meecrowave.Builder 클래스를 사용하여 프로그래밍 방식으로 기본 구성을 업데이트 할 수 있습니다  .

Meecrowave.Builder builder = new Meecrowave.Builder();
builder.setHttpPort(8080);
builder.setScanningPackageIncludes("com.baeldung.meecrowave");
builder.setJaxrsMapping("/api/*");
builder.setJsonpPrettify(true);

그리고 서버를 베이킹하는 동안 빌더  인스턴스를 사용하십시오  .

try (Meecrowave meecrowave = new Meecrowave(builder)) { 
    meecrowave.bake().await();
}

여기에는 더 많은 구성 가능한 속성이  있습니다 .

4. REST 끝점

이제 서버가 준비되면 몇 가지 REST 엔드 포인트를 생성 해 보겠습니다.

@RequestScoped
@Path("article")
public class ArticleEndpoints {
    
    @GET
    public Response getArticle() {
        return Response.ok().entity(new Article("name", "author")).build();      
    }
    
    @POST 
    public Response createArticle(Article article) { 
        return Response.status(Status.CREATED).entity(article).build(); 
    }
}

REST 엔드 포인트를 생성하기 위해 주로  JAX-RS 어노테이션을 사용하고 있습니다. 여기에서 JAX-RS에 대해 자세히 알아보십시오 .

다음 섹션에서는 이러한 엔드 포인트를 테스트하는 방법을 살펴 보겠습니다.

5. 단위 테스트

Meecrowave로 작성된 REST API 용으로 단위 테스트 케이스를 작성하는 것은 어노테이션이 달린 JUnit 테스트 케이스를 작성하는 것만 큼 간단합니다.

먼저 pom.xml에  테스트 의존성을 추가해 보겠습니다  .

<dependency>
    <groupId>org.apache.meecrowave</groupId>
    <artifactId>meecrowave-junit</artifactId>
    <version>1.2.1</version>
    <scope>test</scope>
</dependency>

최신 버전을 보려면 Maven Central을 확인하세요 .

또한 테스트를 위해 OkHttp 를 HTTP 클라이언트로 추가해 보겠습니다 .

<dependency>
    <groupId>com.squareup.okhttp3</groupId>
    <artifactId>okhttp</artifactId>
    <version>3.10.0</version>
</dependency>

여기 에서 최신 버전을 확인 하십시오 .

이제 의존성이 준비되었으므로 계속해서 테스트를 작성해 보겠습니다.

@RunWith(MonoMeecrowave.Runner.class)
public class ArticleEndpointsTest {
    
    @ConfigurationInject
    private Meecrowave.Builder config;
    private static OkHttpClient client;
    
    @BeforeClass
    public static void setup() {
        client = new OkHttpClient();
    }
    
    @Test
    public void whenRetunedArticle_thenCorrect() {
        String base = "http://localhost:" + config.getHttpPort();
        
        Request request = new Request.Builder()
          .url(base + "/article")
          .build();
        Response response = client.newCall(request).execute();
        assertEquals(200, response.code());
    }
}

테스트 케이스를 작성하는 동안 테스트 클래스에 MonoMeecrowave.Runner  클래스 로 어노테이션을 달고 구성도 삽입하여 테스트 서버용으로 Meecrowave에서 사용하는 임의 포트에 액세스합니다.

6. 의존성 주입

클래스에 의존성주입 하려면 특정 범위 내에서 해당 클래스에 어노테이션을 추가해야합니다.

ArticleService  클래스 의 예를 살펴 보겠습니다  .

@ApplicationScoped
public class ArticleService {
    public Article createArticle(Article article) {
        return article;
    }
}

이제 javax.inject.Inject 어노테이션을 사용하여 이것을 ArticleEndpoints 인스턴스에  삽입 해 보겠습니다  .

@Inject
ArticleService articleService;

7. 애플리케이션 패키징

Meecrowave Maven 플러그인을 사용하면 배포 패키지 생성이 매우 간단 해집니다.

<build>
    ...
    <plugins>
        <plugin>
            <groupId>org.apache.meecrowave</groupId>
            <artifactId>meecrowave-maven-plugin</artifactId>
            <version>1.2.1</version>
        </plugin>
    </plugins>
</build>

플러그인이 준비되면 Maven 목표  meecrowave : bundle 을 사용하여 애플리케이션을 패키징 해 보겠습니다  .

패키지화되면 대상 디렉토리에 zip이 생성됩니다.

meecrowave-meecrowave-distribution.zip

이 zip에는 애플리케이션을 배포하는 데 필요한 아티팩트가 포함되어 있습니다.

|____meecrowave-distribution
| |____bin
| | |____meecrowave.sh
| |____logs
| | |____you_can_safely_delete.txt
| |____lib
| |____conf
| | |____log4j2.xml
| | |____meecrowave.properties

bin 디렉토리로 이동하여 애플리케이션을 시작해 보겠습니다.

./meecrowave.sh start

응용 프로그램을 중지하려면 :

./meecrowave.sh stop

8. 결론

이 기사에서는 Apache Meecrowave를 사용하여 마이크로 서비스를 만드는 방법을 배웠습니다. 또한 응용 프로그램에 대한 몇 가지 기본 구성을 살펴보고 배포 패키지를 준비했습니다.

항상 그렇듯이 코드 조각은 Github 프로젝트 에서 찾을 수 있습니다 .