Files
llm-wiki/vault/20-evidence/official-docs/dx-devcontainer-spring-boot.md
T

11 KiB

title, source_type, url, archive_url, status, confidence, tags, related_projects, related_branches, created, last_reviewed
title source_type url archive_url status confidence tags related_projects related_branches created last_reviewed
Devcontainer spec — Spring Boot / Java 적용 official-doc https://containers.dev/implementors/spec/ raw high
developer-experience
devcontainer
vscode
codespaces
spring-boot
ca-skeleton
official-doc
ca-skeleton
feature-developer-experience-contract
feature-build-release-supply-chain-contract
feature-skeleton-package-blueprint-contract
2026-05-25 2026-05-27

Devcontainer spec — Spring Boot / Java 적용

Layer: raw/official-docs/ — Devcontainer 공식 spec + 관련 공식 문서 발췌. ca-tmpl 의 "bootstrap = ./gradlew bootstrap 5단계 + OS 매트릭스" 결정의 대안 (devcontainer default 채택) 을 평가하기 위한 1차 근거.

Parent / 활용 branch (필수)

Branch 이 자료가 정당화하는 결정
raw/branch-notes/feature-developer-experience-contract bootstrap 5단계 + OS 매트릭스 채택 — devcontainer 가 보장하는 것 (tool/runtime stack) 과 보장하지 않는 것 (단일 진입점 / smoke test / Flyway 순서) 의 분리 근거
raw/branch-notes/feature-build-release-supply-chain-contract JDK version pin 이 devcontainer image 와 supply chain reproducibility 사이에서 공유되는 위치 명시
raw/branch-notes/feature-skeleton-package-blueprint-contract Spring Initializr archetype 위에 ca-tmpl operational contract 가 얹히는 layering 위치

추가 foundational 인용:

컨텍스트

feature-developer-experience-contract 결정 "bootstrap = ./gradlew bootstrap 5단계 + OS 매트릭스 (Linux/macOS/WSL2)" 의 대안 평가를 위해 devcontainer 정의가 무엇을 보장하고 무엇을 보장하지 않는지 raw 로 확보. ca-tmpl 이 devcontainer 를 default 로 두지 않은 이유 ("IDE별 개인 설정" out-of-scope) 에 대한 근거 자료.

출처 / Source

핵심 인용 / Key quotes (verbatim)

[§Development Container Specification (containers.dev)] "A development container is a container in which a user can develop an application."

[§Development Container Specification (containers.dev)] "The purpose of the Development Container Specification is to provide a way to enrich containers with the content and metadata necessary to enable development inside them."

devcontainer.json (containers.dev)] "Products using it should expect to find a devcontainer.json file in one or more of the following locations: .devcontainer/devcontainer.json, .devcontainer.json, or .devcontainer/<folder>/devcontainer.json."

[§Metadata (containers.dev)] "A development container defines an environment in which you develop your application before you are ready to deploy."

[§Orchestration options (containers.dev)] "This specification leaves space for further development and implementation of other orchestrator mechanisms and file formats."

[§Developing inside a Container — VS Code docs] "The Visual Studio Code Dev Containers extension lets you use a container as a full-featured development environment."

[§Create a devcontainer.json file — VS Code docs] "A devcontainer.json file in your project tells VS Code how to access (or create) a development container with a well-defined tool and runtime stack."

[§Create a devcontainer.json file — VS Code docs] "The dev container configuration is either located under .devcontainer/devcontainer.json or stored as a .devcontainer.json file (note the dot-prefix) in the root of your project."

Claims Extracted / 추출된 주장

Claim ID Claim (이 자료가 직접 말하는 것) Evidence quote Strength Applies to Does not prove
DX-DC-C1 Development container 는 user 가 application 을 개발할 수 있는 container [§Development Container Specification] "A development container is a container in which a user can develop an application." official-standard dev container 일반 정의 application runtime container (production) 와 같다는 뜻 아님 — development 전용
DX-DC-C2 Development Container Specification 의 목적은 development 를 가능케 하는 content / metadata 로 container 를 enrich 하는 방법 제공 [§Development Container Specification] "The purpose of the Development Container Specification is to provide a way to enrich containers with the content and metadata necessary to enable development inside them." official-standard dev container 채택 환경 spec 이 build/release pipeline 까지 cover 한다는 뜻 아님 — development phase 한정
DX-DC-C3 devcontainer.json 파일은 다음 위치 중 하나에서 발견됨: .devcontainer/devcontainer.json, .devcontainer.json, .devcontainer/<folder>/devcontainer.json devcontainer.json] "Products using it should expect to find a devcontainer.json file in one or more of the following locations: .devcontainer/devcontainer.json, .devcontainer.json, or .devcontainer/<folder>/devcontainer.json." official-standard devcontainer 채택 프로젝트 layout 위 위치들이 동시에 존재할 때의 priority 는 본 인용 범위 밖
DX-DC-C4 VS Code Dev Containers extension 은 container 를 full-featured development environment 로 사용 가능케 함 [§Developing inside a Container — VS Code docs] "The Visual Studio Code Dev Containers extension lets you use a container as a full-featured development environment." official-vendor-doc VS Code 사용 환경 IntelliJ / Eclipse 등 다른 IDE 에서도 같은 보장이 있다는 뜻 아님 — VS Code 한정
DX-DC-C5 devcontainer.json 은 VS Code 에 well-defined tool / runtime stack 을 가진 development container 에 접근/생성하는 방법을 알려줌 [§Create a devcontainer.json file — VS Code docs] "A devcontainer.json file in your project tells VS Code how to access (or create) a development container with a well-defined tool and runtime stack." official-vendor-doc VS Code Dev Containers 통합 "tool / runtime stack" 이 build 시스템 / DB migration / smoke test 까지 자동 정의된다는 뜻 아님 — image 와 metadata 만
DX-DC-C6 spec 은 추가 orchestrator mechanism / file format 의 development / implementation 여지를 남겨둠 (현재 spec 이 모든 orchestrator 를 cover 하지 않음) [§Orchestration options] "This specification leaves space for further development and implementation of other orchestrator mechanisms and file formats." official-standard spec 의 현재 scope 한계 현재 spec 이 충분히 production-ready 가 아니라는 뜻 아님 — extensibility 명시

Usage Boundaries / 적용 경계

  • 이 자료가 직접 증명하는 것:
    • DX-DC-C1 ~ C3: devcontainer spec 의 정의, 목적, 파일 위치
    • DX-DC-C4 ~ C5: VS Code 통합 방식과 "tool / runtime stack" 정의 범위
    • DX-DC-C6: spec 의 orchestration extensibility 의도
  • 이 자료가 증명하지 않는 것:
    • devcontainer 가 ca-tmpl 의 "bootstrap 5단계" 를 대체할 수 있다는 주장 (spec 은 image 정의 + metadata 만 — 단일 진입점 / smoke test / Flyway migrate 순서는 별도)
    • GitHub Codespaces 와 VS Code Dev Containers extension 이 같은 devcontainer.json 으로 100% 호환된다는 사실 (Codespaces 공식 페이지 별도 fetch 필요 — 본 fetch 에는 Codespaces 인용 미포함)
    • Spring Initializr 가 devcontainer 또는 CI 설정을 생성하지 않는다는 사실 (Spring Initializr 공식 fetch 가 본 차수에 없음 — needs-confirmation)
    • Java/JDK image (devcontainers/images Java) 가 LTS 버전을 default 로 보장한다는 사실 (별도 fetch 필요)
    • IntelliJ 사용자에게 devcontainer 가 동등한 통합 경험을 준다는 사실
  • 내 프로젝트에 적용하려면 추가 확인이 필요한 것:
    • ca-tmpl 의 ./gradlew bootstrap 5단계가 devcontainer 내부에서도 별도로 정의되어야 하는 항목 목록
    • devcontainer features (e.g., ghcr.io/devcontainers/features/java) 가 ca-tmpl 의 JDK pin 정책과 충돌하지 않는지
    • Codespaces 사용 시 devcontainer.json + ca-tmpl bootstrap script 가 양립하는지의 실제 시연

메모 / Notes (내 프로젝트 해석)

본 섹션은 자료 직접 인용 아님. ca-tmpl 결정 컨텍스트 해석.

  • Devcontainer 가 해결하는 것 (DX-DC-C1, DX-DC-C2, DX-DC-C5 기반): tool version (JDK/Gradle), OS-level deps (libxml, locale), VSCode/Codespaces 통일.
  • Devcontainer 가 해결하지 않는 것 (spec scope 한계, DX-DC-C2 의 "development phase 한정"): 첫 ./gradlew bootstrap 단일 진입점, smoke test 정의, Flyway migrate 순서. 즉 ca-tmpl 의 5단계 bootstrap 은 devcontainer 안에서도 별도로 정의되어야 함.
  • 트레이드오프: devcontainer 를 강제하면 Codespaces/VSCode 사용자에게 마찰이 줄지만, IntelliJ + 로컬 JDK 사용자에게는 중복 환경이 됨 (DX-DC-C4 는 VS Code 한정). ca-tmpl 의 "IDE별 개인 설정 out-of-scope" 는 이 트레이드오프를 회피하는 명시적 선택.
  • Spring Initializr 는 archetype 시작점일 뿐, ca-tmpl 이 정의하는 operational contract (CI gate, supply chain, DX) 와는 분리됨 (단 본 fetch 에는 Spring Initializr 인용 미확보). raw 로 명시해 wiki/concepts 변환 시 "Initializr 가 충분하다" 는 오해 차단.