go dep, AWS code pipeline
개발 환경 및 사용한 기술
- os : os x
- lang : Go
- dependency : dep
- build server : Aws CodeBuild
- deploy server : Aws Ec2 T2 micro
- etc : Aws CodePipeline, Aws Elastic beanstalk , GitHub, …
개요
저번 금요일 회사에서 크롤러도 짜고 oAuth도 해보고 GO언어 스터디를 하다가 제이슨이 단순히 코드, 문법 공부는 학부생 수준에서도 하는 일이고 개발자는 의존성, 배포, 관리 이슈를 생각해야된다고 했습니다. 이 말을 듣고 가슴이 철렁했습니다. 저는 개발을 잘하려면 한참 멀었군요… 어째튼 그렇게 되서 문법 공부하던 중에 의존성 관리와 배포환경 구성을 시작했습니다.
공부하면서 짠 부분은 Go
로 google oauth 예시를 배끼고 로그인 api 개발한 소스였습니다.
의존성 관리
go get [repo]
위의 방법으로 패키지를 다운 받다가 dep
을 쓰기로 했습니다.
dep
은 의존성 관리 도구로 공식문서엔 “official experiment” 라고 합니다.
설치 방법은 다음 3가지 중 한 가지로 설치하면 됩니다.
# 1번
brew install dep
brew upgrade dep
# 2번
curl https://raw.githubusercontent.com/golang/dep/master/install.sh | sh
# 3번
go get -u github.com/golang/dep/cmd/dep
도큐멘트를 보고 싶으면 다음 링크를 참조하세요
https://golang.github.io/dep/docs/introduction.html
dep 로컬
처음에는 유저 밑에 go 폴더에 패키지들을 담아두고 사용하고 있었습니다.
/usr/local/go/
~/go
dep
을 로컬로 따로 구성하기 위해 Go의 환경변수 중 $GOPATH를 프로젝트 파일로 잡았습니다.
/worksapce/pojectName
projectName
|
|- src -- main.go
| |
| |-- etc
src 파일로 이동해 dep의 5개 밖에 없는 명령어 중 init로 환경을 구성합니다.
dep init
ls
## 다음 3가지가 새로 생김
Gopkg.toml Gopkg.lock vendor/
이제 코드를 빌드하기 위해 실제 의존성을 추가해줍시다.
dep ensure
dep ensure
는 vendor 디렉토리에 패키지들을 가져옵니다. add 명령어로 직접 추가도 가능합니다.
dep ensure - add github/pak/name/...
어떤 패키지들을 사용하는지 확인하려면 Gopkg.toml을 확인하면 됩니다.
로컬에서 환경을 구성하면서 src 파일 밖에서 init를 한다던가, GOPATH를 이상하게 잡하는 실수로 꽤 많은 시간을 사용했습니다. GOPATH를 현재 프로젝트 경로로 주의해서 잡으면 될 것 같습니다.
github에서 dep
https://golang.github.io/dep/docs/new-project.html 의 1번에 따라 github에서 여럿이서 프로젝트를 공유할 수 있게 세팅을 바꾸니 프로젝트 구성도 조금 바꾸게 되었습니다.
$GOPATH/src/github.com/유저이름/프로젝트이름
#workspace/프로젝트이름/src/github.com/유저이름/프로젝트이름
실제 프로젝트가 위의 경로로 들어가게 세팅을 바꿨어야 했습니다.
이대 구성대로 git에 /프로젝트이름
부분을 공유했습니다.
주의할 점으로는 로컬구성과 다르게 로컬 패키지의 import를 수정해줘야 합니다.
위의 import를 아래처럼 수정됩니다.
배포 자동화 AWS Code Pipeline
배포 환경은 Aws의 Elastic Beanstalk
으로 구성했습니다.
Elastic Beanstalk은 Ec2, S3, 보안그룹 설정을 쉽게할 수 있는 배포 환경입니다.
구성의 특별한 어려움은 없고 Aws 콘솔에서 클릭 몇 번으로 끝나기에 생략하겠습니다.
배포할 서버가 갖추어졌으면 배포 자동화를 시켜야합니다.
제 부끄러운 스터디 소스를 남들에게 공개하고 싶지 않고 돈이 들더라도 회사의 갓갓 자기계발비로 해결되서
Travis
(오픈소스에 한해서만 무료 이용 가능)가 아닌 Aws CodePipeline
으로 배포 자동화 환경을 구성했습니다.
앞에 부끄러운건 두 번째 이유고 진짜 이유는
Aws CodePipeline
의 장점으로 Aws 기술 스택을 쓴 다면 연동이 매우 편리합니다.
다른 CI 와 다르게 특별한 쉘이나 .yml 없이도 알아서 연동이 가능했습니다.
Github(소스 저장소) -> Aws Code build(빌드 서버) -> Aws elastic beanstalk(배포 서버)
처음 파이프라인을 구성할 때 소스 제공을 Github으로 로그인 하시고 저장소를 설정하면 빌드 환경을 구성하는 부분이 나옵니다.
이 때 Jenkins 와 Aws CodePipeline을 선택할 수 있는데 저는 CodePipeline을 선택하고 프로젝트 루트에 buildspec.yml 을 추가했습니다.
후기
하루 이상을 의존성 관리와 배포 자동화에 사용했습니다. 그런데 막상 정리하니 별로 분량이 없군요… 사실 소스야 인터넷에 좋은게 너무 널려서 devops와 설치가 제일 어려운 것 같습니다.
아직까지 주니어 개발자라서 프로젝트 구조를 다양한 스택을 이용해 마이크로서비스로 어떻게 한다느니 폭포수 모델 개발을 하겠다느니 이런 일을 하지는 않지만 앞으로 개인적인 공부를 해도 테스트, 배포, 자동화를 어느정도 생각하고 공부해야겠습니다.