Dev. Blog isprometheo의 좌충우돌 개발 블로그
Posts with the tag golang:

[Golang] 쿼리 실행할 때 타임아웃 설정하기

서버 장애가 나서 panic이 발생했다는 알람이 많이 왔었다. 원인은 데이터베이스가 다운돼 쿼리를 실행할 수 없어 발생한 장애였다. 코드를 확인해보니 에러를 확인하고 에러가 없는 경우에 Close 함수를 실행해야 했는데 항상 Close 함수를 실행을

[Golang] too many open files 에러 해결

Go 프로젝트에서 http 클라이언트를 만들어서 활용하고 있었는데 어느 날 서버에 응답이 없었다. 그래서 서버에 들어가서 확인해보니 too many open files라는 에러가 나고 있었다. netstat으로 확인해보니 CLOSE_WAIT 상태로 많이 쌓여 있었다. 어

[Golang] Echo 파일 업로더 서버 구축

echo 프레임워크로 파일 업로더 서버를 구축했다. 쿡북에서 단일 파일, 여러 파일을 업로드하는 예제가 있어 이를 바탕으로 쉽게 만들 수 있었다. 하지만 업로드를 하는 클라이언트에서 폼의 키값을 다른 것으로 하는 경우를 고려해야 했다. 그래서

[Golang] 커맨드 명령 동시 실행 및 디렉토리 제거

신규 서버를 만들면서 두가지 기능이 필요했다. 첫째는 명령어를 동시에 실행해서 속도를 높이는 것과 데이터가 있는 디렉토리를 제거하는 것이었다. 명령어 동시 실행하기 Golang에서 WaitGroup은 모든 goroutine

[Golang] Go의 선(The Zen of Go)

1. 각 패키지는 단일 목적을 수행하라 2. 명시적으로 에러를 다뤄라 3. 깊게 중첩하는 것보다 빠르게 반환하라 4. 호출자에게 동시성을 맡겨라 5. goroutine을 실행하기 전, 언제 멈출지 알라 6. 패키지 수준의 상태를 피하라 7. 단순함은 중

[Golang] Kafka 연동 문제

Go로 만든 프로젝트에서 kafka 연동하여 로그를 수집하는데 confluent-kafka-go를 사용하고 있었다. package main import ( "fmt" "github.com/confluentinc/confluent-kafka-go/kafka" ) var kafkaClient *kafka.Producer func main() { kafkaClient, _ = kafka.NewProducer(&kafka.ConfigMap{ "bootstrap.servers": "broker:9092", "acks": 1, }) go func() { for e := range p.Events() { switch ev := e.(type) { case *kafka.Message: m := ev if m.TopicPartition.Error != nil { fmt.Printf("Delivery failed: %v,

[Golang] Go를 사용하면서 발생했던 문제들

테스트 타임아웃 Go로 테스트를 하는데 다음과 같은 에러가 발생하면서 종료됐다. golang panic: test timed out after 10m0s 이유는 테스트를 수행할 때 기본으로 10분으로 타임아웃이 걸려있었기 때문이었다. $ go test -timeout 1h 위와 같이 타임아웃 시간을 늘려서 수행하

[Log] librdkafka 빌드하기

golang 프로젝트의 로그를 수집하기 위해 confluent-kafka-go를 이용했다. 이를 위해서 librdkafka를 설치해야 하는데 confluent-kafka-go 최신 버전의 경우 1.3.0 이상을 사용해야 한다는 에러가 났다. CeontOS 7에서 yum으로 설치하는

[Golang] Java gzip migration

기존에 Java로 만들어진 프로젝트를 Golang으로 다시 만들고 있는데 문자열을 gzip으로 압축한 뒤 base64로 인코딩한 결과를 파일명으로 만드는 로직이 있었다. 처음엔 Golang에서도 gzip과 base64가

[Golang] 410 Gone

Golang을 1.13으로 업그레이드를 하고 프로젝트에서 go get ...으로 라이브러리를 다운받으려고 했는데 410 Gone 에러를 내면서 실행이 되지 않았다. 구글에서 검색을 해보니 해결 방법을 바로 찾을 수 있었다. $ export GO111MODULE=on $ export GOPROXY=direct $ export GOSUMDB=off 원