Go (Golang) 사용하기
개요
Go(일반적으로 Golang으로도 불림)는 Google에서 설계하고 오픈 소스로 공개한 정적 타입의 컴파일형 프로그래밍 언어입니다. 간결한 문법, 매우 빠른 컴파일 속도, 가벼운 goroutine
과 channel
기반의 강력한 동시성 처리, 효율적인 내장형 가비지 컬렉션 등으로 개발자들에게 사랑받고 있습니다. Go는 고성능 네트워크 서비스, 분산 시스템, 마이크로서비스, 명령행 도구 개발에 특히 강점을 보이며, 현대 클라우드 네이티브 및 백엔드 개발에 주요 선택지 중 하나로 자리 잡았습니다.
ServBay의 Go 지원
ServBay는 macOS와 Windows를 모두 지원하는 올인원 로컬 웹 개발 환경으로, Go 개발자에게 매우 강력하고 매끄러운 환경을 제공합니다. ServBay를 사용하면 복잡한 환경 변수(GOROOT
, GOPATH
) 설정 없이, 다양한 Go 버전을 쉽고 빠르게 설치・관리・전환할 수 있어, Go 개발 환경의 초기화와 유지 관리가 크게 간소화됩니다.
ServBay는 완전한 Go 툴체인과 광범위한 Go 버전을 제공하므로, 다양한 프로젝트의 요구를 만족시킬 수 있습니다:
- Go 1.11
- Go 1.12
- Go 1.13
- Go 1.14
- Go 1.15
- Go 1.16
- Go 1.17
- Go 1.18
- Go 1.19
- Go 1.20
- Go 1.21
- Go 1.22
- Go 1.23
- Go 1.24 (향후 ServBay 업데이트에서 더 최신 버전 지원 가능)
Go Modules 지원
ServBay 환경에서는 Go Modules가 기본 활성화되어 있으며, 의존성 관리에 Go Modules 사용을 권장합니다. 이는 Go 공식적으로 1.11부터 도입된 표준 패키지 관리 방안입니다. ServBay 내 터미널에서 go mod
명령(go mod init
, go get
, go mod tidy
등)을 바로 활용할 수 있으며, 기존 $GOPATH
설정을 신경 쓸 필요는 없습니다.
사전 준비 사항
- macOS에 ServBay를 정상적으로 설치하고 실행 중임
- Go 언어 기본 프로그래밍 지식 보유
- 터미널에서 기본 명령어 사용에 익숙함
Go 설치 방법
ServBay의 직관적인 GUI 패널을 통해 Go 개발 환경을 손쉽게 설치할 수 있습니다:
- ServBay 애플리케이션을 실행합니다.
- 왼쪽 내비게이션 바에서
패키지
를 클릭합니다. - 펼쳐진 패키지 목록에서
Go
카테고리를 찾습니다. Go
를 클릭하여 하위 목록을 펼칩니다. ServBay에서 지원하는 여러 Go 버전을 확인할 수 있습니다.- 원하는 Go 버전을 선택(보통 최신 안정 버전인 Go 1.24를 추천)하고, 해당 버전 옆의
설치
버튼을 클릭합니다. - ServBay가 자동으로 선택한 Go 버전을 다운로드하고 설치합니다. 설치 시간은 인터넷 속도에 따라 달라질 수 있습니다.
설치가 완료되면 해당 버전이 '설치됨' 표시로 바뀌며, 필요할 경우 추가 버전 설치 및 버전 전환도 가능합니다.
Go 사용하기
Go 설치 후, 바로 OS 터미널에서 go
명령어를 사용할 수 있습니다.
Go가 정상적으로 설치되었는지 및 현재 활성화된 버전을 확인하려면 아래 명령어를 실행하세요:
bash
go version
1
다음과 같은 출력이 나오면, ServBay를 통해 Go가 정상적으로 설치된 것입니다:
go version go1.24.1 darwin/arm64
1
간단한 Go 웹 애플리케이션 빌드 및 실행
이제 기초적인 Go HTTP 서버를 만들어, ServBay 환경에서 컴파일하고 실행해보겠습니다.
프로젝트 디렉터리 생성: ServBay의 기본 웹 루트 디렉터리인
/Applications/ServBay/www
경로 아래에 새로운 Go 프로젝트 폴더를 생성하는 것을 추천합니다. 예시로go-servbay-demo
폴더를 생성합니다.bashcd /Applications/ServBay/www mkdir go-servbay-demo cd go-servbay-demo
1
2
3Go Modules 초기화: 프로젝트 루트(
go-servbay-demo
)에서go mod init
명령으로 Go Modules를 초기화합니다. 일반적으로 모듈 경로는 코드 저장소나 프로젝트를 대표하는 고유 식별자를 씁니다. 여기서는 폴더명을 예시로 사용합니다.bashgo mod init go-servbay-demo
1이 명령으로, 프로젝트 폴더에
go.mod
파일이 생성되어 의존성을 관리할 수 있습니다.Go 소스코드 작성:
main.go
라는 파일을 만들고, 아래 코드를 복사해서 붙여넣습니다:gopackage main import ( "fmt" "log" "net/http" "os" ) func handler(w http.ResponseWriter, r *http.Request) { hostname, _ := os.Hostname() fmt.Fprintf(w, "Hello from Go on ServBay!\nHostname: %s\nPath: %s\n", hostname, r.URL.Path) } func main() { http.HandleFunc("/", handler) port := "8080" // 서비스가 리스닝할 포트 지정 log.Printf("Go web server starting on port %s...", port) log.Printf("Access it at http://localhost:%s", port) // HTTP 서버 시작 err := http.ListenAndServe(":"+port, nil) if err != nil { log.Fatalf("Error starting server: %s\n", err) } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27위의 코드는 로컬의 8080 포트에서 동작하는 간단한 HTTP 서버를 만듭니다. 모든 요청에 대해 "Hello from Go on ServBay!", 호스트명, 요청 경로가 포함된 텍스트로 응답합니다.
Go 애플리케이션 실행: 계속해서 ServBay 터미널에서 프로젝트 폴더(
/Applications/ServBay/www/go-servbay-demo
) 내에서 아래 명령어로 컴파일 및 실행하세요:bashgo run main.go
1실행이 성공하면, 다음과 같은 로그를 확인할 수 있습니다:
2024/05/20 15:00:00 Go web server starting on port 8080... 2024/05/20 15:00:00 Access it at http://localhost:8080
1
2브라우저로 접속: 웹 브라우저를 열고
http://localhost:8080
에 접속하면, "Hello from Go on ServBay! Hostname: your-mac-hostname Path: /"와 같이 응답이 표시됩니다.
ServBay 웹사이트 설정을 통한 리버스 프록시 사용 (강력 추천)
8080 포트를 직접 사용해도 되지만, 실무 환경과 유사하게 ServBay의 웹 서버(Caddy, Apache 또는 Nginx)를 통해 리버스 프록시와 별도의 도메인(go-app.servbay.demo
등)을 사용하는 것이 훨씬 효과적입니다. 이로써 표준 HTTP/HTTPS 포트로 접속이 가능하고, ServBay의 자동 HTTPS/여러 서비스 연동 등 추가 기능을 쉽게 활용할 수 있습니다.
- ServBay에서 사이트 생성:
- ServBay GUI를 열고,
웹사이트
섹션으로 이동합니다. 새 웹사이트 추가
버튼 클릭- 도메인: 원하는 로컬 개발 도메인 입력, 예시
go-app.servbay.demo
- 사이트 유형: 리버스 프록시 선택
- IP 주소:
127.0.0.1
입력 - 포트:
8080
입력
- ServBay GUI를 열고,
설정 저장 및 서버 재시작: ServBay GUI에서 설정을 저장한 후, 해당 웹 서버(Caddy 또는 Nginx)를 재시작하거나 재로드하여 새 설정을 적용하세요.
도메인으로 앱 접근: 이제 브라우저에서
https://go-app.servbay.demo
에 접속하면, Go 서버에 프록시되어 동작하는 웹 애플리케이션을 확인할 수 있습니다.
Go 버전 관리
ServBay에서는 다양한 Go 버전을 매우 손쉽게 전환 및 관리할 수 있습니다.
- 버전 전환: ServBay GUI의
패키지
->Go
메뉴에서 설치된 Go 버전 목록이 표시됩니다. 왼쪽 메뉴의설정
에서 한 버전을 기본값으로 지정할 수 있습니다. - 변경 확인: 버전 전환 후 터미널을 새로 열고
go version
을 실행하여, 선택한 버전이 제대로 적용되었는지 확인하세요.
.servbay.config
로 프로젝트별 Go 버전 관리
전역 Go 버전 뿐만 아니라, ServBay는 프로젝트 루트에 .servbay.config
파일을 두어, 프로젝트별로 Go 버전을 세밀하게 관리하는 기능을 제공합니다.
동작 방식:
ServBay 통합 터미널에서 cd
로 .servbay.config
파일이 위치한 디렉터리로 이동하면, 해당 파일을 자동 인식해 설정을 읽습니다. 이때 GO_VERSION
값에 따라 현재 터미널 세션에서 임시로 해당 Go 버전을 사용하도록 환경을 변경합니다.
설정 파일 형식:
.servbay.config
는 매우 간단한 키=값 구조의 텍스트 파일입니다. 프로젝트별 Go 버전 지정은 아래처럼 아주 쉽게 할 수 있습니다:
ini
# .servbay.config 파일 예시
# 이 프로젝트에서 Go 1.22 버전 사용 지정
GO_VERSION=1.22
# 동시에 다른 개발 도구 버전도 지정할 수 있습니다
# PHP_VERSION=8.3
# NODE_VERSION=20
# PYTHON_VERSION=3.11
# ... 기타 다양한 설정 ...
# GOPROXY=https://goproxy.cn,direct
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
장점:
- 자동 버전 전환: 전역 설정 변경 없이, 프로젝트 디렉터리 진입만으로 지정 버전 자동 적용
- 프로젝트 격리: 각 프로젝트별로 예측 가능한 환경에서 빌드・실행 가능, 버전 충돌 방지
- 팀 협업:
.servbay.config
를 Git 등 버전 관리에 포함하면, 복제 시 팀원이 동일한 Go 베이스 환경을 쉽게 맞출 수 있음
사용 사례:
예를 들어, 두 가지 프로젝트의 요구가 서로 다를 때
project-a
→ Go 1.12 필요project-b
→ 최신 Go 1.22 필요
각 프로젝트 루트에 각각 아래와 같이 .servbay.config
를 만들면 됩니다:
/Applications/ServBay/www/project-a/.servbay.config
:iniGO_VERSION=1.12
1/Applications/ServBay/www/project-b/.servbay.config
:iniGO_VERSION=1.22
1
ServBay 터미널에서 각각의 프로젝트 폴더로 이동 후 go version
실행 시, 해당 프로젝트에 맞는 Go 버전이 자동 활성화됩니다.
참고: .servbay.config
는 ServBay 인식용 베이스 Go 버전만 변경합니다. 의존성/패키지 관리에는 항상 Go Modules(go.mod
파일) 사용을 권장합니다.
자주 묻는 질문 (FAQ)
Q: ServBay 터미널에서
go
명령 실행 시 "command not found" 오류가 납니다.A: 먼저 터미널의 PATH 환경변수가 ServBay 기준으로 제대로 설정되어 있는지 확인하세요. 그리고 ServBay GUI의
패키지
->Go
에서 적어도 하나의 Go 버전이 설치되어 있고, 기본값으로 활성화된 버전이 있는지도 점검해야 합니다.Q: ServBay에서 Go를 최신 버전으로 업데이트하려면 어떻게 해야 하나요?
A: 정기적으로 ServBay의
패키지
->Go
메뉴를 확인하세요. 새로운 Go 버전이 지원되면 리스트에 표기되며, 그 옆의 설치 버튼을 통해 바로 설치 가능합니다. 설치 후 GUI에서 기본 버전 전환만 하면 곧 사용 가능합니다.Q: Go Modules 사용 시 네트워크 문제나 패키지 다운로드가 느린데, 해결 방법이 있나요?
A: Go Modules는 기본적으로
proxy.golang.org
에서 패키지를 다운로드합니다. 중국이나 글로벌 네트워크 제한 환경에서는 연결 문제가 생길 수 있습니다. 이럴 땐GOPROXY
환경 변수를https://goproxy.cn
또는https://goproxy.io
등 빠른 프록시로 변경하세요. ServBay의 글로벌 설정 혹은.servbay.config
에서 (GOPROXY=https://goproxy.cn,direct
) 손쉽게 설정할 수 있습니다.Q: Go 웹앱 실행 시 "port already in use" 에러가 발생합니다.
A: 해당 포트(예: 8080)가 이미 다른 프로세스에서 사용 중임을 의미합니다. Go 코드의 리스닝 포트를 변경(예: 8081, 9000 등)하거나, 해당 포트를 점유 중인 프로세스를 찾아서 종료해야 합니다. macOS에서는
lsof -i :<포트번호>
(예:lsof -i :8080
)로 PID를 찾은 뒤,kill <PID>
명령으로 종료할 수 있습니다.Q:
.servbay.config
와 전역 Go 버전 전환의 차이점은? 무엇을 언제 써야 하나요?A: GUI에서의 전역 전환은 시스템 전체 디폴트 Go 버전을 바꿉니다. 반면
.servbay.config
는 프로젝트 폴더에 들어갈 때만 해당 세션의 Go 버전을 임시로 바꿉니다. 프로젝트별 버전 요구사항이 있을 땐.servbay.config
사용을 적극 권장합니다. 특히 여러 프로젝트를 병행하거나, 각기 다른 Go 버전이 필요한 팀 협업 시 환경 통제와 재현성이 최고입니다. 자주 활용하는 기본 버전 지정에는 전역 설정이 효과적입니다.
요약
ServBay는 macOS에서 Go(Golang) 개발을 위한 최고의 로컬 환경을 제공합니다. 직관적인 GUI 덕분에 여러 버전의 Go 설치・관리와 .servbay.config
를 통한 프로젝트별 버전 제어가 간단합니다. Go Modules 기반 의존성 관리, 내장 웹서버의 리버스 프록시/앱 호스팅 기능과 결합해, Go 프로젝트를 빠르게 구축・실행・테스트할 수 있습니다. ServBay는 환경 설정의 복잡함을 극적으로 줄여, 개발자가 Go 코드 작성과 혁신에만 집중할 수 있도록 돕습니다.