go 14

안전하게 개발하기 레츠GO! #6 TestMain, testing.M

TestMain과 testing.M은 Go 언어에서 패키지 단위의 테스트 실행 흐름을 통제하기 위해 짝을 이루어 사용되는 핵심 요소입니다. 일반 애플리케이션에서 main() 함수가 프로그램의 시작점 역할을 하듯, 테스트 환경에서는 TestMain이 그 역할을 담당합니다. TestMain이란?TestMain은 특정 패키지 내 테스트들의 전역 진입점(Entry Point) 역할을 하는 사용자 정의 함수입니다.기본적으로 go test 명령어를 실행하면, Go의 내장 테스트 러너가 패키지 내의 모든 TestXxx 함수를 알아서 찾아 실행합니다. 하지만 패키지 내에 TestMain 함수가 정의되어 있다면, Go 러너는 개별 테스트들을 바로 실행하지 않고 오직 TestMain 함수만을 최초로 호출하여 실행 제어권을..

Go언어 2026.04.01

go generic 이해하기

Generic(제네릭)이란?Go 1.18부터 도입된 제네릭(Generic) 기능은 하나의 함수나 타입이 다양한 타입을 처리할 수 있도록 해주는 기능입니다. 제네릭(Generics)이 도입된 지 꽤 시간이 흘렀지만, 실무 환경에서는 기존의 `interface{}`와 타입 단언(Type Assertion) 패턴에 익숙해져 제네릭을 적극적으로 활용하지 못하는 경우가 많습니다. 이번 문서에서는 Golang 제네릭의 핵심 개념부터, 범용 자료구조, 실무 유틸리티 함수, 그리고 아키텍처 레벨에서의 고급 활용법까지 단계별로 정리해 보겠습니다. 제네릭의 핵심은 "타입(Type)을 파라미터로 받는다"는 것입니다. 함수나 구조체를 작성할 때 구체적인 타입(`int`, `string` 등)을 미리 정하지 않고, 실제로 호..

Go언어 2026.03.21

go version upgrade (MacOS)

맥북에서 개발을 하다 보면 새로운 기능이나 보안 패치를 위해 Go 언어의 버전을 올려야 할 때가 있습니다. 만약 처음에 `Homebrew`를 이용해 Go를 설치하셨다면, 아주 간단한 명령어 몇 줄만으로 최신 버전으로 업그레이드할 수 있습니다.오늘은 Homebrew를 이용한 Go 버전 업그레이드 방법과, 기존 프로젝트에 새로운 버전을 적용하는 방법까지 한 번에 알아보겠습니다. 현재 설치된 Go 버전 확인하기업데이트를 진행하기 전에, 현재 맥에 설치되어 있는 Go의 버전을 먼저 확인합니다. 터미널(Terminal)을 열고 아래 명령어를 입력해 주세요.go version출력 결과로 go version go1.x.x darwin/arm64 처럼 현재 사용 중인 버전이 나타납니다. Homebrew를 통한 Go 업..

Go언어 2026.03.21

안전하게 개발하기 레츠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

[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