Files
llm-wiki/raw/official-docs/dx-devcontainer-spring-boot.md
T

114 lines
11 KiB
Markdown

---
title: Devcontainer spec — Spring Boot / Java 적용
source_type: official-doc
url: https://containers.dev/implementors/spec/
archive_url:
status: raw
confidence: high
tags: [developer-experience, devcontainer, vscode, codespaces, spring-boot, ca-skeleton, official-doc]
related_projects: [ca-skeleton]
related_branches: [feature-developer-experience-contract, feature-build-release-supply-chain-contract, feature-skeleton-package-blueprint-contract]
created: 2026-05-25
last_reviewed: 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 인용:
- [[raw/project-notes/ca-skeleton-operational-contract]] — DX 계약에서 "IDE별 개인 설정 out-of-scope" 가 devcontainer 의 보장 범위와 별도임을 명시하기 위한 근거
## 컨텍스트
`feature-developer-experience-contract` 결정 "bootstrap = `./gradlew bootstrap` 5단계 + OS 매트릭스 (Linux/macOS/WSL2)" 의 대안 평가를 위해 devcontainer 정의가 무엇을 보장하고 무엇을 보장하지 않는지 raw 로 확보. ca-tmpl 이 devcontainer 를 default 로 두지 않은 이유 ("IDE별 개인 설정" out-of-scope) 에 대한 근거 자료.
## 출처 / Source
- 원본 URL (primary): https://containers.dev/implementors/spec/
- 보조 URL:
- devcontainers/images (Java) — https://github.com/devcontainers/images/tree/main/src/java
- VS Code Dev Containers extension — https://code.visualstudio.com/docs/devcontainers/containers
- GitHub Codespaces overview — https://docs.github.com/en/codespaces/overview
- Spring Initializr — https://start.spring.io / docs https://docs.spring.io/initializr/docs/current/reference/html/
- 아카이브 URL: (미수집)
- 저자 / 조직: Microsoft / GitHub / containers.dev WG, Spring team
- 발행일: 공식 문서 (지속 갱신)
- 마지막 확인일: 2026-05-27
## 핵심 인용 / 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 가 충분하다" 는 오해 차단.
## Related / 관련
- 같은 주제 다른 official-doc:
- [[raw/official-docs/dx-mise-asdf-tool-versioning]] — JDK / tool version 핀 (devcontainer image 와 분리된 layer)
- 인용하는 branch:
- [[raw/branch-notes/feature-developer-experience-contract]] — bootstrap 5단계 + OS 매트릭스 + JDK 핀
- [[raw/branch-notes/feature-build-release-supply-chain-contract]] — JDK version pin via reproducibility
- [[raw/branch-notes/feature-skeleton-package-blueprint-contract]] — Spring Initializr archetype layering
- canonical contract 섹션:
- [[raw/project-notes/ca-skeleton-operational-contract]] (DX 계약 섹션)
- 인용하는 wiki: (미작성)