개요
이 가이드 에서는 Symfony MongoDB 통합에 대해 알아보고 이 프레임워크 를 사용하여 간단한 PHP 웹 애플리케이션 을 빌드 하는 방법을 학습 수 있습니다. Symfony를 사용하여 MongoDB 를 데이터베이스 로 사용하여 웹 애플리케이션을 빌드 할 때 얻을 수 있는 이점과 MongoDB 쿼리를 간소화하는 라이브러리 사용 실습을 읽을 수 있습니다.
Symfony 는 PHP 애플리케이션 빌드를 위한 유연하고 고도로 구성 가능한 프레임워크 입니다. 이 프레임워크 사용하여 재사용 가능한 구성 요소를 만들어 웹 앱 간소화할 수 있습니다.
Symfony 애플리케이션에서 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 에 연결하기를 참조하세요.
이 가이드 에서는 Doctrine ODM을 사용하여 빌더 API 를 사용하여 PHP 객체를 MongoDB 문서에 매핑하고 MongoDB 를 쿼리 할 수 있습니다.
이 가이드 의 단계에 따라 MongoDB deployment 서버에 연결하고 데이터베이스 에서 쿼리 를 수행하는 샘플 Symfony 웹 애플리케이션 을 만듭니다.
전제 조건
Quick Start 애플리케이션을 생성하려면 개발 환경에 다음 소프트웨어가 설치되어 있어야 합니다.
전제 조건 | 참고 사항 |
|---|---|
PHP 설치에 MongoDB 확장 이 포함되어 있고 활성화되어 있는지 확인합니다. 버전 호환성을 확인하려면 호환성.을 참조하세요. | |
PHP 용 종속성 관리자. | |
Symfony 애플리케이션을 관리하기 위한 명령줄 도구입니다. 호환성을 확인하려면 Symfony 설명서를 참조하세요. | |
터미널 앱 및 shell | MacOS 사용자의 경우 터미널 또는 유사한 앱을 사용하세요. Windows 사용자의 경우 PowerShell을 사용하세요. |
MongoDB Atlas 클러스터 생성
MongoDB Atlas 는 MongoDB 배포서버를 호스팅하는 관리형 클라우드 데이터베이스 서비스입니다. MongoDB deployment 없는 경우, Atlas 시작하기 튜토리얼을 완료하여 무료로 MongoDB cluster 생성할 수 있습니다( 크레딧 카드 필요 없음). 이 튜토리얼에서는 이 튜토리얼에서 사용되는 데이터를 포함하여 샘플 데이터 세트를 클러스터 에 로드하는 방법도 보여줍니다.
연결 을 제공하여 클러스터 에 연결할 위치와 방법에 대한 지침을 운전자 MongoDB string 에 제공합니다. string 연결 Atlas 을 조회 하려면 설명서의 Connect to Your Cluster (클러스터에 연결하기) 튜토리얼의 지침을 따르세요.
팁
연결 string 을 안전한 위치 에 저장합니다.
PHP 드라이버 및 Doctrine ODM 설치
프로젝트 디렉토리 를 입력한 다음 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 파일 에 다음 코드에서 강조 표시된 항목이 포함되어 있는지 확인합니다.
return [ // ... Doctrine\Bundle\MongoDBBundle\DoctrineMongoDBBundle::class => ['all' => true], ];
ODM 구성
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
프로젝트 파일 수정
이 섹션에서는 restaurants 프로젝트 의 파일을 수정하여 지정된 기준과 일치하는 레스토랑을 표시하는 Symfony 웹 애플리케이션 을 만드는 방법을 보여 줍니다.
환경 변수 설정
루트 디렉토리 에서 .env 파일 로 이동하여 다음 환경 변수를 정의하여 연결 string 과 대상 데이터베이스 를 설정하다 합니다.
... MONGODB_URL=<your Atlas connection string> MONGODB_DB=sample_restaurants
연결 문자열 조회 하려면 연결 문자열을참조하세요.
레스토랑 엔터티 및 컨트롤러 만들기
src/Document 디렉토리 에 Restaurant.php 파일 을 만들고 다음 코드를 붙여넣어 restaurants 컬렉션 의 문서를 나타내는 엔터티를 만듭니다.
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 파일 을 만들고 다음 코드를 붙여넣어 애플리케이션 에서 엔드포인트를 처리하다 합니다.
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; } ('/', name: 'restaurant_index', methods: ['GET']) public function index(Request $request): Response { return $this->render('restaurant/index.html.twig'); } ('/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.twigbrowse.html.twig
다음 코드를 index.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 #} {% 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 %}
Symfony 애플리케이션 시작
애플리케이션 루트 디렉토리에서 다음 명령을 실행하여 PHP 내장 웹 서버를 시작합니다.
symfony server:start
서버가 시작되면 다음 메시지를 출력합니다.
[OK] Web server listening The Web server is using PHP FPM 8.3.4 http://127.0.0.1:8000
웹 브라우저에서 http://127.0.0.1:8000/restaurant/browse URL 엽니다. 이 페이지에는 다음 스크린샷과 같이 레스토랑 목록과 각 레스토랑에 대한 세부 정보가 표시됩니다.

빠른 시작 튜토리얼을 완료하신 것을 축하드립니다!
이 단계를 완료하면 MongoDB deployment 에 연결하고 샘플 데이터에 대한 쿼리 를 실행하고 검색된 결과를 렌더링하는 Symfony 웹 애플리케이션 을 갖게 됩니다.
이 튜토리얼에 대한 피드백 제공하려면 MongoDB 피드백 포털을 방문하세요.
리소스
다음 리소스를 확인하여 Symfony 및 MongoDB 에 자세히 보기 .