
Docker & Containerization
Dockerfile, 멀티 스테이지 빌드, 이미지 최적화, docker-compose, 컨테이너 오케스트레이션
20 면접 질문·
Senior
1Go 애플리케이션에서 멀티 스테이지 빌드를 사용하는 주된 이유는 무엇입니까?
1
Go 애플리케이션에서 멀티 스테이지 빌드를 사용하는 주된 이유는 무엇입니까?
답변
멀티 스테이지 빌드는 컴파일 환경을 최종 이미지에서 분리합니다. 빌드 스테이지에는 전체 Go SDK(수백 MB)가 포함되지만 최종 이미지에는 컴파일된 바이너리만 포함됩니다. 이를 통해 이미지 크기가 크게 줄어들고(약 800MB에서 수 MB로) 프로덕션에서 불필요한 빌드 도구를 제거하여 공격 표면을 최소화합니다.
2크기와 공격 표면을 최소화하기 위해 프로덕션 Go 애플리케이션에 권장되는 베이스 이미지는 무엇입니까?
2
크기와 공격 표면을 최소화하기 위해 프로덕션 Go 애플리케이션에 권장되는 베이스 이미지는 무엇입니까?
답변
scratch 이미지는 운영체제가 없는 빈 이미지입니다. Go는 libc나 다른 시스템 의존성이 필요 없는 정적 바이너리로 컴파일되므로 scratch를 사용할 수 있습니다. 이는 가능한 가장 작은 이미지(수 MB)를 생성하며, 악용 가능한 도구나 셸이 없기 때문에 최고의 보안을 제공합니다. distroless와 alpine은 유효하지만 덜 최적화된 대안입니다.
3scratch 이미지와 호환되는 바이너리를 만들기 위해 필요한 Go 컴파일 플래그는 무엇입니까?
3
scratch 이미지와 호환되는 바이너리를 만들기 위해 필요한 Go 컴파일 플래그는 무엇입니까?
답변
CGO_ENABLED=0은 cgo를 비활성화하여 Go가 net 및 os/user 같은 패키지에 대해 순수 Go 구현을 사용하도록 강제합니다. 이것이 없으면 바이너리는 libc에 대한 동적 의존성을 갖게 됩니다. GOOS와 GOARCH는 대상 플랫폼을 지정합니다. 이러한 플래그를 결합하면 외부 의존성이 없는 완전한 정적 바이너리가 생성되어 scratch에 이상적입니다.
4
Go 애플리케이션을 빌드할 때 Docker 레이어 캐싱을 어떻게 최적화합니까?
5
scratch와 비교했을 때 Go에 Google Distroless 이미지를 사용하는 이점은 무엇입니까?
+17 면접 질문
기타 Go 면접 주제
Go 기초
Junior
25개 질문Go 데이터 구조
Junior
20개 질문Go 인터페이스
Junior
18개 질문에러 처리
Junior
20개 질문Goroutine 기초
Junior
20개 질문Channels
Junior
22개 질문Go Modules
Mid-Level
18개 질문HTTP 서버
Mid-Level
24개 질문HTTP 클라이언트
Mid-Level
18개 질문JSON 인코딩
Mid-Level
20개 질문Database/SQL
Mid-Level
22개 질문context 패키지
Mid-Level
20개 질문Testing
Mid-Level
22개 질문동시성 패턴
Mid-Level
24개 질문동기화 프리미티브
Mid-Level
22개 질문Go 웹 프레임워크
Mid-Level
20개 질문REST API 설계
Mid-Level
20개 질문gRPC
Mid-Level
22개 질문Reflection
Senior
20개 질문메모리 관리
Senior
24개 질문성능 최적화
Senior
22개 질문Generics
Senior
20개 질문Go Design Patterns
Senior
24개 질문Microservices
Senior
24개 질문보안 및 인증
Senior
24개 질문Kubernetes Basics
Senior
22개 질문고급 Go
Senior
20개 질문CLI 개발
Senior
20개 질문