본문 바로가기
3. 데이터관리

Oracle Database API for Mongo DB 살펴보기

by xTech 2024. 5. 7.

Oracle Database API for MongoDB(이하 MongoDB API) 는 OCI에서 제공되는 Oracle Autonomous Database Serverless(이하 ADB-S)에 포함된 Tool로 제공됩니다. ( 물론 설치형 오라클데이터베이스이더라도 21c 이상 이면서 Oracle REST Data Services (ORDS)를 22.3이상 사용한다면 동일하게 사용할 수 있습니다.)
 
MongoDB API는 MongoDB 언어 드라이버나 툴 등을 그대로 사용하면서 ADB-S를 JSON 데이터베이스로 사용할 때 활용 됩니다.  오라클 데이터베이스를 기반으로 제공되는 ADB-S는 융햡형 데이터베이스로서 다양한 데이터 타입 특히 JSON 타입을 기존 관계형 데이터와 함께 하나의 데이터베이스에서 활용할 수 있습니다. JSON 데이터를 관리하기 위해 SQL뿐만 아니라 SODA API를 제공하고 있으며 특히 함께 제공되는 MongoDB API는 Mongo DB를 기반으로 개발된 어플리케이션을 Mongo DB에서 손쉽게 ADB-S로 마이그레이션 할 수 있도록 하기 위해 지원되는 솔루션입니다.
 
이번 글에서는 Oracle Database API for MongoDB를 ADB-S 서비스 중에 JSON 전용데이터베이스인  Autonomos JSON Database(이하 AJD)에서 설정해보고 간단히 접속 테스트 & 데이터 조작을 해보겠습니다. 참고로 JSON 전용인 AJD 외에 ATP, ADW도 전부 MongoDB API가 사용 가능합니다.
 
1. Configure Access for MongoDB and Enable MongoDB

ADB-S에서 MongoDB API를 활성화하기 위해서는 먼저 데이터베이스 접속과 관련해서 접근제어 설정을 먼저 진행해야합니다.
ADB-S는 처음 데이터베이스 생성 당 시 3가지 방식으로 네트워트 접근을 설정할 수 있습니다.
 
1) 공인망 접근을 허용하지만, mTLS 인증을 강제하는 방식
2) 특정 IP와 VCN만 접근을 허용하는 방식
3) OCI VCN내에 Private Endpoint를 생성해서 할당받은 Private IP로만 접속을 허용하는 방식
 
기본적으로 2), 3)번 방식만 Mongo API 사용을 허용하지만, 1)번 방식에서 추가로 ACL를 추가적으로 설정해서 2)번방식으로 업데이트 할 수 있습니다. 결론적으로 접근제어가 되는 환경에서 설정이 되야하는 것을 동일합니다.
 
저는 테스트 용도를 AJD를 "모든 곳에서 보안 액세스" 형태로 생성하였기 때문에 추가로 접근제어 설정을 진행하겠습니다.
More Actions에서 네트워크 액세스 업데이트로 진행합니다.
 

 

 
제 mac에서 사용 중인 대역대를 추가했습니다.
 
MongoDB API의 활성화도 마찬가지로 ADB-S의 OCI Console에서 진행하면 됩니다.
 
메인 정보페이지 옆에 있는 "툴 구성" 화면으로 이동해서 편집을 클릭하여 설정화면을 열어 줍니다.
 

 
ADB에서 함께 사용할 수 있는 툴들의 사용여부, 상세 설정등을 진행 할 수 있습니다.
MongoDB API

 
 
 
2. User Management for MongoDB
 
데이터베이스 설정이 완료되면 본격적으로 사용하기 전에 MongoDB와 다른 개념에 대해서 아래와 같이 맵핑된다고 이해하시면 됩니다.

MongoDB ObjectOracle Autonomous Database Object
DatabaseSchema
CollectionTable
DocumentDocument ( In a column )

 
MongoDB API를 통해 ADB-S로 접속할 때 username/password로 인증을 받았다면 해당 스키마에 해당되는 Database에 포함된 모든 collection에 대해 접근을 할 수 있다고 보면 됩니다.
 
3. Create a Test Autonomous Database User for MongoDB

ADB-S에 Mongo API 용도의 계정을 생성할 경우 해당 계정에 아래와 같이 설정 되어야 합니다.

- Oracle REST Data Services (ORDS)가 설정되어야합니다.
- SODA_APP, create table, create session 롤과 권한이 포함 되어야 합니다.
- DATA tablespace에 대한 quota 가 있어야 합니다.
 
데이터베이스 계정을 생성하기 위해 "데이터베이스 작업" 메뉴로 이동합니다. 사용자 메뉴로 바로 이동하셔도 상관없습니다.
 

 
 
ADMIN 계정이나 유저 생성권한이 있는 데이터베이스 계정으로 로그인하여 관리 --> 데이터베이스 유저 메뉴로 이동합니다.
 

 
 
신규 생성을 입력하고 기본적인 정보를 입력해줍니다.
 

 
두번 째 탭으로 이동해서 생성 시 부혀할 권한을 선택합니다. 사전에 확인한 SODA_APP을 선택해줍니다.
 

 
 
 
4. Connect MongoDB Applications to Autonomous Database
 
생성한 계정을 통하여 접속 테스트 및 데이터 조작을 해보겠습니다.
 
먼저 Mongo API의 Connection String을 확인하고 CLI 기반으로 접속 테스트를 하기 위해 Mongo DB Shell을 다운받아 설치했습니다.
 
메인 툴 구성 페이지에서 Connection String을 확인합니다.
 

 
 
계정과 패스워드를 통해 접속을 해봅니다.

***@***-mac bin % ./mongosh --tls --tlsAllowInvalidCertificates 'mongodb://mgjson01:*******@YH0OLYBN5PQCE4N-AJD01.adb.ap-seoul-1.oraclecloudapps.com:27017/mgjson01?authMechanism=PLAIN&authSource=$external&ssl=true&retryWrites=false&loadBalanced=true'
Current Mongosh Log ID:	6639d129f59ff92e505631bf
Connecting to:		mongodb://<credentials>@YH0OLYBN5PQCE4N-AJD01.adb.ap-seoul-1.oraclecloudapps.com:27017/mgjson01?authMechanism=PLAIN&authSource=%24external&ssl=true&retryWrites=false&loadBalanced=true&tls=true&tlsAllowInvalidCertificates=true&appName=mongosh+2.2.5
Using MongoDB:		4.2.14
Using Mongosh:		2.2.5

For mongosh info see: https://docs.mongodb.com/mongodb-shell/

mgjson01> show dbs
mgjson01  0 B
mgjson01>

 
간단하게 데이터 조작을 해봅니다.
 

mgjson01> show collections

mgjson01> db.createCollection( 'fruit' )
{ ok: 1 }
mgjson01> show collections
fruit

mgjson01> db.fruit.insertOne( {name:"orange", count:42} )
{
  acknowledged: true,
  insertedId: ObjectId('6639d2acf59ff92e505631c0')
}
mgjson01> db.fruit.insertOne( {name:"apple", count:12, color: "red"} )
{
  acknowledged: true,
  insertedId: ObjectId('6639d2b3f59ff92e505631c1')
}
mgjson01> db.fruit.insertOne( {name:"pear", count:5} )
{
  acknowledged: true,
  insertedId: ObjectId('6639d2b8f59ff92e505631c2')
}

## 조회하기
mgjson01> db.fruit.find()
[
  {
    _id: ObjectId('6639d2acf59ff92e505631c0'),
    name: 'orange',
    count: 42
  },
  {
    _id: ObjectId('6639d2b3f59ff92e505631c1'),
    name: 'apple',
    count: 12,
    color: 'red'
  },
  { _id: ObjectId('6639d2b8f59ff92e505631c2'), name: 'pear', count: 5 }
]
mgjson01>

 
 
 
감사합니다.
 
 
개인 시간을 투자하여 작성된 글로서, 글의 내용에 오류가 있을 수 있으며, 글 속의 의견은 개인적인 의견입니다.

댓글