MongoDB
Introduction
MongoDB는 가장 널리 사용되는 NoSQL 문서 지향 데이터베이스 중 하나입니다. 주로 높은 쓰기 부하(분석이나 IoT에 유용) 처리와 높은 가용성(자동 장애 조치 기능이 있는 복제 세트 설정이 쉬움)을 위해 사용됩니다. 또한 데이터베이스 샤딩을 간단히 설정해 수평 확장성과 뛰어난 확장성을 제공하며, 집계, 텍스트 검색, 지리적 쿼리 등 다양한 용도의 강력한 쿼리 언어도 지원합니다.
MongoDB는 SQL 데이터베이스처럼 행(row)과 열(column)로 구성된 테이블에 데이터를 저장하는 대신, 각 레코드를 BSON이라는 이진 형식으로 표현된 문서(document)로 저장합니다. 애플리케이션에서는 이 정보를 JSON 형식으로 조회할 수 있습니다. 문서, 배열, 중첩(임베디드) 문서, 이진 데이터 등 다양한 데이터 타입을 지원합니다.
Laravel에서 MongoDB를 사용하려면 Composer를 통해 mongodb/laravel-mongodb 패키지 설치 및 사용을 권장합니다. laravel-mongodb 패키지는 MongoDB에서 공식적으로 관리하며, PHP가 기본적으로 MongoDB 드라이버를 지원하긴 하지만, Laravel MongoDB 패키지는 Eloquent 및 다양한 Laravel 기능과의 통합을 더욱 풍부하게 제공합니다:
composer require mongodb/laravel-mongodb
Installation
MongoDB Driver
MongoDB 데이터베이스와 연결하려면 mongodb PHP 확장이 필요합니다. Laravel Herd를 사용하거나, php.new를 통해 PHP를 설치한 경우 이 확장이 이미 설치되어 있을 수 있습니다. 만약 직접 확장을 설치해야 한다면, PECL을 통해 손쉽게 설치할 수 있습니다:
pecl install mongodb
MongoDB PHP 확장 설치에 대한 더 자세한 정보는 MongoDB PHP extension installation instructions를 참고하시기 바랍니다.
Starting a MongoDB Server
MongoDB Community Server는 로컬에서 MongoDB를 실행할 때 사용할 수 있으며, Windows, macOS, Linux 등 다양한 플랫폼이나 Docker 컨테이너로도 설치가 가능합니다. 설치 방법에 대해서는 official MongoDB Community installation guide를 참고하시기 바랍니다.
MongoDB 서버 연결 문자열은 프로젝트의 .env 파일에서 설정할 수 있습니다:
MONGODB_URI="mongodb://localhost:27017"
MONGODB_DATABASE="laravel_app"
클라우드 환경에서 MongoDB를 사용하려는 경우 MongoDB Atlas 서비스를 고려해볼 수 있습니다. 애플리케이션에서 MongoDB Atlas 클러스터에 로컬 환경에서 접근하려면, 먼저 add your own IP address in the cluster's network settings해야 합니다.
MongoDB Atlas의 연결 문자열도 .env 파일에서 설정할 수 있습니다:
MONGODB_URI="mongodb+srv://<username>:<password>@<cluster>.mongodb.net/<dbname>?retryWrites=true&w=majority"
MONGODB_DATABASE="laravel_app"
Install the Laravel MongoDB Package
마지막으로 Composer를 사용해 Laravel MongoDB 패키지를 설치합니다:
composer require mongodb/laravel-mongodb
mongodbPHP 확장이 설치되어 있지 않으면 이 패키지 설치가 실패합니다. PHP 설정은 CLI와 웹 서버 환경 간에 다를 수 있으니, 두 환경 모두에서 확장이 활성화되어 있는지 반드시 확인해야 합니다.
Configuration
애플리케이션의 config/database.php 설정 파일을 통해 MongoDB 연결을 구성할 수 있습니다. 이 파일에서, mongodb 드라이버를 사용하는 mongodb 연결을 추가해 주세요:
'connections' => [
'mongodb' => [
'driver' => 'mongodb',
'dsn' => env('MONGODB_URI', 'mongodb://localhost:27017'),
'database' => env('MONGODB_DATABASE', 'laravel_app'),
],
],
Features
설정이 완료되면, 애플리케이션에서 mongodb 패키지 및 데이터베이스 연결을 활용해 다양한 강력한 기능을 사용할 수 있습니다.
- Using Eloquent 시, 모델을 MongoDB 컬렉션에 저장할 수 있습니다. 기본 Eloquent의 기능 외에도, Laravel MongoDB 패키지는 임베디드(embedded) 관계 등 추가적인 기능을 제공하며, MongoDB 드라이버에 직접 접근해 원시 쿼리나 집계 파이프라인 같은 작업도 수행할 수 있습니다.
- 쿼리 빌더를 사용하여 Write complex queries이 가능합니다.
mongodbcache driver는 만료된 캐시 항목을 자동으로 삭제하는 TTL 인덱스 등 MongoDB의 기능을 적극적으로 활용하도록 최적화되어 있습니다.mongodb큐 드라이버로 Dispatch and process queued jobs할 수 있습니다.- Storing files in GridFS를 이용해 GridFS Adapter for Flysystem이 가능합니다.
- 데이터베이스 연결이나 Eloquent를 사용하는 대부분의 서드파티 패키지를 MongoDB와 함께 사용할 수 있습니다.
MongoDB 및 Laravel 연동법을 계속 학습하려면, MongoDB의 Quick Start guide를 참고하세요.