
PHP ์จ๋ผ์ธ ๊ฐ์
>PHP - ์ต์๊ธ
๐ PHP ์ต์๊ธ - 5์ฃผ์ฐจ: NoSQL ๋ฐ์ดํฐ๋ฒ ์ด์ค (MongoDB/Redis) ํ์ฉ- 03 PHP์์ NoSQL ์ฐ๋ ๋ฐ ํ์ฉ ์ฌ๋ก (์บ์ฑ, ์ธ์ ์ ์ฅ, ๋ก๊ทธ ๋ฑ)

์ฃผ์ ํ๋ก๊ทธ๋จ ์คํ
- ํ์ : 10.0
- ๋ผ์ด์ ์ค: free
- ์ด์์ฒด์ :
- ํ์ผ ํฌ๊ธฐ: 0
ํผ๋๋ฐฑ ๋ฐ ๋ค์ด๋ก๋
- ์ฌ์ฉ์ ํ์ : 10.0
- ๋ค์ด๋ก๋ ์: 0
- ์กฐํ์: 3
์ ์กฐ์ฌ ๋ฐ ๋ฑ๋ก ์ ๋ณด
- ์ ์์ฌ: LUZENSOFT
- ๋ฑ๋ก์ผ: 2025-10-18 15:06:26
- ์ค๋ช
#PHP์ ํ๋ฆฌ์ผ์ด์ ์ #NoSQL ์ ํตํฉํ๋ ์ค์ง์ ๋ฐฉ๋ฒ
์ง๋ ๋ ์๊ฐ ๋์ ์ฐ๋ฆฌ๋ #NoSQL ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํ์์ฑ, ์ข ๋ฅ, ๊ทธ๋ฆฌ๊ณ #MongoDB ์ #Redis ์ ๊ธฐ๋ณธ์ ์ธ CRUD ๋ช ๋ น์ด ์ฌ์ฉ๋ฒ์ ํ์ตํ์ต๋๋ค. ์ด์ ์ด ์ง์์ ๋ฐํ์ผ๋ก ์ค์ #PHP์๋น์ค ํ๊ฒฝ์์ #NoSQL ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ด๋ป๊ฒ ํตํฉํ๊ณ ํ์ฉํ์ฌ ์ฑ๋ฅ๊ณผ ํ์ฅ์ฑ์ ๊ทน๋ํํ ์ ์๋์ง ๊ตฌ์ฒด์ ์ธ ์ฌ๋ก๋ฅผ ํตํด ์์๋ณด๊ฒ ์ต๋๋ค.
#Redis ๋ ์บ์ฑ๊ณผ ์ธ์ ๊ด๋ฆฌ์, #MongoDB ๋ ๋๊ท๋ชจ ๋ก๊ทธ ์ ์ฅ์ด๋ ์ค์๊ฐ ๋ถ์ ๋ฐ์ดํฐ ์ ์ฅ์ ์ต์ ํ๋์ด ์์ต๋๋ค. #PHP๊ฐ๋ฐ ์์ ์ด ๋ ๊ฐ์ง๋ฅผ ์ ์ฌ์ ์์ ๋ฐฐ์นํ๋ ๊ฒ์ด #์ต์๊ธ๊ธฐ์ ์ ํต์ฌ์ ๋๋ค.
1. #Redis ๋ฅผ ํ์ฉํ ์ด๊ณ ์ ์บ์ฑ ๊ตฌํ
#์บ์ฑ ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์๋ต ์๋๋ฅผ ๋์ด๋ ๊ฐ์ฅ ํจ๊ณผ์ ์ธ ๋ฐฉ๋ฒ์ ๋๋ค. ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฟผ๋ฆฌ๋ ๋ณต์กํ ๊ณ์ฐ ๊ฒฐ๊ณผ๋ฅผ #Redis ์ ์ ์ฅํด ๋์๋ค๊ฐ, ๋์ผํ ์์ฒญ์ด ๋ค์ด์ฌ ๊ฒฝ์ฐ #Redis ์์ ๋ฐ๋ก ๋ฐํํจ์ผ๋ก์จ ์ฃผ ๋ฐ์ดํฐ๋ฒ ์ด์ค(RDB ๋๋ MongoDB)์ ๋ถํ๋ฅผ ํ๊ธฐ์ ์ผ๋ก ์ค์ผ ์ ์์ต๋๋ค.
1.1. ์บ์ฑ ๋ก์ง ๊ตฌํ
#PHP ์์ #Redis ๋ฅผ ์บ์๋ก ํ์ฉํ๋ ์ผ๋ฐ์ ์ธ ๋ก์ง ํ๋ฆ์ ๋๋ค.
์กฐํ ์๋: #Redis ์ ์์ฒญ๋ ๋ฐ์ดํฐ์ ํค๊ฐ ์๋์ง ํ์ธํฉ๋๋ค
Cache Hit: ํค๊ฐ ์กด์ฌํ๋ฉด, #Redis ์ ์ ์ฅ๋ ๊ฐ์ ์ฆ์ ๋ฐํํ๊ณ ํ๋ก์ธ์ค๋ฅผ ์ข ๋ฃํฉ๋๋ค
Cache Miss: ํค๊ฐ ์กด์ฌํ์ง ์์ผ๋ฉด, ๋ฉ์ธ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ๊ทผํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์กฐํํฉ๋๋ค
์ ์ฅ ํ ๋ฐํ: ์กฐํ๋ ๋ฐ์ดํฐ๋ฅผ **#Redis ์ ์ ์ฅ(SET)**ํฉ๋๋ค (์ผ๋ฐ์ ์ผ๋ก ๋ง๋ฃ ์๊ฐ(TTL) ์ค์ ํฌํจ). ์ดํ ์ฌ์ฉ์์๊ฒ ๋ฐ์ดํฐ๋ฅผ ๋ฐํํฉ๋๋ค
1.2. PHP ์บ์ฑ ์์ ์ฝ๋
PHP
// Redis ์ฐ๊ฒฐ์ ์ด์ ํฌ์คํ
์ฐธ๊ณ
function getProductData($productId, $redis) {
$cacheKey = "product:{$productId}";
// 1. Redis์์ ์บ์ ๋ฐ์ดํฐ ์กฐํ
$data = $redis->get($cacheKey);
if ($data) {
// 2. Cache Hit: JSON ๋์ฝ๋ฉํ์ฌ ๋ฐํ
return json_decode($data, true);
}
// 3. Cache Miss: DB์์ ๋ฐ์ดํฐ ์กฐํ (๊ฐ์)
// $product = DB::query("SELECT * FROM products WHERE id = {$productId}");
$product = ['id' => $productId, 'name' => '์ต์ ์ํ', 'price' => 10000]; // DB ์กฐํ ์๋ฎฌ๋ ์ด์
if ($product) {
// 4. ์กฐํ๋ ๋ฐ์ดํฐ๋ฅผ JSON ํํ๋ก Redis์ ์ ์ฅ (1์๊ฐ ๋ง๋ฃ)
$redis->set($cacheKey, json_encode($product), 3600);
}
return $product;
}
// ์ฌ์ฉ ์์
// $productInfo = getProductData(123, $redisConnection);
2. #Redis ๋ฅผ ํ์ฉํ PHP ์ธ์ ๊ด๋ฆฌ
๊ธฐ๋ณธ์ ์ผ๋ก #PHP ์ ์ธ์ ์ ์น ์๋ฒ์ ํ์ผ ์์คํ ์ ์ ์ฅ๋ฉ๋๋ค. ์ด๋ ์๋ฒ๊ฐ ์ฌ๋ฌ ๋๋ก ํ์ฅ๋ ๊ฒฝ์ฐ(๋ก๋ ๋ฐธ๋ฐ์ฑ ํ๊ฒฝ) ์ธ์ ๋ถ์ผ์น ๋ฌธ์ ๋ฅผ ์ผ์ผํต๋๋ค. #Redis ๋ฅผ ์ธ์ ์ ์ฅ์๋ก ์ฌ์ฉํ๋ฉด ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ณ ์ธ์ ์ ๊ทผ ์๋๋ฅผ ๋น์ฝ์ ์ผ๋ก ๋์ผ ์ ์์ต๋๋ค.
2.1. ์ธ์ ์ ์ฅ ๊ฒฝ๋ก ๋ณ๊ฒฝ
#PHP ์ค์ ํ์ผ(php.ini
)์์ ์ธ์
์ ์ฅ ํธ๋ค๋ฌ๋ฅผ redis
๋ก ๋ณ๊ฒฝํ๊ณ , #Redis ์๋ฒ์ ์ฃผ์๋ฅผ ์ง์ ํฉ๋๋ค.
Ini, TOML
; php.ini ์ค์ (PHP Redis ํ์ฅ ์ค์น ํ์)
session.save_handler = redis
; session.save_path = "tcp://redis-host:6379?auth=password"
session.save_path = "tcp://redis:6379" ; Docker ํ๊ฒฝ ์์
์ด ์ค์ ์ ์ ์ฉํ๋ฉด #PHP ๋ $_SESSION
๋ฐ์ดํฐ๋ฅผ ํ์ผ์ด ์๋ #Redis ์ ์๋์ผ๋ก ์ ์ฅํ๊ฒ ๋๋ฉฐ, ๋ถ์ฐ ํ๊ฒฝ์์๋ ์ธ์
์ผ๊ด์ฑ์ด ์ ์ง๋ฉ๋๋ค.
3. #MongoDB ๋ฅผ ํ์ฉํ ๋๊ท๋ชจ ๋ก๊ทธ ๋ฐ ๋น์ ํ ๋ฐ์ดํฐ ์ ์ฅ
#MongoDB ๋ ์คํค๋ง๊ฐ ์ ์ฐํ๊ณ ๋๋์ ๋ฌธ์ ์ฝ์ ์ ๊ฐ์ ์ด ์์ด, ์ค์๊ฐ์ผ๋ก ๋ฐ์ํ๋ ๋๊ท๋ชจ ๋ก๊ทธ ๋ฐ์ดํฐ๋ ์ด๋ฒคํธ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๋ฐ ์ต์ ์ ๋๋ค.
3.1. ๋ก๊ทธ ๋ฐ์ดํฐ ์ ์ฅ์ ์ด์
์ ์ฐํ ๊ตฌ์กฐ: ์๋น์ค ์ ๋ฐ์ดํธ๋ก ์ธํด ๋ก๊ทธ์ ์๋ก์ด ํ๋๊ฐ ์ถ๊ฐ๋์ด๋ #RDB ์ฒ๋ผ ํ ์ด๋ธ ๊ตฌ์กฐ๋ฅผ ๋ณ๊ฒฝํ ํ์๊ฐ ์์ต๋๋ค
๋น ๋ฅธ ์ฐ๊ธฐ: ๋๋์ ๋ฐ์ดํฐ๋ฅผ ๋น ๋ฅด๊ฒ ์ ์ฅ(Insert)ํ ์ ์์ด, ์๋น์ค ํธ๋ํฝ์ ์ํฅ์ ์ฃผ์ง ์์ต๋๋ค
3.2. PHP ๋ก๊ทธ ์ ์ฅ ์์ ์ฝ๋
#PSR-3 ํ์ค ๋ก๊น ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ธ Monolog์ MongoDB ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊ฒฐํฉํ์ฌ ๋ก๊ทธ๋ฅผ ์ ์ฅํ๋ ๋ฐฉ์์ ๋๋ค.
PHP
// Composer๋ฅผ ํตํด Monolog์ MongoDB ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค์น ํ์
require 'vendor/autoload.php';
use MongoDBClient;
use MonologLogger;
use MonologHandlerMongoDBHandler;
// 1. MongoDB ์ฐ๊ฒฐ
$mongoClient = new Client('mongodb://mongo:27017');
// 2. Monolog ์ธ์คํด์ค ์์ฑ ๋ฐ MongoDB Handler ์ถ๊ฐ
$log = new Logger('AppLog');
$log->pushHandler(new MongoDBHandler($mongoClient, 'app_logs', 'error_collection'));
// 'app_logs' ๋ฐ์ดํฐ๋ฒ ์ด์ค์ 'error_collection' ์ปฌ๋ ์
์ ๋ก๊ทธ ์ ์ฅ
// 3. ๋ก๊ทธ ๊ธฐ๋ก (๋ฐฐ์ด ํํ๋ก ์ ์ฅ๋์ด ์ ์ฐํ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๋๋ค)
$log->error('์ฌ์ฉ์ ๋ก๊ทธ์ธ ์คํจ', [
'user_id' => 101,
'ip_address' => $_SERVER['REMOTE_ADDR'],
'request_url' => $_SERVER['REQUEST_URI'],
'payload' => $_POST
]);
echo "์ค๋ฅ ๋ก๊ทธ๊ฐ MongoDB์ ๊ธฐ๋ก๋์์ต๋๋ค.n";
๊ฒฐ๋ก
#PHP ์์ #NoSQL ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ํ์ฉํ๋ ๊ฒ์ ํ๋ ์น ์๋น์ค ๊ฐ๋ฐ์ ๊ธฐ๋ณธ์ ๋๋ค. #Redis ๋ ์ด๊ณ ์ #์บ์ฑ ๊ณผ ์์ ์ ์ธ ์ธ์ ๊ด๋ฆฌ๋ฅผ ํตํด ์ฑ๋ฅ์ ์ต์ ํํ๊ณ , #MongoDB ๋ ์ ์ฐํ ์คํค๋ง์ ๋น ๋ฅธ ์ฐ๊ธฐ ์ฑ๋ฅ์ ๋ฐํ์ผ๋ก ๋์ฉ๋ ๋ก๊ทธ ๋ฐ ๋น์ ํ ๋ฐ์ดํฐ ๊ด๋ฆฌ์ ํ์ฅ์ฑ์ ์ ๊ณตํฉ๋๋ค. ์ด ์ธ ๊ฐ์ง ์์(RDB, Redis, MongoDB)๋ฅผ ์กฐํ๋กญ๊ฒ ํ์ฉํ๋ ๋ฅ๋ ฅ์ด ๊ณง #PHP์ต์๊ธ ๊ฐ๋ฐ์์ ์ญ๋์ ๋๋ค.
๊ฒ์, ๋ง์ผํ , ์๋ฒ์ฉ ๊ณ ์ IP, ๋ฐฉํ๋ฒฝ์ฐํ, ๊นจ๋ํ๊ณ ์ค๋ณต์๋ IP ์ ๊ณต.
https://xn--299ao67b9qbmsf04c.net/