Docs Menu
Docs Home
/
MongoDB 드라이버
/

Symfony MongoDB Integration

이 페이지의 내용

  • 개요
  • Symfony 애플리케이션에서 MongoDB 를 사용하는 이유
  • 빠른 시작
  • 전제 조건
  • MongoDB Atlas 클러스터 생성
  • MongoDB 확장 설치
  • Symfony 프로젝트 초기화
  • PHP 드라이버 및 Doctrine ODM 설치
  • 프론트엔드 종속성 설치
  • 프로젝트 파일 수정
  • Symfony 애플리케이션 시작
  • 리소스

이 가이드 에서는 Symfony MongoDB 통합에 대해 알아보고 이 프레임워크 를 사용하여 간단한 PHP 웹 애플리케이션 을 빌드 하는 방법을 학습 수 있습니다. Symfony를 사용하여 MongoDB 를 데이터베이스 로 사용하여 웹 애플리케이션을 빌드 할 때 얻을 수 있는 이점과 MongoDB 쿼리를 간소화하는 라이브러리 사용 실습을 읽을 수 있습니다.

Symfony는 PHP 애플리케이션 빌드를 위한 유연하고 고도로 구성 가능한 프레임워크 입니다. 이 프레임워크 를 사용하여 재사용 가능한 구성 요소를 만들어 웹 앱 을 간소화할 수 있습니다.

이 가이드 의 빠른 시작 섹션에는 MongoDB 컬렉션 의 데이터에 액세스하는 단일 페이지 앱 을 빌드 하기 위해 따라할 수 있는 튜토리얼이 포함되어 있습니다.

리소스 섹션에는 추가 학습을 위한 리소스 및 설명서에 대한 링크가 포함되어 있습니다.

MongoDB 를 Symfony 웹 애플리케이션 의 데이터 저장 로 사용하면 문서 데이터 모델 을 빌드 하여 풍부한 쿼리 표현식을 작성하여 데이터와 쉽게 상호 작용 수 있습니다. 또한 연결을 사용자 지정하여 여러 데이터베이스 및 컬렉션의 데이터를 유지하고 액세스 수 있습니다.

애플리케이션에서 MongoDB 및 PHP 용 ODM(객체-문서 매퍼)인 Doctrine MongoDB ODM 을 구현 수 있습니다. 관계형 데이터베이스에 Doctrine ORM과 동일한 원칙을 사용하여 Symfony에서 MongoDB 로 작업할 수 있는 방법을 제공합니다.

Doctrine ODM을 사용하면 빌더 API 를 사용하여 PHP 객체를 MongoDB 문서에 매핑하고 MongoDB 를 쿼리 할 수 있습니다. 이 매핑을 통해 유연한 스키마 설계 및 고급 검색과 같은 다른 MongoDB 기능을 사용할 수 있습니다. 이 라이브러리에 학습 보려면 리소스 섹션을 참조하세요.

이 튜토리얼에서는 PHP 프레임워크 인 Symfony를 사용하여 웹 애플리케이션 을 빌드 하는 방법을 보여줍니다. 여기에는 MongoDB Atlas 에서 호스팅되는 MongoDB cluster 에 연결하고 데이터베이스 의 데이터에 액세스하고 표시하는 방법에 대한 지침이 포함되어 있습니다.

MongoDB 를 Symfony 웹 애플리케이션 의 데이터 저장 로 사용하면 문서 데이터 모델 을 빌드 하여 풍부한 쿼리 표현식을 작성하여 데이터와 쉽게 상호 작용 수 있습니다.

Symfony 없이 MongoDB PHP 라이브러리를 사용하여 MongoDB 에 연결하려는 경우, MongoDB PHP 라이브러리 문서에서 MongoDB 에 연결하기를 참조하세요.

MongoDB Atlas는 관리형 클라우드 데이터베이스 서비스로, MongoDB deployment를 호스팅합니다. 이 가이드의 단계에 따라 자체 무료(신용카드 필요 없음) MongoDB Atlas 배포서버를 생성할 수 있습니다.

이 가이드 에서는 Doctrine ODM을 사용하여 빌더 API 를 사용하여 PHP 객체를 MongoDB 문서에 매핑하고 MongoDB 를 쿼리 할 수 있습니다.

이 가이드 의 단계에 따라 MongoDB deployment 서버에 연결하고 데이터베이스 에서 쿼리 를 수행하는 샘플 Symfony 웹 애플리케이션 을 만듭니다.

Quick Start 애플리케이션을 생성하려면 개발 환경에 다음 소프트웨어가 설치되어 있어야 합니다.

데이터를 저장 하고 관리 할 수 있는 MongoDB cluster 를 생성해야 합니다. Atlas 시작하기 가이드 를 완료하여 새 Atlas 계정을 설정하다 하고 무료 계층 MongoDB cluster 를 만듭니다. 이 튜토리얼에서는 이 튜토리얼에서 사용되는 데이터를 포함하여 샘플 데이터 세트를 클러스터 에 로드하는 방법도 보여줍니다.

연결 을 제공하여 클러스터 에 연결할 위치와 방법에 대한 지침을 운전자 MongoDB string 에 제공합니다. string 연결 Atlas 을 조회 하려면 설명서의 Connect to Your Cluster (클러스터에 연결하기) 튜토리얼의 지침을 따르세요.

연결 string 을 안전한 위치 에 저장합니다.

MongoDB 확장 프로그램 설치에 학습 보려면 PHP 라이브러리 매뉴얼에서 확장 프로그램 설치하기 를 참조하세요.

다음 명령을 실행하여 restaurants 이라는 스켈레톤 Symfony 프로젝트 를 만듭니다.

composer create-project symfony/skeleton restaurants

프로젝트 디렉토리 를 입력한 다음 MongoDB PHP 운전자 와 Doctrine ODM 번들을 애플리케이션 에 추가합니다. 번들은 ODM 라이브러리를 Symfony에 통합하여 MongoDB 에서 객체를 읽고 쓰기 (write) 수 있도록 합니다. 번들을 설치하면 프로젝트 에 운전자 도 자동으로 추가됩니다. 학습 보려면 이 가이드 의 리소스 섹션을 참조하세요.

다음 명령을 실행하여 ODM을 설치합니다.

composer require doctrine/mongodb-odm-bundle

앞의 명령을 실행 한 후 다음 프롬프트가 표시될 수 있습니다.

Do you want to execute this recipe?

응답 옵션에서 yes 을 선택하여 애플리케이션 에 ODM 라이브러리를 추가합니다.

프로젝트 에서 Doctrine ODM이 활성화되어 있는지 확인하려면 config/bundles.php 파일 에 다음 코드에서 강조 표시된 항목이 포함되어 있는지 확인합니다.

config/bundles.php
return [
// ...
Doctrine\Bundle\MongoDBBundle\DoctrineMongoDBBundle::class => ['all' => true],
];

config/packages 디렉토리 에서 doctrine_mongodb.yaml 파일 의 내용을 다음 코드로 바꿉니다.

config/packages/doctrine_mongodb.yaml
doctrine_mongodb:
auto_generate_proxy_classes: true
auto_generate_hydrator_classes: true
connections:
default:
server: "%env(resolve:MONGODB_URL)%"
default_database: "%env(resolve:MONGODB_DB)%"
document_managers:
default:
auto_mapping: true
mappings:
App:
dir: "%kernel.project_dir%/src/Document"
mapping: true
type: attribute
prefix: 'App\Document'
is_bundle: false
alias: App

이 프로젝트 는 Symfony의 기본값 템플릿 엔진 인 twig 를 사용하여 이 애플리케이션 에서 템플릿을 생성합니다. 다음 명령을 실행하여 twig 번들을 설치합니다.

composer require symfony/twig-bundle

참고

이 단계에서는 설정되지 않은 환경 변수에 대한 오류 메시지가 표시될 수 있지만, 이 문제는 다음 단계에서 해결됩니다.

이 섹션에서는 restaurants 프로젝트 의 파일을 수정하여 지정된 기준과 일치하는 레스토랑을 표시하는 Symfony 웹 애플리케이션 을 만드는 방법을 보여 줍니다.

루트 디렉토리 에서 .env 파일 로 이동하여 다음 환경 변수를 정의하여 연결 string 과 대상 데이터베이스 를 설정하다 합니다.

.env
...
MONGODB_URL=<your Atlas connection string>
MONGODB_DB=sample_restaurants

연결 string 을 조회 하려면 MongoDB Atlas 클러스터 만들기 단계를 참조하세요.

src/Document 디렉토리 에 Restaurant.php 파일 을 만들고 다음 코드를 붙여넣어 restaurants 컬렉션 의 문서를 나타내는 엔터티를 만듭니다.

src/Document/Restaurant.php
<?php
declare(strict_types=1);
namespace App\Document;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ODM\MongoDB\Mapping\Annotations as ODM;
#[ODM\Document(collection: 'restaurants')]
class Restaurant
{
#[ODM\Id]
public ?string $id = null;
#[ODM\Field]
public string $name;
#[ODM\Field]
public string $borough;
#[ODM\Field]
public string $cuisine;
}

다음으로, src/Controller 디렉토리 에 RestaurantController.php 파일 을 만들고 다음 코드를 붙여넣어 애플리케이션 에서 엔드포인트를 처리하다 합니다.

src/controller/restaurantcontroller.php
<?php
declare(strict_types=1);
namespace App\Controller;
use App\Document\Restaurant;
use Doctrine\ODM\MongoDB\DocumentManager;
use MongoDB\BSON\Regex;
use Psr\Log\LoggerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
class RestaurantController extends AbstractController
{
private DocumentManager $dm;
private LoggerInterface $logger;
public function __construct(DocumentManager $dm, LoggerInterface $logger)
{
$this->dm = $dm;
$this->logger = $logger;
}
#[Route('/', name: 'restaurant_index', methods: ['GET'])]
public function index(Request $request): Response
{
return $this->render('restaurant/index.html.twig');
}
#[Route('/restaurant/browse', name: 'restaurant_browse', methods: ['GET'])]
public function browse(Request $request): Response
{
$restaurantRepository = $this->dm->getRepository(Restaurant::class);
$queryBuilder = $restaurantRepository->createQueryBuilder();
$restaurants = $queryBuilder
->field('borough')->equals('Queens')
->field('name')->equals(new Regex('Moon', 'i'))
->getQuery()
->execute();
return $this->render('restaurant/browse.html.twig', ['restaurants' => $restaurants]);
}
}

컨트롤러 파일 은 웹 앱의 첫 페이지에 텍스트를 표시하는 index() 메서드를 정의합니다. 이 파일 은 또한 borough 필드 가 'Queens' 이고 name 필드 에 string 'Moon'가 포함된 문서를 찾는 browse() 메서드를 정의합니다. 그런 다음 이 메서드는 /restaurant/browse/ 경로에 있는 문서를 표시합니다. browse() 메서드는 QueryBuilder 클래스를 사용하여 쿼리 를 구성합니다.

다음으로, 웹 앱의 모양을 사용자 지정하는 템플릿을 만듭니다.

templates/restaurant 디렉토리 를 만들고 다음 파일로 채웁니다.

  • index.html.twig

  • browse.html.twig

다음 코드를 index.html.twig 파일 에 붙여넣습니다.

Templates/restaurant/ 인덱스.html.twig
{# templates/restaurant/index.html.twig #}
{% extends 'base.html.twig' %}
{% block body %}
<h1>Welcome to the Symfony MongoDB Quickstart!</h1>
{% endblock %}

다음 코드를 browse.html.twig 파일 에 붙여넣습니다.

templates/restaurant/browse.html.twig
{# templates/restaurant/browse.html.twig #}
{% extends 'base.html.twig' %}
{% block title %}
Search Restaurants
{% endblock %}
{% block body %}
<h1>Search Restaurants</h1>
{% for restaurant in restaurants %}
<p>
<span style="color:deeppink;"><b>Name: </b>{{ restaurant.name }}</span><br>
<b>Borough:</b> {{ restaurant.borough }}<br>
<b>Cuisine:</b> {{ restaurant.cuisine }}<br>
</p>
{% endfor %}
{% endblock %}

애플리케이션 루트 디렉토리에서 다음 명령을 실행하여 PHP 내장 웹 서버를 시작합니다.

symfony server:start

서버가 시작되면 다음 메시지를 출력합니다.

[OK] Web server listening
The Web server is using PHP FPM 8.3.4
http://127.0.0.1:8000

URL http://127.0.0.1:8000/restaurant/browse 를 엽니다. 웹 브라우저에서. 이 페이지에는 다음 스크린샷과 같이 레스토랑 목록과 각 레스토랑에 대한 세부 정보가 표시됩니다.

레스토랑 웹 앱 스크린샷

빠른 시작 튜토리얼을 완료하신 것을 축하드립니다!

이 단계를 완료하면 MongoDB deployment 에 연결하고 샘플 데이터에 대한 쿼리 를 실행하고 검색된 결과를 렌더링하는 Symfony 웹 애플리케이션 을 갖게 됩니다.

다음 리소스를 확인하여 Symfony 및 MongoDB 에 자세히 보기 .

돌아가기

PHP 드라이버