Shell/Python vs Go - 실용적 비교 및 Alpacka 리메이크 프로젝트 요약
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
개발 툴
대상자
- 시작자 및 중급 개발자
- 패키지 관리 도구 개발자
- 스크립팅 언어와 컴파일 언어의 장단점을 비교하고자 하는 개발자
- Go, Python, Shell 스크립트의 실무 적용 사례를 분석하고 싶은 개발자
- 난이도: 중간 (스크립팅 언어의 한계와 컴파일 언어의 장점을 이해하는 데 기본 지식 필요)
핵심 요약
- Go는 단일 바이너리 컴파일을 통해 런타임 의존성 제거 가능
RunCmd("apt-get", "install", "-y", "htop").OrFail("Could not run installation!")
와 같은 구조를 활용한 명령 실행- Shell/Python의 한계:
- Bash: 복잡한 데이터 구조 지원 부족 (배열, 맵 등)
- Python: 버전 호환성 문제 (pyenv 사용 권장)
- Go의 장점:
- YAML 파싱 지원 (
gopkg.in/yaml.v3
) - 패키지 관리 조건 설정 (예:
variants
,package-groups
기반의 다중 OS 지원)
섹션별 세부 요약
1. Shell 스크립트의 한계
- 패키지 관리 명령어의 버전/구현 차이 (BSD, GNU, Busybox 등)
- 복잡한 데이터 구조 처리 불가 (배열, 맵, 재귀 함수 등)
- 모듈화 어려움: bash builder
도구를 사용한 대안 제시
2. Python의 문제점
- 버전 호환성 문제: pyenv
사용으로 해결 가능하지만, 오래된 OS에서 설치 불가능한 경우도 있음
- 의존성 관리 복잡성: setup.py
사용으로 인한 추가 작업 필요
3. Go의 선택 이유 및 구현
- 단일 바이너리 컴파일: go build -o alpacka
명령으로 생성 가능
- YAML 기반 패키지 조건 설정:
```yaml
variants:
- release: VERSION_ID<=22, ID=~fedora
groups: common, fedora
```
- 커스텀 인자 파서 개발: GoArgs
패키지 사용 (단축/장문 플래그, 위치 인자 처리)
- Go 모듈 배포: v
태그로 버전 관리, gopkg.in/yaml.v3
사용
4. Go의 실무 적용 사례
- 패키지 관리 조건 적용:
```go
package-groups:
common:
- mariadb
debian:
- apache2
```
- 명령 실행 구조: runner.go
에서 RunCmd()
함수 사용
- 의존성 관리: gopkg.in/yaml.v3
패키지 사용 (Canonical Inc. 제공)
결론
- Go는 단일 바이너리 생성, YAML 기반의 유연한 패키지 조건 설정, 커스텀 인자 처리 기능으로 스크립팅 언어의 한계를 극복
- 실무 적용 시 주의 사항:
gopkg.in/yaml.v3
패키지의 공식성과 GitHub 저장소의 보관 상태 확인 필요 - 예시:
go build -o alpacka
로 단일 바이너리 생성 후./alpacka install
명령으로 실행 가능