토리맘의 한글라이즈 프로젝트 logo 토리맘의 한글라이즈 프로젝트

프로젝트 리액터 네티 공식 레퍼런스를 한글로 번역한 문서입니다.

전체 목차는 여기에 있습니다.

목차


이번 섹션은 리액터 네티를 사용하는 데 도움이 될 다음 내용들을 다룬다:


2.1. Introducing Reactor Netty

마이크로서비스 아키텍처에 적합한 리액터 네티HTTP(웹소켓 포함), TCP, UDP를 위한 네트워크 엔진을 제공하며, backpressure를 지원한다.


2.2. Prerequisites

리액터 네티자바 8 이상에서 동작한다.

추가로 다음과 같은 전이 의존성(transitive dependency)이 있다:


2.3. Understanding the BOM and versioning scheme

리액터 네티프로젝트 리액터 BOM의 일부다 (Aluminium 릴리즈 트레인 이후부터). 이렇게 큐레이팅한 프로젝트는, 버전 관리 체계가 다를 수 있는 여러 아티팩트 버전을 그룹화해 제공하기 때문에 함께 잘 동작한다.

0.9.x와 1.0.x는 다른 버전 관리 체계를 사용한다 (Dysprosium과 Europium).

아티팩트 버저닝은 MAJOR.MINOR.PATCH-QUALIFIER 체계를 따르며, BOM은 CalVer에서 따온 YYYY.MINOR.PATCH-QUALIFIER 형식으로 버전을 정한다:

이 컨벤션을 따른 첫 번째 릴리즈 사이클은 2020.0.x이고, 코드 네임은 Europium을 사용한다. 이 체계에선 다음과 같은 순서로 식별자를 사용한다:

위에서 스냅샷을 높은 순서로 표기한 이유는, 개념적으로 스냅샷은 항상 모든 PATCH 중에서 “가장 최신 상태인 사전 릴리즈”를 뜻하기 때문이다. PATCH 사이클 내에서 첫 번째로 배포하는 아티팩트는 항상 비슷하게 -SNAPSHOT으로 명명하더라도, 마일스톤 이후나 릴리즈 후보 사이 등에 더 최신 버전인 스냅샷을 배포할 수도 있다.

모든 릴리즈 사이클엔 이전 사이클의 버저닝 체계와 이어지는 코드 네임이 주어지므로, 다른 비공식 레퍼런스에서도 이를 참고삼아도 좋다 (디스커션이나 블로그 포스트 등에서). 코드 네임은 전통적으로 MAJOR.MINOR 숫자를 나타낸다. (대부분) 원소 주기율표에서 알파벳 오름차순으로 따온다.

Dysprosium까지 사용했던 릴리즈 트레인 체계에선 코드명 뒤에 식별자를 붙였었는데, 이 식별자가 약간 달랐다. 예를 들어: Aluminium-RELEASE (첫 번째 GA 릴리즈로, 지금같았으면 YYYY.0.0 식으로 사용했을), Bismuth-M1, Californium-SR1 (현재는 서비스 릴리즈는 YYYY.0.1 등으로 명명), Dysprosium-RC1, Dysprosium-BUILD-SNAPSHOT (각 패치 후에는 동일한 스냅샷 버전으로 돌아간다. 현재는 YYYY.0.X-SNAPSHOT 형식을 사용하므로 PATCH 당 스냅샷이 하나다)


2.4. Getting Reactor Netty

앞서 언급했듯, 리액터 네티를 사용하는 가장 쉬운 방법은 BOM을 통해 프로젝트에 관련 의존성을 추가하는 것이다. 단, 버전을 생략해야 BOM에 정의된 버전이 추가된다는 점에 주의하라.

하지만 특정 아티팩트의 버전을 강제하고 싶다면, 평소에 의존성을 추가할 때처럼 명시하면 된다. BOM을 완전히 버리고 원하는 아티팩트 버전으로 의존성을 추가할 수도 있다.

2.4.1. Maven Installation

메이븐은 자체적으로 BOM을 지원한다. 먼저 다음을 pom.xml에 추가해서 BOM을 임포트해야 한다. 맨 위 요소(dependencyManagement)가 pom에 이미 있다면 안에 있는 내용만 넣으면 된다.

<dependencyManagement> <!-- (1) -->
    <dependencies>
        <dependency>
            <groupId>io.projectreactor</groupId>
            <artifactId>reactor-bom</artifactId>
            <version>Dysprosium-SR10</version> <!-- (2) -->
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

(1) dependencyManagement 태그에 주목하라. 이는 전형적인 dependencies 섹션과는 다른 별개 섹션이다.
(2) 이 글을 쓰는 시점에는 Dysprosium-SR10BOM의 가장 최신 버전이다. 업데이트는 여기에서 확인해라.

그다음, 일반적인 방식에서 <version>만 빼서 관련 리액터 프로젝트 의존성을 추가하면 된다:

<dependencies>
    <dependency>
        <groupId>io.projectreactor.netty</groupId>
        <artifactId>reactor-netty-core</artifactId> <!-- (1) -->
        <!-- (2) -->
    </dependency>
</dependencies>
<dependencies>
    <dependency>
        <groupId>io.projectreactor.netty</groupId>
        <artifactId>reactor-netty-http</artifactId>
    </dependency>
</dependencies>

(1) 리액터 네티 의존성.
(2) 여기엔 version 태그가 없다.

2.4.2. Gradle Installation

BOM 컨셉은 그래들 5 버전부터 지원한다. BOM을 임포트하고 리액터 네티에 의존성을 추가하는 방법은 다음과 같다:

dependencies {
    // import a BOM
    implementation platform('io.projectreactor:reactor-bom:Dysprosium-SR10') // (1)

    // define dependencies without versions
    implementation 'io.projectreactor.netty:reactor-netty-core' // (2)
    implementation 'io.projectreactor.netty:reactor-netty-http'
}

(1) 이 글을 쓰는 시점에는 Dysprosium-SR10BOM의 가장 최신 버전이다. 업데이트는 여기에서 확인해라.
(2) :로 구분된 섹션 중, 버전을 명시하는 세 번째 자리가 비어있다. 버전은 BOM에서 가져온다.

2.4.3. Milestones and Snapshots

마일스톤과 개발자 프리뷰는 메이븐 중앙저장소가 아닌 스프링 마일스톤 레포지토리로 배포한다. 이를 사용하려면 다음을 빌드 설정 파일에 추가해야 한다:

Milestones in Maven

<repositories>
	<repository>
		<id>spring-milestones</id>
		<name>Spring Milestones Repository</name>
		<url>https://repo.spring.io/milestone</url>
	</repository>
</repositories>

그래들은 다음과 같이 작성하라:

Milestones in Gradle

repositories {
  maven { url 'https://repo.spring.io/milestone' }
  mavenCentral()
}

마찬가지로 스냅샷도 별도의 전용 리포지토리로 제공한다 (메이븐, 그래들 모두):

-SNAPSHOTs in Maven

<repositories>
	<repository>
		<id>spring-snapshots</id>
		<name>Spring Snapshot Repository</name>
		<url>https://repo.spring.io/snapshot</url>
	</repository>
</repositories>

-SNAPSHOTs in Gradle

repositories {
  maven { url 'https://repo.spring.io/snapshot' }
  mavenCentral()
}

Getting Started수정 제안하기


전체 목차는 여기에 있습니다.

<< >>