자바 권장사항

애플리케이션을 최신 상태로 유지하는 것이 중요하면서도 까다로워졌습니다. 이 문서에서는 자바 개발자가 DevOps 방식을 시작할 수 있는 몇 가지 기본 단계별 절차를 안내합니다. 절대로 완전한 목록이 아닙니다. 여기서 제시하는 아이디어의 대부분은 권장사항에 대하여 더 폭넓은 개요를 제공하는 DORA DevOps 연구 및 평가 연구에서 가져왔습니다. 다른 참고 문헌으로는 Accelerate: The Science of Lean Software and DevOps: Building and Scaling High Performing Technology Organizations(저자: Nicole Forsgren PhD, Jez Humble, Gene Kim), Software Engineering at Google(저자: Titus Winters, Tom Manshreck, Hyrum Wright)이 포함됩니다.

이 문서를 읽기 전에 자바 개발 환경 설정을 먼저 읽어보는 것이 좋습니다.

개발 조직마다 니즈는 고유하지만 다음 기술 스택 중 하나를 사용하여 기본 시스템을 구성할 수 있습니다.

샘플 기술 스택 1 샘플 기술 스택 2
  • 소스 코드용 Cloud Source Repositories, GitHub 또는 Bitbucket
  • 아티팩트 및 라이브러리를 최신 상태로 유지하기 위한 Whitesource RenovateBot
  • 단위/제출 전 테스트용 Cloud Build
  • 통합 테스트용 Cloud Build
  • 배포용 Cloud Build
  • 소스 코드용 GitHub
  • 아티팩트 및 라이브러리를 최신 상태로 유지하기 위한 GitHub Dependabot
  • 제출 전 테스트용 GitHub 작업
  • 통합 테스트용 GitHub 작업
  • 배포용 GitHub 작업

이러한 구성요소로 빌드된 간단한 시스템을 사용하면 품질 및 주기 시간을 향상시킬 수 있습니다. 또한 최신 버그 수정과 보안 업데이트를 사용하여 코드를 간편하게 최신 상태로 유지할 수 있습니다.

버전 제어

연구(17페이지, 14페이지, 31페이지, 60페이지)에 따르면 소스 코드용 버전 제어는 자동화 및 테스트와 결합하여 품질 향상을 비롯한 여러가지 이점을 예측합니다.

GitHub, Gitlab, Bitbucket도 소스 코드를 올리기에 적합합니다.

자동화된 테스트

지속적 테스트는 이러한 기법 대부분을 성공적으로 사용하기 위해서 매우 중요할 수 있습니다. 테스트 권장사항에 대한 자세한 내용은 SRE Book의 안정성 테스트(Testing for Reliability) 장Google 테스트 블로그를 참조하세요.

자바 개발자의 주된 관심사는 자동화된 단위 테스트 및 통합 테스트입니다. JUnit, Spring 테스트, Apache Maven Surefire, Gradle 자바 테스트는 자바 개발자에게 유용한 리소스입니다.

지속적 통합/배포 자동화

지속적 통합배포 자동화는 최신 DevOps 작업을 지원합니다. 제작, 테스트, 배포

  • Cloud Build [Quickstarts] [Java형] [배포] [트리거]는 대부분의 작업에 쉽게 맞춤설정할 수 있는 무료(120 빌드 분/일) 또는 저비용의 간편한 빌드 시스템을 제공합니다.
  • Tekton은 시스템에 맞게 Cloud Build 아이디어를 쉽게 조정할 수 있는 오픈소스 프로젝트입니다.
  • Spinnaker는 오픈소스, 멀티 클라우드 지속적 배포 플랫폼으로, 소프트웨어 변경사항을 확신을 가지고 신속하게 출시하도록 도와줍니다. 복잡한 소프트웨어 시스템을 출시하고 롤백하는 프로세스도 관리할 수 있습니다.
  • GitHub의 작업은 테스트를 쉽게 설정하고 GitHub에서 실행할 수 있게 해주는 제3자 솔루션입니다.
  • Gitlab, Circle CI, Travis CI 등 다른 솔루션도 있습니다.

Cloud 클라이언트 라이브러리

Google 서비스를 사용하는 방법에는 여러 가지가 있지만 선호되는 방법은 Cloud 클라이언트 라이브러리 페이지의 안내를 따르는 것입니다. 자바의 경우 Libraries-BOM을 사용하면 각 아티팩트의 호환 가능한 버전을 사용할 수 있습니다.

자체 버전의 클라이언트 라이브러리를 선택하면 호환되지 않는 아티팩트가 선택될 수도 있습니다. 이를 다이아몬드 종속 항목 문제라고 합니다. 개별 라이브러리를 계속 선택해야 하는 경우에는 한 번에 하나씩 업데이트하고 테스트하여 업데이트에서 오류가 발생했는지 확인합니다. 최신 버전은 이 페이지에 항상 나열되어 있거나 Maven-Central을 검색하여 최신 버전을 확인할 수 있습니다.

종속 항목을 최신 상태로 유지

악의적 행위자로부터 보호하려면 종속 항목을 최신 상태로 유지하는 것이 중요합니다. 여기에 도움이 되는 여러 가지 제3자 도구가 있습니다.

이러한 도구를 올바르게 구성하면 종속 항목을 최신 상태로 유지하는 데 도움이 됩니다. 자동 테스트지속적 통합/지속적 배포를 결합하면 흐름이 다음과 같이 됩니다.

  • 종속 항목 자동화가 소스 제어의 변경을 제안합니다.
  • 지속적 빌드 시스템이 변경사항을 빌드하고 테스트합니다.
  • 사람이 제안을 검토하고 허용하는 경우 다른 변경사항과 함께 변경을 수락합니다.
  • 변경사항이 수락되면 지속적 배포 시스템에서 코드를 프로덕션으로 출시하도록 제안이 생성됩니다. (또는 커스텀 프로세스를 따릅니다.)

지원되는 자바 런타임 환경(JRE) 사용

자바 개발 키트의 하위 집합인 JRE는 운영체제 위에 있으며 자바 애플리케이션을 실행하는 데 필요한 소프트웨어와 리소스를 제공합니다. 대부분의 사용자는 업데이트, 보안, 버그 수정에 액세스할 수 있도록 프로덕션에서 최신 LTS 버전을 사용하는 것을 선호합니다. 코드가 이전 JDK에 대해 컴파일되는 경우에도 일반적으로 이후 JRE로 업데이트할 수 있습니다.

여러 JDK 버전으로 작업하는 경우 SDKMAN!을 사용하면 다양한 JDK 버전을 사용하고 관리할 수 있습니다.

컨테이너 사용(Google Kubernetes Engine, Cloud Run, Anthos 클러스터)

RenovateBot 또는 DependaBot에서 Docker 컨테이너를 사용하는 경우 봇에서 주기적으로 JRE 및 JDK에 대한 업데이트를 제안합니다. JDK와 JRE를 동일한 버전으로 유지하는 것이 좋습니다.

대부분의 경우 Jib를 사용하여 자바 애플리케이션을 컨테이너화하는 것을 권장합니다.

Dockerfile을 수동으로 업데이트하는 경우 JRE를 최신 버전으로 변경하고 다시 빌드합니다.

Compute Engine 사용

이는 애플리케이션에 따라 다른 경향이 있습니다. 시작 스크립트를 사용하는 것이 좋습니다. 업그레이드하려면 스크립트를 업데이트해야 합니다.

App Engine 가변형 환경

자바 8만 지원합니다.

App Engine 표준

자바 8에서 자바 11로 App Engine 앱 마이그레이션을 참조하세요.

자바 개발 키트의 LTS 버전 사용

JDK는 자바 애플리케이션 개발에 사용되는 도구 모음입니다. 새로운 언어 기능은 특정 JDK에 연결됩니다. 장기적 지원(LTS)을 통해 사용량을 JDK에 고정하고 애플리케이션에 적합하면 다음 LTS 버전으로 업그레이드하는 것이 좋습니다. 고정된 주 LTS 출시 버전의 최신 부 출시 버전을 사용하는 것이 좋습니다.

대부분의 사용자는 JDK 및 JRE를 동기화 상태로 유지하려고 합니다. 그렇게 할 수 없는 경우(예: JDK가 더 이상 지원되지 않는 경우) 이후 JDK로 컴파일하고 이전 JRE에서 실행해야 합니다.

Maven으로 이 작업을 수행하려면 다음 안내를 따르세요.

코딩할 언어 수준과 대상 JRE를 설정합니다. pom.xml 파일을 다음과 같이 업데이트합니다(자바 8의 경우). xml <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target>

자바 11로 업데이트하려면 다음으로 변경합니다.

    <maven.compiler.source>11</maven.compiler.source>
    <maven.compiler.target>11</maven.compiler.target>

Gradle을 사용하는 경우에는 자바 8용 build.gradle 파일을 다음과 같이 업데이트합니다.

compileJava {
  sourceCompatibility = 1.8
  targetCompatibility = 1.8
}

또는 자바 11의 경우에는 다음과 같습니다.

compileJava {
  sourceCompatibility = 11
  targetCompatibility = 11
}

참고로 자바 8 이전 버전에서는 자바 8 이후에 삭제된 1. 프리픽스(자바 7의 경우 1.7, 자바 8의 경우 1.8)가 있었습니다.