mongodb transaction 사용하기

mongodb도 transaction이 가능하다는 사실 알고 계신가요

 

mongodb가 4.x로 올라오면서 replica sets 과 sharded clusters 환경에서

 

트랜잭션 사용이 가능해졌습니다.

 

그리고 4.4부터는 트랜잭션을 통해서 콜렉션의 생성도 가능해졌습니다.

 

 

그런데 이 트랜잭션 기능을 사용하려면 replica sets 또는 sharded clusters 환경을 구축해야합니다.

 

standalone에서는 동작하지 않아요.

 

standalone은 여러분이 서버에 별다른 설정없이 mongodb를 설치하셨다면 기본적으로 standalone 으로 설치가 됩니다.

 

 

그런데 production 환경에서는 cluster를 구성할수 있겠지만, 개발환경에서는 replica set이나 shard cluster를 구성하지 않는 경우도 많기 때문에

 

이러한 환경에서도 어플리케이션의 수정없이 트랜잭션 기능을 원활히 사용하기 위해

 

standalone으로 설치한 개발환경에도 relica set으로 변경해줄 필요가 있습니다.

 

 

 

replica set은 primary, secondary 그리고 arbiter까지 3개의 서버를 구성하라고 안내되어있는데

(failover와 primary voting을 위한 구성입니다)

 

꼭 3대의 서버가 없어도 1대의 서버로도 replica set을 구성할수 있습니다.

 

다만 해당 set의 구성 멤버가 1대밖에 없는 replica set이 되는것입니다.

 

standalone을 replica set으로 변경하는 방법은 mongodb 공식문서에도 안내가 되어있어요

 

docs.mongodb.com/manual/tutorial/convert-standalone-to-replica-set/

 

Convert a Standalone to a Replica Set — MongoDB Manual

Convert a Standalone to a Replica Set This tutorial describes the process for converting a standalone mongod instance into a replica set. Use standalone instances for testing and development, but always use replica sets in production. The procedure is spec

docs.mongodb.com

 

방법은 간단합니다. 

 

데몬 실행시에 위의 문서에서 안내하는대로 option으로 해당 설정값을 주어도 되지만, 설정파일에 해당 구성을 넣어도 가능합니다.

 

매 실행시마다 번거롭게 option을 넣지 않아도 되니 conf 파일에 작성해보기로 해요

 

 

/etc/mongod.conf 에 mongodb 설정파일이 디폴트로 위치해있는데

 

이 파일에 다음과 같이 추가해주세요

 

 

replication:
   replSetName: "rs0"
net:
   bindIp: localhost,<hostname(s)|ip address(es)>

 

 

 

bindIp에는 mongodb 가 응답대기 하는 클라이언트를 말합니다.

 

이렇게 설정을 변경후에 mongodb를 실행해주세요

 

그리고 mongo로 접속후에

 

 

 

rs.initiate()

 

 

명령어를 넣으면 완료됩니다

 

mongo connection을 종료후에

 

다시 접속해보시면

 

이전에는 mongo 접속시 콘솔에 아무런 텍스트가 없었는데

 

 

 

이렇게 rs0:PRIMARY라고 표시가 되는것을 볼수 있습니다

 

rs0이라는 이름을 replica set의 PRIMARY에 접속했다는 의미입니다.

 

 

 

 

 

 

 

 

 

 

 

 

| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | ··· | 1851 |