DrawingProcess
๋“œํ”„ DrawingProcess
DrawingProcess
์ „์ฒด ๋ฐฉ๋ฌธ์ž
์˜ค๋Š˜
์–ด์ œ
ยซ   2025/06   ยป
์ผ ์›” ํ™” ์ˆ˜ ๋ชฉ ๊ธˆ ํ† 
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
  • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (967) N
    • Profile & Branding (25) N
      • Career (18) N
    • IT Trends (254)
      • Conference, Faire (Experien.. (31)
      • News (187)
      • Youtube (19)
      • TED (8)
      • Web Page (2)
      • IT: Etc... (6)
    • Contents (97)
      • Book (66)
      • Lecture (31)
    • Project Process (94)
      • Ideation (0)
      • Study Report (34)
      • Challenge & Award (22)
      • 1Day1Process (5)
      • Making (5)
      • KRC-FTC (Team TC(5031, 5048.. (10)
      • GCP (GlobalCitizenProject) (15)
    • Study: ComputerScience(CS) (72)
      • CS: Basic (9)
      • CS: Database(SQL) (5)
      • CS: Network (14)
      • CS: OperatingSystem (3)
      • CS: Linux (39)
      • CS: Etc... (2)
    • Study: Software(SW) (95)
      • SW: Language (29)
      • SW: Algorithms (1)
      • SW: DataStructure & DesignP.. (1)
      • SW: Opensource (15)
      • SW: Error Bug Fix (43)
      • SW: Etc... (6)
    • Study: Artificial Intellige.. (149)
      • AI: Research (1)
      • AI: 2D Vision(Det, Seg, Tra.. (35)
      • AI: 3D Vision (70)
      • AI: MultiModal (3)
      • AI: SLAM (0)
      • AI: Light Weight(LW) (3)
      • AI: Data Pipeline (7)
      • AI: Machine Learning(ML) (1)
    • Study: Robotics(Robot) (33)
      • Robot: ROS(Robot Operating .. (9)
      • Robot: Positioning (8)
      • Robot: Planning & Control (7)
    • Study: DeveloperTools(DevTo.. (83)
      • DevTool: Git (12)
      • DevTool: CMake (13)
      • DevTool: NoSQL(Elastic, Mon.. (25)
      • DevTool: Container (17)
      • DevTool: IDE (11)
      • DevTool: CloudComputing (4)
    • ์ธ์ƒ์„ ์‚ด๋ฉด์„œ (64)
      • ๋‚˜์˜ ์ทจ๋ฏธ๋“ค (7)
      • ๋‚˜์˜ ์ƒ๊ฐ๋“ค (42)
      • ์—ฌํ–‰์„ ๋– ๋‚˜์ž~ (10)
      • ๋ถ„๊ธฐ๋ณ„ ํšŒ๊ณ  (5)

๊ฐœ๋ฐœ์ž ๋ช…์–ธ

โ€œ ๋งค์ฃผ ๋ชฉ์š”์ผ๋งˆ๋‹ค ๋‹น์‹ ์ด ํ•ญ์ƒ ํ•˜๋˜๋Œ€๋กœ ์‹ ๋ฐœ๋ˆ์„ ๋ฌถ์œผ๋ฉด ์‹ ๋ฐœ์ด ํญ๋ฐœํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ด๋ณด๋ผ.
์ปดํ“จํ„ฐ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ๋Š” ์ด๋Ÿฐ ์ผ์ด ํ•ญ์ƒ ์ผ์–ด๋‚˜๋Š”๋ฐ๋„ ์•„๋ฌด๋„ ๋ถˆํ‰ํ•  ์ƒ๊ฐ์„ ์•ˆ ํ•œ๋‹ค. โ€

- Jef Raskin

๋งฅ์˜ ์•„๋ฒ„์ง€ - ์• ํ”Œ์ปดํ“จํ„ฐ์˜ ๋งคํ‚จํ† ์‹œ ํ”„๋กœ์ ํŠธ๋ฅผ ์ฃผ๋„

์ธ๊ธฐ ๊ธ€

์ตœ๊ทผ ๊ธ€

์ตœ๊ทผ ๋Œ“๊ธ€

ํ‹ฐ์Šคํ† ๋ฆฌ

hELLO ยท Designed By ์ •์ƒ์šฐ.
DrawingProcess

๋“œํ”„ DrawingProcess

Study: DeveloperTools(DevTool)/DevTool: NoSQL(Elastic, Mongo)

[NoSQL] MongoDB C++ ํ™˜๊ฒฝ ์„ค์ •ํ•˜๊ธฐ(feat. linux mongocxx driver)

2023. 1. 12. 15:31
๋ฐ˜์‘ํ˜•
๐Ÿ’ก ๋ณธ ๋ฌธ์„œ๋Š” 'MongoDB C++ ํ™˜๊ฒฝ ์„ค์ •ํ•˜๊ธฐ'์— ๋Œ€ํ•ด ์ •๋ฆฌํ•ด๋†“์€ ๊ธ€์ž…๋‹ˆ๋‹ค.
MongoDB ์„œ๋ฒ„์— ์ ‘์†ํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•˜๊ธฐ ์œ„ํ•œ ํด๋ผ์ด์–ธํŠธ๋ฅผ ์œ„ํ•œ ํ™˜๊ฒฝ์„ ์„ค์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์ •๋ฆฌํ•˜์˜€์œผ๋‹ˆ ์ฐธ๊ณ ํ•˜์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.

1. mongocxx driver ์„ค์น˜ ์Šคํฌ๋ฆฝํŠธ

mongocxx driver๋ฅผ ์„ค์น˜ํ•˜๊ธฐ ์œ„ํ•œ ์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ์ž…๋‹ˆ๋‹ค. ์Šคํฌ๋ฆฝํŠธ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ์„ค๋ช…์€ ํ•˜๋‹จ์˜ '2. mongocxx driver ์„ค์น˜ ์ƒ์„ธ'์—์„œ ์ •๋ฆฌํ•ด๋†“์•˜์œผ๋‹ˆ ์ฐธ๊ณ ํ•˜์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.

#!/bin/bash

sudo apt-get install libmongoc-1.0-0
sudo apt-get install libbson-1.0-0
sudo apt-get install cmake libssl-dev libsasl2-dev

curl -OL https://github.com/mongodb/mongo-c-driver/releases/download/1.23.2/mongo-c-driver-1.23.2.tar.gz
tar xzf mongo-c-driver-1.23.2.tar.gz
cd mongo-c-driver-1.23.2
mkdir cmake-build
cd cmake-build
cmake ..                                   \
    -DENABLE_AUTOMATIC_INIT_AND_CLEANUP=OFF     \
    -DCMAKE_INSTALL_PREFIX=/opt/mongo-c-driver  \
    -DCMAKE_PREFIX_PATH=/opt/mongo-c-driver
sudo cmake --build . --target install # ๋นŒ๋“œ์— ์„ฑ๊ณตํ•˜๋ฉด ์„ค์น˜๊นŒ์ง€ ์ง„ํ–‰ํ•œ๋‹ค

cd ../../
curl -OL https://github.com/mongodb/mongo-cxx-driver/releases/download/r3.7.0/mongo-cxx-driver-r3.7.0.tar.gz
tar -xzf mongo-cxx-driver-r3.7.0.tar.gz
cd mongo-cxx-driver-r3.7.0/build
cmake ..                                            \
    -DCMAKE_BUILD_TYPE=Release                      \
    -DCMAKE_PREFIX_PATH=/opt/mongo-c-driver         \
    -DCMAKE_INSTALL_PREFIX=/opt/mongo-cxx-driver
sudo cmake --build . --target install

2. mongocxx driver ์„ค์น˜ ์ƒ์„ธ

C++ API๋ฅผ ํ™œ์šฉํ•˜์—ฌ mongoDB์— ์ ‘์†ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” mongocxx driver๋ฅผ ์„ค์น˜ํ•˜์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ์„ค์น˜๊ณผ์ •์€ ์•ž์œผ๋กœ ์–ธ๊ธ‰ํ•˜๊ฒ ์ง€๋งŒ, ํ•˜๋‹จ์— mongocxx driver๋ฅผ ์„ค์น˜ํ•˜๊ณ  ์„ธํŒ…ํ•˜๋Š” ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ฒจ๋ถ€ํ•˜์˜€์œผ๋‹ˆ ์ฐธ๊ณ ํ•˜์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.

mongocxx driver๋ฅผ ์„ค์น˜ํ•˜๊ธฐ ์•ž์„œ mongocxx driver์—์„œ๋Š” 'libmongoc', 'libbson' ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ํ•„์š”ํ•˜๊ธฐ์— ๋‹ค์Œ์˜ ๋งํฌ๋ฅผ ํ†ตํ•ด mongoDB C Driver๋ฅผ ์„ค์น˜ํ•œ ํ›„์— mongocxx driver๋ฅผ ์„ค์น˜ํ•˜์…”์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋•Œ cmake ๋ช…๋ น์–ด์— ์žˆ์–ด ์„ค์น˜ ๊ฒฝ๋กœ๋ฅผ /opt/mongo-c-driver๋กœ ์„ค์ •ํ•ด์ฃผ์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.

% cmake ..                                   	\
    -DENABLE_AUTOMATIC_INIT_AND_CLEANUP=OFF     \
    -DCMAKE_INSTALL_PREFIX=/opt/mongo-c-driver  \
    -DCMAKE_PREFIX_PATH=/opt/mongo-c-driver
  • [mongodb] Installing the MongoDB C Driver (libmongoc) and BSON library (libbson): http://mongoc.org/libmongoc/current/installing.html

 'libmongoc', 'libbson' ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์„ค์น˜ํ•˜์˜€๋‹ค๋ฉด mongocxx driver๋ฅผ ์„ค์น˜ํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์ด๋•Œ cmake ๋ช…๋ น์–ด์— ์žˆ์–ด ์„ค์น˜ ๊ฒฝ๋กœ๋ฅผ /opt/mongo-cxx-driver๋กœ ์„ค์ •ํ•ด์ฃผ์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.

cmake ..                                            \
    -DCMAKE_BUILD_TYPE=Release                      \
    -DCMAKE_PREFIX_PATH=/opt/mongo-c-driver         \
    -DCMAKE_INSTALL_PREFIX=/opt/mongo-cxx-driverโ€‹
  • [mongodb] mongocxx driver install guide(linux): https://mongocxx.org/mongocxx-v3/installation/linux/ 

์ด์ œ mongoDB C++์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ ํ™˜๊ฒฝ ์„ธํŒ…์€ ๋งˆ์ณค์Šต๋‹ˆ๋‹ค. ์„ค์น˜ํ•œ ๊ฒƒ์„ ๋ฐ”ํƒ•์œผ๋กœ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์ •์ƒ๋™์ž‘ํ•˜๋Š”์ง€ ํ…Œ์ŠคํŠธ๋ฅผ ํ•ด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

3. mongoDB C++ API ํ…Œ์ŠคํŠธ

3.1 test.cpp

ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•œ .cpp ํŒŒ์ผ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. 

#include <cstdint>
#include <iostream>
#include <vector>
#include <bsoncxx/json.hpp>
#include <mongocxx/client.hpp>
#include <mongocxx/stdx.hpp>
#include <mongocxx/uri.hpp>
#include <mongocxx/instance.hpp>
#include <bsoncxx/builder/stream/helpers.hpp>
#include <bsoncxx/builder/stream/document.hpp>
#include <bsoncxx/builder/stream/array.hpp>

using bsoncxx::builder::stream::close_array;
using bsoncxx::builder::stream::close_document;
using bsoncxx::builder::stream::document;
using bsoncxx::builder::stream::finalize;
using bsoncxx::builder::stream::open_array;
using bsoncxx::builder::stream::open_document;

int main()
{
    mongocxx::instance instance{}; // This should be done only once.
    mongocxx::uri uri("mongodb://localhost:27017");
    mongocxx::client client(uri);

    mongocxx::database db = client["bsm"];
    mongocxx::collection coll = db["test"];

    auto builder = bsoncxx::builder::stream::document{};
    bsoncxx::document::value doc_value = builder
            << "name"
            << "MongoDB"
            << "type"
            << "database"
            << "count" << 1
            << "versions" << bsoncxx::builder::stream::open_array
            << "v3.2"
            << "v3.0"
            << "v2.6"
            << close_array
            << "info" << bsoncxx::builder::stream::open_document
            << "x" << 203
            << "y" << 102
            << bsoncxx::builder::stream::close_document
            << bsoncxx::builder::stream::finalize;

    bsoncxx::document::view view = doc_value.view();
}

3.2 test.cpp ์‹คํ–‰

3.2.1 pkg-config ํ™œ์šฉ

% c++ --std=c++11 <input>.cpp $(pkg-config --cflags --libs libmongocxx)

๋งŒ์•ฝ์— ์•ˆ๋œ๋‹ค๋ฉด PKG_CONFIG_PATH ํ™˜๊ฒฝ๋ณ€์ˆ˜์— libmongocxx.pc์˜ ์œ„์น˜๋ฅผ ํฌํ•จ์‹œํ‚ต๋‹ˆ๋‹ค.

% nano ~/.bashrc
...
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/opt/mongo-cxx-driver/lib/pkgconfig
% source ~/.bashrc

3.2.2 ์ผ์ผํžˆ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๊ฒฝ๋กœ ์ง€์ •

pkg-config๊ฐ€ ์•ˆ๋œ๋‹ค๋ฉด? include, library๋ฅผ ์ผ์ผํžˆ ์ง€์ •ํ•˜์—ฌ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

% c++ --std=c++11 test.cpp -I/opt/mongo-cxx-driver/include/mongocxx/v_noabi -I/opt/mongo-cxx-driver/include/bsoncxx/v_noabi -I/opt/mongo-c-driver/include/libmongoc-1.0 -I/opt/mongo-c-driver/include/libbson-1.0 -L/opt/mongo-cxx-driver/lib -lmongocxx -lbsoncxx

3.2.3 CMake ๋นŒ๋“œ

mongodb๋ฅผ ๋นŒ๋“œํ•œ ํ›„ ๋‚˜์˜ค๋Š” shared ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๊ฐ€์ง€๊ณ  CMake ํŒŒ์ผ์„ ๋งŒ๋“ค์–ด ๋นŒ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(ํ•˜๋‹จ ๋งํฌ ์ฐธ์กฐ). ์ด๋•Œ '# NOTE:'์— ์ ํžŒ ๋ฐ”์™€ ๊ฐ™์ด 'CMAKE_PREFIX_PATH'๋ฅผ ์ด์ „์— ์„ค์น˜ํ–ˆ์„ ๋•Œ ์ ์—ˆ๋˜ ๊ฒฝ๋กœ๋กœ ์„ค์ •ํ•ด์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

set(CMAKE_PREFIX_PATH /opt/mongo-cxx-driver)
  • [mongodb] CMakeLists(shared library): https://github.com/mongodb/mongo-cxx-driver/blob/master/examples/projects/mongocxx/cmake/shared/CMakeLists.txt

 

์ฐธ๊ณ 

  • [mongodb] MongoDB C++ Driver: https://www.mongodb.com/docs/drivers/cxx/#mongodb-compatibility
  • [github] MongoDB C++ Driver: https://github.com/mongodb/mongo-cxx-driver
  • [mongodb] Installing the mongocxx driver: https://mongocxx.org/mongocxx-v3/installation/
  • [mongodb] mongocxx driver install guide(linux): https://mongocxx.org/mongocxx-v3/installation/linux/
  • [mongodb] Installing the MongoDB C Driver (libmongoc) and BSON library (libbson): http://mongoc.org/libmongoc/current/installing.html
  • [mongodb] mongocxx driver Advanced Configuration and Installation Options: https://mongocxx.org/mongocxx-v3/installation/advanced/
  • [mongodb] Tutorial for mongocxx: https://mongocxx.org/mongocxx-v3/tutorial/
  • [mongodb] CMakeLists(shared library): https://github.com/mongodb/mongo-cxx-driver/blob/master/examples/projects/mongocxx/cmake/shared/CMakeLists.txt 
๋ฐ˜์‘ํ˜•
์ €์ž‘์žํ‘œ์‹œ ๋น„์˜๋ฆฌ ๋ณ€๊ฒฝ๊ธˆ์ง€ (์ƒˆ์ฐฝ์—ด๋ฆผ)

'Study: DeveloperTools(DevTool) > DevTool: NoSQL(Elastic, Mongo)' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[NoSQL] MongoDB์— ์ ‘์†ํ•˜๊ธฐ (mongo-express, Robo 3T, VSCode)  (0) 2023.01.16
[NoSQL] Docker๋ฅผ ์ด์šฉํ•˜์—ฌ MongoDB ์„œ๋ฒ„ ๋„์šฐ๊ธฐ (feat. mongo-express)  (0) 2023.01.10
[NoSQL] MongoDB Geospatial ์ฟผ๋ฆฌ: GeoJSON ๋ฐ์ดํ„ฐ ํ™œ์šฉํ•˜๊ธฐ  (0) 2022.11.20
[NoSQL] Apache Cassandra ์ •๋ฆฌ: NoSQL Column-Family DB  (0) 2022.11.17
[NoSQL] Redis(vs Memcached) ์ •๋ฆฌ: NoSQL Key-value DB  (0) 2022.11.16
    'Study: DeveloperTools(DevTool)/DevTool: NoSQL(Elastic, Mongo)' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
    • [NoSQL] MongoDB์— ์ ‘์†ํ•˜๊ธฐ (mongo-express, Robo 3T, VSCode)
    • [NoSQL] Docker๋ฅผ ์ด์šฉํ•˜์—ฌ MongoDB ์„œ๋ฒ„ ๋„์šฐ๊ธฐ (feat. mongo-express)
    • [NoSQL] MongoDB Geospatial ์ฟผ๋ฆฌ: GeoJSON ๋ฐ์ดํ„ฐ ํ™œ์šฉํ•˜๊ธฐ
    • [NoSQL] Apache Cassandra ์ •๋ฆฌ: NoSQL Column-Family DB
    DrawingProcess
    DrawingProcess
    ๊ณผ์ •์„ ๊ทธ๋ฆฌ์ž!

    ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”