일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
- kotlin querydsl
- AWS EKS
- IntelliJ
- Linux
- Kubernetes
- 티스토리챌린지
- 정보처리기사 실기
- minikube
- docker
- Spring
- APM
- mysql 튜닝
- 공부
- Pinpoint
- PETERICA
- CKA
- CKA 기출문제
- 정보처리기사 실기 기출문제
- aws
- 코틀린 코루틴의 정석
- AI
- kotlin coroutine
- 기록으로 실력을 쌓자
- MySQL
- 오블완
- 정보처리기사실기 기출문제
- kotlin
- Java
- Elasticsearch
- CloudWatch
- Today
- Total
목록Programming/GO (13)
피터의 개발이야기
ㅁ 들어가며ㅇ Go 언어를 사용하다 보면 함수와 메서드, 그리고 포인터 메서드와 값 타입 메서드의 차이점을 이해하는 것이 중요하다. 메서드는 포인터 리시버를 가질 때 값이나 포인터 모두 받을 수 있지만, 함수는 값 인자를 받을 때 해당 타입의 값만 받을 수 있다. 이 글에서는 이들의 차이점과 사용 방법에 대해 정리하였다. Tucker의 Go언어 프로그래밍 책, 17장 1~3의 내용을 참조하였다. ㅁ 함수 vs 메서드함수 (Function)독립적으로 존재하며 특정 타입에 종속되지 않는다.예: print(), sum() 등메서드 (Method)특정 타입에 종속되어 있다.객체의 동작(behavior)을 정의한다.문법: func (리시버) 메서드명(매개변수) 반환값 { ... }type Person struct..
ㅁ 들어가며ㅇ fsnotify는 Go 언어에서 파일 및 디렉토리의 변경 사항을 실시간으로 감지할 수 있도록 도와주는 라이브러리이다. fsnotify의 주요 기능과 사용법을 정리하였다. ㅁ fsnotify란? fsnotify는 Windows, Linux, macOS 등 다양한 운영체제에서 동작하는 크로스 플랫폼 파일 시스템 감시 라이브러리이다. 이 라이브러리를 사용하면 파일 생성, 삭제, 수정, 권한 변경 등의 이벤트를 실시간으로 감지할 수 있다. ㅁ 감지 이벤트이벤트설명fsnotify.Create파일 또는 디렉토리 생성fsnotify.Remove파일 또는 디렉토리 삭제fsnotify.Write파일 내용 수정fsnotify.Rename파일 또는 디렉토리 이름 변경snotify.Chmod파일 또는 디렉토리 ..
ㅁ 들어가며ㅇ Go 언어의 sync.Map은 동시성 안전한 맵 구현을 제공한다. 일반 map과 달리 여러 고루틴에서 동시에 안전하게 사용할 수 있다. sync.Map의 초기화 및 기본적 사용법을 정리하였다. ㅁ sync.Map 초기화sync.Map은 별도의 초기화가 필요 없었다.var m sync.Map ㅁ주요 메서드Store(key, value interface{})m.Store("key", "value")ㅇ 맵에 키-값 쌍을 저장 Load(key interface{}) (value interface{}, ok bool)value, ok := m.Load("key")if ok { fmt.Println("Value:", value)}ㅇ 키에 해당하는 값을 조회 Delete(key interfa..
ㅁ 들어가며 이 글에서는 Golang을 사용하여 Linux 명령어를 실행하고, 실행된 프로세스를 sync.Map으로 관리한 후 종료하는 방법에 대해 정리하였다. ㅁ 필요한 패키지 importpackage mainimport ( "fmt" "os/exec" "sync" "syscall")ㅇ 먼저 필요한 패키지들을 import 한다. ㅁ 명령어 실행 및 관리 함수 작성var processMap sync.Mapfunc runCommand(name string, args ...string) (*exec.Cmd, error) { cmd := exec.Command(name, args...) err := cmd.Start() if err != nil { retur..
ㅁ 들어가며 이전에 [GO] Go 언어에서의 "fatal error: concurrent map read and map write" 해결하기에서 동시성으로 인한 오류를 해결하는 과정에서 이를 예방할 수 있는 Race Detector를 알게 되었다. Go 언어는 동시성 프로그래밍을 위한 강력한 기능을 제공하지만, 이와 함께 데이터 레이스(data race)와 같은 동시성 버그의 위험도 존재한다. 이러한 문제를 해결하기 위해 Go는 내장 Race Detector를 제공한다. ㅁ Race Detector란? Go의 Race Detector는 프로그램 실행 중 발생할 수 있는 데이터 레이스 조건을 감지하는 도구이다. Go 프로그램을 실행시키면 deadlock이나 data race condition이 발..
ㅁ 들어가며ㅇ Go 개발자라면 한 번쯤 마주칠 수 있는 "fatal error: concurrent map read and map write" 오류에 대해 정리하였다. 이 오류는 동시성 프로그래밍에서 흔히 발생하는 문제로, 여러 고루틴이 동시에 맵을 읽고 쓰려고 할 때 발생한다. 또한, -race 플래그를 사용하면 Go의 레이스 디텍터로 프로그램을 테스트하면 이러한 동시성 문제를 사전에 발견하는 데 도움이 될 수 있다. 이 부분은 [GO] Go Race Detector: 동시성 버그를 잡아내는 강력한 도구에 정리하였다. ㅁ 오류의 원인 이 오류는 Go의 맵이 기본적으로 동시성에 안전하지 않기 때문에 발생한다. 여러 고루틴이 동시에 같은 맵에 접근하여 읽기와 쓰기 작업을 수행할 때, Go 런타임은 이를 감..
ㅁ 들어가며 Go 언어로 개발된 애플리케이션에서 메모리 사용량이 지속적으로 증가하는 문제는 흔히 발생할 수 있다. 이 글에서는 Go GC를 너무 믿지 마세요 - 메모리 누수 탐지와 GC 주기 조절이란 글을 읽고 메모리 문제의 원인을 분석하고 해결하는 데 도움이 되는 정보와 방법을 정리해 보았다. ㅁ 문제 정의 Go 애플리케이션의 메모리 사용량이 시간이 지남에 따라 점진적으로 증가하는 현상은, GC가 있는 Go 언어에서도 발생할 수 있다. 이는 애플리케이션의 안정성과 성능에 영향을 미칠 수 있으므로, 문제 해결을 위한 체계적인 접근이 필요하다. ㅁ 원인 분석ㅇ cgo 관련 메모리 누수: cgo를 사용하여 C 코드를 Go에서 호출하는 경우, C 코드에서 메모리 누수가 발생할 수 있다.ㅇ GC 성능: GC..

ㅁ 들어가며 Viper는 Golang 애플리케이션에서 설정 정보를 관리하는 라이브러리이다. 이 글에서는 다양한 파일 형식을 지원하고 동적으로 값을 구성할 수 있는 Viper의 사용 방법을 정리하였다. ㅁViper 설치하기go get github.com/spf13/viper ㅁ 기본 사용법구성 파일 설정viper.SetConfigName("config") // 확장자를 제외한 구성 파일 이름viper.SetConfigType("yaml") // 구성 파일 형식 지정 (yaml, json, toml 등)viper.AddConfigPath("/etc/appname/") // 구성 파일을 찾을 경로 추가viper.AddConfigPath("$HOME/.appname") // 여러 경로 추가 가능viper.A..
ㅁ 들어가며 맥북 M3를 사용 중이다. 로컬에서 GO로 빌드한 실행파일이 서버에서 작동하지 않았다. 이번 글에서는 Intel Xeon 프로세서를 위한 Go 빌드 시 GOARCH 설정에 대해 정리하였다. ㅁ GOARCH란? GOARCH는 Go 언어에서 타겟 아키텍처를 지정하는 환경 변수이다. 이 설정을 통해 특정 CPU 아키텍처에 최적화된 바이너리를 생성할 수 있다. ㅁ Intel Xeon을 위한 GOARCH 설정ㅇ Intel Xeon 프로세서는 서버급 성능을 제공하는 x86-64 아키텍처 기반의 CPU이다.export GOARCH=amd64ㅇ Intel Xeon 프로세서는 x86-64 아키텍처를 사용하므로, GOARCH 값을 "amd64"로 설정해야 한다.ㅇ 이 설정은 64비트 x86 아키텍처를 타겟으..
ㅁ 들어가며 Go 언어로 웹 요청을 보낼 때 http.Client를 사용한다. Client가 proxy설정에 영향을 받는 줄 모르고 트러블 슈팅을 하게 되었다. 이 트러블 슈팅을 하면서 알게 된 http.Client의 프록시 설정에 대해 정리해 보았다. ㅁ 환경 변수를 통한 프록시 설정// HTTP 요청에 대한 프록시 서버 주소export HTTP_PROXY=http://proxy.example.com:8080// HTTPS 요청에 대한 프록시 서버 주소export HTTPS_PROXY=https://proxy.example.com:8080// 프록시를 사용하지 않을 도메인 목록export NO_PROXY=localhost,127.0.0.1,10.0.0.0/8ㅇ Go의 http.Client는 기본적으..