DB/마스터링 몽고DB 7.0

[4장] 몽고DB 연결

꾸준함. 2025. 7. 11. 15:16

연결 방법

  • 몽고DB는 데이터베이스 연결을 위해 크게 두 가지 방식을 제공
    • 드라이버를 직접 사용하는 방식
    • ODM 계층을 활용하는 방식

 

  • ODM은 모델 객체와 데이터베이스 문서 사이의 매핑을 효율적으로 처리하여 개발자의 작업을 편리하게 해 줌
  • 몽고DB는 다양한 프로그래밍 언어를 지원하지만 해당 장에서는 널리 사용되는 네 가지 언어인 PHP, 루비, Node.js, 파이썬에 초점을 맞춤

 

1. 루비를 이용한 몽고DB 연결

  • 루비는 몽고DB가 지원하는 주요 언어 중 하나로 안정적인 성능의 공식 드라이버를 제공함
  • 로컬 몽고DB 호스트에 연결하기 위한 기본 단계는 다음과 같음
    • 드라이버를 Gemfile에 추가하여 설치
    • 데이터베이스에 연결 (실제 환경에서는 복제본 세트에 연결)
    • client_host 서버는 클라이언트 드라이버의 시드 서버 역할을 하며, 연결할 수 있는 서버 목록을 제공하며 연결이 완료되면 드라이버는 기본/보조 서버 구성의 읽기/쓰기 설정에 따라 적절한 서버를 선택
    • 사용자 이름과 비밀번호 설정은 선택 사항이지만, 모든 몽고DB 인스턴스에서 강력히 권장되므로 보안을 위해 mongod.conf 파일에서 인증을 기본으로 활성화하는 것이 좋음


 

가. Mongoid

  • 루비나 레일즈 애플리케이션에서 몽고DB를 사용할 때는 Mongoid ODM이 효율적인 선택이 될 수 있음
  • Mongoid ODM은 루비 드라이버의 유연성을 그대로 유지하면서도, 개발 시간을 단축하고 코드를 간소화하여 전체 프로세스를 최적화함
  • ORM 도구와 마찬가지로, ODM은 모델과 데이터베이스 사이를 효과적으로 연결해 줌
  • Mongoid ODM은 다음과 같은 장점을 제공
    • 데이터 추상화: 문서를 직접 다루는 대신 객체를 통해 데이터베이스와 상호작용을 할 수 있는 고수준의 프로그래밍 인터페이스 제공
    • 일관성: 표준화된 인터페이스를 통해 애플리케이션 전반에서 일관된 데이터 접근 패턴을 유지
    • 코드 간소화: 반복적인 데이터베이스 작업을 자동화하여 작성 및 유지보수해야 할 코드 양을 줄여줌
    • 스키마 관리와 유효성 검사: 몽고DB는 스키마가 없지만, Mongoid를 통해 스키마를 정의하고 데이터 저장 전에 구조화된 유효성 검사가 가능함
    • 성능 최적화: 캐싱 메커니즘을 통해 성능 향상
    • 미들웨어와 플러그인 지원: 데이터베이스 작업 각 단계에서 사용자 정의 로직, 데이터 변환, 로깅 등을 위한 미들웨어나 플러그인을 활용할 수 있음
    • 쉬운 도입: ORM 사용 경험이 있다면 몽고DB로 전환 시 Mongoid를 직관적으로 활용할 수 있음
    • 매끄러운 통합: 애플리케이션 모델과 몽고DB 데이터베이스 사이의 데이터 변환과 처리를 매끄럽게 처리
    • 트랜잭션 지원: 여러 작업을 하나의 원자적 단위로 실행할 수 있도록 트랜잭션 지원

 

2. 파이썬을 이용한 몽고DB 연결

  • 루비의 Mongoid ODM처럼 파이썬에서도 MongoEngine ODM을 사용할 수 있으며, 공식 몽고DB 드라이버인 PyMongo도 제공됨
  • PyMongo는 pip 또는 easy_install 명령어를 통해 설치할 수 있으며 이후 아래 예시처럼 데이터베이스에 연결할 수 있음


 

가. MongoEngine ODM

  • MongoEngine은 몽고DB와 파이썬 간의 효과적인 상호작용 방법을 제공함
  • 몽고DB의 유연성과 파이썬 스타일의 친숙한 API를 통합하여 관계형 데이터베이스와 ORM에 익숙한 개발자들이 더 쉽게 사용할 수 있음
  • mongoengine은 pip 명령어를 통해 설치 가능하고 옵션은 name=value 형태로 구성하며 각각의 옵션은 & 기호로 구분해야 함

 

  • MongoEngine도 다른 ODM이나 ORM처럼 일정 수준의 오버헤드가 발생하지만 이러한 부하는 미미한 수준이며, 개발 생산성 향상으로 그 단점이 상쇄됨
    • 다만 성능이 특히 중요한 애플리케이션을 개발할 때 몽고DB의 공식 파이썬 드라이버인 PyMongo를 직접 사용하는 것을 권장

 

3. PHP를 이용한 몽고DB 연결

  • 몽고DB의 PHP 드라이버는 아래와 같음
    • 해당 구조의 최상단에는 Composer 패키지 형태로 배포되는 PHP 라이브러리가 자리를 잡고 있으며 다른 몽고DB 드라이버들과 동일한 API를 제공함
    • 그 아래에는 PECL을 통해 배포되는 PHP 확장이 있으며, 이는 PHP와 몽고DB의 시스템 라이브러리들 간의 중개자 역할을 수행
    • PHP 확장을 직접 사용하는 것도 가능하지만, 라이브러리는 최소한의 오버헤드만 발생시키므로 몽고DB 기반 대부분의 애플리케이션에서 기본적으로 사용하게 될 것

 

https://www.mongodb.com/ko-kr/docs/drivers/php-drivers/

 

  • 설치는 다음의 두 단계를 거쳐 진행됨
    • 몽고DB extension을 설치해야 하고 해당 extension은 설치된 PHP 버전과 호환되어야 함
    • PHP의 대표적인 의존성 관리자인 composer를 사용


 

가. 엘로퀀트 ORM

  • Laravel은 세련된 문법과 표현력 있는 코딩 스타일을 특징으로 하며, 특히 엘로퀀트 ORM에서 이러한 특징이 잘 드러남
  • 엘로퀀트는 데이터베이스와의 상호작용을 위한 풍부하고 직관적인 인터페이스를 제공하며, 독트린의 데이터 매퍼 패턴과는 달리 액티브 레코드 패턴을 구현한 것으로 알려져 있음
  • 몽고DB와 엘러퀀트를 함께 사용하기 위해서는 라라벨의 엘로퀀트 ORM을 몽고DB와 연동해주는 패키지를 설치해야 함

 

composer require mongodb/laravel-mongodb

 

 

4. Node.js를 이용한 몽고DB 연결

  • Node.js는 우수한 성능을 바탕으로 가장 널리 사용되는 웹 기술 중 하나로 자리 잡은 오픈소스 크로스 플랫폼 런타임 환경
  • 몽고DB는 Node.js와 함께 Express.js, React.js와 결합하여 MERN 스택이라고 불리게 되었음
    • 이 네 가지 기술은 모두 자바스크립트를 기반으로 하여 강력한 시너지를 발휘하며, 완전한 웹 솔루션 개발을 가능하게 함
    • 이를 통해 개발자들은 하나의 언어로 전체 개발을 수행할 수 있음
    • 현재는 Strapi와 같은 다수의 CMS가 MERN 스택을 기반으로 개발되고 있음

 

  • Node.js 드라이버는 노드 패키지 매니저를 통해 설치할 수 있으며 설치 후에는 아래 예시와 같이 코드를 통해 데이터베이스에 연결할 수 있음


 

  • 복제본 세트에 연결하기 위해서는 클라이언트가 주 서버, 보조 서버, 중재자 서버를 식별할 수 있는 시드 서버 목록이 필요하며 구체적인 예시는 다음과 같음


 

가. 연결 압축

  • 다른 드라이버들과 마찬가지로 Node.js 드라이버도 메시지 압축 기능을 제공하며 몽고DB와 애플리케이션 간의 데이터 전송량을 줄일 수 있음
  • Node.js 드라이버는 다음 세 가지 압축 알고리즘을 지원함
    • Snappy: 높은 속도와 적정 수준의 압축률을 제공하는 알고리즘
    • zlib: 무손실 데이터 압축을 지원하는 라이브러리
    • Zstandard: zstd라고도 불리며, zlib 수준의 실시간 압축 성능과 향상된 압축률을 제공하는 고속 무손실 압축 알고리즘

 

  • 압축 기능을 활성화하려면 연결 문자열에 compressors 매개변수를 추가해야 하고 복수의 압축 알고리즘을 지정할 때는 쉼표로 구분하여 입력


 

참고

마스터링 몽고DB 7.0

반응형

'DB > 마스터링 몽고DB 7.0' 카테고리의 다른 글

[7장] 몽고DB 고급 쿼리  (0) 2025.07.15
[6장] 스키마 설계와 데이터 모델링  (1) 2025.07.11
[5장] CRUD 작업과 기본 쿼리  (1) 2025.07.11
[3장] 개발자 도구  (0) 2025.07.10
[2장] 몽고DB 아키텍처  (0) 2025.07.05