Symfony MongoDB Integration
이 페이지의 내용
개요
이 가이드 에서는 Symfony MongoDB 통합에 대해 알아보고 이 프레임워크 를 사용하여 간단한 PHP 웹 애플리케이션 을 빌드 하는 방법을 학습 수 있습니다. Symfony를 사용하여 MongoDB 를 데이터베이스 로 사용하여 웹 애플리케이션을 빌드 할 때 얻을 수 있는 이점과 MongoDB 쿼리를 간소화하는 라이브러리 사용 실습을 읽을 수 있습니다.
Symfony는 PHP 애플리케이션 빌드를 위한 유연하고 고도로 구성 가능한 프레임워크 입니다. 이 프레임워크 를 사용하여 재사용 가능한 구성 요소를 만들어 웹 앱 을 간소화할 수 있습니다.
이 가이드 의 빠른 시작 섹션에는 MongoDB 컬렉션 의 데이터에 액세스하는 단일 페이지 앱 을 빌드 하기 위해 따라할 수 있는 튜토리얼이 포함되어 있습니다.
리소스 섹션에는 추가 학습을 위한 리소스 및 설명서에 대한 링크가 포함되어 있습니다.
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 에 연결하기를 참조하세요.
MongoDB Atlas는 관리형 클라우드 데이터베이스 서비스로, MongoDB deployment를 호스팅합니다. 이 가이드의 단계에 따라 자체 무료(신용카드 필요 없음) MongoDB Atlas 배포서버를 생성할 수 있습니다.
이 가이드 에서는 Doctrine ODM을 사용하여 빌더 API 를 사용하여 PHP 객체를 MongoDB 문서에 매핑하고 MongoDB 를 쿼리 할 수 있습니다.
이 가이드 의 단계에 따라 MongoDB deployment 서버에 연결하고 데이터베이스 에서 쿼리 를 수행하는 샘플 Symfony 웹 애플리케이션 을 만듭니다.
전제 조건
Quick Start 애플리케이션을 생성하려면 개발 환경에 다음 소프트웨어가 설치되어 있어야 합니다.
터미널 앱과 셸입니다. MacOS 사용자의 경우 터미널 또는 유사한 앱을 사용하세요. Windows 사용자의 경우 PowerShell을 사용하세요.
MongoDB Atlas 클러스터 생성
데이터를 저장 하고 관리 할 수 있는 MongoDB cluster 를 생성해야 합니다. Atlas 시작하기 가이드 를 완료하여 새 Atlas 계정을 설정하다 하고 무료 계층 MongoDB cluster 를 만듭니다. 이 튜토리얼에서는 이 튜토리얼에서 사용되는 데이터를 포함하여 샘플 데이터 세트를 클러스터 에 로드하는 방법도 보여줍니다.
연결 을 제공하여 클러스터 에 연결할 위치와 방법에 대한 지침을 운전자 MongoDB string 에 제공합니다. string 연결 Atlas 을 조회 하려면 설명서의 Connect to Your Cluster (클러스터에 연결하기) 튜토리얼의 지침을 따르세요.
팁
연결 string 을 안전한 위치 에 저장합니다.
MongoDB 확장 설치
MongoDB 확장 프로그램 설치에 학습 보려면 PHP 라이브러리 매뉴얼에서 확장 프로그램 설치하기 를 참조하세요.
Symfony 프로젝트 초기화
다음 명령을 실행하여 restaurants
이라는 스켈레톤 Symfony 프로젝트 를 만듭니다.
composer create-project symfony/skeleton restaurants
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
프론트엔드 종속성 설치
이 프로젝트 는 Symfony의 기본값 템플릿 엔진 인 twig
를 사용하여 이 애플리케이션 에서 템플릿을 생성합니다. 다음 명령을 실행하여 twig
번들을 설치합니다.
composer require symfony/twig-bundle
참고
이 단계에서는 설정되지 않은 환경 변수에 대한 오류 메시지가 표시될 수 있지만, 이 문제는 다음 단계에서 해결됩니다.
프로젝트 파일 수정
이 섹션에서는 restaurants
프로젝트 의 파일을 수정하여 지정된 기준과 일치하는 레스토랑을 표시하는 Symfony 웹 애플리케이션 을 만드는 방법을 보여 줍니다.
환경 변수 설정
루트 디렉토리 에서 .env
파일 로 이동하여 다음 환경 변수를 정의하여 연결 string 과 대상 데이터베이스 를 설정하다 합니다.
... MONGODB_URL=<your Atlas connection string> MONGODB_DB=sample_restaurants
연결 string 을 조회 하려면 MongoDB Atlas 클러스터 만들기 단계를 참조하세요.
레스토랑 엔터티 및 컨트롤러 만들기
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.twig
browse.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
URL http://127.0.0.1:8000/restaurant/browse 를 엽니다. 웹 브라우저에서. 이 페이지에는 다음 스크린샷과 같이 레스토랑 목록과 각 레스토랑에 대한 세부 정보가 표시됩니다.
빠른 시작 튜토리얼을 완료하신 것을 축하드립니다!
이 단계를 완료하면 MongoDB deployment 에 연결하고 샘플 데이터에 대한 쿼리 를 실행하고 검색된 결과를 렌더링하는 Symfony 웹 애플리케이션 을 갖게 됩니다.
리소스
다음 리소스를 확인하여 Symfony 및 MongoDB 에 자세히 보기 .