216.73.216.141 TODAY : 58,565

PHP ์˜จ๋ผ์ธ ๊ฐ•์˜

 > 

PHP - ์ตœ์ƒ๊ธ‰

๐Ÿ“š PHP ์ตœ์ƒ๊ธ‰ - 5์ฃผ์ฐจ: NoSQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค (MongoDB/Redis) ํ™œ์šฉ- 02 MongoDB/Redis ๊ธฐ๋ณธ ์‚ฌ์šฉ๋ฒ•

๐Ÿ“š 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 ์†Œ๊ฐœ

uploadImage


์ง€๋‚œ ์‹œ๊ฐ„์—๋Š” #NoSQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ํ•„์š”์„ฑ๊ณผ ์ข…๋ฅ˜์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์•˜์Šต๋‹ˆ๋‹ค. ์ด๋ฒˆ ์‹œ๊ฐ„์—๋Š” #PHP์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์—์„œ ๊ฐ€์žฅ ๋งŽ์ด ํ™œ์šฉ๋˜๋Š” ๋‘ ๊ฐ€์ง€ #NoSQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค, **MongoDB (๋ฌธ์„œํ˜• DB)**์™€ **Redis (ํ‚ค-๊ฐ’ DB)**์˜ ๊ธฐ๋ณธ ์‚ฌ์šฉ๋ฒ•๊ณผ #PHP ์—์„œ์˜ ์—ฐ๋™ ๋ฐฉ๋ฒ•์„ ๊ตฌ์ฒด์ ์œผ๋กœ ์‹ค์Šตํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

#MongoDB ๋Š” ๋ณต์žกํ•˜๊ณ  ์œ ์—ฐํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฉ”์ธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋กœ, #Redis ๋Š” ์ดˆ๊ณ ์† ์บ์‹ฑ ๋ฐ ์„ธ์…˜ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•œ ๋ณด์กฐ ์ €์žฅ์†Œ๋กœ ํ™œ์šฉ๋˜์–ด #PHP๊ฐœ๋ฐœ ์˜ ์„ฑ๋Šฅ์„ ๋น„์•ฝ์ ์œผ๋กœ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.



1. #MongoDB ๊ธฐ๋ณธ ์‚ฌ์šฉ๋ฒ• ๋ฐ #PHP ์—ฐ๋™



#MongoDB ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ JSON ํ˜•ํƒœ์™€ ์œ ์‚ฌํ•œ BSON(Binary JSON) ๋ฌธ์„œ(Document) ํ˜•ํƒœ๋กœ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. #RDB ์˜ ํ…Œ์ด๋ธ”์€ #MongoDB ์˜ **์ปฌ๋ ‰์…˜(Collection)**์— ํ•ด๋‹นํ•˜๋ฉฐ, ๋ ˆ์ฝ”๋“œ๋Š” ๋ฌธ์„œ์— ํ•ด๋‹นํ•ฉ๋‹ˆ๋‹ค.

uploadImage


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 ์—ฐ๋™

uploadImage


#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/