2009년에 구글에서 개발된 언어로 시스템 프로그래밍 특화 설계,
c++ 언어의 문제점인 대규모 프로그램 개발의 긴 컴파일 시간을 보완.
헤더 파일을 정의하는 방식 대신 소스 자체를 패키지화 하여 변경이 있는 부분만 컴파일 하도록 하여 속도 향상
구문이 간단하고 멀티 코어 환경이 활성화된 이후에 개발 되었기 때문에 동시성 프로그래밍에 적합
개념 | 유무 | 설명 |
---|---|---|
클래스 | X | 클래스는 없으나, 메소드를 가지는 구조체 지원 |
상속 | X | |
메소드 | O | 구조체가 메소드를 가질 수 있음 |
인터페이스 | O | 상속이 없지만 인터페이스는 있음 |
익명 함수 | O | ‘함수 리터럴’ 이라는 이름으로 제공 |
가비지 컬렉터 | O | 가비지 컬렉터 제공(자바 처럼 GC 종류가 여러가지이진 않음) |
포인터 | O | 메모리 주소를 가르키는 포인터 있음 |
제네릭 프로그래밍 | X | |
네임스페이스 | X | 네임스페이스 X, 패키지 단위 코드를 분리 |
1. 문법이 간단하다
→ 25개의 키워드를 가지고 있다(다른 언어에 비해 매우 적은 개수)
2. 정적 / 강타입 언어
→ 타입으로 발생되는 버그가 없음, 안정성이 보장
3. 네이티브 바이너리로 빌드가 된다
→ 바이너리 실행에 jvm 이나 python 같은 런타임이 필요하지 않음
4. 속도가 빠름
- Goroutine
일반적인 언어의 쓰레딩은 OS 스레드를 사용(One-to-One)
→ 컨텍스트 스위칭의 비용이 높음
OS 스레드 생성에는 1Mb의 메모리 필요 (운영체제가 스레드를 관리)
→ Goroutine - M:N 매핑으로 여러개의 OS 스레드위에 여러개의 Goroutine이 동작
2kb의 스택 메모리만 사용
* 일반적인 Thread Context Switching :
16개의 범용 레지스터, PC(Program Counter), SP(Stack Pointer), Segment 레지스터, 16개의 XMM레지스터, FP coprocessor state, 16개의 AVX 레지스터, 모든 MSR들 등을 save/restore
* Goroutine : 3개의 레지스터(PC,SP,DX)만 save/restore
One-to-One
Many-to-Many Model
Go 언어의 Command Line Interface 를 쉽게 만들도록 도와주는 프레임워크
단순한 Command 구조엔 flag 패키지가 유효하지만, 복잡성이 높을 수록 Cobra가 유리
- 장점
1. 간편한 명령어 구조: Cobra는 명령어와 하위 명령어들을 쉽게 정의할 수 있는 구조를 제공. Command, Subcommand, Flag 등을 쉽게 추가하고 구성할 수 있어 명령어의 계층 구조를 명확하게 표현할 수 있음.
2. 자동 완성 기능: Cobra는 명령어와 플래그의 자동 완성 기능을 내장하고 있어서 사용자가 탭을 누를 때 가능한 옵션들을 보여주어 CLI 사용의 편의성을 높여줍니다
3. Help 커맨드 지원: Cobra는 기본적으로 **`-help`** 플래그를 지원, 자체적인 Help 커맨드로 통해 사용자에게 명령어와 플래그의 사용법과 설명을 자세하게 보여줄 수 있음
4. 명령어의 실행 제어: Cobra는 각 명령어의 실행을 제어하는 PreRun, Run, PostRun 등의 Hook 메서드를 제공하여 명령어 실행 전후에 원하는 동작을 추가할 수 있음
Component | Kind | Role | Communication |
---|---|---|---|
kube-apiserver | Static Pod | 입력 받은 명령에 대한 동작을 위해 각 컴포넌트와 통신하는 역할 | etcd |
scheduler | |||
kube-controller | |||
kubelet | |||
kube-proxy | |||
etcd | Static Pod | Cluster Data 저장소(key,value) | kube-apiserver |
scheduler | Static Pod | Pod를 적절한 노드로 배치하는 역할 | kube-apiserver |
kube-controller | Static Pod | Resource 상태를 모니터링 관리, 필요시 재배포 작업도 진행 | kube-apiserver |
kubelet | System Daemon | container runtime과 상호작용하며 각 노드에서 container 관리 | kube-apiserver |
kube-proxy | DaemonSet | 각 노드에서 실행되는 네트워크 프록시로, 서비스 개념의 동작을 담당 | kube-apiserver |