[이 포스팅은 Windows 환경을 기준으로 작성하였습니다.]
GoLand 설치 이후 개발을 진행하던 도중 환경변수가 꼬이는 탓에 엄청난 삽질을 하고 결국 싹 밀고 다시 정리해서 해결하였다.
이 글을 통해 Windows 환경에서 여러 Go 언어 버전에 대한 관리와 GoLand 를 사용한 개발 시 GOROOT, GOPATH 와 같은 환경변수의 관리 및 정리를 기록하려고 한다.
GOROOT
java 에 비유하자면 JAVA_HOME 같은 환경변수로 Go SDK 를 설치한 경로를 지정하는 환경변수이다.
Windows 에서 Go 를 설치하면 기본으로 C:\Program Files\go 경로에 설치가 되고 동시에 기본 GOROOT 의 경로가 된다.
GOPATH
개발하는 Go 프로젝트에서 import 할 모듈들이 설치 및 관리되는 경로를 지정하는 환경변수이다.
GoLand 에서는 시스템 환경 변수에 지정된 GOPATH 외에 자체적으로 프로젝트 별로 GOPATH 를 관리할 수도 있는 기능이 있기 때문에 여러 프로젝트를 진행하는 경우 깔끔한 관리를 하기에 용이하다.
문제점
프로젝트마다 Go 버전이 다르고 각 프로젝트별로 사용하는 모듈과 패키지들이 늘어나면서 초기에 셋팅한 환경변수에 문제가 생긴 것을 알게 되었다. (권한 문제 + 프로젝트가 분리되면서 기존에 사용하던 의존성 패키지들이 제대로 연동이 안 되는 문제가 발생)
여러 고생을 하다가 다시 처음부터 하는 마음으로 모든 Go SDK 를 삭제하고 패키지들을 삭제하였고 환경변수들도 다시 잡기 시작하였다.
해결 과정
"Go 버전 관리를 어떻게 하면 쉽고 간단하게 할 수 있을까?"
Windows 환경에서 Go SDK 를 직접 설치하면 기본으로 C:\Program Files\go 경로에 설치가 되지만 GoLand 를 통해 SDK 를 설치하면 %USERPROFILE%\go 경로에 설치가 된다.
Go SDK 버전이 점차 늘어났고 Go SDK 의 설치 경로가 분리되면서 GoLand 가 GOROOT 를 관리해주지만 정작 사용자 입장에서 GOROOT 의 폴더가 분리된 꼴이 되었다.
이를 해결하고자 기본 GOROOT 경로를 C:\Program Files\go 로 잡았더니 GoLand 에서 접근은 가능하지만 새로운 버전의 SDK 를 설치할 때 권한 문제로 인해 계속 실패하는 문제가 발생하였다.
이를 위해 Go SDK 경로를 %USERPROFILE%\go 로 통일하였고 GOROOT 환경 변수는 GoLand 에 모두 넘기고 시스템 환경 변수에서는 삭제하기로 하였다.
추가로 버전에 대한 확장성을 높이기 위해 설치되는 GOROOT 폴더의 구조를 아래와 같이 구성하였다.
(%USERPROFILE%\go 경로에서 go%version% 의 네이밍을 사용한 구조 -> [ex] 1.19.1 버전의 경우 go1.19.1 )
이러한 경로를 구성해놓으면 GoLand 를 통해 Go SDK 버전 관리 및 스위칭이 매우 편리해지는 장점이 있다.
(GoLand 를 통해 SDK 설치 시 go1.19.1 과 같은 네이밍을 자동으로 붙여준다.)
"GOPATH 관리에 대한 편의성"
GOPATH 또한 GoLand 에서 프로젝트 단위로 관리가 가능하기 때문에 큰 문제는 없었지만 자동으로 bin 을 잡아주지 않았고 초반에 많은 삽질로 인해 GOPATH 를 프로젝트별로 잡은 것이 문제였다.
또한 GOROOT 와 GOPATH 가 겹치면서 구조가 헷갈리게 꼬여버리면서 어떻게 하면 더 직관적으로 관리할 수 있을까 고민해보았다.
%USERPROFILE%\go 경로가 GOROOT 로 잡힌 상황에서 동일한 경로를 GOPATH 로 잡으면 추후에 관리가 힘들어질 것으로 판단하고 %USERPROFILE%go 경로 밑에 gopath 라는 폴더를 새로 만들어서 GOPATH 로 설정하였다.
그 결과 아래와 같은 환경으로 다시 구축하였고 큰 문제가 생기지 않는 이상 현재의 구조를 계속 유지하려고 한다.
우선 GoLand 와는 별개로 GOPATH 는 시스템 환경 변수에 추가를 하였다. (시스템 변수 X, 사용자 변수 O)
추가로 사용자 변수에 있는 path 에 다음과 같이 추가하였다.
이후 GoLand 를 재기동하고 File -> Settings -> Go -> GOPATH 에 들어가 보면 아래와 같이 Global GOPATH 가 잡힌 것을 확인할 수 있다.
여기까지 환경이 구성이 됐다면 GoLand 의 어떤 터미널에서 go package 를 install 해도 동일하게 모든 프로젝트에서 사용할 수 있는 환경이 준비된 것이다.
또한 Go SDK 는 프로젝트 별로 GoLand 내부에서 직접 설치 및 스위칭을 할 수 있어서 매우 편리한 개발을 할 수 있게 되었다.
'Go언어' 카테고리의 다른 글
[Golang] go binary 실행시 /lib64/libc.so.6: version `GLIBC_2.XX' not found 에러 해결 방법 (1) | 2024.05.30 |
---|---|
[Go언어] 알파인리눅스(Alpine Linux)에서 Go 1.20이상 실행하기 (__res_search: symbol not found, libresolv.so.2) (0) | 2023.10.23 |
[Go언어] 구조체 패딩 & 패킹 (Golang struct padding & packing) (0) | 2022.11.16 |
[Golang] Go 언어 module (mod) 설정 (1) | 2022.09.29 |
[Golang] go 언어 개발 시작하기 (0) | 2022.09.29 |