
개발의 시작, 왜 환경 설정에서부터 막힐까요
Go 언어를 배우기로 결심하고 설레는 마음으로 터미널을 열었을 때, command not found: go라는 차가운 메시지를 마주한 적이 있나요? 혹은 분명 설치를 마쳤는데 패키지를 불러오려 하면 어디서 파일을 찾아야 할지 몰라 헤매는 상황 말이에요. 이런 경험은 입문 개발자라면 누구나 한 번쯤 겪는 아주 흔한 일이에요.
단순히 설치 파일을 실행하는 것만으로 모든 준비가 끝났다고 생각하기 쉽지만, 실제 프로덕션 환경이나 협업이 이루어지는 팀 단위 개발에서는 이야기가 완전히 달라져요. 환경 변수가 꼬이거나, 구식 방식인 GOPATH에 의존하거나, 팀원과 서로 다른 Go 버전을 사용하는 등의 문제는 나중에 코드 한 줄을 고치는 것보다 훨씬 더 큰 비용을 발생시키거든요.
우리가 흔히 말하는 Go 개발환경 코드 리뷰는 단순히 작성된 로직을 보는 것을 넘어, 이 프로젝트가 어떤 환경에서 어떻게 빌드되고 실행될 수 있는지를 검증하는 아주 중요한 과정이에요. 환경 설정이 제대로 되어 있지 않으면, 내 컴퓨터에서는 잘 돌아가던 코드가 동료의 컴퓨터나 서버에서는 작동하지 않는 ‘작동 불능’ 상태에 빠지게 돼요.
이 글에서는 단순히 Go를 설치하는 법을 알려주는 것을 넘어, 시니어 개발자가 환경 설정을 리뷰할 때 어떤 관점에서 문제를 찾아내는지, 그리고 어떤 안티패턴을 피해야 하는지를 깊이 있게 다뤄볼게요. 이 가이드를 끝까지 읽고 나면 여러분은 단순히 언어를 배우는 단계를 넘어, 지속 가능한 개발 환경을 설계할 수 있는 안목을 갖게 될 거예요.
이 글에서 함께 살펴볼 내용들
- 운영체제별 올바른 Go 설치 경로와 환경 변수 설정법
- Go Modules를 활용한 현대적인 프로젝트 구조 설계
- 코드 리뷰 관점에서 찾아내는 환경 설정 안티패턴
- 실무에서 바로 적용하는 개발 도구 최적화 팁
환경 설정 전 반드시 짚고 넘어가야 할 핵심 개념
본격적으로 명령어를 입력하기 전에, 우리가 지금 무엇을 만들고 제어하려 하는지 정확히 알아야 해요. Go는 다른 언어들과는 조금 다른 독특한 환경 관리 철학을 가지고 있거든요. 특히 최근 몇 년 사이 Go의 패키지 관리 방식이 완전히 바뀌었기 때문에, 이 부분을 모르면 과거의 잘못된 정보를 따라가다 길을 잃기 십상이에요.
가장 먼저 이해해야 할 것은 GOROOT와 GOPATH의 차이예요. GOROOT는 Go 언어 자체의 설치 경로를 의미하고, GOPATH는 과거에 사용하던 작업 공간의 개념이에요. 하지만 현대적인 Go 개발에서는 이 GOPATH라는 개념을 직접적으로 다루는 일이 줄어들었어요. 대신 우리는 Go Modules라는 혁신적인 시스템을 사용하게 되었죠.
Go Modules는 프로젝트의 의존성을 프로젝트 폴더 내부에서 독립적으로 관리할 수 있게 해주는 기능이에요. 덕분에 더 이상 모든 프로젝트를 특정 폴더(GOPATH/src) 안에 모아둘 필요가 없어졌어요.
환경을 설정할 때 우리가 결정해야 할 기준은 크게 세 가지예요. 첫째는 운영체제와의 호환성, 둘째는 도구(IDE)와의 연동성, 셋째는 팀원과의 환경 일관성이에요. 이 기준들을 바탕으로 어떤 설정 방식이 여러분의 현재 상황에 가장 적합한지 아래 표를 통해 비교해 보세요.
| 비교 항목 | 전통적인 방식 (GOPATH) | 현대적인 방식 (Go Modules) |
|---|---|---|
| 패키지 위치 | $GOPATH/src 내부로 제한 | 어느 디렉토리에서든 가능 |
| 의존성 관리 | 수동으로 패키지 다운로드 | go.mod 파일을 통한 자동 관리 |
| 버전 관리 | 여러 버전 혼용 시 충돌 위험 | 프로젝트별 독립적 버전 관리 |
| 추천 대상 | 유지보수 중인 오래된 프로젝트 | 신규 프로젝트 및 모든 현대적 개발 |
결론부터 말씀드리면, 지금 새로운 공부를 시작하거나 프로젝트를 만든다면 고민할 필요 없이 Go Modules 방식을 선택해야 해요. 만약 어떤 튜토리얼에서 프로젝트를 반드시 특정 폴더 안에 만들어야 한다고 강조한다면, 그 정보는 너무 오래된 것일 가능성이 높으니 주의가 필요해요.
실전! 완벽한 Go 개발 환경 구축 5단계
이제 이론은 충분해요. 실제로 여러분의 컴퓨터에 Go를 설치하고, 코드 리뷰를 받아도 부끄럽지 않을 만큼 깔끔한 환경을 만들어볼까요? 각 단계별로 무엇을 해야 하는지, 그리고 무엇을 조심해야 하는지 아주 상세하게 설명해 드릴게요.
STEP 1. 운영체제에 맞는 최적의 설치 방법 선택하기
가장 먼저 해야 할 일은 Go 바이너리를 설치하는 거예요. 운영체제마다 권장되는 방식이 다르니 본인의 환경을 확인하세요.
macOS 사용자라면, Homebrew를 사용하는 것이 가장 편리해요. 터미널에서 `brew install go` 한 줄이면 끝이죠. Homebrew는 나중에 버전을 업데이트할 때도 매우 편리한 관리 기능을 제공해요. 만약 Apple Silicon(M1, M2, M3) 칩을 사용 중이라면, 반드시 arm64 버전을 설치해야 최적의 성능을 낼 수 있어요.
Windows 사용자라면, 공식 홈페이지에서 제공하는 `.msi` 설치 파일을 다운로드하는 것을 추천해요. 설치 과정에서 ‘Add to PATH’ 옵션이 자동으로 선택되는데, 이걸 놓치지 마세요. 설치가 끝나면 반드시 명령 프롬프트(cmd)나 PowerShell을 새로 열어서 `go version`을 입력해 보세요. 버전 정보가 정상적으로 출력된다면 성공이에요.
Linux 사용자라면, 패키지 매니저(apt, yum 등)를 사용할 수도 있지만, 가급적 공식 홈페이지에서 타르볼(.tar.gz) 파일을 받아 직접 `/usr/local`에 압축을 푸는 방식을 권장해요. 패키지 매니저 버전은 간혹 너무 오래된 경우가 있어서 최신 Go 기능을 쓰지 못할 수도 있거든요.
STEP 2. Go Modules로 프로젝트 기초 공사하기
설치가 끝났다면 이제 프로젝트 폴더를 만들고 Go의 핵심인 모듈 시스템을 활성화해야 해요. 예전처럼 `GOPATH/src` 폴더를 찾아 헤맬 필요는 전혀 없어요. 여러분이 원하는 곳, 예를 들어 `Documents/projects/my-go-app` 같은 곳에 폴더를 만드세요.
터미널에서 해당 폴더로 이동한 뒤, 다음 명령어를 입력해 보세요.
`go mod init
명령어를 실행하면 폴더에 `go.mod`라는 파일이 생길 거예요. 이 파일이 바로 프로젝트의 설계도이자, 어떤 외부 라이브러리를 사용하는지 기록하는 중요한 문서예요. 이 파일을 통해 동료들은 여러분의 프로젝트를 그대로 복제해서 똑같은 환경에서 실행할 수 있게 되는 것이죠.
STEP 3. 생산성을 결정짓는 IDE와 LSP 설정
코드를 작성할 때 자동 완성이나 문법 오류 체크가 안 된다면 개발 속도는 현저히 떨어질 수밖에 없어요. Go 개발자들은 주로 VS Code나 GoLand를 사용해요.
VS Code를 사용한다면, 마켓플레이스에서 ‘Go’ 확장 프로그램을 반드시 설치하세요. 설치 후에는 `Ctrl+Shift+P`(macOS는 `Cmd+Shift+P`)를 눌러 Go: Install/Update Tools를 선택하고, 목록에 나오는 모든 도구를 체크해서 설치해야 해요. 이 도구들이 바로 Go의 언어 서버(gopls)를 포함한 핵심 기능들이에요. 이 과정이 누락되면 코드 리뷰에서 ‘자동 완성이 안 돼서 실수를 유발한다’는 지적을 받을 수 있어요.
GoLand를 사용한다면, 이미 대부분의 설정이 내장되어 있어 훨씬 편리해요. 다만, 프로젝트를 열었을 때 `go.mod` 파일을 인식하지 못한다면 설정에서 Go SDK 경로가 올바르게 잡혀 있는지 꼭 확인해야 해요.
STEP 4. 코드 리뷰 관점에서의 환경 설정 점검
이제 가장 중요한 부분이에요. 여러분이 작성한 프로젝트를 누군가 리뷰한다고 가정해 봅시다. 시니어 개발자는 코드를 보기 전에 다음과 같은 설정들을 먼저 체크할 거예요.
- go.mod 파일이 존재하는가? (GOPATH 방식의 흔적이 남아있다면 즉시 반려 대상이에요.)
- go.sum 파일이 Git에 포함되었는가? (의존성 무결성을 위해 `go.sum`은 반드시 버전 관리 시스템에 포함되어야 해요.)
- 하드코딩된 경로가 있는가? (예: `C:\Users\Admin\go\src…` 같은 경로가 코드나 스크립트에 있다면 절대 안 돼요. 반드시 환경 변수나 상대 경로를 사용해야 합니다.)
- 불필요한 의존성이 들어있는가? (`go mod tidy`를 실행하지 않아 사용하지 않는 패키지가 `go.mod`에 남아 있다면 깔끔하지 못한 코드로 간주돼요.)
이런 세세한 부분까지 신경 쓰는 습관이 바로 실력 있는 개발자로 가는 지름길이에요.
STEP 5. CI/CD를 고려한 환경 격리 연습
마지막 단계는 여러분의 환경이 ‘내 컴퓨터’를 벗어나도 안전한지 확인하는 거예요. 실제 서비스는 여러분의 노트북이 아니라 클라우드 서버(Docker 컨테이너 등)에서 돌아가니까요. 프로젝트 루트에 `.gitignore` 파일을 만들고, 로컬 설정 파일이나 임시 빌드 파일들이 저장소에 올라가지 않도록 관리하는 연습을 시작하세요.
간단한 시나리오를 하나 드릴게요. 만약 여러분이 프로젝트를 GitHub에 올렸을 때, 다른 사람이 `git clone`을 받고 나서 바로 `go run main.go`를 했을 때 에러 없이 실행된다면, 여러분은 최고의 환경 설정을 마친 거예요.
자주 하는 실수와 해결법 및 FAQ
환경 설정을 하다 보면 예상치 못한 오류가 발생하기 마련이에요. 당황하지 말고 아래의 케이스들을 참고해서 문제를 해결해 보세요.
자주 하는 실수와 해결법
❌ 실수: `GOROOT` 환경 변수를 수동으로 설정함
왜 발생하는가: Go 설치 경로를 직접 지정해줘야 한다고 오해하는 경우가 많아요.
✅ 해결법: GOROOT는 Go 설치 프로그램이 자동으로 관리하도록 두세요. 사용자가 직접 건드리면 오히려 버전 업데이트 시 충돌이 발생할 수 있어요.
❌ 실수: 패키지를 설치할 때 `go get`만 사용하고 `go.mod`를 업데이트하지 않음
왜 발생하는가: 과거의 패키지 설치 방식에 익숙해져서 모듈 시스템의 동작을 오해하기 때문이에요.
✅ 해결법: 패키지를 추가하거나 삭제한 뒤에는 반드시 go mod tidy 명령어를 실행해서 `go.mod`와 `go.sum` 파일을 최신 상태로 동기화하세요.
❌ 실수: 프로젝트 폴더 이름에 공백이나 특수문자를 포함함
왜 발생하는가: 일반적인 폴더 관리 습관이 터미널 환경에서는 문제를 일으킬 수 있어요.
✅ 해결법: 프로젝트 경로는 최대한 단순하게 만드세요. `my project`보다는 `my-project`처럼 하이픈을 사용하는 것이 안전해요.
❌ 실수: VS Code에서 자동 완성이 작동하지 않음
왜 발생하는가: Go 언어 서버(gopls)가 설치되지 않았거나 실행 중 오류가 발생한 상태예요.
✅ 해결법: VS Code 명령 팔레트에서 `Go: Install/Update Tools`를 실행하여 모든 도구를 다시 설치해 보세요.
❌ 실수: `go.sum` 파일을 `.gitignore`에 넣음
왜 발생하는가: 개인 설정 파일인 줄 알고 실수로 제외하는 경우가 있어요.
✅ 해결법: `go.sum`은 의존성의 체크섬을 담고 있는 필수 파일이에요. 반드시 Git 저장소에 포함시켜야 합니다.
자주 묻는 질문
Q. Go를 설치했는데 터미널에서 ‘go’ 명령어를 못 찾겠다고 해요. 어떻게 하죠?
가장 흔한 문제는 환경 변수 `PATH`에 Go의 바이너리 경로가 추가되지 않은 경우예요. 설치 경로(보통 `/usr/local/go/bin` 또는 Windows의 경우 `C:Goin`)가 시스템의 PATH 변수에 포함되어 있는지 확인하고, 추가한 뒤에는 반드시 터미널을 완전히 껐다가 다시 켜야 해요.
Q. GOPATH를 꼭 설정해야 하나요?
현대적인 Go 개발(Go Modules 사용 시)에서는 직접적으로 설정할 필요가 거의 없어요. 다만, `go install`로 설치한 실행 파일들이 저장되는 위치를 관리하고 싶다면 `GOBIN` 정도만 신경 쓰면 돼요. 기본적으로는 건드리지 않는 것이 가장 깔끔해요.
Q. 프로젝트마다 Go 버전을 다르게 쓸 수 있나요?
네, 가능해요! `go version` 명령어로 확인했을 때 설치된 버전이 프로젝트 요구 사항과 다르다면, `asdf`나 `gvm` 같은 버전 관리 도구를 사용하는 것이 좋습니다. 하지만 입문 단계라면 우선 하나의 안정적인 최신 버전을 사용하는 것에 집중하세요.
Q. `go mod tidy`는 언제 실행하는 게 좋나요?
코드를 작성하는 도중 수시로 실행해도 좋지만, 특히 새로운 라이브러리를 추가했을 때, 사용하지 않는 라이브러리를 삭제했을 때, 그리고 Git에 코드를 커밋하기 직전에는 반드시 실행하는 습관을 들이는 게 좋아요.
지속 가능한 개발 환경을 위한 마지막 점검
환경 설정은 한 번 하고 끝나는 이벤트가 아니라, 프로젝트가 살아있는 동안 계속해서 관리해야 하는 기반 시설과 같아요. 오늘 배운 내용들을 바탕으로 여러분의 개발 환경이 탄탄한지 다시 한번 확인해 보세요.
- Go Modules 기반의 go.mod 시스템을 적극 활용하세요.
- 운영체제별 공식 설치 경로를 준수하고 PATH 설정을 확인하세요.
- IDE의 Go 도구(LSP 등)를 최신 상태로 유지하세요.
- 의존성 관리는 반드시
go mod tidy로 마무리하세요. - 하드코딩된 절대 경로는 코드 리뷰의 주요 퇴출 대상입니다.
go.sum파일은 반드시 Git에 포함시켜 무결성을 유지하세요.
이제 여러분은 단순히 설치를 끝낸 입문자가 아니라, 프로덕션 환경을 이해하는 준비된 개발자로서 첫발을 내디뎠어요. 환경 설정 때문에 겪었던 스트레스는 이제 뒤로하고, 본격적으로 Go의 아름다운 문법과 강력한 성능을 즐길 준비가 되었을 거예요.
🚀 오늘 바로 실천해 보세요!
- 오늘 할 일: 현재 내 컴퓨터의 `go version`을 확인하고, `go mod init`으로 테스트 프로젝트 만들기
- 이번 주 할 일: VS Code나 GoLand의 모든 Go 도구를 설치하고 자동 완성이 완벽한지 테스트하기
- 실행 직전: 작성한 테스트 프로젝트를 GitHub에 올리고, `go mod tidy`가 정상 작동하는지 확인하기
환경 설정이 완벽해졌다면, 이제 코드를 짤 차례예요. Go의 철학을 더 깊게 이해하고 싶다면 아래의 시리즈 글도 함께 읽어보며 실력을 완성해 보세요!
관련 시리즈 글도 함께 읽고 실력을 완성하세요: Go 설치와 개발환경 설정 완전 가이드 보러가기