Go 언어의 핵심 데이터 타입과 변수 시스템

기본 및 복합 데이터 타입 Go는 정형화된 타입 시스템을 기반으로 하며, 변수 선언 시 타입이 명확하게 지정되어야 합니다. 기본적으로 다음과 같은 데이터 타입들을 제공합니다. 기본 타입 bool: 불리언 값 (true/false) 정수형: int8, int16, int32, int64, uint8(byte), uint32, uint64 등 실수형: float32, float64 복소수형: complex64, complex128 문자 ...

6월 6일 17:01에 게시됨

gRPC-Gateway V2를 활용한 클라우드 네이티브 API 게이트웨이 개발 소개

gRPC는 모든 상황에서 최적의 솔루션은 아닙니다. 특정 경우엔 전통적인 HTTP/JSON API를 제공해야 할 수 있습니다. 이는 호환성 유지, 특정 언어 지원 부족 또는 gRPC가 효과적으로 처리하지 못하는 클라이언트 지원 등 다양한 이유에서 발생할 수 있습니다. 하지만 HTTP/JSON API를 별도로 구현하는 일은 시간과 노력을 많이 요구합니다. 이러한 문제를 해결하기 위한 ...

6월 4일 20:30에 게시됨

Go 언어에서 변수와 상수 다루기

변수 선언의 기본 Go에서는 var 키워드를 사용해 변수를 선언할 수 있습니다. 이 방식은 변수 이름과 자료형을 명시하며, 초기값을 동시에 할당할 수도 있습니다. package main import "fmt" func main() { var name string = "kim" fmt.Println(name) } 여기서 name은 문자열 타입의 변수이며, 값으로 "kim"을 가지게 됩니다. Go는 정적 타입 언어 ...

6월 4일 17:09에 게시됨

Go 프로세스 메모리 사용량 분석 (2)

가장 간단한 Go 프로그램 package main import ( "fmt" "time" ) func main() { fmt.Println("hello") for { time.Sleep(1 * time.Second) } } 디버깅 심볼을 제외한 바이너리 크기는 1,229,464 바이트 (약 1.2 MiB) 입니다. 컴파일된 바이너리를 readelf 도구로 확인해보면, Program Header에 3개의 로드 가능한 세그먼트가 있음을 알 수 있습니다. Program Hea ...

6월 4일 02:47에 게시됨

Go 언어 핵심 개념 정리

메서드 접근 제한 Go에서는 메서드 이름의 첫 글자가 소문자면 패키지 내부에서만 접근 가능하며, 대문자로 시작하면 외부 패키지에서도 사용 가능하다. 시간 처리 기법 // 현재 시간 타임스탬프 가져오기 timestamp := strconv.Itoa(int(time.Now().Unix())) // 특정 시간 이전 타임스탬프 계산 (예: 30분 전) var seconds int64 switch duration { case "15m": sec ...

6월 3일 21:19에 게시됨

Go 언어로 직접 구현하는 컨테이너 런타임: run 명령어와 Namespace 격리

컨테이너 기술의 핵심인 docker run과 유사한 기능을 Go 언어로 직접 구현해 봅니다. Linux Namespace를 활용하여 프로세스를 격리하고, 자체적인 init 프로세스를 통해 컨테이너 환경을 초기화하여 사용자 지정 프로세스를 PID 1로 실행하는 과정을 다룹니다. CLI 프레임워크 구성 커맨드 라인 인터페이스를 구축하기 위해 urfave/cli 라이브러리를 사용합니다. 이 라이 ...

6월 2일 23:51에 게시됨

Go 언어 타이밍 제어: Timer, Ticker 및 이벤트 루프 설계 패턴

서론: Go 의 시간 기반 제어 메커니즘 Go 프로그램에서 시간 관련 로직을 구현할 때 time 패키지는 두 가지 주요 접근 방식을 제공합니다. 첫 번째는 특정 시간이 경과한 후 단 한 번만 실행되는 Timer, 두 번째는 설정된 간격으로 지속적으로 이벤트를 발생시키는 Ticker입니다. 이 둘은 채널 (Channel) 기반의 통신 모델을 사용하여 고루틴 간의 동기화를 가능하게 합니 ...

6월 2일 16:00에 게시됨

mydocker에서 데이터 볼륨 마운트 기능 구현

이 글은 mydocker 프로젝트를 통해 컨테이너의 데이터 지속성을 구현하는 과정을 설명합니다. 특히 -v 옵션을 활용해 호스트 시스템의 디렉터리를 컨테이너 내부에 마운트하는 방식으로, 컨테이너 종료 후에도 데이터가 유지되도록 구현했습니다. 기본 개념: bind mount bind mount은 하나의 파일 시스템 위치를 다른 위치에 연결하는 기술입니다. 이는 두 디렉터리 간에 ...

5월 28일 00:01에 게시됨