
PHP ์จ๋ผ์ธ ๊ฐ์
>PHP - ๊ณ ๊ธ
๐ PHP ๊ณ ๊ธ - 6์ฃผ์ฐจ: ์บ์ฑ (Caching) ์ ๋ต - 02 ํ๋ ์์ํฌ ์บ์ฑ ์์คํ ํ์ฉ
![]() |
ํ์ | 10.0 | ๋ผ์ด์ผ์ค | free |
---|---|---|---|---|
์ฌ์ฉ์ํ์ | 10.0 | ์ด์์ฒด์ | ||
๋ค์ด๋ก๋ | 1 | ํ์ผํฌ๊ธฐ | 0 | |
์ ์์ฌ | LUZENSOFT | ๋ฑ๋ก์ผ | 2025-09-14 16:21:30 | |
์กฐํ์ | 1 |
ํ๋ ์์ํฌ์ ์บ์ฑ์ ์ค์์ฑ
๋๋ถ๋ถ์ ํ๋์ ์ธ #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/