며칠 전에 저는 도커 및 카우치베이스와 PHP 사용라는 책을 읽긴 했지만, PHP와 NoSQL 데이터베이스를 사용하는 모범 사례에 대해 자세히 알아보지는 못했습니다. 예를 들어, PHP를 사용하면서 Couchbase Server로 데이터를 어떻게 읽고 쓰나요? 고급 쿼리를 만들거나 고성능 인덱스를 만들어야 할 때는 어떻게 해야 하나요?

몇 가지 사용 예시를 살펴보겠습니다. 카우치베이스 서버 데이터베이스와 웹 애플리케이션 컨테이너화에 관한 이전 튜토리얼의 확장판인 PHP를 사용합니다.

동안 이전 튜토리얼 는 마이크로서비스 개발에 매우 유용하지만, 앞으로 설명할 자료의 전제 조건은 아닙니다.

PHP 환경을 구성하고 애플리케이션을 제공할 준비가 되었다고 가정하면 데이터베이스와의 통신을 위해 Couchbase PHP SDK를 가져와야 합니다. 데비안 또는 우분투를 사용하는 경우 다음을 실행합니다:

위의 터미널 명령은 공식 Couchbase PHP 문서. 먼저 SDK를 다운로드하여 설치한 다음 필요한 다양한 데비안 패키지를 설치합니다. 마지막으로 Couchbase 확장 프로그램을 다운로드하고 개수 종속성.

종속성이 설치되면 다음을 추가합니다. php.ini file:

PHP 애플리케이션 호스팅에 Debian 또는 Ubuntu 이외의 환경을 사용하는 경우 다른 SDK 설치 단계에 대한 설명서를 확인하세요.

카우치베이스 서버 및 PHP로 CRUD 작업 수행하기

가장 단순한 형태의 카우치베이스는 키-값 데이터베이스입니다. 이를 통해 특정 문서의 키를 기반으로 읽기, 쓰기, 바꾸기, 삭제(CRUD)와 같은 작업을 모두 수행할 수 있습니다.

다음 PHP 코드를 예로 들어보겠습니다:

위의 코드는 인쇄된 데이터가 JSON 형식이라고 가정합니다. 먼저 로컬 머신에 있는 단일 노드인 Couchbase 클러스터에 연결합니다. 로컬 머신이란 이 시나리오에서 Couchbase와 PHP가 모두 동일한 서버에서 작동한다는 의미입니다.

연결이 설정되면 애플리케이션 내에서 데이터를 저장하고 데이터를 읽는 데 사용할 특정 버킷을 열 수 있습니다. 이 예제에서 버킷의 이름은 기본값 비밀번호가 없습니다.

여기서부터 상황이 흥미로워집니다:

먼저 버킷에서 키 이름으로 특정 문서를 가져오려고 시도합니다. 해당 키가 존재하지 않는 등의 이유로 오류가 발생하면 이를 포착하고 해당 키로 새 문서를 만들려고 시도합니다.

삽입하는 데이터는 원하는 만큼 복잡하게 만들 수 있습니다. 카우치베이스에서는 JSON으로 저장되며, 다른 관계형 데이터베이스와 달리 유연성이 뛰어납니다.

데이터를 성공적으로 읽은 후에는 클라이언트로 다시 인쇄를 시도할 수 있습니다:

원한다면 다음과 같은 다른 SDK 명령을 사용할 수 있습니다. 대체 또는 제거 를 사용할 수 있습니다. 하지만 대부분의 경우 쿼리에 필요한 모든 키를 알 수 없는 방대한 양의 데이터로 작업하게 될 것입니다.

이것이 바로 N1QL과 PHP가 결합할 수 있는 부분입니다.

PHP 및 N1QL을 사용하여 NoSQL에 대해 SQL 쿼리 수행하기

N1QL을 처음 들어보신 분이라면 Couchbase에서 JSON 데이터로 작동하는 SQL 구문입니다. 즉, Postgres와 같은 관계형 데이터베이스의 SQL을 알고 있다면 N1QL의 대부분을 알 수 있습니다.

이전 CRUD 예제를 가지고 N1QL에 맞게 준비해 보겠습니다:

이전 예제에서와 마찬가지로 연결을 설정하고 특정 NoSQL 버킷을 열고 있습니다. 데이터베이스의 문서를 키가 아닌 다른 값으로 쿼리할 계획이므로 인덱스를 만들어야 합니다.

위와 같이 호출하는 인덱스가 생성됩니다. 사람들 를 인덱싱하는  문서의 속성을 기본값 버킷. 즉, 하나의 버킷을 기준으로 모든 문서를 쿼리할 수 있게 됩니다.  값입니다.

인덱스가 이미 존재하는 경우 예외가 발생하므로 이를 잡아내려고 합니다.

인덱스가 준비되면 문서에 대한 쿼리를 시도해 보겠습니다:

위에서는 문서 내에서 조건부 논리를 충족하는 다양한 속성에 대한 쿼리를 구성하고 있습니다. 어디 절을 사용해야 합니다. 각 속성을 정의하고 싶지 않았다면 별표 문자를 쉽게 사용할 수 있었을 것입니다.

관계형 데이터베이스와 마찬가지로 NoSQL 데이터베이스도 SQL 인젝션 공격의 대상이 될 수 있기 때문에 매개변수화된 쿼리를 사용하고 있습니다. 이를 통해 사용자가 생성할 가능성이 있는 데이터를 매개변수로 분리할 수 있습니다. 이 데이터는 양식을 통해 전송되었을 수 있습니다.

이전 쿼리 결과가 빈 배열로 돌아오면 해당 기준에 맞는 문서를 찾지 못했다는 뜻입니다. 배열이 비어 있으면 이전 예제에서 수행한 방식과 유사하게 새 데이터를 생성하려고 합니다. 이번에는 N1QL 쿼리를 통해 데이터를 생성하고 삽입 문을 사용합니다.

데이터를 삽입한 후 데이터를 쿼리하려고 합니다. 여기서 문제는 인덱스를 기반으로 쿼리하고 있는데 그 인덱스가 아직 업데이트되지 않았을 수 있다는 것입니다. 최신 데이터를 반환하기 위해 쿼리 일관성을 설정하고 인덱스가 업데이트될 때까지 기다릴 수 있습니다.

마지막으로 결과를 화면에 인쇄합니다.

결론

다음에서 실행되는 NoSQL 및 PHP 예제 애플리케이션 사용에 대한 간략한 소개를 받았습니다. 카우치베이스. 앞서 살펴본 예시에서는 모두 CRUD 또는 모두 N1QL이었습니다. 반드시 둘 중 하나만 사용해야 할 필요는 없습니다. 동일한 애플리케이션 내에서 CRUD와 N1QL을 함께 사용할 수 있습니다.

이 예제를 사용하여 마이크로서비스 컨테이너를 생성하는 데 Docker는 훌륭하게 작동합니다. 이 애플리케이션을 컨테이너화하는 방법을 알아보려면 이전에 작성한 튜토리얼을 참조하세요, 카우치베이스 애플리케이션으로 PHP를 Docker 컨테이너로 배포하기.

Couchbase PHP SDK 사용에 대한 자세한 내용은 다음을 확인하세요. 카우치베이스 개발자 포털.

작성자

게시자 Nic Raboy, 개발자 옹호자, Couchbase

닉 라보이는 최신 웹 및 모바일 개발 기술을 옹호하는 사람입니다. 그는 Java, JavaScript, Golang 및 Angular, NativeScript, Apache Cordova와 같은 다양한 프레임워크에 대한 경험이 있습니다. Nic은 웹 및 모바일 개발을 보다 쉽게 이해할 수 있도록 자신의 개발 경험에 대해 글을 쓰고 있습니다.

댓글 남기기