본문 바로가기
CSP (Cloud Service Provider)/AWS

[AWS] Document DB (2)

by BTC_남요정 2023. 10. 15.

베하!

안녕하세요~! 

BTC 블랙아웃입니다!!

 

지난 시간에는 Document DB가 무엇인지 짧게 알아봤었는데요!

오늘은 해당 게시물에 이어서 Document DB를 직접 만들어보고,

간단하게 연결해서 사용해보는 시간을 가지도록 하겠습니다.

 


 

0. Document DB란?

DocumentDB에 대해 잘 모르시는 분들은 아래 링크를 참고해 주세요!

https://btcd.tistory.com/1464

 

1. EC2 생성

1-1. 보안 그룹 생성 (1)

: EC2에 ssh 접속을 할 수 있도록 22번 포트 오픈

 

1-2. EC2 생성

  • OS : Amazon Linux 2
  • VPC : default

 

1-3. 보안 그룹 생성 (2)

: EC2와 document db가 통신이 가능하도록 27017번 포트 오픈

  • 사용자지정 TCP (27017)
  • 소스 : 보안 그룹 (1)

 

 


2. Document DB 생성

2-1. Document DB 생성

  • 엔진 버전 : 4.0
  • 인스턴스 클래스 : db.t3.medium (프리티어)

DB가 만들어지기까지는 대략 20~30분 정도가 소요되는 것 같습니다.

 

 


 

3. Document DB - EC2 연결

: Amazon DocumentDB 클러스터를 연결하고 쿼리할 때 사용하는 명령줄 유틸리티인 mongo 셸을 설치합니다.

 

여기서 주의하실 점은..!

처음에는 Amazon Linux 2023 버전으로 시작했지만, 몽고 쉘이 설치되지 않는 이슈가 있었습니다..!

그래서 AWS docs를 따라 Amazon Linux 2로 다시 만들어보니 몽고 쉘이 잘 설치 되었습니다.

운영 체제에 맞는 mongo 셸을 설치해야 하므로 어떤 셸을 설치해야 할지는 AWS docs를 꼭 참고해 주세요!

 

 

3-1. 몽고 셸 설치 (AL2)

  • 리포지토리 파일을 생성
echo -e "[mongodb-org-4.0] \nname=MongoDB Repository\nbaseurl=https://repo.mongodb.org/yum/amazon/2013.03/mongodb-org/4.0/x86_64/\ngpgcheck=1 \nenabled=1 \ngpgkey=https://www.mongodb.org/static/pgp/server-4.0.asc" | sudo tee /etc/yum.repos.d/mongodb-org-4.0.repo

 

  • mongo 셸 설치
sudo yum install -y mongodb-org-shell

 

 

3-2. DocumentDB TLS 관리

  • DocumentDB용 CA 인증서 다운로드
    • 모든 새 Amazon DocumentDB 클러스터에는 전송 계층 보안 (TLS) 이 기본적으로 활성화되어 있습니다. 
wget https://truststore.pki.rds.amazonaws.com/global/global-bundle.pem

 

3-3. Document DB와 EC2 연결

: AWS Document DB > 클러스터 선택 > 연결성 및 보안 > 클러스터 엔드포인트 확인

 

DB 클러스터 선택
클러스터 엔드포인트 확인
연결 확인!

 

 

여기서 한가지 더 주의하실 점은, 

DocumentDB를 default VPC에 생성하는 바람에 별도의 VPC에 만든 ec2와 연결되지 않는 문제가 발생했다는 점입니다..

defult VPC의 ip 대역대가 뜨는 것을 확인할 수 있었다.

DocumentDB와 EC2와 vpc가 맞지 않아 connection timed out이 발생할 수 있으니 주의해주세요..!

저는 테스트를 위해 우선은 default VPC에 DocumentDB와 EC2를 만들어서 진행했습니다.

 


 

4. Document DB에 데이터 삽입

: 이제 클러스터에 연결되었으므로 몇 가지 쿼리를 실행하여 DocumentDB를 사용해 보겠습니다..!

 

  • 단일 문자 삽입
> db.collection.insert({"hello":"DocumentDB"})
WriteResult({ "nInserted" : 1 })
  • 데이터 확인
> db.collection.findOne()
{ "_id" : ObjectId("6515ae823ba59f42cd24c315"), "hello" : "DocumentDB"
  • 예시를 위해 데이터 삽입
> db.profiles.insertMany([
            { "_id" : 1, "name" : "Matt", "status": "active", "level": 12, "score":202},
            { "_id" : 2, "name" : "Frank", "status": "inactive", "level": 2, "score":9},
            { "_id" : 3, "name" : "Karen", "status": "active", "level": 7, "score":87},
            { "_id" : 4, "name" : "Katie", "status": "active", "level": 3, "score":27}
            ])
{ "acknowledged" : true, "insertedIds" : [ 1, 2, 3, 4 ] }
  • 입력된 profiles 데이터 조회
> db.profiles.findOne()
{
        "_id" : 1,
        "name" : "Matt",
        "status" : "active",
        "level" : 12,
        "score" : 202
}

> db.profiles.find()
{ "_id" : 1, "name" : "Matt", "status" : "active", "level" : 12, "score" : 202 }
{ "_id" : 2, "name" : "Frank", "status" : "inactive", "level" : 2, "score" : 9 }
{ "_id" : 3, "name" : "Karen", "status" : "active", "level" : 7, "score" : 87 }
{ "_id" : 4, "name" : "Katie", "status" : "active", "level" : 3, "score" : 27 }

 

  • 입력된 profiles 데이터 수정
db.profiles.findAndModify({
        query: { name: "Matt", status: "active"},
        update: { $inc: { score: 10 } }
    })

 

  • 수정된 데이터 확인
db.profiles.find({name: "Matt"})

 

 


5. Document DB 삭제

5-1. 삭제 보호 비활성화

: RDS와는 다르게 Document DB에는 기본적으로 “삭제 보호”가 활성화 되어 있습니다.

실수로 DB를 지워버리지 않도록 설정하는 기능이므로 db를 삭제하기 전에 비활성화 처리를 해 준 뒤에 db를 삭제하도록 합니다..!

 

 

 

참고 문서:

[1] https://docs.aws.amazon.com/ko_kr/documentdb/latest/developerguide/connect-ec2.html#connect-ec2.connect

 


오늘은 이렇게 DocumentDB를 생성하고, 연결해보고, db에 데이터를 넣고 수정해보며 사용해보았는데요..!

이제 조금은 DocumentDB를 어떻게 사용해야 할지 감이 오시나요?

오늘도 조금이나마 유익한 시간이 되었기를 바라봅니다..!

그럼 다음 시간에도 재미있는 인프라 지식을 가져오겠습니다 

베빠~!

댓글