
PHP ์จ๋ผ์ธ ๊ฐ์
>PHP - ์ต์๊ธ
๐ PHP ์ต์๊ธ - 5์ฃผ์ฐจ: NoSQL ๋ฐ์ดํฐ๋ฒ ์ด์ค (MongoDB/Redis) ํ์ฉ- 02 MongoDB/Redis ๊ธฐ๋ณธ ์ฌ์ฉ๋ฒ

์ฃผ์ ํ๋ก๊ทธ๋จ ์คํ
- ํ์ : 10.0
- ๋ผ์ด์ ์ค: free
- ์ด์์ฒด์ :
- ํ์ผ ํฌ๊ธฐ: 0
ํผ๋๋ฐฑ ๋ฐ ๋ค์ด๋ก๋
- ์ฌ์ฉ์ ํ์ : 10.0
- ๋ค์ด๋ก๋ ์: 0
- ์กฐํ์: 5
์ ์กฐ์ฌ ๋ฐ ๋ฑ๋ก ์ ๋ณด
- ์ ์์ฌ: LUZENSOFT
- ๋ฑ๋ก์ผ: 2025-10-17 15:01:46
- ์ค๋ช
#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
๋ฅผ ์ค์นํด์ผ ํฉ๋๋ค.
Bash
# Dockerfile ๋๋ ์๋ฒ์์ ํ์ฅ ์ค์น
# docker-php-ext-install mongodb (PHP FPM ํ๊ฒฝ)
# Composer ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค์น
composer require mongodb/mongodb
1.3. PHP CRUD ๊ธฐ๋ณธ ์์
#PHP ์์ #MongoDB ์ ์ฐ๊ฒฐํ๊ณ ๋ฌธ์๋ฅผ ์ฝ์ (Create), ์กฐํ(Read)ํ๋ ๊ธฐ๋ณธ ์ฝ๋์ ๋๋ค.
PHP
// PHP MongoDB ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฌ์ฉ
require 'vendor/autoload.php';
use MongoDBClient;
// 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
ํ์ฅ์ ์ค์นํด์ผ ํฉ๋๋ค.
Bash
# Dockerfile ๋๋ ์๋ฒ์์ ํ์ฅ ์ค์น
# pecl install redis
# docker-php-ext-enable redis
2.3. PHP Redis ๊ธฐ๋ณธ ์์ (PHP-Redis ํ์ฅ ์ฌ์ฉ)
#PHP ์์ #Redis ์ String ํ์ ๊ณผ Hash ํ์ ์ ํ์ฉํ๋ ๊ธฐ๋ณธ ์ฝ๋์ ๋๋ค.
PHP
// 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/