Skip to content

[Preview] 컨테이너 생성에 역할을 붙여 프리뷰와 빌드를 가른다 [ #332 ] - #356

Merged
dldnsgkr merged 1 commit into
developfrom
unhak/preview-build-container-split
Sep 14, 2026
Merged

dldnsgkr merged 1 commit into
developfrom
unhak/preview-build-container-split

Conversation

@dldnsgkr

Copy link
Copy Markdown
Collaborator

#332 1단계. 이슈가 "이것부터" 라고 지목한 단계이고, 위험을 가장 크게 줄이는 한 걸음이다.

프리뷰 2곳과 빌드 4곳이 같은 생성 경로를 구분 없이 쓴다. 그래서 프리뷰 쪽 격리 정책을 손대면 배포 빌드까지 함께 흔들린다 — 바꿀 때마다 배포 파이프라인 전체를 재검증해야 한다는 뜻이고, 그래서 아무도 손대지 않게 된다.

가르고 나면 뒤따르는 작업(2·3단계: 워크스페이스 소유자를 node 로)이 빌드 경로를 한 줄도 건드리지 않는다.

역할 호출부
PREVIEW PreviewSessionService · ProjectPreviewService
BUILD NativeBuildService · DockerImageBuildService · WebImageBuildService · FrontendStaticHostingAdapter

기본값을 두지 않았다

새 호출부가 생기면 무엇인지 고르게 강제한다. 기본값이 있으면 고르지 않은 것과 고른 것이 구분되지 않고, 잘못 고른 쪽이 조용히 돈다 — 이 저장소에서 반복된 실패 형태다.

역할이 지금 실제로 가르는 것

빌드 컨테이너는 포트를 게시하지 않는다. 아무것도 서빙하지 않고 저장소를 받아 산출물만 꺼내고 버린다. getMappedPort 호출부를 전부 확인했더니 프리뷰 경로뿐이라, 지금까지 게시한 포트는 연결하는 쪽 없이 면만 늘리고 있었다.

qeploy.role 라벨이 붙어 운영자가 docker ps 에서 둘을 갈라 볼 수 있다.

격리 정책(cap-drop ALL·no-new-privileges·메모리·PID 상한)은 역할과 무관하게 그대로다 — 빌드도 사용자 저장소의 코드를 돌린다.

검증

  • 전체 1680건 통과
  • 계약 고정: 빌드는 포트 바인딩이 비어 있고 qeploy.role=build, 프리뷰는 루프백 포트가 있고 qeploy.role=preview, 격리 정책은 양쪽 동일

다음

2단계(워크스페이스를 처음부터 node 소유로) · 3단계(exec 기본 사용자 뒤집기)로 이어집니다. 3단계에서 템플릿 씨딩과 diff 기준 커밋도 root 필요 목록에 들어갑니다 — 이슈 본문 목록에 빠져 있어 그때 채우겠습니다.

🤖 Generated with Claude Code

https://claude.ai/code/session_013y8USoCXTsRTATAhy88M93

#332 1단계. 뒤따르는 격리 작업이 프리뷰만 골라 바꿀 수 있게 하는 준비다.

지금은 프리뷰 2곳과 빌드 4곳이 같은 생성 경로를 구분 없이 쓴다. 그래서 프리뷰 쪽
격리 정책을 손대면 배포 빌드까지 함께 흔들린다 — 바꿀 때마다 배포 파이프라인 전체를
다시 검증해야 한다는 뜻이고, 그래서 아무도 손대지 않게 된다. 역할을 갈라 두면 빌드
경로는 한 줄도 안 바뀌므로 재검증할 것이 없어진다.

기본값을 두지 않았다. 새 호출부가 생기면 무엇인지 고르게 강제한다 — 기본값이 있으면
고르지 않은 것과 고른 것이 구분되지 않고, 잘못 고른 쪽이 조용히 돈다.

역할이 지금 실제로 가르는 것:

- 빌드 컨테이너는 포트를 게시하지 않는다. 아무것도 서빙하지 않고 저장소를 받아 산출물만
  꺼내고 버린다. getMappedPort 호출부를 전부 확인했더니 프리뷰 경로뿐이라, 지금까지
  게시한 포트는 연결하는 쪽 없이 면만 늘리고 있었다
- qeploy.role 라벨이 붙는다. 운영자가 docker ps 에서 둘을 갈라 볼 수 있다

격리 정책(cap-drop·no-new-privileges·메모리·PID 상한)은 역할과 무관하게 그대로다 —
빌드도 사용자 저장소의 코드를 돌린다.

테스트 1680건 통과. 역할별 포트 게시 여부와 라벨을 계약으로 고정했다.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013y8USoCXTsRTATAhy88M93
@dldnsgkr
dldnsgkr merged commit 7bf1493 into develop Sep 14, 2026
1 check passed
@dldnsgkr
dldnsgkr deleted the unhak/preview-build-container-split branch September 14, 2026 10:51
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant