Golang 15

안전하게 개발하기 레츠GO! #5 실전 테스트

실전 데이터 테스트많은 회사에서 Golang의 testing 패키지를 활용해 다양한 테스트를 수행하고 있습니다. 하지만 실제로는 간단한 Mock 테스트나 기본적인 유닛 테스트 수준에서 멈추는 경우가 대부분입니다. 물론 이러한 테스트 방식도 프로젝트 품질을 높이고 개발 속도를 향상하는데 충분히 의미가 있습니다. 하지만 개인적인 관점에서는, Mock 환경에만 의존한 테스트는 실제 운영 환경과의 갭을 줄이는 데 한계가 있다고 생각합니다. Mock 테스트는 안정적이고 빠르게 동작하지만, 실제 데이터 흐름·스키마 변화·외부 시스템과의 연동 문제 같은 현실적인 오류를 잡아내기 어렵기 때문입니다. 그래서 저는 개발 단계에서부터 Mock 테스트를 넘어, 실제 개발 환경에서 사용하는 Database 또는 Pipeline..

Go언어 2025.11.23

안전하게 개발하기 레츠GO! #3 go benchmark

Benchmark 이해하기Golang의 benchmark(벤치마크)와 test(테스트)는 코드의 정확성과 성능을 보장하기 위한 핵심 도구입니다. 특히 대규모 트래픽을 처리하거나 고성능 연산이 필요한 애플리케이션을 개발할 때, 테스트와 벤치마크는 선택이 아닌 필수 요소입니다. 본 문서에서는 Golang의 벤치마크 개념과 그 중요성, 그리고 기본적인 사용 방법에 대해 자세히 설명합니다. Benchmark란?Golang에서 benchmark란 특정 코드, 함수, 알고리즘 또는 시스템의 성능을 측정하여 실행 속도, 처리량, 리소스 사용량(CPU, 메모리 등)을 분석하는 과정입니다. 이를 통해 코드의 최적화 가능성을 평가하고 여러 구현 방식 간의 성능 차이를 비교하며 병목 현상을 식별하여 효율적인 개선 방향을 찾..

Go언어 2025.11.20

안전하게 개발하기 레츠GO! #2 go testing

TDD란?유닛 테스트 작성법과 Go testing 패키지를 활용한 디버깅 방법을 설명하기 전에, 먼저 TDD(Test-Driven Development, 테스트 주도 개발) 개념을 간단히 짚고 넘어가겠습니다.TDD는 소프트웨어 개발 방법론 중 하나로, 실제 코드를 작성하기 전에 테스트 코드를 먼저 작성하는 방식을 의미합니다. 즉, 먼저 실패하는 테스트를 만들고, 그 테스트를 통과시키기 위한 최소한의 코드를 작성한 뒤, 마지막으로 리팩토링을 진행하는 순서로 개발이 이루어집니다. 이러한 접근 방식은 코드 품질을 높이고, 기능 추가나 수정 시 발생할 수 있는 오류를 빠르게 발견하는 데 큰 도움을 줍니다.TDD에 대한 자세한 내용은 구글링을 통해 보다 더 좋은 자료를 참고할 수 있습니다. testing 패키지란..

Go언어 2025.11.19

안전하게 개발하기 레츠GO! #1 디버깅

제가 Golang을 개발한 지는 벌써 5년이 넘었고, 그동안 Golang을 사용하는 두 개의 회사에서 근무하며 많은 개발자들과 협업해 왔습니다. 여러 팀과 다양한 프로젝트를 경험하면서 가장 크게 느낀 점 중 하나는 생각보다 많은 Golang 개발자들이 디버깅 기능과 유닛 테스트를 충분히 활용하지 않고 있다는 것이었습니다. 특히 Println 디버깅에만 의존하거나, 테스트 코드를 ‘있으면 좋은 것’ 정도로만 생각하는 경우도 꽤 많았습니다. 하지만 규모가 커지는 서비스에서는 이런 방식이 유지보수성과 개발 효율을 크게 떨어뜨릴 수 있습니다.그래서 이번 포스팅에서는 Golang 개발자가 디버깅과 유닛 테스트를 어떻게 하면 보다 효과적으로 활용할 수 있을지, 실무 관점에서 구체적으로 이야기해보려고 합니다.이번 글..

Go언어 2025.11.18

Go언어의 benchmark와 test

benchmark와 testGolang에서 benchmark와 test는 코드의 정확성과 성능을 보장하는 핵심 요소입니다. 특히, 대규모 시스템이나 고성능이 중요한 애플리케이션을 개발하는데 매우 중요한 기능입니다. 이번 문서에서는 benchmark와 test에 대한 사용법을 알아보겠습니다.benchmark란Golang에서 benchmark란 특정 코드, 함수, 알고리즘 또는 시스템의 성능을 측정하여 실행 속도, 처리량, 리소스 사용량(CPU, 메모리 등)을 분석하는 과정입니다. 이를 통해 코드의 최적화 가능성을 평가하고 여러 구현 방식 간의 성능 차이를 비교하며 병목 현상을 식별하여 효율적인 개선 방향을 찾을 수 있습니다. 특히 Golang에서는 go test -bench 명령어를 활용하여 특정 함수의 ..

Go언어 2025.11.18

Go언어에서의 Generic 이해하기

Generic(제네릭)이란?Go 1.18부터 도입된 제네릭(Generic) 기능은 하나의 함수나 타입이 다양한 타입을 처리할 수 있도록 해주는 기능입니다.쉽게 말해, 함수나 구조체를 만들 때 타입을 고정하지 않고 나중에 사용할 때 타입을 지정할 수 있도록 하는 기능입니다.이전까지는 interface{}를 활용한 방법이 있었지만, 타입 안정성(type safety)이 부족하고 형변환(casting)이 필요했습니다.제네릭은 이러한 문제를 해결하고, 재사용 가능한 코드를 작성하는 데 큰 도움이 됩니다. Generic이 필요한 이유Go에서 Generic이 없던 시절에서는 다음과 같은 일이 자주 발생하였습니다.func PrintInts(list []int) { for _, v := range list { fmt..

Go언어 2025.03.27

[addlicense] golang 프로젝트에 라이센스 추가하기

오픈소스 프로젝트와 라이센스오픈소스 프로젝트를 살펴보면, 각 코드 파일에 라이센스가 명시되어 있는 것을 볼 수 있습니다. 이 라이센스는 프로젝트에 사용된 코드의 사용 범위와 조건을 정의하여, 코드를 법적으로 보호하는 중요한 역할을 합니다. 라이센스를 각 코드 파일에 일일이 추가하는 작업은 번거로울 수 있습니다. 이러한 불편을 해소하기 위해 Google에서는 addlicense 도구를 제공하고 있으며, 이 도구를 사용하면 코드에 라이센스를 효율적으로 추가할 수 있습니다. 본 문서에서는 addlicense를 사용하여 Go 언어의 코드 파일에 라이센스를 추가하는 방법을 설명하겠습니다. 비록 예시는 Go 언어로 진행하지만, addlicense는 다양한 프로그래밍 언어에 적용 가능합니다. 이번 문서에서는 설치 방..

Go언어 2024.04.29

golang version upgrade (ubuntu)

ubuntu 환경에서 golang version upgrade를 하는 방법에 대하여 간단하게 정리하였습니다.0. 작업 준비# apt update를 진행합니다.sudo apt-get update# wget이 설치되었는지 확인합니다.# 다음과 같은 결과가 나오면 wget이 설치된 것 입니다.# /usr/bin/wgetwhich wget# wget이 없다면 설치하여 줍니다.sudo apt-get install wget1. 기존 golang 제거sudo rm -rf /usr/local/go2. go 공식 사이트에서 새로운 go 버전 다운로드아래 사이트로 접속하여 새로운 go 버전의 링크를 가져옵니다.https://go.dev/dl/ All releases - The Go Programming Language g..

Go언어 2023.07.09

[vscode] golang debug

요즘 code editor를 vscode로 변경하면서 debug환경에 대한 설정을 진행하였습니다. 이 글의 목적은 간단하게 go언어 디버깅 환경을 구축하며, vscode의 debug 단축키 및 사용법에 대한 내용을 정리하였습니다.Extension 설치환경 구성은 매우 간단합니다. vscode extension에서 "go"라고 검색하여 해당 extension을 설치합니다.launch.json 구성vscode에서 디버깅 환경을 구성하기 위해 launch.json 파일을 생성해야 됩니다. "ctrl + shift + d" 단축키를 통해 "Run and debug" 창을 띄울 수 있습니다. 해당 창에서 "create a launch.json file"을 클릭하여 launch.json 파일을 생성합니다. 파일을 ..

ETC 2023.07.07

go work 사용해보기

go work를 사용하기 위해 반듯이 go1.18 이상의 go가 설치되어 있어야 합니다. go의 workspace는 회사에서 다른 개발자들과 협업을 하게 되면 모듈의 의존성에 대한 문제가 종종 발생하게 됩니다. 이럴 때 이러한 문제를 해결할 수 있는 것이 바로 go의 workspace입니다. 간단한 예시를 들자면 example이라는 모듈을 현재 회사에서 사용하고 있는데 example이라는 모듈에 기능을 추가하거나 기능을 변경할 경우 협업하고 있는 다른 개발자들에게 영향을 미치게 해서는 안 되는 경우가 있습니다. 이런 경우 "go work"를 통하여 다른 개발자들에게 영향을 미치지 않고 example 모듈을 수정하고 수정된 모듈을 이용하여 프로젝트 개발을 진행할 수 있습니다.해당 글은 아래 링크 go do..

Go언어 2023.07.06