개발자 코딩 환경
플랫폼 엔지니어링에서 일반적인 과제 중 하나는 개발자가 코딩 환경을 빠르고 일관되게 설정할 수 있도록 하는 것입니다. 특히 새 개발자가 팀에 합류하거나, 개발자가 프로젝트 간을 전환하거나, 확장이 필요한 경우가 여기에 해당합니다. 개발자 환경의 설정을 자동화하면 온보딩을 간소화하고 잘못된 구성 또는 손상된 종속성으로 인해 손실된 시간을 제거할 수 있습니다. 팀은 미리 구성된 환경 또는 설정 스크립트를 제공하여 환경 불일치 문제를 해결하는 데 시간을 낭비하지 않고 개발에 집중할 수 있습니다.
개발자 환경을 관리하는 방법은 다양할 수 있지만 조직의 요구 사항에 맞는 가상화, 컨테이너화 및 표준화된 템플릿을 포함하는 경우가 많습니다. 이러한 방법은 완전히 가상화된 Windows 환경에서 Linux 개발을 위한 클라우드 호스팅 컨테이너에 이르기까지 다양할 수 있습니다. 또한 일관성, 모범 사례 및 Security as Code를 촉진하는 "즉시 시작" 템플릿을 만드는 것은 팀 전체에 걸쳐 확장성 있는 잘 정의되고 반복 가능한 프로세스를 유지 관리하는 데 필수적입니다. 이렇게 하면 개발 워크플로가 원활하게 시작될 뿐만 아니라 모범 사례를 계속 준수하여 프로젝트를 계획대로 진행하고 보안 및 운영 표준을 준수할 수 있습니다.
개발자 코딩 환경의 설정 자동화
개발자 코딩 환경 부트스트래핑 및 정규화는 엔지니어링 시스템의 주요 과제가 될 수 있습니다. 주요 문제는 다음과 같습니다.
- 긴 온보딩 시간: 특히 프로젝트 간에 개발자를 이전하거나 계약자를 영입하는 경우 새 개발자가 참여하는 데 몇 주가 걸릴 수 있습니다.
- 불일치: 개발자 환경과 CI 시스템 간의 차이로 인해 종종 "내 머신에서 작동" 문제가 발생합니다.
- 환경 불안정성: 프레임워크 및 소프트웨어를 실험하거나 업그레이드하면 기존 구성이 중단되어 문제를 해결하는 데 오래 걸리고 복잡해질 수 있습니다.
- 코드 검토 지연: 코드 검토에 필요한 구성 변경은 나중에 실행 취소해야 하므로 개발 속도가 느려질 수 있습니다.
- 모든 관련자에 램프업: 개발 이외 역할(예: 운영자, QA 및 비즈니스 후원자)도 학습하고 참여해야 하므로 더 많은 지연이 발생합니다.
이러한 문제를 해결하기 위해 도구, 스크립트 또는 컨테이너화/가상화 환경을 통해 개발자 환경의 설정을 표준화하고 자동화하는 것이 도움이 될 수 있습니다. 특정 프로젝트 또는 조직의 요구 사항에 맞게 미리 구성된 환경은 일관성을 보장하고 설정 시간을 줄이며 전반적인 생산성을 향상할 수 있습니다.
Windows 및 Linux용 코딩 환경
Windows 워크스테이션 교체 또는 전체 가상화를 진행하려는 경우 VM(가상 머신)은 일반적으로 최상의 기능을 제공합니다. 이 방법은 Windows 클라이언트 개발, .NET 전체 프레임워크 웹 애플리케이션 관리 또는 Windows 서비스 유지 관리에 유용합니다. 데스크톱 관리 소프트웨어에 통합된 완전한 Windows 워크스테이션 가상화를 제공하는 Microsoft Dev Box와 같은 클라우드 호스팅 VM을 사용할 수 있습니다. 또는 로컬 VM을 환경 관리를 위한 HashiCorp Vagrant 같은 도구와 함께 사용할 수 있으며, HashiCorp Packer를 사용하여 Vagrant 및 Dev Box용 VM 이미지를 빌드할 수 있습니다.
Linux를 대상으로 하는 경우 작업 영역 가상화가 더 적합하며, 전체 데스크톱을 대체하는 대신 프로젝트별 또는 애플리케이션별 환경에 중점을 둡니다. 클라우드 호스팅 컨테이너가 일반적으로 사용되며, VS Code, JetBrains IntelliJ 및 터미널 기반 도구와 호환되는 클라우드 기반 개발 컨테이너 환경을 제공하는 GitHub Codespaces와 같은 옵션을 제공합니다. 클라우드 옵션이 요구 사항을 충족하지 않는 경우 VS Code의 SSH 또는 원격 터널이 자체 호스팅 Linux VM에 대한 연결을 지원합니다. 또한 로컬로 Dev Containers를 실행하려는 경우 로컬 컨테이너를 사용할 수 있습니다. VS Code 및 IntelliJ는 이러한 환경에 대한 강력한 지원을 제공합니다. 더 많은 유연성을 위해 자체 관리형 Linux VM에 대해 직접 SSH를 수행할 수 있는 클라우드 호스팅 VM도 사용할 수 있습니다. 개발자가 Windows에서만 작업하는 경우 Linux용 WSL(Windows 하위 시스템)이 편리한 로컬 Linux 개발 솔루션을 제공합니다. WSL 배포판은 팀 간에 내보내고 공유할 수 있습니다. Microsoft Dev Box와 같은 클라우드 기반 서비스는 Linux용 WSL 개발도 지원합니다.
일관성 및 표준화를 위해 애플리케이션 템플릿 사용
조직에서는 개발 팀 전체에서 일관성, 표준화 및 모범 사례를 촉진하기 위해 애플리케이션 템플릿을 "Everything as Code" 접근 방식의 일부로 사용할 수 있습니다. 이러한 템플릿은 개발을 간소화하여 팀이 설정된 포장된 경로를 유지하도록 할 수 있습니다. 모노레포 패턴을 따르는 조직의 경우 Azure 개발자 CLI(azd) 같은 도구를 사용하여 애플리케이션 원본 설정뿐만 아니라 환경 구성 및 CI/CD 워크플로도 포함하는 템플릿을 만들 수 있습니다.
개발을 위한 템플릿을 만들 때 다양한 주요 영역을 고려하여 템플릿이 포괄적이고 일관적인지 확인하고 모범 사례를 준수하도록 하는 것이 좋습니다.
- 샘플 소스 코드: 권장 언어, 애플리케이션 모델, 서비스, API, SDK 및 아키텍처 패턴으로 개발자를 유도하는 샘플 소스 코드를 포함합니다.
- 빌드 및 배포 스크립트: 빌드를 트리거하고 로컬로 또는 샌드박스 환경에 배포하는 일관된 방법을 제공하는 스크립트를 통합합니다. CI/CD 파이프라인과 동기화하기 위해 IDE 내부 또는 편집기 디버그 구성이 포함되도록 합니다.
- CI/CD 구성: 애플리케이션을 빌드하고 배포하기 위한 워크플로 또는 파이프라인을 제공하여 재사용 가능한 중앙 집중식 워크플로를 사용합니다. 이러한 템플릿을 "즉시 시작" 템플릿으로 처리하고 필요할 때 수동 트리거를 허용하도록 합니다.
- IaC(Infrastructure as Code) 자산: 중앙에서 관리되는 모듈에 대한 권장 구성 및 참조를 포함하여 인프라 설정이 모범 사례를 따르도록 합니다.
- Security as Cide 및 Policy as Code 자산: CODEOWNERS 및 dependabot.yaml과 같은 보안 관련 구성 파일을 추가하여 보안을 개발 프로세스에 직접 통합합니다. CI/CD 파이프라인에 보안을 포함하고 공급망 보안을 강화하기 위해 클라우드용 Microsoft Defender와 같은 도구를 비롯하여 보안 검사용으로 예약된 워크플로를 제공해야 합니다.
- 가시성, 모니터링 및 로깅: 모니터링 도구(예: 에이전트 배포용 IaC 또는 대시보드 모니터링을 위한 Configuration-as-Code)에 대한 설정 구성을 제공합니다. 로깅 및 분산 추적에 대한 샘플 코드를 포함하여 애플리케이션을 배포 후 효과적으로 모니터링할 수 있도록 합니다.
- 코딩 환경 설정: linter, 포맷터 및 IDE에 대한 구성 파일을 추가하고 devcontainer.json, devbox.yaml 또는 Docker 관련 파일과 같은 가상화된 개발 환경에 대한 스크립트를 설정합니다.
- 구성 테스트: Microsoft Playwright Testing 또는 Azure Load Testing과 같은 도구를 사용하여 단위 테스트 및 보다 광범위한 테스트 시나리오를 위한 파일을 제공합니다.
공동 작업 도구 설정: 지원되는 경우 작업/문제 템플릿 또는 PR 템플릿을 코드로 포함합니다. 필요에 따라 사용 가능한 CLI 또는 API를 사용하여 시스템을 업데이트하거나 Microsoft Teams 또는 Slack과 같은 공동 작업 도구를 구성하는 워크플로를 제공합니다.