지난번에 MongoDB를 Local에서 사용해보았으므로, 이번엔 Cloud에서 사용하는 법을 다뤄보려고 한다. MongoDB는 AWS에서 세 가지 방법으로 사용이 가능하다.
- MongoDB Atlas
- AWS DocumentDB
- EC2(MongoDB)
알고보니 MongoDB가 오픈소스다보니 AWS에서 DocumentDB로 꿀빠는거 보고 열받아서 만든게 Atlas였다 ㅋㅋ 📎https://www.mongodb.com/atlas-vs-amazon-documentdb
위 링크에 들어가보면 MongoDB inc에서 분노에 찬 비교를 하는것을 볼 수 있음 ㅋㅋ
대충 요약
Atlas DucumentDB EC2+DB Price Free tier O 200$~ Free tier O Portability AWS/GCP/AZURE AWS AWS Features MongoDB v5.0 MongoDB v3.x MongoDB v5.0 Replication ~50 ~15 ? Sharding x 128,000 ?
Atlas가 제일 좋아보여서 이걸로 결정했다. 그런데 Atlas에서도 아쉬운 점이 하나 존재했으니, 그건 무료버전에서 서울 리전이 제한된다는 것이다 ㅠㅠ 실습만 하려는거면 us-east
써도 되지만, 나중에 📎Jake가 사용할 인프라를 미리 구축하는 겸 서울에서 가장 가까운 Tokyo
리전에 생성하기로 했다.
먼저 Project를 만들고, Database를 만든 다음, Cluster를 만들어야 한다. 그런데 클러스터? 지난번에 MongoDB 다룰 때 나오지 않았던 내용이라 생소하다. Database 다음은 Collection 아니였던가?
❓ Cluster
... MongoDB 컨텍스트에서 "클러스터"는 일반적으로 복제본 세트 또는 샤딩된 클러스터 에 사용되는 단어이다. 단일 서버 MongoDB 데이터베이스와 달리 MongoDB 클러스터를 사용하면 MongoDB 데이터베이스가 샤딩을 통해 여러 서버에 걸쳐 수평으로 확장하거나 MongoDB 복제본 세트로 고가용성을 보장하는 데이터를 복제할 수 있으므로 MongoDB 클러스터의 전반적인 성능과 안정성이 향상된다.
대충 씨부려 놨지만 Replication을 위해 docker 컨테이너와 비슷한 개념이라고 이해 했다. 그럼 먼저 프로젝트를 만들어보자.
어떤 프로젝트를 진행할 것인지 결정하고 만들어보자. 함께할 유저를 초대하는 기능도 있는데, 나처럼 혼자 작업하는 사람은 별 다른 설정이 필요한 것 같진 않다.
MongoDB Atlas에서 Cluster를 만들기 위해 여러 옵션이 존재하는데, Query당 과금이 되거나, 시간당 과금이 되는 방식이 있다. 하지만 우리는 Free 버전을 선택하자.
Database 옵션을 선택하면 바로 Cluster를 생성하게된다. AWS에서 실행해볼 예정이며, 위에서 언급했듯이 무료 버전은 서울 리전이 없으므로, 가까운 도쿄 리전을 선택했다. 클러스터 Tier에서 성능을 선택할 수 있는데, 어차피 무료버전은 선택권이 없다. 바꿀 수 있는 것은 Cluster Name 뿐이기에 적당한 이름으로 바꾸고 시작한다.
DB이름은 관용적으로 xxxDB 이런식으로 적는다. 주문 관련 DB를 만들어볼 예정이기 때문에 아래와 같이 설정하였다.
- Database:OrderDB
- Collection:Orders
지난번에 했던 것 처럼, Insert, Select를 해볼 예정이다.
MongoDB Atlas 서버 도메인을 알아야 데이터를 넣을 수 있으므로 주소부터 확인한다. Database Home 화면에 connect라는 버튼 누르면 아래와 같은 창이 보이는데, connection string을 복사하고, 계정정보를 넣으면 실행할 수 있다.
근데 저대로 코드에 복붙하게되면 ID, PW를 Plain text로 넣게 되는데 이 점이 마음에 들지 않았다. 이전에도 비슷한 상황에서 Token을 Config 파일에 넣어두고 관리한 적 있는데(내 서버였음) 이번에도 똑같이 하기로 했다. 해시화 하지도 않고 Plain text로 넣어놓는게 맘에 걸리긴 하지만... 나중에 암호화 글감으로 남겨놓기 위해 쿨하게 넘어가기로 했다 ㅋㅋ
Config Parsing
type Credential struct { ID string `json:"id"` Password string `json:"password"` MongoURI string `json:"mongouri"` } func getConfig() (c *Credential, err error) { f, err := os.Open("config.json") if err != nil { return } defer f.Close() c = new(Credential) err = json.NewDecoder(f).Decode(c) return } func main(){ config, _ := getConfig() clientOptions := options.Client().ApplyURI(config.MongoURI) client, err = mongo.Connect(context.TODO(), clientOptions) ... }
뭐.. 어려운건 없었다. MongoDB Atlas 설치하는 것도 쉽고, 기존에 만들어둔 코드에 URI 주소만 변경하면 되는 부분이라 새롭다고 느껴지는건 없었지만, 무언가 클라우드로 DB를 쓴다는 이 뿌듯함이 나를 채워주는 그런 느낌? 제일 시간이 오래걸렸던건 Credential을 암호화할까 해시할까 그냥 둘까 고민하는 시간이었던 것 같다. 이번엔 간단히 Json Parsing 정도로 끝냈지만 다음 번엔 비대칭 암호화를 통한 인증을 해보려 한다.