Spring Boot
Spring Boot 실행 JAR를 빌드하고 관리형 Java 컨테이너에서 실행합니다.
나이트로쉽은 pom.xml의 spring-boot 또는 build.gradle, build.gradle.kts의 org.springframework.boot 플러그인으로 Spring Boot를 감지합니다. 관리형 프리셋은 실행 가능한 JAR를 빌드하고 고정된 Temurin JRE로 컴퓨트에서 실행합니다.
배포하기
CLI 설치
curl -fsSL https://nitroship.co/install.sh | bash
ntro login이미 설치했다면 다음 단계로 넘어가세요. 설치 옵션, PATH 설정 및 업데이트는 CLI 설치에서 확인하세요.
컴퓨트 리전은 기본값이 없으므로 꼭 정하세요. 배포 루트에서 Spring Boot를 직접 선택합니다.
{
"build": {"framework": "spring-boot"},
"compute": {"regions": ["kr-icn"]}
}ntro apps create my-spring-app
ntro deploy . --prod이 프리셋은 호스팅 빌더에서만 빌드할 수 있습니다. 배포 명령에 --local이 있다면 빼세요. 배포 후 CLI가 보여 준 주소에서 앱 경로를 열어 보세요.
빌드와 Java 버전
프로젝트 선언 파일을 커밋하세요. 빌드 래퍼를 사용한다면 mvnw나 gradlew와 관련 래퍼 파일도 함께 커밋하세요. 래퍼가 있으면 우선 사용하고, 없으면 생성된 빌드가 고정된 Maven 또는 Gradle 툴체인 이미지를 사용합니다.
- Maven은
./mvnw -B -DskipTests package, 래퍼가 없으면mvn -B -DskipTests package를 실행하고target/의 JAR를 읽습니다. - Gradle은
./gradlew --no-daemon bootJar, 래퍼가 없으면gradle --no-daemon bootJar를 실행하고build/libs/의 JAR를 읽습니다.
*-plain.jar, *-sources.jar, *-javadoc.jar를 제외한 실행 JAR가 정확히 하나 있어야 합니다. 여러 JAR가 생기면 직접 만든 Dockerfile로 서버를 선택해야 합니다. WAR 배포나 위 폴더에 단일 실행 JAR를 만들지 않는 멀티 모듈 구조는 이 프리셋으로 처리하지 않습니다.
Java 버전은 Maven의 java.version, maven.compiler.release, maven.compiler.source에서 읽습니다. Gradle은 Java 툴체인이나 소스·타깃 호환성 선언을 읽고, 없으면 .tool-versions를 확인합니다. 빌드는 선언한 버전과 가장 가까운 지원 툴체인·베이스 버전을 고정해서 쓰고, 선언이 없으면 안정 버전을 기본으로 씁니다.
런타임과 정적 파일
최종 이미지는 /app/app.jar를 포함하며 Java로 실행할 때 --server.port=$PORT를 지정합니다. PORT가 없으면 3000을 사용합니다. 앱의 요청 수신 주소는 0.0.0.0으로 유지하세요. server.address를 localhost로 덮어쓰지 마세요.
이 프리셋은 JAR 안의 정적 리소스를 CDN으로 추출하지 않습니다. 패키지에 포함된 CSS, JS, 이미지, 페이지, API는 Spring이 컴퓨트에서 제공합니다. CDN 정적 파일이 필요하면 직접 만든 Dockerfile에 공개 파일 전용 디렉터리를 만들고 build.outputDirectory로 지정하세요. Java 소스, 비밀 값, 서버 실행 파일은 제외해야 합니다. 이미지 추출과 URL 경로는 Dockerfile 가이드에서 설명합니다.
환경 변수와 데이터 저장
프로덕션 프로필과 비밀 값은 환경 변수로 등록하세요. 예를 들어 프로덕션 프로필을 사용하는 앱은 SPRING_PROFILES_ACTIVE를 설정하고, Spring이 구성하는 데이터소스에는 SPRING_DATASOURCE_URL, SPRING_DATASOURCE_USERNAME, SPRING_DATASOURCE_PASSWORD를 사용합니다. DATABASE_URL이 데이터소스 설정으로 자동 변환되지는 않습니다. 프로젝트가 직접 읽는 경우에만 사용하세요. 데이터베이스는 외부 서비스를 사용합니다.
생성된 이미지는 루트 권한 없이 실행됩니다. 인스턴스 파일시스템은 임시 공간입니다. 임시 파일과 JVM의 임시 쓰기는 /tmp를 사용하세요. 업로드는 이미지 안이 아니라 S3 같은 오브젝트 스토리지에 저장하세요.
나이트로쉽은 마이그레이션, 큐 워커, 스케줄러를 자동으로 실행하지 않습니다. 마이그레이션 도구는 CI나 내 컴퓨터에서 외부 DB를 대상으로 실행하세요. 앱 시작 시 Flyway나 Liquibase를 실행한다면 이는 플랫폼의 마이그레이션 단계가 아니라 앱 자체의 동작이므로 실행 시점을 의도적으로 관리해야 합니다. 워커는 별도로 실행하고, 정기 HTTP 작업은 앱 안의 스케줄러에 의존하기보다 Cron 작업을 사용하세요.
프레임워크 선택과 직접 만든 Dockerfile
build.framework: "spring-boot"는 이 프리셋을 직접 선택하며 자동으로 찾은 Dockerfile보다 우선합니다. build.dockerfile과는 함께 쓸 수 없습니다.
프레임워크를 직접 지정하지 않았을 때의 감지 순서는 빌드 방식 선택에 있습니다. 별도 JAR 선택, WAR, 네이티브 이미지, OS 패키지, 다른 정적 파일 처리가 필요하면 build.framework를 빼고 직접 만든 Dockerfile을 쓰세요.