제가 Golang을 개발한 지는 벌써 5년이 넘었고, 그동안 Golang을 사용하는 두 개의 회사에서 근무하며 많은 개발자들과 협업해 왔습니다. 여러 팀과 다양한 프로젝트를 경험하면서 가장 크게 느낀 점 중 하나는 생각보다 많은 Golang 개발자들이 디버깅 기능과 유닛 테스트를 충분히 활용하지 않고 있다는 것이었습니다. 특히 Println 디버깅에만 의존하거나, 테스트 코드를 ‘있으면 좋은 것’ 정도로만 생각하는 경우도 꽤 많았습니다. 하지만 규모가 커지는 서비스에서는 이런 방식이 유지보수성과 개발 효율을 크게 떨어뜨릴 수 있습니다.
그래서 이번 포스팅에서는 Golang 개발자가 디버깅과 유닛 테스트를 어떻게 하면 보다 효과적으로 활용할 수 있을지, 실무 관점에서 구체적으로 이야기해보려고 합니다.
이번 글에서 사용할 개발 도구는 VSCode입니다. 많은 Golang 개발자들이 Goland와 VSCode를 함께 고려하지만, 그중에서도 VSCode는 무료이면서도 확장성과 기능이 매우 뛰어난 IDE로 널리 사용되고 있습니다. 특히 Go 확장팩을 통해 디버깅, 코드 분석, 테스트 실행 등 핵심 기능을 강력하게 지원하기 때문에 초보자부터 숙련자까지 모두 효율적으로 개발 환경을 구성할 수 있습니다.
VSCode에서 golang 디버깅 설정하기
Go로 개발하다 보면 fmt.Println()만으로는 디버깅의 한계를 금방 느끼게 됩니다. 특히 복잡한 비즈니스 로직이나 goroutine, channel 같은 동시성 코드를 다루다 보면 “지금 이 값이 왜 이렇게 나오지?”라는 의문이 자주 생기는데, 이때 단순한 출력문만으로는 문제의 원인을 정확히 파악하기 어렵습니다. 이런 상황에서는 VSCode 디버거를 활용해 코드를 한 줄씩 실행해 보고, 각 단계에서 변수의 상태를 직접 확인하는 방식이 훨씬 효율적입니다.
먼저, VSCode의 Extensions 메뉴에서 Go 확장팩을 설치합니다. (이미 설치되어 있다면 이 단계는 건너뛰셔도 됩니다.)

본격적으로 디버깅을 시작하기에 앞서, VSCode에서 Go 디버깅 환경을 구축하기 위해 필요한 launch.json과 settings.json 설정을 간단히 살펴보겠습니다.
디버깅을 진행하려면 프로젝트 내에 launch.json 파일이 필요합니다. VSCode에서 F5 키를 누르거나, 좌측의 Run and Debug 아이콘을 클릭한 후 "create a launch.json file"을 선택합니다. Go 환경에 맞는 설정을 선택하면 기본적인 .vscode/launch.json 파일이 생성됩니다.
./vscode/launch.json
{
// IntelliSense를 사용하여 가능한 특성에 대해 알아보세요.
// 기존 특성에 대한 설명을 보려면 가리킵니다.
// 자세한 내용을 보려면 https://go.microsoft.com/fwlink/?linkid=830387을(를) 방문하세요.
"version": "0.2.0",
"configurations": [
{
"name": "My Golang Launch",
"type": "go",
"request": "launch",
"mode": "auto",
"program": "${fileDirname}",
"env": {}
}
]
}
여기서 한 가지 중요한 점이 있습니다. launch.json에 설정한 env 값은 유닛 테스트(testing 패키지) 환경에서는 적용되지 않습니다. 즉, 디버깅 모드에서는 환경 변수가 정상적으로 적용되지만, go test를 실행하는 테스트 환경에서는 해당 설정이 반영되지 않습니다. 만약 유닛 테스트 실행 시에도 환경 변수를 지정하고 싶다면 .vscode/settings.json 파일에 go.testEnvVars 설정을 추가해야 합니다. 이 설정을 통해 테스트 실행 시 필요한 환경 변수를 별도로 지정할 수 있으며, 실제 서비스 코드와 동일한 환경에서 테스트를 실행할 수 있기 때문에 안정적인 테스트가 가능합니다.
launch.json 작성 방법에 대한 자세한 내용은 공식 도큐먼트에서 확인하세요 (공식문서링크)
./vscode/settings.json
{
"go.testEnvVars": {
"ENV_A": "AAA",
"ENV_B": "BBB",
"ENV_C": "CCC"
}
}
지금까지 설정한 파일들을 기반으로, 실제 유닛 테스트 환경에서 디버깅이 정상적으로 동작하는지 그리고 환경 변수가 제대로 적용되는지를 확인해 보겠습니다.
디버깅 실습하기
pkg/env/env_test.go 파일에 아래 사진과 같이 테스트 코드를 작성한 뒤 디버깅을 실행했습니다. 테스트 디버깅을 시작하는 방법은 간단합니다. VSCode에서는 테스트 함수(TestEnv) 위에 run test | debug test 버튼이 표시되는데, 여기서 debug test 버튼을 클릭하면 해당 테스트 함수만 바로 디버깅 모드로 실행할 수 있습니다.
이 기능을 활용하면 테스트 실행 흐름을 단계별로 살펴보고, 설정한 환경 변수(go.testEnvVars)가 테스트 실행 환경에 정확히 반영되는지 직접 확인할 수 있습니다.

위 사진에서 볼 수 있듯이, 브레이크포인트를 활용하면 코드를 한 줄씩 단계적으로 실행해 보면서 각 변수의 값을 직접 확인할 수 있습니다. 이를 통해 코드의 흐름을 보다 명확하게 파악할 수 있으며, 예상과 다른 값이 어디에서 발생하는지도 쉽게 찾을 수 있습니다.
또한 테스트 환경에서 설정한 환경 변수 역시 디버깅 과정에서 정상적으로 적용되어 있는 것을 확인할 수 있습니다.
'Go언어' 카테고리의 다른 글
| 안전하게 개발하기 레츠GO! #3 go benchmark (0) | 2025.11.20 |
|---|---|
| 안전하게 개발하기 레츠GO! #2 go testing (0) | 2025.11.19 |
| Go언어의 benchmark와 test (0) | 2025.11.18 |
| Go언어에서의 Generic 이해하기 (1) | 2025.03.27 |
| [addlicense] golang 프로젝트에 라이센스 추가하기 (0) | 2024.04.29 |