IntelliJ용 Cloud Code에서 개발 속도 향상

IntelliJ용 Cloud Code에서 로컬 개발 속도를 높이려면 파일 동기화와 핫 리로드, 저장 시 자동 배포의 이점을 활용하고 Skaffold 모듈을 사용하여 애플리케이션의 일부를 별도로 개발합니다.

Skaffold 파일 동기화 및 핫 리로드(Hot reloading) 사용 설정

Skaffold는 로컬 개발 워크플로의 효율성을 높이고 포드를 다시 빌드, 다시 배포, 다시 시작할 필요가 없도록 변경된 파일을 배포된 컨테이너에 복사하는 기능을 지원합니다. 즉, 정적 및 소스 코드 파일을 변경하면 몇 초 만에 변경사항이 적용되며 신속한 피드백 루프가 발생합니다.

정적 파일(예: HTML 및 CSS 파일)의 경우 이 파일 복사 동작을 파일 동기화라고 합니다.

소스 코드 파일의 경우 이 동작을 핫 리로드(Hot reloading)라고 하며 다음 파일 유형을 지원합니다.

  • Go: *.go
  • 자바: *.java, *.kt, *.scala, *.groovy, *.clj
  • NodeJS: *.js, *.mjs, *.coffee, *.litcoffee, *.json

핫 리로드를 구성하면 Skaffold는 지원되는 파일의 변경사항을 감지하고 이러한 변경사항을 클러스터에서 실행 중인 컨테이너와 동기화합니다. 핫 리로드를 지원하지 않는 파일 유형 변경사항은 이미지 다시 빌드 및 포드 다시 시작을 트리거합니다.

기본 빌더로 Buildpacks를 사용하면 자동 파일 동기화와 핫 리로드는 기본적으로 사용 설정됩니다. Docker와 같은 다른 빌더의 경우 맞춤설정할 아티팩트에 skaffold.yaml 파일에서 sync 섹션을 지정할 수 있습니다.

동기화 설정은 다음 중 하나일 수 있습니다(선호도 순서).

  • auto: Skaffold에서 자동으로 동기화를 구성합니다. (Jib 및 Buildpacks 아티팩트에만 해당) Buildpacks의 기본값입니다.
  • infer: 변경된 각 파일의 대상은 빌더에서 추론됩니다.
  • manual: 로컬 작업공간의 파일과 실행 중인 컨테이너의 대상 위치를 지정해야 합니다.

skaffold.yaml 파일에서 다음 샘플 sync 섹션은 모든 /static-html HTML 파일을 컨테이너의 static 폴더에 동기화하기 위해 manual 동기화를 지정합니다.

build:
  artifacts:
    - image: gcr.io/k8s-skaffold/node-example
      context: node
      sync:
        manual:
          - src: 'static-html/*.html'
            dest: static

파일 동기화 및 동기화 규칙 지정에 대한 자세한 내용은 파일 동기화에 대한 Skaffold 가이드를 참조하세요.

Kubernetes에서 개발할 때 새 기능 추가

파일 동기화 및 핫 리로드를 설정한 후 반복 주기를 시작하고 프로젝트에 더 많은 기능을 추가합니다. 배포를 중지 및 삭제하거나 이미지를 수동으로 빌드 및 태그 지정하거나 클러스터를 업데이트하지 않아도 변경사항이 Kubernetes 클러스터에 배포됩니다.

표준 반복 주기는 다음 단계와 유사합니다.

  1. 프로젝트를 변경합니다. 예를 들어 Cloud Code 자바 방명록 앱을 사용하는 경우 다음과 같이 FrontendController 클래스에 새 엔드포인트를 추가합니다.

    1. src/main/java/cloudcode/guestbook/frontend에서 FrontendController.java 파일을 열고 다음을 추가합니다.

      @RequestMapping("/greeting")
      @ResponseBody
      public String greeting(@RequestParam(value="name", defaultValue="World") String name) {
         return String.format("Hello from Kubernetes with IntelliJ, %s!", name);
      }
      
    2. 새 주석 RequestMappingResponseBody에 대한 필요한 가져오기를 포함합니다.

  2. 변경사항을 저장하거나(Ctrl/Cmd+S) 프로젝트를 빌드합니다.

    콘솔 창에서 진행 상황 및 배포 로그를 확인할 수 있습니다. 변경사항이 배포되면 업데이트를 확인합니다.

  3. 지속적 개발 세션을 종료하려면 중지 아이콘을 클릭합니다.

    Cloud Code는 개발 세션에 사용된 모든 Kubernetes 리소스를 삭제합니다.

Skaffold 구성을 사용하여 마이크로서비스 애플리케이션 개발

마이크로서비스 애플리케이션을 개발할 때 디버깅과 배포를 단순화하려면 별도의 섹션에서 독립적으로 작업하는 것이 유용할 수 있습니다.

애플리케이션을 Skaffold 모듈로 분할하여 애플리케이션 부분을 독립적으로 개발 및 디버깅할 수 있습니다. 예를 들어 Bank of Anthos 샘플은 10개의 마이크로서비스가 포함된 애플리케이션입니다. 샘플의 skaffold.yaml 파일은 이러한 서비스를 setup, db, frontend, backend, loadgenerator라는 5개의 skaffold 모듈로 그룹화합니다.

Skaffold 모듈 및 구성 종속 항목 정의

Skaffold 모듈 및 구성 종속 항목을 정의하려면 다음 안내를 따르세요.

  1. 모듈을 정의하려는 프로젝트를 엽니다.

  2. skaffold.yaml 파일을 엽니다.

  3. skaffold.yaml 파일에 여러 구성이 포함된 경우 구성을 Skaffold 모듈로 만들려면 다음 줄을 지정합니다.

    metadata:
      name: MODULE_NAME_1
    

    예를 들어 Bank of Anthos skaffold.yaml에서 db 모듈은 데이터베이스 배포를 정의합니다.

    apiVersion: skaffold/v3
    kind: Config
    metadata:
      name: db # module defining database deployments
    requires:
    - configs:
      - setup
    build:
      artifacts:
      - image: accounts-db
        context: src/accounts-db
      - image: ledger-db
        context: src/ledger-db
    manifests:
      rawYaml:
      - dev-kubernetes-manifests/accounts-db.yaml
      - dev-kubernetes-manifests/ledger-db.yaml
    deploy:
      kubectl: {}
  4. 현재 구성을 배포하기 전에 배포 중인 다른 구성에 의존하는 구성의 경우 구성을 종속 항목에 추가해야 합니다. 구성 종속 항목을 지정하려면 skaffold.yaml 파일의 requires 섹션에 configs 목록을 추가합니다.

    예를 들어 Bank of Anthos skaffold.yaml 파일에는 구성 종속 항목 setup이 포함되어 있습니다.

    종속 항목을 정의하려면 skaffold.yaml 파일에 다음을 추가합니다. 여기서 DEPENDENCY_NAME은 종속 항목의 이름입니다.

    requires:
        - configs: DEPENDENCY_NAME
    

    이러한 방식으로 나열된 구성은 같은 파일에 정의된 종속 항목 또는 현재 프로젝트의 다른 skaffold.yaml 파일을 참조할 수 있습니다.

  5. 각 Skaffold 모듈을 별도로 빌드하여 구성 종속 항목을 테스트하여 종속 항목이 특정 Skaffold 모듈 및 종속 항목 빌드의 단계에 따라 배포되도록 합니다.

특정 Skaffold 모듈 및 해당 종속 항목 빌드

모듈과 해당 종속 항목을 정의한 후 실행 > 구성 수정을 선택할 때 빌드/배포 탭에서 실행할 모듈을 지정할 수 있습니다.

  1. 최신 Insider 빌드를 설치합니다.

  2. 실행 > 구성 수정으로 이동하여 빌드/배포 탭을 엽니다.

  3. Skaffold 구성에서 skaffold.yaml을 선택합니다.

    다음 중 하나를 선택합니다.

    • 모든 모듈 및 종속 항목을 사용하여 빌드 및 배포
    • 빌드 및 배포(모듈을 사용할 수 있는 경우)를 선택한 다음 빌드하고 배포할 모듈을 선택합니다.

선택 사항은 이후 배포에서 유지됩니다. 모듈의 하위 집합을 선택하면 Cloud Code에서 전체 시스템이 아닌 모듈의 하위 집합 배포에 대한 경고가 표시됩니다.

Kubernetes에서 지속적 개발

원하는 옵션으로 실행 대상을 구성한 다음에는 애플리케이션의 정기 실행을 선택하거나 IDE에서 개발 반복 주기를 시작하여 소스 및 종속 항목의 변경사항을 운영 중인 애플리케이션에 전파할 수 있습니다.

Kubernetes에서 개발 실행 대상은 Kubernetes 클러스터에서 개발 주기를 시작합니다. 개발 주기를 시작하면 Cloud Code에서 Skaffold를 사용하여 프로젝트 이미지를 빌드한 다음 태그를 지정하고 구성된 저장소에 푸시한 후 kubectl을 사용하여 프로젝트 Kubernetes 매니페스트를 배포합니다.

  1. Kubernetes에서 개발 아이콘을 클릭한 다음 구성 수정을 클릭하여 실행/디버그 구성 대화상자를 엽니다.
  2. 사용 가능한 구성 옵션을 사용하여 배포를 맞춤설정합니다.
  3. 변경사항을 저장한 후 Cloud Code가 애플리케이션을 자동으로 다시 배포하도록 하려면 감시 모드 - 다시 빌드 및 재배포에서 파일 저장형을 선택합니다. 새 Kubernetes 애플리케이션에는 기본적으로 주문형이 선택되어 있습니다. 감시 모드에 대한 자세한 내용은 감시 모드를 참조하세요.
  4. 애플리케이션이 Skaffold 모듈을 사용하도록 구성된 경우 특정 모듈만 빌드하거나 배포하도록 선택할 수 있습니다.
  5. 구성에 만족하면 확인을 클릭한 후 실행 아이콘을 클릭합니다.

다음 단계

지원 받기

IntelliJ IDE에서 의견을 제출하거나 문제를 신고하려면 도구 > Cloud Code > 도움말 / 정보 > 의견 제출 또는 문제 신고로 이동하여 GitHub에 문제를 신고하거나 Stack Overflow에서 질문합니다.