설치

Spider Silk는 Java 25 이상이 필요하다. 릴리스는 Maven Central에 게시되므로, 빌드에 기본 저장소 말고 다른 저장소를 추가할 필요가 없다. 현재 버전은 1.1.0이다. CHANGELOG.md에 릴리스마다 바뀐 내용이 정리되어 있다.

Gradle

repositories {
    mavenCentral()
}

dependencies {
    implementation 'net.benelog.spidersilk:spider-silk-core:1.1.0'
    testImplementation 'net.benelog.spidersilk:spider-silk-test:1.1.0'
}

Maven

Maven은 기본적으로 Central에서 의존성을 받아 오므로, pom.xml에는 의존성 선언만 있으면 된다:

<dependencies>
  <dependency>
    <groupId>net.benelog.spidersilk</groupId>
    <artifactId>spider-silk-core</artifactId>
    <version>1.1.0</version>
  </dependency>
  <dependency>
    <groupId>net.benelog.spidersilk</groupId>
    <artifactId>spider-silk-test</artifactId>
    <version>1.1.0</version>
    <scope>test</scope>
  </dependency>
</dependencies>

Hello, world

import net.benelog.spidersilk.App;
import net.benelog.spidersilk.WebResponse;

public class Main {

    public static void main(String[] args) {
        App app = new App();
        app.get("/hello/{name}", req -> WebResponse.text("Hello, " + req.pathParam("name")));
        app.start(8080);
    }
}
$ curl localhost:8080/hello/silk
Hello, silk

spider-silk-core는 내장 Jetty를 함께 가져오므로, 요청을 처리하는 데 더 추가할 것이 없다. 대신 외부 서블릿 컨테이너에 배포하려면 배포를 참고한다.

모듈

모듈은 네 묶음으로 나뉜다. 필요한 것은 코어 묶음뿐이며, 나머지는 코어와 같은 방식으로 하나씩 추가한다.

코어

모든 애플리케이션이 이 둘을 쓴다.

모듈 내용

spider-silk-core

jte 템플릿, 내장 Jetty, 그리고 프레임워크가 그 위에 지어진 JSON 라이브러리인 silk-json을 포함한 프레임워크

spider-silk-test

테스트 범위의 WebTest와 TestRequest

확장

확장은 선택 사항이다. 그 모듈이 가리키는 것을 코어 기본값 대신, 또는 그 곁에 쓰고 싶을 때만 추가한다.

모듈 이럴 때 쓴다

서버: 코어 기본값은 Jetty이며, 고르는 기준은 서버 고르기에서 다룬다

spider-silk-tomcat

TomcatServer: 내장 Tomcat

spider-silk-undertow

UndertowServer: 내장 Undertow

템플릿: 코어 기본값은 jte다

spider-silk-freemarker

FreeMarkerTemplates: FreeMarker

spider-silk-handlebars

HandlebarsTemplates: Handlebars

spider-silk-thymeleaf

ThymeleafTemplates: Thymeleaf

기능

spider-silk-jetty-websocket

WebSockets: 라우트 곁의 WebSocket 엔드포인트, Jetty 전용

spider-silk-jackson

JacksonCodecs: 핸들러가 받는 JsonWriter`와 `JsonReader 뒤의 Jackson 3

spider-silk-openapi

OpenApi: 라우트 목록을 담은 OpenAPI 3.1 문서

spider-silk-opentelemetry-agent

OpenTelemetry Java 에이전트 확장: 매칭된 라우트로 이름 붙은 스팬, jar는 의존성으로 추가하지 않고 에이전트에 건넨다

빌드

빌드 모듈은 선택적인 패키징 관례인 미리 컴파일한 jte, Jib 이미지, 네이티브 빌드와, JSON 코덱 생성기를 담는다.

모듈 빌드 도구

spider-silk-gradle-plugin

Gradle, 플러그인 net.benelog.spidersilk으로 적용한다

spider-silk-maven-parent

Maven, 부모 POM으로 쓴다

silk-json-processor

어느 빌드 도구에서든 javac이 애너테이션 프로세서로 실행한다: @JsonBound가 붙은 타입의 생성되는 JSON 코덱이며, 런타임에는 아무것도 더하지 않는다

예제

example-flashcard는 코어, spring-jdbc, H2로 만든 플래시카드 학습 앱이다. 이 모듈은 게시되지 않는다.

좌표, 패키지, 모듈 이름

net.benelog.spidersilk이라는 한 문자열이 의도적으로 세 가지 용도로 쓰인다.

어디에 무엇인가

그룹 id

net.benelog.spidersilk, 아티팩트 id는 모듈 자체의 이름 — net.benelog.spidersilk:spider-silk-core

패키지 루트

net.benelog.spidersilk, 코어가 이를 소유하고 다른 모듈은 각각 하위 패키지 — net.benelog.spidersilk.tomcat, net.benelog.spidersilk.jetty.websocket

Automatic-Module-Name

jar가 담는 패키지 루트로, import와 모듈 경로가 같은 이름을 쓴다 — net.benelog.spidersilk, net.benelog.spidersilk.tomcat, net.benelog.spidersilk.jetty.websocket

Gradle 플러그인은 같은 id인 net.benelog.spidersilk으로 적용되고, Maven 부모 POM은 net.benelog.spidersilk:spider-silk-maven-parent다. 독립된 라이브러리인 silk-json은 자신의 문자열인 net.benelog.silkjson 아래에서 같은 규칙을 따른다: 아티팩트 net.benelog.silkjson:silk-json과 net.benelog.silkjson:silk-json-processor, 패키지 루트 net.benelog.silkjson, 그리고 프로세서의 net.benelog.silkjson.processor다. 결정 32가 그 근거를 제시한다.