Scale-out : 하나의 Server 보다는 여러 대의 Server가 나눠서 일을 하는 방법.
하나의 인터넷 서비스가 발생하는 트래픽이 많을 때 여러 대의 서버가 분산처리하여 서버의 로드율 증가, 부하량, 속도저하 등을 고려하여 적절히 분산처리하여 해결해주는 서비스입니다.
GOPATH만을 사용하여 의존성 관리 및 개발을 진행할 때는 모든 소스코드가 $GOPATH/src 디렉터리에 위치해야만 한다. 이 때 src의 하위 디렉터리 경로가 모듈 (패키지) 의 이름이 되는데, ... Github에서 소스코드를 관리하고 있다면 보통 github.com/(사용자 명)/(프로젝트 명) 과 같은 형식을 사용한다.
GOPATH 방식의 가장 큰 단점은, 개발을 위한 워크스페이스가 GOPATH에 고정되어 버린다는 점이다. 예를 들어 Go로 개발하고 있는 프로젝트가 여러 개 존재한다고 가정해보자. 그렇다면 모든 프로젝트의 워크스페이스를 단일 GOPATH로 잡아줘야 하는데, 그러면 각 프로젝트의 의존성 패키지가 서로 GOPATH에 섞이게 되어 사실상 의존성 관리가 불가능해지는 상황이 발생한다.
Go 버전 1.11 이후부터는 Module (모듈) 이라는 기능을 이용해 의존성을 관리할 수 있다.
Go Module 기능은 GO111MODULE 라는 환경 변수를 통해 활성화 할 수 있는데, 이 변수는 총 3가지의 값을 가질 수 있다.
- GO111MODULE=on : Go Module 기능을 사용한다.
- GO111MODULE=off : Go Module을 사용하지 않는, 위에서 설명한 GOPATH 방법으로 동작한다.
- GO111MODULE=auto : 현재 위치가 $GOPATH/src 의 하위 디렉터리라면 GOPATH의 방법으로 동작한다. 만약 현재 위치가 $GOPATH/src 가 아닌 외부 디렉터리라면 Go Module 방법으로 동작한다.
Go Module에서 가장 중요한 개념은 go.mod 라고 하는 파일인데, go.mod 파일에는 의존성 패키지의 목록이 저장되어 있다. 따라서 가장 먼저 이 파일을 생성해야 하는데, 이는 go mod init 명령어로 쉽게 생성할 수 있다.
go mod init 명령어 뒤에는 해당 프로젝트의 모듈 (패키지) 이름을 입력하면 되는데, 이는 GOPATH에서 지정했던 모듈 이름과 동일한 개념이라고 생각하면 된다.