Mon Mar 02 2026
...
๊ณต์ Laravel ํจํค์ง ์ถ์
์ ์์
๊ณต์ Laravel ํจํค์ง์ธ fastcomments/laravel์ ์ถ์๋ฅผ ๋ฐํํ๊ฒ ๋์ด ๊ธฐ์ฉ๋๋ค. Laravel๋ก ๊ตฌ์ถํ๊ณ ์๊ณ
์ ํ๋ฆฌ์ผ์ด์
์ ๋๊ธ, ๋ผ์ด๋ธ ์ฑํ
๋๋ ๋๊ธ ์๋ฅผ ์ถ๊ฐํ๊ณ ์ถ๋ค๋ฉด, ์ด์ ๋จ์ผ Composer ์ค์น์ ๋ช ๊ฐ์ Blade ์ปดํฌ๋ํธ๋ก ์ด๋ฅผ ์ํํ ์ ์์ต๋๋ค.
ํจํค์ง๋ PHP 8.1+์์ Laravel 10, 11 ๋ฐ 12๋ฅผ ์ง์ํฉ๋๋ค.
์์ํ๊ธฐ
Composer๋ก ์ค์นํ์ธ์:
composer require fastcomments/laravel
๊ทธ๋ฐ ๋ค์ .env ํ์ผ์ ํ
๋ํธ ID์ API ํค๋ฅผ ์ถ๊ฐํ์ธ์:
FASTCOMMENTS_TENANT_ID=your-tenant-id
FASTCOMMENTS_API_KEY=your-api-key
๊ทธ๊ฒ ์ ๋ถ์ ๋๋ค. ์๋น์ค ์ ๊ณต์ ๋ฐ ํ์ฌ๋๋ ์๋์ผ๋ก ๋ฐ๊ฒฌ๋๋ฏ๋ก ์๋ ๋ฑ๋ก์ด ํ์ ์์ต๋๋ค. ์ถ๊ฐ ์ฌ์ฉ์ ์ง์ ์ ์ํด ๊ตฌ์ฑ ํ์ผ์ ๊ฒ์ํ ์ ์์ต๋๋ค:
php artisan vendor:publish --tag=fastcomments-config
๋๋กญ์ธ Blade ์ปดํฌ๋ํธ
ํจํค์ง๋ ํ ํ๋ฆฟ์์ ์ง์ ์ฌ์ฉํ ์ ์๋ ์ธ ๊ฐ์ Blade ์ปดํฌ๋ํธ๋ฅผ ํฌํจํฉ๋๋ค:
๋๊ธ ์์ ฏ:
<x-fastcomments url-id="my-page" />
๋ผ์ด๋ธ ์ฑํ ์์ ฏ:
<x-fastcomments-live-chat url-id="my-chat-room" />
๋๊ธ ์:
<x-fastcomments-comment-count url-id="my-page" />
๊ฐ ์ปดํฌ๋ํธ๋ url, locale, readonly, has-dark-background, default-sort-direction์ ๊ฐ์ props๋ฅผ ์ง์ํฉ๋๋ค. ์คํฌ๋ฆฝํธ๋
๋น๋๊ธฐ์ ์ผ๋ก ๋ก๋๋๋ฉฐ ์ค๋ณต์ด ์ ๊ฑฐ๋๋ฏ๋ก, ๋์ผํ ํ์ด์ง์ ์ฌ๋ฌ ์์ ฏ์ ์์ ํ๊ฒ ๋ฐฐ์นํ ์ ์์ต๋๋ค.
์๋ SSO
SSO๋ ๋ ๊ฐ์ ํ๊ฒฝ ๋ณ์๋ฅผ ํตํด ํ์ฑํํ ์ ์์ต๋๋ค:
FASTCOMMENTS_SSO_ENABLED=true
FASTCOMMENTS_SSO_MODE=secure
ํ์ฑํ๋๋ฉด ๋๊ธ ๋ฐ ๋ผ์ด๋ธ ์ฑํ
์ปดํฌ๋ํธ๋ ์๋์ผ๋ก Auth::user()๋ฅผ ์ฝ๊ณ ์๋ช
๋ SSO ํ์ด๋ก๋๋ฅผ ์์ ฏ ๊ตฌ์ฑ์ ์ฃผ์
ํฉ๋๋ค.
๋ก๊ทธ์ธํ ์ฌ์ฉ์๋ ์ํํ๊ฒ ์ธ์ฆ๋ฉ๋๋ค. ๊ฒ์คํธ๋ Laravel์ login ๋ฐ logout ์ด๋ฆ์ด ์ง์ ๋ ๊ฒฝ๋ก๋ก ๊ธฐ๋ณธ ์ค์ ๋ ๋ก๊ทธ์ธ ๋ฐ ๋ก๊ทธ์์ ๋งํฌ๋ฅผ ๋ด
๋๋ค.
์ฌ์ฉ์ ๋ชจ๋ธ์ด FastComments ์ฌ์ฉ์ ๋ฐ์ดํฐ์ ์ด๋ป๊ฒ ๋งคํ๋๋์ง๋ฅผ ์ ์ดํ๋ ๋ ๊ฐ์ง ๋ฐฉ๋ฒ์ด ์์ต๋๋ค:
๊ตฌ์ฑ ๊ธฐ๋ฐ ๋งคํ - config/fastcomments.php์์ ์์ฑ ์ด๋ฆ(์ ํ๊ธฐ๋ฒ ํฌํจ) ๋๋ ํธ์ถ ๊ฐ๋ฅํ ๊ฒ์ ์ค์ ํฉ๋๋ค:
'user_map' => [
'id' => 'id',
'email' => 'email',
'username' => 'name',
'avatar' => 'profile_photo_url',
],
์ธํฐํ์ด์ค ๊ธฐ๋ฐ ๋งคํ - ์ฌ์ฉ์ ๋ชจ๋ธ์์ MapsToFastCommentsUser๋ฅผ ๊ตฌํํ์ฌ ์ ์ฒด ์ ์ด๋ฅผ ์ ๊ณตํฉ๋๋ค:
use FastComments\Laravel\SSO\Contracts\MapsToFastCommentsUser;
class User extends Authenticatable implements MapsToFastCommentsUser
{
public function toFastCommentsUserData(): array
{
return [
'id' => (string) $this->id,
'email' => $this->email,
'username' => $this->name,
'avatar' => $this->avatar_url,
'is_admin' => $this->hasRole('admin'),
];
}
}
๋ณด์ SSO (HMAC ์๋ช , ํ๋ก๋์ ์ ๊ถ์ฅ) ๋ฐ ๋จ์ SSO ๋ชจ๋๊ฐ ์ง์๋ฉ๋๋ค.
API ํตํฉ
ํจํค์ง๋ ๋ํ ํจ์ฌ๋๋ฅผ ํตํด FastComments API๋ฅผ ๋ํํ๊ณ , ์์กด์ฑ ์ฃผ์ ๋ฐ ์ง์ SDK ํด๋ผ์ด์ธํธ ์ฃผ์ ์ ์ง์ํฉ๋๋ค:
use FastComments\Laravel\Facades\FastComments;
// ๊ด๋ฆฌ์ API
$comments = FastComments::admin()->getComments(...);
// ๊ณต๊ฐ API
$counts = FastComments::publicApi()->getCommentCounts(...);
// ์ฌ์ฉ์ ์ ์ ์ฉ๋์ SSO ํ ํฐ
$token = FastComments::sso()->tokenFor($user);
EU ๋ฐ์ดํฐ ๊ฑฐ์ฃผ์ง
EU ์ง์ญ์ ์ฌ์ฉํ๋ ๊ณ ๊ฐ์ ์ํด ๋ชจ๋ ์๋ํฌ์ธํธ - ์์ ฏ, API ํธ์ถ ๋ฐ SSO -๋ฅผ ์ ํํ๋ ๋จ์ผ ํ๊ฒฝ ๋ณ์๊ฐ ์์ต๋๋ค:
FASTCOMMENTS_REGION=eu
๊ฒฐ๋ก
์ด ํจํค์ง๊ฐ FastComments๋ฅผ Laravel ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฝ๊ฒ ์ถ๊ฐํ๋ ๋ฐ ๋์์ด ๋๊ธฐ๋ฅผ ๋ฐ๋๋๋ค. ํ์ฌ Packagist์์ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ ์์ค๋ GitHub์ ์์ต๋๋ค.
์๋์ ํผ๋๋ฐฑ์ด ์์ผ๋ฉด ์๋ ค์ฃผ์ธ์!
Cheers!
