2025. 10. 17. 15:01ㆍ프로그램/PHP 최상급
#NoSQL 의 투톱: #MongoDB 와 #Redis 소개

지난 시간에는 #NoSQL 데이터베이스의 필요성과 종류에 대해 알아보았습니다. 이번 시간에는 #PHP애플리케이션 에서 가장 많이 활용되는 두 가지 #NoSQL 데이터베이스, **MongoDB (문서형 DB)**와 **Redis (키-값 DB)**의 기본 사용법과 #PHP 에서의 연동 방법을 구체적으로 실습해 보겠습니다.
#MongoDB 는 복잡하고 유연한 데이터를 저장하는 메인 데이터베이스로, #Redis 는 초고속 캐싱 및 세션 관리를 위한 보조 저장소로 활용되어 #PHP개발 의 성능을 비약적으로 향상시킬 수 있습니다.
1. #MongoDB 기본 사용법 및 #PHP 연동
#MongoDB 는 데이터를 JSON 형태와 유사한 BSON(Binary JSON) 문서(Document) 형태로 저장합니다. #RDB 의 테이블은 #MongoDB 의 **컬렉션(Collection)**에 해당하며, 레코드는 문서에 해당합니다.

1.1. MongoDB 기본 개념
- 문서(Document): 데이터의 기본 단위로, #JSON 과 유사한 구조를 가집니다
- 컬렉션(Collection): 관련된 문서들의 그룹으로, #RDB 의 테이블과 유사합니다
- 스키마리스(Schemaless): 동일한 컬렉션 내의 문서라도 필드 구조가 달라도 무방합니다 (유연성)
1.2. PHP MongoDB 드라이버 설치
#PHP 에서 #MongoDB 를 사용하려면 mongodb 확장을 설치하고 #Composer 를 통해 PHP용 MongoDB 라이브러리인 mongodb/mongodb를 설치해야 합니다.
# Dockerfile 또는 서버에서 확장 설치
# docker-php-ext-install mongodb (PHP FPM 환경)
# Composer 라이브러리 설치
composer require mongodb/mongodb
1.3. PHP CRUD 기본 예시
#PHP 에서 #MongoDB 에 연결하고 문서를 삽입(Create), 조회(Read)하는 기본 코드입니다.
// PHP MongoDB 라이브러리 사용
require 'vendor/autoload.php';
use MongoDB\Client;
// 1. MongoDB 연결 (Docker 환경에서는 서비스 이름 사용)
$client = new Client('mongodb://mongo:27017');
$collection = $client->selectCollection('mydb', 'users');
// 2. 문서 삽입 (Create)
$insertResult = $collection->insertOne([
'name' => '김철수',
'age' => 30,
'tags' => ['developer', 'php', 'nosql'],
'address' => [
'city' => 'Seoul',
'zip' => '03187'
]
]);
echo "삽입된 문서 ID: " . $insertResult->getInsertedId() . "\n";
// 3. 문서 조회 (Read)
$document = $collection->findOne(['name' => '김철수']);
if ($document) {
echo "조회된 문서: " . json_encode($document) . "\n";
}
// 4. 문서 업데이트 (Update)
$updateResult = $collection->updateOne(
['name' => '김철수'],
['$set' => ['age' => 31, 'status' => 'active']]
);
echo "업데이트된 문서 개수: " . $updateResult->getModifiedCount() . "\n";
2. #Redis 기본 사용법 및 #PHP 연동

#Redis 는 인메모리(In-Memory) 데이터 구조 저장소로, 데이터를 메모리에 저장하여 밀리초 단위의 응답 속도를 제공하는 #키값데이터베이스 입니다. #RDB 나 #MongoDB 의 부하를 줄여주는 캐싱 및 세션 관리용으로 활용됩니다.
2.1. Redis 데이터 타입
#Redis 는 단순한 문자열 외에도 다양한 자료구조를 지원합니다.
- String: 가장 기본적인 문자열 저장 (캐시 데이터, 세션)
- Hash: 객체 형태로 필드-값 쌍 저장 (사용자 정보)
- List: 삽입 순서가 보장되는 문자열 목록 (최근 알림, 큐)
- Set: 중복이 없는 문자열 집합 (태그, 좋아요)
- Sorted Set: 점수(Score)로 정렬된 집합 (실시간 랭킹)
2.2. PHP Redis 확장 설치
#PHP 에서 #Redis 를 사용하려면 redis 확장을 설치해야 합니다.
# Dockerfile 또는 서버에서 확장 설치
# pecl install redis
# docker-php-ext-enable redis
2.3. PHP Redis 기본 예시 (PHP-Redis 확장 사용)
#PHP 에서 #Redis 의 String 타입과 Hash 타입을 활용하는 기본 코드입니다.
// Redis 확장 사용 (라이브러리 로딩 불필요)
$redis = new Redis();
// Redis 연결 (Docker 환경에서는 서비스 이름 사용)
$redis->connect('redis', 6379);
// 1. String 타입 사용 (캐시)
$redis->set('user:session:123', '{"id":1, "login_time":"..."}', 3600); // 3600초(1시간) 만료 설정
$sessionData = $redis->get('user:session:123');
echo "세션 데이터: " . $sessionData . "\n";
// 2. Hash 타입 사용 (사용자 정보)
$redis->hMSet('user:profile:456', [
'username' => '홍길동',
'email' => 'hong@example.com',
'last_login' => time()
]);
$userData = $redis->hGetAll('user:profile:456');
echo "사용자 프로필: " . print_r($userData, true) . "\n";
// 3. 데이터 삭제
$redis->del('user:session:123');
echo "세션 데이터 삭제 완료.\n";
결론
#MongoDB 는 복잡한 데이터 모델의 유연성을, #Redis 는 메모리 기반의 초고속 데이터 액세스를 제공합니다. #PHP개발 에서 이 두 가지 #NoSQL 데이터베이스를 #RDB 와 함께 적재적소에 활용하는 것은 성능과 확장성 모두를 잡는 #최상급기술 입니다. 이들을 #Docker 환경에서 #PHP애플리케이션 과 통합하는 실습을 통해 기술 역량을 한 단계 더 발전시킬 수 있습니다.
유튜브/인스타그램 조회 유효 KT아이피, 쇼핑 크롤링, 지역별 다대역 IP보유
https://xn--299ao67b9qbmsf04c.net/
VPN 5,500원 / IP교체 1,100원 / 유동프록시 22,000원 | LuzenVPN 루젠VPN
국내최저가 고정IP서비스,유동프록시(IP4000개이상제공),PPTP,L2TP,IPSec,OpenVPNVPN,통신사VPN,VPN프로그램,고정IP,고정아이피,PPTP,저렴한VPN,리니지MVPN,리니지VPN,아이온VPN,던파VPN,유동프록시,유동PROXY,바이
vpn.luzensoft.com