DevOps 엔지니어에게 Claude Code는 가치가 있을까?

채널 아이콘
Mischa van den Burg 구독자 47,500명

요약

Anthropic의 CLI 기반 agentic coding 도구 Claude Code를 이용해 DevOps 프로젝트에서 반복적인 코드 작업을 자동화하고 최적화하는 과정을 보여준다. Neoim과 dev container 환경에 Claude Code를 설치·인증하고 claude init을 통해 스타일 가이드와 프로젝트 관례를 자동 설정한다. Dockerfile 경로 수정, non-root 사용자 전환, multi-stage 빌드 최적화, Git 작업 자동화, Kubernetes manifest 수정 등 다양한 시나리오로 활용성을 검증한다. 최종적으로 CLI 환경에서 LLM 기반 코드 자동화가 가져다주는 효율성과 비용($1 세션)을 평가하며, DevOps 워크플로우에 적합한 가치를 제시한다.

주요 키워드

Claude Code CLI Dev containers Agentic coding Dockerfile Non-root user Multi-stage build pyproject.toml Conventional Commits Kubernetes manifest

하이라이트

  • 🔑 Claude Code는 Anthropic의 CLI 기반 agentic coding 도구로 CLI 워크플로우에 자연스럽게 통합된다.
  • 🚀 Dev containers 환경에서도 브라우저 없이 CLI로 애플리케이션 인증 및 API 키 발급을 지원한다.
  • 📌 claude init 명령어로 코드와 README를 분석해 PEP8 스타일 가이드와 Conventional Commits 규칙을 자동 설정한다.
  • ⚙️ Dockerfile 경로 수정, Python:3.13-alpine 베이스 이미지 적용, non-root 사용자 전환 과정을 prompt로 자동화한다.
  • 🌟 Git add·commit·push 등 Git 작업을 한 줄 메시지 형식으로 CLI에서 즉시 수행해 생산성을 높인다.
  • 🛠️ Multi-stage build를 추가해 Docker 이미지를 경량화하고, 반복 작업 없이 최적화된 빌드 프로세스를 완성한다.
  • 📦 pyproject.toml 기반의 UV(의존성 관리)로 마이그레이션해 Dockerfile과 문서를 최신화한다.
  • 📌 Kubernetes deployment YAML을 glob 탐색해 securityContext를 추가, runAsUser·runAsGroup 설정으로 non-root 보안 실행을 보장한다.
  • 🧮 이 세션 비용은 약 $1로, 소규모 프로젝트에서는 충분한 가치가 있지만 대형 프로젝트에서는 비용 상승을 고려해야 한다.
  • 🌐 CLI 환경에서 agentic coding 도구와 Dev containers를 결합해 완전한 개발 워크플로우를 경험할 수 있다.

용어 설명

Claude Code

Anthropic에서 제공하는 CLI 기반 agentic coding 도구로, 대화형 LLM을 통해 코드 작업을 자동화한다.

CLI(command-line interface)

명령어 입력으로 프로그램을 제어하는 인터페이스 방식이다.

Dev containers

개발 환경을 표준화하기 위해 컨테이너화된 VS Code 등에서 사용하는 컨테이너 기반 개발 환경이다.

Agentic coding

LLM이 지시사항을 이해·실행하며 코드를 작성·편집해주는 자동화 방식이다.

pyproject.toml

Python 패키지 메타데이터와 의존성을 선언·관리하는 표준 설정 파일이다.

Multi-stage build

Docker에서 여러 단계로 빌드해 불필요한 파일을 제거하고 이미지 크기를 줄이는 기술이다.

Conventional Commits

commit 메시지의 일관성과 자동화 도구 호환성을 높이기 위해 정해진 형식으로 작성하는 규칙이다.

Kubernetes manifest

쿠버네티스 리소스(Deployment, Service 등)를 정의하는 YAML 설정 파일이다.

PEP 8

Python의 공식 스타일 가이드로, 코드 가독성과 일관성을 확보하기 위한 규칙이다.

[00:00:00] 도입 및 툴 개요

Anthropic의 CLI 기반 agentic coding 도구 Claude Code를 소개하고, DevOps 엔지니어에게 어떤 가치를 제공할지 영상의 목적과 실험 방향을 설명한다.

Anthropic의 Claude Code는 CLI 도구로, 에이전트 코딩을 위한 도구입니다. 이 영상에서는 DevOps 프로젝트에서 이 도구의 유용성을 테스트해볼 예정입니다.
CLI 기반 도구인 Claude Code는 Neovim과 같은 CLI 환경에서 작업하는 사용자에게 매력적입니다. npm으로 설치할 수 있으며 dev container 내에서도 사용 가능합니다.
발표자는 거의 전적으로 dev container 환경에서 작업하며, 이번에 테스트할 프로젝트는 Shelly 센서에서 침실 온도 데이터를 읽는 프로젝트입니다.
[00:00:45] 프로젝트 구성 설명

Shelly 온습도 센서가 MQTT로 데이터를 전송하면 Python 컨테이너가 이를 읽어 Postgres에 저장하고 Grafana 대시보드에서 시각화하는 홈랩 프로젝트 구조를 설명한다.

이 프로젝트는 Shelly 센서가 MQTT로 데이터를 보내면 Python 컨테이너가 이를 읽어 PostgreSQL에 저장하고, Grafana 대시보드에서 90일간의 온습도 데이터를 볼 수 있게 합니다.
[00:01:22] 문제 정의: root 실행

현재 Dockerfile이 루트 유저로 실행되어 보안상 취약점을 안고 있으며, non-root 사용자로 전환해야 할 필요성을 제기한다.

현재 이 프로젝트는 Kubernetes 홈랩에서 루트 사용자로 실행되고 있어 보안 문제가 있습니다. 이 문제를 Claude Code를 사용해 해결해보려고 합니다.
발표자는 먼저 devpod up 명령으로 dev container를 빌드하고, 모든 필요한 도구와 설정을 자동으로 구성합니다.
[00:01:54] Dev container 준비

devpod up 명령으로 개발 컨테이너를 생성하고 npm, dotfiles, Neoim 등을 설정해 일관된 CLI 기반 개발 환경을 자동화한다.

개발 환경이 완전히 설정되면 Python 개발을 위한 도구들이 설치되며, 격리된 별도의 개발 환경이 PC에서 실행됩니다.
Neovim과 Python 패키지를 설치하면 개발 준비가 완료됩니다. 이 워크플로우는 모든 개발 환경을 자동으로 구성해 효율적인 작업을 가능하게 합니다.
커뮤니티 소개와 Claude Code 설치 안내. 화자는 school.com/cubecraft에서 제공하는 코스를 언급하며 Claude Code를 설치하는 과정을 시작합니다.
[00:03:54] Claude Code 설치 및 인증

npm install로 Claude Code를 설치하고, 브라우저 없는 환경에서 제공되는 링크를 통해 Anthropic 계정 인증과 API 키 발급 과정을 수행한다.

Claude Code 설치 과정. npm을 사용해 설치하며, 브라우저가 없는 개발 컨테이너에서도 인증이 가능하다는 점을 강조합니다.
Claude 실행 및 설정. 'run claude' 명령을 실행하고 light 텍스트 옵션을 선택한 후 Anthropic 계정에 로그인하는 과정을 보여줍니다.
로그인 과정. 개발 컨테이너에 브라우저가 없어 제공된 링크를 통해 인증 코드를 복사하여 API 키를 생성하는 과정을 설명합니다.
Claude Code 인터페이스 소개. Claude.md 파일 생성을 위한 init 명령어와 help 명령어의 용도를 설명합니다.
[00:05:17] claude init로 프로젝트 분석

claude init 명령으로 claude.md 파일을 생성해 코드를 분석하고, PEP8, UV 남은 부분 분석, Conventional Commits 등 프로젝트 가이드라인을 자동 제안받는다.

프로젝트 분석 과정. Claude Code가 코드와 README를 분석하여 프로젝트 규칙과 스타일 가이드를 감지하는 과정을 보여줍니다.
컨벤셔널 커밋 추가. 모든 커밋 메시지에 컨벤셔널 커밋을 사용하도록 claude.md 파일에 추가하는 과정을 설명합니다.
개발 컨테이너 내 실행 확인 및 프롬프트 시도. Claude Code가 개발 컨테이너 내에서 잘 작동함을 확인하고, 프로젝트 레이아웃 변경에 따른 Docker 파일 업데이트를 요청하는 프롬프트 소개.
[00:06:50] 첫 번째 Dockerfile 수정

경로(path) 수정, Python:3.13-alpine 베이스 이미지 적용, non-root 사용자 및 권한 변경을 prompt로 요청해 Dockerfile을 자동 업데이트한다.

프로젝트 구조를 변경하면서 발생한 Docker 파일 경로 문제를 Claude AI에게 수정 요청했습니다. 기존에 src 디렉토리에 있던 main.py 파일을 평면 구조로 변경했고, Claude가 성공적으로 Docker 파일을 업데이트했습니다.
Claude AI를 사용해 Git 작업을 자동화해 보았습니다. 'git add' 명령과 함께 커밋 메시지 스타일을 조정했으며, 긴 메시지 대신 기존 프로젝트에서 사용하던 한 줄짜리 간결한 커밋 메시지 형식으로 변경했습니다.
[00:08:29] Git 작업 자동화

Claude Code로 git add, git commit -m 한 줄 메시지, git push 등 반복적인 Git 작업을 CLI에서 자동으로 수행해 효율성을 높인다.

Docker 컨테이너 보안 개선을 위해 루트가 아닌 사용자로 실행되도록 변경하고, Alpine 3.13 이미지를 사용하도록 요청했습니다. Claude가 Python 3.13 Alpine 이미지로 변경하고 비루트 사용자를 생성하는 코드를 추가했습니다.
[00:09:30] 멀티 스테이지 빌드 최적화

Dockerfile에 build와 final 단계로 구성된 multi-stage build를 추가해 이미지 사이즈를 최소화하고, prompt를 통해 반복적으로 빌드 최적화를 진행한다.

쿠버네티스 매니페스트와 호환되도록 사용자와 그룹 ID를 1000:1000으로 설정해달라고 추가 요청했습니다. Claude가 이 요청을 반영하여 Docker 파일을 업데이트했습니다.
Docker 파일을 최적화하여 이미지 크기를 최소화하도록 요청했습니다. Claude는 작업 디렉토리를 설정했지만 멀티스테이지 빌드는 적용하지 않았습니다.
Docker 멀티스테이지 빌드에 대해 논의하며, 새로 생성된 Dockerfile을 검토합니다. 빌드 스테이지에서 requirements.txt를 복사하고 최종 스테이지로 이어지는 구조를 확인합니다.
생성된 Docker 파일을 수락하고 실제 빌드 테스트를 진행합니다. 데이터베이스 연결 실패 오류가 발생했지만, 의존성과 패키지는 제대로 설치되어 Python 프로그램이 올바르게 실행되는 것을 확인했습니다.
프로젝트를 Poetry에서 UV로 마이그레이션했음을 설명하고, requirements.txt 대신 pyproject.toml을 사용하는 새로운 방식으로 변경했습니다. 이에 맞게 Dockerfile을 업데이트할 필요성을 언급합니다.
UV가 상대적으로 새로운 기술이므로 Docker 컨테이너에서 UV를 사용하는 방법에 대한 문서를 추가하기로 결정합니다. 변경사항을 커밋하고 docs 디렉토리를 생성합니다.
[00:14:40] Kubernetes manifest 업데이트

전체 리포지토리를 glob 탐색해 deployment YAML 파일을 찾아 securityContext를 추가하고 runAsUser·runAsGroup 설정, 권한 드롭 등 보안 실행을 강화한다.

uvd.md 파일을 생성하고 문서 내용을 추가한 후, UV를 Docker 컨테이너에서 사용하는 방법에 대한 지침을 프롬프트에 포함시켰습니다. 이는 인터넷에 접근할 수 없는 LLM에게는 어려운 과제가 될 수 있습니다.
Dockerfile을 확인해보니 UV Python 이미지를 사용하고, pi project.toml과 UV lock 파일을 복사한 다음, UV frozen으로 의존성을 설치하여 재현성을 보장하고 있습니다.
Dockerfile에 문제가 발견되어 수정했습니다. SRC 디렉토리 도입이 불필요했고, UV sync가 두 번 실행되는 문제가 있었습니다. 수정 후 git add 및 commit을 진행했습니다.
[00:18:00] 검증 및 비용 평가

GitHub Actions로 이미지 자동 빌드와 배포를 확인하고, K9s에서 non-root 사용자(app user:1000)로 정상 실행됨을 검증한다. 최종 세션 비용 약 $1을 평가하며 도구의 효용성을 결론지었다.

Docker 빌드를 실행해 애플리케이션이 제대로 빌드되는지 테스트했습니다. 모든 의존성이 올바르게 설치되어 성공적으로 실행되었습니다.
쿠버네티스 매니페스트 업데이트를 테스트하기 위해 홈랩 저장소에서 Shelly 배포 파일을 가져와 docs/example_deployment.yml로 추가했습니다. 사용자 1000으로 실행되도록 업데이트 요청을 했습니다.
YAML 파일 보안 설정을 비루트 사용자로 실행되도록 변경하고, 이것이 자동으로 YAML 파일을 찾아 보안 컨텍스트를 설정하고 권한 제한을 추가하는 것을 확인했습니다.
변경된 코드를 GitHub에 푸시하고 GitHub Actions가 새 컨테이너 이미지를 자동으로 빌드하는 과정을 시작했습니다.
GitHub Actions가 성공적으로 실행되어 새 태그(030)가 생성되었고, 이 태그로 deployment.yaml을 업데이트했습니다.
변경사항을 홈랩 저장소에 푸시하고 GitOps 컨트롤러를 통해 새로운 배포를 진행했습니다. K9s로 확인한 결과 Shelly API가 성공적으로 실행 중이었습니다.
컨테이너 쉘에 접속해 확인한 결과, 비루트 사용자(1000:1000)로 실행 중이며 apt-key add와 같은 루트 권한 명령이 차단되는 것을 확인했습니다.
이 과정에 대한 만족감을 표현하며, Claude Code와 개발 컨테이너를 결합한 워크플로가 CLI에서 에이전트 코딩의 장점을 활용할 수 있는 강력한 조합이라고 평가했습니다.
Claude Code의 비용을 확인한 결과, 작은 프로젝트에서는 약 1달러가 소요되었고, 이는 직접 API를 사용하는 것보다는 비싸지만 얻은 가치에 비해 합리적이라고 판단했습니다.
Anthropic에서 Claude Code를 출시했는데
이것은 에이전트 코딩을 위해 사용할 수 있는 CLI 도구입니다
이 영상에서는 DevOps 프로젝트에
이 도구를 사용해보면서 DevOps 엔지니어에게
얼마나 유용한지 확인해보겠습니다
Claude Code는 CLI 도구인데, 이것이 제가 매우 좋아하는 이유입니다
저에게 매력적인 이유는 제가 모든 작업을
Neovim에서 CLI를 통해 하기 때문이죠
그 워크플로우에서 사용할 수 있는 도구가 있다면
정말 좋을 것 같습니다
npm install로 설치하며
좋은 점은 이를 dev container에서도 사용할 수 있다는 것입니다
아시다시피 저는 요즘
거의 전적으로 dev container 내에서 작업하고 있기 때문이죠
저는 거의 전적으로 dev container 안에서
작업하고 있습니다. 여기 준비한 프로젝트가 있는데
이건 얼마 전에 만든 프로젝트입니다
이 프로젝트는 Shelly 센서에서 데이터를 읽고
제 침실 온도를 측정합니다
Shelly 센서는 MQTT 메시지 큐로 데이터를 보내고
제 Kubernetes 홈랩에서 실행 중인 Python 컨테이너가
그 큐를 읽어서
PostgreSQL 데이터베이스에 저장합니다
그리고 제 Grafana 대시보드에서
그 데이터를 읽을 수 있죠
예를 들어 지난 90일 동안의 침실 온도와
습도를 전체적으로 확인할 수 있습니다
습도를 전체적으로 확인할 수 있습니다
이게 이 프로젝트의 기능입니다
그런데 부끄럽게도 이 프로젝트는
제 Kubernetes 홈랩에서 루트 사용자로 실행되고 있습니다
루트 컨테이너로 실행 중이죠
이 문제를 해결해야 합니다
제가 직접 작성했지만 당시에는 시간이 없었습니다
지금 Dockerfile은 이렇게 생겼는데
루트 사용자로 실행되고 있습니다. 좋지 않죠
이것이 Claude Code에게 좋은 도전이 될 것 같습니다
먼저 dev container를 빌드해보겠습니다
devpod up. Recreate 명령어를 실행합니다
이렇게 하면 제 dev container.json을 확인하고
필요한 모든 것을 설치합니다
이 특정 프로젝트에 필요한 모든 것을 설치하고 있습니다
이제 모든 dot 파일을 클론하고
제가 원하는 대로 정확히 설치할 것입니다
저는 이를 위해 Zsh와 mise를 사용하고 있습니다
mise가 fzf, ripgrep, neovim 등을 설치하는 것을 볼 수 있죠
기본적으로 제 개발 환경을
제가 원하는 대로 정확히 설정할 것입니다
이제 devpod SSH를 실행하고
Shelly를 검색하면, 제 환경이
완전히 구성되어 있습니다
이 실험적 설정을 true로 허용하겠습니다
이제 개발할 준비가 되었습니다
Neovim을 열면 모든 설정이 포함된 Neovim이 설치됩니다
모든 것이 설정되면 완전히 격리된 별도의 환경이
제 PC에서 실행됩니다
이제 설정이 완료되었으니 Python extra를 추가하겠습니다
이제 Python이 활성화되었습니다
main.py 파일을 열면
Python 개발에 필요한 모든 패키지가 설치됩니다
이제 개발할 준비가 완료되었습니다
이 모든 것이 마법처럼 보이거나
제 dev container 워크플로우에 관심이 있으시다면
Neovim이 모든 설정과 함께 설치됩니다
모든 설정이 완료되면
완전히 격리된 별도의 환경이
제 PC에서 실행됩니다
이제 완료되었으니 Python extra를 추가하겠습니다
이렇게요. 이제 Python이 활성화되었습니다
이제 main.py 파일을 열면
Python 개발에 필요한 모든 패키지가 설치됩니다
이제 개발할 준비가 완료되었습니다
이 모든 것이 마법처럼 보이거나
제 dev container 워크플로우에 관심이 있으시다면
관심이 있으시다면
이제 개발할 준비가 완료되었습니다
이 모든 것이 마법처럼 보이거나
제 dev container 워크플로우에 관심이 있으시다면
제 커뮤니티를 확인해보세요
school.com/cubecraft에서 확인하실 수 있습니다.
이번 달에 출시된 전체 코스가 있는데,
이 설정 방법을 가르쳐 드립니다.
이제 Claude Code를 설치해 보겠습니다.
여기 문서로 들어가서
npm을 사용해서 Claude Code를
설치할 겁니다.
저희는 npm을 사용해서
Claude Code를 설치할 거예요. 흥미로운 점은
브라우저가 없어도 실제로
인증이 가능하다는 겁니다.
그럼 가이드를 따라가 봅시다.
시작하려면 Claude를 실행하세요.
할 일은 기본적으로 Claude를 실행하는 것입니다.
run claude를 실행하면 됩니다.
이제 몇 가지 설정 옵션을 물어볼 겁니다.
light 텍스트를 선택합니다.
이제 Anthropic 콘솔 계정에
로그인하라고 요청합니다.
그렇게 해봅시다. 제 개발 컨테이너는
브라우저가 없기 때문에
링크를 제공해줍니다.
그 링크를 따라가보겠습니다.
이제 인증을 요청합니다.
저는 이미 Anthropic 계정에 로그인되어 있고
이 코드를 복사해서 붙여넣으면
API 키를 생성합니다.
이제 프로젝트가 설정되었습니다.
이게 기본적인 Claude Code와
우리가 보게 될 인터페이스입니다.
도움말을 보려면 help 명령어를 실행하거나
init 명령어를 실행해서 Claude에 대한
지침이 있는, claude.md 파일을 생성할 수 있습니다.
먼저 그렇게 해보겠습니다.
그렇게 하면
기본적으로 제 작은 프로젝트를
분석하게 됩니다.
필요한 것이 있는지 확인하고
제가 사용하는 규칙이 있는지 확인합니다.
코드뿐만 아니라 리드미를 기반으로
이것을 분석합니다. 좋습니다.
이제 claude.md 파일이 생성되었습니다.
mi가 설치된 도커 컨테이너를 실행하는 방법에 대한
지침이 있네요. 흥미롭습니다.
우리가 사용하고 있는 것을 감지했군요.
UV 패키지 관리자를
감지했네요. 좋아요.
여기 감지한 코드 스타일 가이드라인이 있습니다.
PEP 8 스타일 가이드를 따르라고 하네요. 흥미롭습니다.
여기에 프로젝트 지침을 추가했네요.
그리고 저는 모든 커밋에 컨벤셔널 커밋을
사용하는 것을 좋아합니다.
Claude Code가 git 커밋을 할 수 있다는 걸 알고 있으니
claude.md에 추가해봅시다.
이 저장소에서
컨벤셔널 커밋을 사용한다고 추가합니다.
이전 커밋을 확인해보세요.
이제 커밋 이력을 보고 있습니다.
그리고 이제 '모든 커밋 메시지에 컨벤셔널 커밋을 사용하세요'라고
추가하고 있습니다.
claude.md에 이 수정을 하시겠습니까?
네, 하겠습니다.
감사합니다.
네를 눌렀습니다.
이제 컨벤셔널 커밋 섹션에 이것이 추가되었습니다.
좋습니다. 여기까지 잘 진행되고 있습니다.
Claude Code가 실행 중이고 변경할 수 있으며
모두 제 개발 컨테이너 내부에서 실행되고 있습니다.
이것은 매우 중요한 점입니다.
여기서 시도해보고 싶은 몇 가지 프롬프트가 있습니다.
첫 번째는 이 프로젝트의 레이아웃이 변경되었으니
Docker 파일을 올바른 경로로 업데이트하세요.
이전에는 main.py 파일이
src 디렉토리에 있었습니다.
그리고 이것을 uv로 옮기면서
그리고 제가 uv로 파일을 옮기면서
이것을 프로젝트 이름으로 변경하기로 했어요
이 경우에는 평면 구조를 사용했고
그래서 클로드가 이걸 고칠 수 있는지 확인해 보려고 합니다
이것을 붙여넣어 보겠습니다
아, 이게 아니고 이걸 복사해서
여기 제 프롬프트에 붙여넣겠습니다. '도커 파일을 올바른 경로로 업데이트하세요'
이제 어떻게 처리하는지 봅시다
자, 여기 있네요. 애플리케이션 디렉토리 내용을
컨테이너의 app 위치로 복사합니다
네, 그 수정이 이루어졌네요
이제 클로드가 git 명령어도 도울 수 있는지 확인해 봅시다
여기 이 가이드에 몇 가지 일반적인 작업이 있어요
보시다시피 코드에 대해 질문할 수 있습니다
이게 흥미롭네요, 레이어 캐싱이 어떻게 작동하는지 설명해 주는 것도 있고
git 작업을 자동화할 수도 있어요
변경사항 커밋하기, PR 생성하기와 같은 것들이요
작년 12월에 마크다운 테스트를 추가한 커밋도 있네요
정말 흥미롭습니다
그럼 '변경사항 커밋하기'를 해봅시다
자, 여기 있습니다. git add 명령어군요
git add 명령어는 괜찮네요
이제 봅시다
git commit -m
docs: cloud.md 추가 및 Docker 파일 경로 수정
음, 이건 꽤 긴 커밋 메시지네요
이렇게 긴 커밋 메시지가 좋은 관행인가요?
저는 한 줄짜리에 익숙해서요
이런 건 차라리 PR에 넣는 게 낫겠어요
그래서 클로드에게 말해봅시다
'아니요, 프로젝트 초기에 했던 것처럼
한 줄짜리 커밋 메시지를 사용해주세요'
그래서 이렇게 나왔네요
'docs: cloud.md 추가 및 Docker 파일 경로 수정'
좋습니다. 진행할까요? 네
좋습니다. 이제 git 작업을 자동화했네요
CLI에서 모두 편리하게 할 수 있어요
다음으로 제가 생각한 프롬프트는 '현재 컨테이너가 루트로 실행 중입니다. 루트가 아닌 사용자로 실행하도록 업데이트하고,
Alpine 3.13 이미지를 사용하세요'
이 프롬프트로 프로젝트를 제공해 보겠습니다
여기에 약간의 함정이 있어요
Python 3.13 Alpine 이미지를 사용하라고 명시하지 않았거든요
제대로 처리하는지 확인해 봅시다
Docker 파일을 읽고 있네요
자, 여기 있습니다. Python 3.13 Alpine으로 변경했어요
좋네요. 루트가 아닌 사용자를 생성합니다
애플리케이션 파일의 소유권을 변경하고 루트가 아닌 사용자로 전환합니다
좋습니다. 사실 제 프롬프트에 약간 실수가 있었어요
그래서 프롬프트를 다시 수정해 보겠습니다
3을 누르고 '이거 좋아 보입니다. 한 가지만 더 변경하겠습니다'
'사용자와 그룹 ID를 사용하고 싶습니다'
1000:1000을 제 쿠버네티스 매니페스트에 넣고 싶어요
이제 명령어가 그룹 ID와 이름으로 변경되었네요
이렇게요. 좋습니다. 이제 작동해야 합니다
그러면 이걸 추가합시다. 좋아 보이네요
이제 Docker 파일 최적화도 해보겠습니다
가능한 한 작게 만들어 보려고요
이렇게요. 자, 어떻게 처리했는지 봅시다
이제 작업 디렉토리를 설정했고
멀티스테이지 빌드를 사용하지는 않네요
흠, 제 프롬프트에 실수가 있었나 봅니다
프롬프트를 다시 개선해 봅시다
3을 누르고 다시 말해보겠습니다
이 내용이 좋아 보입니다. 한 가지만 더 변경할게요
사용자와 그룹 ID를
1000:1000으로 쿠버네티스
매니페스트에 사용하고 싶습니다
좋습니다. 이제 명령어가 그룹 ID와
이름을 이렇게 변경했네요. 이제 작동할 겁니다
그럼 이걸 추가합시다. 좋아 보이네요
그리고 이제 Docker 파일을 최적화해서
가능한 한 작게 만들어 보겠습니다
이렇게요. 자, 어떻게 처리했는지 봅시다
이제 작업 디렉토리를 설정했고
멀티스테이지 빌드를 사용하지는 않네요
흠, 뭔가 잘못된 것 같습니다
이제 작업 디렉토리를
설정했네요. 멀티스테이지 빌드는 사용하지 않고 있어요
이 시점에서는
작업 디렉토리를 설정했네요
빌드 단계에서요.
네.
좋아요. 음... 제가 생각했던 건
멀티스테이지 방향으로 생각하고 있었는데요.
멀티스테이지
빌드로요. 어떻게 작성하는지 봅시다.
여기 있네요. 이게 더 나아 보이네요. 이제
빌드
스테이지가 있고, requirements.txt를 복사하고
디렉토리를 복사하고
그 다음 최종 스테이지가 있네요.
좋아요. 이제 멀티스테이지
빌드가 있습니다.
좋습니다. 이걸 수락하고
이제 이것이 실제로 제대로 빌드되는지 확인해 봅시다.
이제 제 프로젝트로 다시 가볼게요.
제가 DB가 있는 Docker Compose 파일이 있는데
현재 그 포트들이 사용 중이라
그걸 변경하는 것은 신경 쓰지 않을 거예요.
그냥 이게 실제로 작동하는지 테스트할 겁니다.
그리고 환경 파일도 필요할 거예요.
이런 식으로 빌드를 해볼게요.
Docker compose build로 실행해서
이미지가 제대로 빌드되는지 확인해 봅시다.
좋아요, 훌륭합니다.
에러가 있긴 하지만 이건 사실
데이터베이스에 연결할 수 없어서 발생한 오류예요.
Python 명령어를 실행할 때
실제로 모든 의존성과 필요한 패키지를
가져올 수 있었습니다.
그래서 Python 프로그램이 실제로 올바르게 실행되고 있어요.
보시다시피 로깅까지 하고 있고
Postgres 연결을 생성하는 시점에서
실패했습니다.
빌드는 제대로 작동합니다.
마지막으로 제가 약간의 변경을 했는데요.
이 프로젝트는 이전에
poetry를 사용했었고 지금은
UV로 마이그레이션했습니다.
구조가 약간 변경되었는데
이전에는 requirements.txt를 사용했었고
이제 UV로 마이그레이션했습니다.
구조가
조금 바뀌었어요. 이전에는
requirements.txt를 사용했는데
requirements.t
제 조사에 따르면 그건 이제 구식 방법이 되었고
이제 UV가 등장하면서
더 깔끔한 방법이 생겼어요
그냥 pyproject.toml을 사용하는 거죠.
다음으로 클로드 코드에게 줄 프롬프트는
"이 프로젝트는 이전에 requirements.txt를 사용했었는데
프로젝트를 uv로 마이그레이션했으니
docker 파일을 업데이트해서
uv와 pyproject.toml을 사용하도록 해주세요"입니다.
이렇게 내용이 있지만
이게 상대적으로 새로운 기술이기 때문에
문서도 같이 제공할 것 같아요.
Docker 컨테이너에서 UV를 사용하는 방법에 대한
모든 문서를 복사할 겁니다.
이렇게요.
그리고 클로드
MD... docs
디렉토리를 추가할게요.
아, 그 전에 변경사항을 커밋해야겠네요.
변경사항을 커밋합니다.
흥미롭네요. docker-compose를 변경한 것을
감지했네요. 이 편집을 하시겠습니까?
아니요, 아니요. docker-compose는
지금은 무시하세요.
좋아요, 이제 Docker 파일을 커밋하고 있습니다.
수정사항을 반영하시겠습니까?
아니요.
지금은 Docker compose를 무시해주세요.
좋아요. 이제 Docker 파일을 커밋하고 있네요.
Docker 파일
업데이트가 완료됐습니다. 이제
docs 디렉토리를 만들겠습니다. 그리고 docs
디렉토리 안에,
docs에,
파일을 생성하겠습니다.
uvd를 만들고 거기에 이 모든 내용을 붙여넣겠습니다.
기술적으로는 마크다운이 아니지만, 한번 보죠.
그리고 이제 이것을 프롬프트에도 추가하겠습니다.
docs/uvd.md에 지침을 추가했습니다.
이 디렉토리에 최신 UV 문서를
추가했고 Docker 컨테이너에서 UV를 사용하는 방법에 대한
지침도 있습니다.
이제 이것이 어떻게 작동할지 살펴보겠습니다.
Docker 컨테이너에서요.
이게 어떻게 진행될지 봅시다.
인터넷에 접근할 수 없는 LLM에게는
꽤 어려운 과제라고 생각합니다.
자, 한번 확인해 봅시다.
좋아요, 확인해 보죠.
이제 UV Python 이미지를
사용하게 되었네요. 그래서 UV가 이미 있을 겁니다.
그런 다음 pi project.toml과 UV lock을 복사하고
UV frozen으로 의존성을 설치해서
재현성을 보장합니다.
좋아 보이네요.
재현성을 보장하기 위해 UV frozen으로 의존성을 설치합니다.
괜찮아 보이네요.
아, 이건 좋지 않네요.
이걸 다시 SRC로 바꿨어요. 왜 그런 거죠?
실제로 이걸 두 번 추가하고 있네요. 그건 좋지 않습니다.
음, 좋지 않네요.
알겠습니다. 몇 가지 문제가 있네요.
왜 SRC 디렉토리를 도입하는 거죠? 그러지 마세요.
단순하게 유지하세요.
이제 훨씬 나아 보이네요.
이미지를 가져와서 PI 프로젝트를 복사한 다음
의존성을 설치하고 있습니다.
그런데 이걸 두 번 실행하고 있어요.
왜 그러는지 알아봅시다.
왜 그런지 확인해 보죠.
왜 UV sync를
두 번 실행하고 있나요?
좋아요, 이제 UV sync를 한 번만 실행하네요.
그래서 좋습니다. 그리고 여기에 이걸 추가하고 있어요.
일단 이걸 받아들이겠습니다.
이제 이걸 바로 커밋하라고 요청하네요.
흥미롭네요.
git add는 더 이상 확인이 필요하지 않을 것입니다.
물어볼 필요가 없어요. 이제 git commit을 실행할 거고
그걸 진행하겠습니다.
이제 애플리케이션을 테스트해 봅시다.
docker build를 다시 실행해서
애플리케이션이 실제로 빌드되는지 확인해 보겠습니다.
제대로 실행되는지 보겠습니다.
자, 이제 애플리케이션을 테스트해 봅시다.
docker build를 다시 실행해서
애플리케이션이 실제로 빌드되는지 볼게요.
됐네요! 실제로 실행됐습니다.
모든 의존성을
올바르게 설치했군요.
여기에 의존성이 없었다면
실행되지 않고 의존성을 찾을 수 없어서
오류가 발생했을 겁니다.
그래서 제대로 실행된다는 것을
알 수 있습니다. 이제 한 가지 더 해보고
쿠버네티스 매니페스트도
업데이트할 수 있는지 확인해 보겠습니다.
홈랩 저장소로 가서
풀 해보겠습니다.
Shelly 배포가 어디 있는지 봅시다.
여기 Shelly 배포가 있네요.
편의상 이걸 지금 저장소에
추가해 보겠습니다.
docs에 예제 배포 YAML을 만들고
이렇게 붙여넣겠습니다.
편의상 이걸 제 저장소에
추가하겠습니다. docs에
example_deployment.yml을
만들고 이렇게 붙여넣겠습니다.
예제 배포 YAML을
추가했습니다.
쿠버네티스 클러스터에서
사용자 1000으로 실행되도록 이것을 업데이트해 주세요.
심지어 알아차리지 못해도 확인해 보겠습니다.
예제 배포 YAML을 추가했으니, 쿠버네티스 클러스터에서
사용자 1000으로 실행되도록 업데이트해 주세요.
심지어 파일을 찾지 못해도 확인해 보겠습니다.
YAML 파일을 감지할 수 있는지 봅시다.
제가 위치를 알려주지 않아도 감지하는지 확인해 봅시다.
좋네요, 실제로 YAML 파일을 검색하기 위해
글로빙(globbing)을 사용했군요. 흥미롭네요.
시큐리티 컨텍스트를 설정하고
runAsUser를 설정했으며, 권한도 제한했습니다.
실제로 이제 완전히 보안이 적용되었네요.
그래서 음, 실제로 이것은
이제 완벽하게 보안이 적용되었습니다. 네, 이것을
제 올바른 배포로 사용하고 싶습니다.
이제
제 github.com은
shelly인데, 여기로 가면
제 GitHub Actions가 이제
이 변경사항을 푸시하면 GitHub Actions가
이것의 새 컨테이너 이미지를 빌드할 겁니다.
네, 이걸 커밋하고 싶습니다. 변경사항을 푸시하죠.
푸시하고 싶은데, 궁금하네요.
네, 제 SSH 키를 감지할 것입니다.
성공적으로 변경사항을 푸시했습니다. 그리고
이제 GitHub Actions가 실행 중인 것을 볼 수 있습니다.
이제 보면
GitHub Actions가 실제로 실행 중입니다.
그래서
이것은 새 태그로 이어질 것입니다.
GitHub Actions가 자동으로 태그를 생성하니까요.
만약 이것이 모두 빌드되고 제대로 작동하면
매니페스트를 업데이트할 수 있고
컨테이너가 비루트 사용자로
실행될 것입니다.
좋습니다. 이제 이미지가 업데이트되었고
태그를 확인하면
최신 태그는 이제
030입니다.
제가 할 일은
deployment.yaml을 열고
홈랩으로 가서
붙여넣기 하는 것입니다.
이것을 030으로 업데이트합시다.
그리고 푸시하겠습니다. 'Shelly를 비루트로 업데이트'
이것을 홈랩 저장소에 푸시하겠습니다.
그런 다음 개발 컨테이너에 들어가서
앱을 조정할 것입니다.
이제 GitOps 컨트롤러에게
최신
변경사항을 가져오라고 지시하는 중입니다.
이제 K9s를 열면
새로운 컨테이너가 배포되는 것을 볼 수 있을 겁니다.
여기 있네요. Shelly API가 이미 실행 중입니다.
14초 전에 시작됐네요. 로그를 확인하면
여기 있습니다. 데이터 삽입이
완료되었습니다. 성공적으로 실행 중입니다.
여기서 쉘로 들어가면
이제 'whoami' 명령을 실행하면
app 사용자로 실행 중입니다.
cat /etc/passwd를 보면
사용자 1000:1000으로 실행 중입니다. 예를 들어
apt-key add를 하면
권한이 거부됩니다. 비루트 사용자이기 때문에
패키지를 추가할 수 없습니다. sudo su를 해도
작동하지 않습니다.
자, 여기 있습니다. 성공적으로 애플리케이션을
멀티스테이지 빌드로 업데이트했습니다.
프로젝트를 UVic로 변환했고
패키지 설치 방법으로 그 방식을 사용하고 있습니다.
이제 자동으로 변경사항을 GitHub에 푸시하고
또한 성공적으로 비루트 사용자로 실행할 수 있게 되었습니다.
프로젝트를 UVic로 변환했고 그 방식으로 패키지를 설치하고 있습니다.
이제 자동으로
GitHub에 변경사항을 푸시하고 있으며
또한 비루트 사용자로 성공적으로 실행할 수 있게 되었습니다.
정말 감명받았습니다. 실제로 이것에 매우 만족합니다.
이 도구에 매우 만족하는데,
보시다시피 이제
에이전트 코딩의 이점을 가지면서
완전히 CLI에서 작업하고 있습니다.
이 도구에 매우 만족하는데, 보시다시피
이제 에이전트 코딩의 이점을 가지면서
완전히 CLI에서 작업하고 있습니다. 이전 세션과
Claude Code와 일반 Neovim 사이를
오가며 세션 간에 왔다갔다 할 수 있고
개발 컨테이너를 사용하여 CLI에서 익숙하게
원하는 모든 작업을 할 수 있습니다.
개발 컨테이너와 결합된 Claude Code는
매우 강력한 조합입니다.
마지막으로 Claude Code가 매우 비싸다고 들었는데,
비용이 어떻게 되는지 확인해 봅시다.
Claude Code가 매우 비싸다고 들었는데,
비용이 어떻게 되는지 확인해 봅시다.
종료해 보겠습니다.
좋아요. 이 전체 세션에 1달러가 들었네요.
코드가 많지 않은 아주 작은 프로젝트였습니다.
그래서 네, 이게 많은 돈인가요? 모르겠네요.
직접 Claude API를 사용하는 것보다는 더 비싼 것 같습니다.
거기서는 20달러를 소진하는 데 엄청 오래 걸리거든요.
하지만 저에게는 감당할 수 있는 수준입니다.
저는 이 정도면 괜찮습니다.
이것은 확실히 제가 얻은 가치에 비해 1달러의 가치가 있습니다.
하지만 더 큰 프로젝트와 더 큰 작업에서는
비용이 빠르게 늘어날 수 있다고 들었습니다.
그래서 이것을 더 많이 사용하고 테스트해 볼 계획입니다.
만약 여러분이 제가 사용한 개발 컨테이너 워크플로에
관심이 있다면, 전체 과정을 제공해 드립니다.
또는 제 홈랩에서 제가 한 작업이 마음에 드셨다면,
쿠버네티스 홈랩을 직접 구축하는 데
도움을 드릴 수도 있습니다. 이 모든 것과 저에게 직접 액세스하려면
school.com/cubcraft로 오세요.
그곳에서 뵙기를 바랍니다.
시청해 주셔서 감사합니다.
다음 시간에 뵙겠습니다.
제 홈랩에서 했던 작업이 마음에 드셨다면,
쿠버네티스 홈랩을 직접 구축하는 데도 도움을 드릴 수 있습니다.
이 모든 것과 저와 커뮤니티에 직접 접근하려면,
school.com/cubcraft로 오세요.
거기서 뵙기를 바랍니다.
시청해 주셔서 감사합니다. 다음에 뵙겠습니다.
다음에 뵙겠습니다.