기본 콘텐츠로 건너뛰기

라벨이 go인 게시물 표시

[Golang] 의존성 없이 정적 파일들 (for Web Serving)을 Golang 바이너리에 포함시키기

[Golang] How to add static files (for Web serving) to the golang binary without dependencies 참고 go.rice go-bindata packr esc 과연 이런 작업이 필요한 것일까? 특히 고객에게 전달되어야 하는 최종 산출물일 경우라면 이런 접근 방법에 대한 명확한 이유를 설명할 수 있어야 한다. 장점 "안정성" : 바이너리에 추가된 파일은 다시 추출하기 어렵기 때문에 안정성이 있다. "편리" : 배포 또는 소스를 전달할 떄 웹 서비스를 위한 추가적인 폴더들을 제공할 필요가 없다. 단점 "크기" : 추가된 만큼 바이너리 자체의 크기가 증가한다. "성능" : 그다지 큰 이슈가 될 것 같지는 않지만, Admin Web과 같이 정적 파일을 운영할 경우는 별도로 웹을 구성해서 서비스하는 것보다는 바이너리내의 파일을 서비스하는 개념이기 때문에 아주 약간의 성능 상 이슈가 있을 수 있다. 틱 단위의 서비스가 중요한 서비스가 아니라 내부 관리자 용이라면 이런 걱정은 하지 않아도 될만한 차이다. 가능한 원리는 무엇일까? 프로그램으로 프로그램 코드를 작성하는 "제너레이터"를 이용 하는 것이다. (이전에는 "golang.org/x/tools/cmd/goyacc"를 이용했었다) golang 1.4 부터는 이런 작업을 편하게 처리할 수 있도록 "go generate" 명령이 추가 되었다. 이를 통하면 소스 상에 특수한 주석으로 명기된 명령을 검색해서 처리해주는 방식으로 운영할 수 있다. 구현해 보자. 이제 아주 간단한 실제 동작하는 샘플을 통해서 검증을 해 보자. 모듈 구성 go module을 사용하는 프로젝트 구성 # go mod init <project module path> $ go mod init g