์จ๋ผ์ธ ๊ฐ์
>PHP - ๊ณ ๊ธ
๐ PHP ๊ณ ๊ธ - 6์ฃผ์ฐจ: ์บ์ฑ (Caching) ์ ๋ต - 02 ํ๋ ์์ํฌ ์บ์ฑ ์์คํ  ํ์ฉ
				์ฃผ์ ํ๋ก๊ทธ๋จ ์คํ
- ํ์ : 10.0
 - ๋ผ์ด์ ์ค: free
 - ์ด์์ฒด์ :
 - ํ์ผ ํฌ๊ธฐ: 0
 
ํผ๋๋ฐฑ ๋ฐ ๋ค์ด๋ก๋
- ์ฌ์ฉ์ ํ์ : 10.0
 - ๋ค์ด๋ก๋ ์: 1
 - ์กฐํ์: 55
 
์ ์กฐ์ฌ ๋ฐ ๋ฑ๋ก ์ ๋ณด
- ์ ์์ฌ: LUZENSOFT
 - ๋ฑ๋ก์ผ: 2025-09-14 16:21:30
 
- ์ค๋ช
ํ๋ ์์ํฌ์ ์บ์ฑ์ ์ค์์ฑ
๋๋ถ๋ถ์ ํ๋์ ์ธ #PHP #ํ๋ ์์ํฌ (์: #Laravel, #Symfony)๋ ์์ฒด์ ์ผ๋ก ๊ฐ๋ ฅํ #์บ์ฑ ์์คํ ์ ์ ๊ณตํ๋ค. ํ๋ ์์ํฌ์ ์บ์ฑ ์์คํ ์ ํ์ฉํ๋ฉด ๊ฐ๋ฐ์๊ฐ ๋ณต์กํ ์บ์ฑ ๋ก์ง์ ์ง์  ๊ตฌํํ ํ์ ์์ด, ๊ฐ๋จํ API๋ฅผ ํตํด ๋ค์ํ ์บ์ฑ ๋๋ผ์ด๋ฒ(#Redis, #Memcached, ํ์ผ ๋ฑ)๋ฅผ ์์ฝ๊ฒ ์ฌ์ฉํ ์ ์๋ค. ์ด๋ ๊ฐ๋ฐ ์์ฐ์ฑ์ ๋์ด๊ณ , ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฑ๋ฅ์ ์ฒด๊ณ์ ์ผ๋ก ๊ด๋ฆฌํ๋ ๋ฐ ํฐ ๋์์ด ๋๋ค.
Laravel์ ์บ์ฑ ์์คํ 
#Laravel ์ ์บ์ฑ ์์คํ
์ ๋งค์ฐ ์ ์ฐํ๊ณ  ๊ฐ๋ ฅํ๋ค. .env ํ์ผ์ด๋ config/cache.php ํ์ผ์ ํตํด ์ํ๋ ์บ์ฑ ๋๋ผ์ด๋ฒ๋ฅผ ์ค์ ํ  ์ ์๋ค. ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ๋๋ ์บ์ฑ ๋๋ผ์ด๋ฒ๋ Redis์ Memcached์ด๋ค.
์บ์ ์ฌ์ฉ ์์ 
Laravel์์ ์บ์๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๊ฐ๋จํ๋ค. Cache ํ์ฌ๋(Facade)๋ฅผ ํตํด ๋ค์ํ ์บ์ ๊ด๋ จ ๋ฉ์๋๋ฅผ ํธ์ถํ  ์ ์๋ค.
PHP
<?php
use IlluminateSupportFacadesCache;
 
// ๋ฐ์ดํฐ ์บ์ ์ ์ฅ (10๋ถ ์ ํจ)
$users = Cache::remember('users_list', 600, function () {
    return AppModelsUser::all();
});
 
// ์บ์์์ ๋ฐ์ดํฐ ๊ฐ์ ธ์ค๊ธฐ
$value = Cache::get('key');
 
// ๋ฐ์ดํฐ ์บ์ ์ ์ฅ (๋ฌด๊ธฐํ)
Cache::forever('forever_key', 'value');
 
// ์บ์์์ ํน์  ํค ์ญ์ 
Cache::forget('key');
 
// ๋ชจ๋  ์บ์ ๋ฐ์ดํฐ ์ญ์ 
Cache::flush();
?>
Cache::remember()๋ ๊ฐ์ฅ ์ ์ฉํ ๋ฉ์๋ ์ค ํ๋์ด๋ค. ์บ์์ ํด๋น ํค๊ฐ ์กด์ฌํ๋ฉด ๊ฐ์ ๋ฐํํ๊ณ , ์์ผ๋ฉด ๋ ๋ฒ์งธ ์ธ์๋ก ์ ๋ฌ๋ ํด๋ก์ (Closure)๋ฅผ ์คํํ์ฌ ๋ฐํ๋ ๊ฐ์ ์บ์์ ์ ์ฅํ ํ ๋ฐํํ๋ค.
Symfony์ ์บ์ฑ ์์คํ 
#Symfony ์ญ์ ์ ์ฐํ ์บ์ฑ ์์คํ
์ ์ ๊ณตํ๋ค. symfony/cache ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํ์ฌ ์บ์ฑ์ ๊ตฌํํ๋ค. Symfony์ ์บ์ฑ์ PSR-6 ๋ฐ PSR-16 ์บ์ฑ ํ์ค์ ์ค์ํ์ฌ, ๋ค๋ฅธ ์บ์ฑ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ฝ๊ฒ ํตํฉํ  ์ ์๋ค.
์บ์ ์ฌ์ฉ ์์ 
Symfony์์ ์บ์๋ฅผ ์ฌ์ฉํ๋ ์์ ๋ ๋ค์๊ณผ ๊ฐ๋ค. ๋จผ์  CacheInterface๋ฅผ ์์กด์ฑ ์ฃผ์
(Dependency Injection) ๋ฐ์์ ์ฌ์ฉํ๋ค.
PHP
<?php
namespace AppController;
 
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyContractsCacheCacheInterface;
use SymfonyComponentCacheCacheItem;
 
class ProductController extends AbstractController
{
    public function show(CacheInterface $cache)
    {
        $productId = 1;
        
        $product = $cache->get('product_' . $productId, function (CacheItem $item) {
            $item->expiresAfter(3600); // 1์๊ฐ ์ ํจ
 
            // ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ ํ ์ ๋ณด ๊ฐ์ ธ์ค๊ธฐ
            return ['id' => 1, 'name' => 'Laptop', 'price' => 1200];
        });
        
        // ... ์ ํ ์ ๋ณด ์ฌ์ฉ
    }
}
?>
Symfony์ ์บ์ฑ์ #PSR ํ์ค์ ๋ฐ๋ฅด๋ฏ๋ก,
get()๋ฉ์๋์ ์ฝ๋ฐฑ ํจ์ ์ธ์๋กCacheItem๊ฐ์ฒด๋ฅผ ๋ฐ์ ์ ํจ๊ธฐ๊ฐ ๋ฑ์ ์ค์ ํ ์ ์๋ค.
์์ฝ
#PHPํ๋ ์์ํฌ ๋ ๋ด์ฅ๋ #์บ์ฑ์์คํ  ์ ํตํด ๋ณต์กํ ์บ์ฑ ๋ก์ง์ ์ถ์ํํ๊ณ , ๊ฐ๋ฐ์๊ฐ ์์ฝ๊ฒ ์ฑ๋ฅ์ ์ต์ ํํ ์ ์๋๋ก ๋๋๋ค. #Laravel ์ด๋ #Symfony ์ ๊ฐ์ ์ฃผ์ ํ๋ ์์ํฌ์ ์บ์ฑ ๊ธฐ๋ฅ์ ํ์ฉํ๋ฉด, #์ ์ง๋ณด์ ๊ฐ ์ฉ์ดํ๊ณ ํ์ฅ์ฑ ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ ์ ์๋ค. ์ด๋ ๋จ์ํ ์ฑ๋ฅ ํฅ์์ ๋์ด, ์์ ์ ์ด๊ณ ํจ์จ์ ์ธ ์๋น์ค ์ด์์ ํต์ฌ์ด ๋๋ค.
PHP ํ๋ ์์ํฌ Laravel Symfony ์บ์ฑ ์บ์ฑ์์คํ  Redis Memcached PSR ์ ์ง๋ณด์
๊ฒ์, ๋ง์ผํ , ์๋ฒ์ฉ ๊ณ ์ IP, ๋ฐฉํ๋ฒฝ์ฐํ, ๊นจ๋ํ๊ณ ์ค๋ณต์๋ IP ์ ๊ณต.
https://xn--299ao67b9qbmsf04c.net/