기본 콘텐츠로 건너뛰기

라벨이 golang인 게시물 표시

[Golang] Golang으로 MongoDB 연결하기

How to use MongoDB with Golang 이 문서에서는 아주 간단하게 Docker-compose를 이용해서 MongoDB를 구동하고 Golang을 통해서 연결하는 부분에 대해서 정리하고 있습니다. 환경은 맥북, VSCode, Golang, Docker 등이 이미 설치되어 있는 것을 기준으로 합니다. 간단한 MongoDB 정리 RDBMS와의 비교 RDBMS MongoDB Database Database Table Collection Tuple/Row Document Column Key/Field Table Join Embedded Documents Primary Key Primary Key (_id) 특징과 장/단점 주요 특징 들은 다음과 같다. Document-Oriented Storage : Database > Collections > Documents 구조로 Document는 key-value 형태의 BSON (Binary JSON) 으로 되어 있다. Full Index Support : 다양한 인덱싱을 제공한다. Single Field Indexes : 기본적인 인덱스 타입 Compound Indexes : RDBMS의 복합 인덱스 타입 Multikey Indexes : Array에 매칭되는 값이 하나라도 있으면 인덱스에 추가하는 인덱스 타입 Geospatial Indexes and Queries : 위치기반 인덱스와 쿼리 지원 Text Indexes : String에 대한 인덱스 지원 Hashed Indexes : Btree 인덱스가 아닌 Hash 타입의 인덱스도 지원 Replication & High Availablity : 간단한 설정을 통해서 데이터 복제를 지원하므로 가용성이 향상된다. Auto-Sharding : 자동으로 데이터를 분산해서 저장하며, 하나의 컬랙션처럼 사용할 수 있도록 수평

[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