MongoDB는 오픈소스이므로 코드를 Github에서 확인할 수 있다.
MongoDB에 더 깊은 이해를 가지고자 소스를 분석해보고 싶다는 생각을 했다.
그리고 능력이 된다면 Commit까지,,,, Opensource Committor는 내 눈에는 멋있어보인다.
이번에는 소스코드를 다운로드 받고, 소스를 통해 빌드한 뒤 빌드된 바이너리로 MongoDB를 실행시켜보고자 한다.
1. 소스 다운로드
https://github.com/mongodb/mongo
가장 첫번째 단계는 소스에서 MongoDB를 빌드하는 것이다.
Github에서 코드를 다운로드 받고, 해당 디렉토리로 이동한다.
git clone https://github.com/mongodb/mongo.git
git clone 하는데 거의 1GB가 다운로드 받아지는건 처음 봤다.
....
2. dependencies 확인
MongoDB를 빌드하기 위한 조건과, 방법은 친절하게도 문서에 전부 나와있다.
https://github.com/mongodb/mongo/blob/master/docs/building.md
MongoDB를 빌드하기 위해선 필요한 모든 의존성을 확인해야한다.
1. OS 버전 -> 나는 macos를 사용중이다.
2. C++ compiler 버전 -> macos 는 clang이 있다.
gcc --version
Apple clang version 14.0.0 (clang-1400.0.29.202)
Target: arm64-apple-darwin22.3.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bi
clang 기준 12.0 이상이면 된다고 한다.
3. python3.7+
python3 --version
Python 3.10.8
파이썬 버전을 확인해준다.
그리고 13GB의 디스크공간이 필요하고, install-all을 하게 되면 600GB가 필요하다고 한다.
내 맥북은 공간이 작아서 install-all은 못할 것 같다.
3. python prerequisites 설치
빌드에 필요한 파이썬 모듈들을 설치해주어야한다. 근데, 그냥 설치할 경우에는 공통 모듈로 설치가 되기 때문에, 가상환경을 만들고 가상환경 위에 설치해주겠다.
python3 -m venv venv # 가상환경 생성
source venv/bin/activate # 가상환경 활성화
가상환경이 활성화되면 콘솔에 (venv) 가 노출될 것이다.
다음에 prerequisites를 설치한다.
python3 -m pip install -r ./etc/pip/compile-requirements.txt
설치
4. 빌드하기
python3 buildscripts/scons.py install-mongod
해당 스크립트로 빌드를 해준다.
빌드를 시작하면, 명령어를 입력한 디렉토리에 build 디렉토리가 생긴다.
그리고 빌드를 진행하기 시작한다.
무자비하게 스크롤이 올라간다.
맥북 프로 m1칩 16GB 메모리 기준 약 20분~30분 정도 걸린 것 같다.
그 기간 동안 Running Cat이 정말 열심히 달렸다.
5. 실행 시켜보기
빌드가 끝난뒤 바이너리 파일은 ./build/install/bin에 mongod가 위치하고 있다.
실행시켜보자.
./build/install/bin/mongod
이상하게 죽는다.
에러를 확인해보니 dbpath가 없다는 듯.
그냥 대충 만들어준다.
mkdir data
./build/install/bin/mongod --dbpath ./data
잘 실행이 된다.
굳.
다음은 좀 더 깊이있게 뜯어봐야겠다.
'Database > MongoDB' 카테고리의 다른 글
MongoDB의 Failover (0) | 2023.11.19 |
---|---|
MongoDB 로그 관리 : logRotate와 로그파일 권한 (1) | 2023.11.16 |
MongoDB는 1 Petabyte를 저장할 수 있을까? (0) | 2023.08.26 |
[MongoDB] 도큐먼트의 배열 필드내 요소 범위를 검사하는 쿼리 (0) | 2023.02.04 |
mongoexport, mongoimport 사용해보기 (0) | 2022.08.05 |