FastComments.com


๋ฌธ์„œ, ์ฑ… ๋“ฑ์—์„œ ์ธ๋ผ์ธ ์‹ค์‹œ๊ฐ„ ๋Œ“๊ธ€ ์ถ”๊ฐ€ํ•˜๊ธฐ

FastComments Collab Chat์€ ์‚ฌ์šฉ์ž๊ฐ€ ์›น์‚ฌ์ดํŠธ์˜ ๋ชจ๋“  ํ…์ŠคํŠธ ์ฝ˜ํ…์ธ ๋ฅผ ๊ฐ•์กฐํ•˜๊ณ  ์ฃผ์„์„ ๋‹ฌ ์ˆ˜ ์žˆ๊ฒŒ ํ•ด, ํŠน์ • ํ…์ŠคํŠธ ์„ ํƒ์— ์—ฐ๊ฒฐ๋œ ์Šค๋ ˆ๋“œํ˜• ํ† ๋ก ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๋Š” ๋‹จ์–ด, ๋ฌธ์žฅ ๋˜๋Š” ์ „์ฒด ๋‹จ๋ฝ์„ ์„ ํƒํ•˜์—ฌ ์ฝ˜ํ…์ธ  ๋‚ด์—์„œ ์ง์ ‘ ํ˜‘์—… ๋Œ€ํ™”๋ฅผ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ๊ธฐ๋Šฅ์€ ํŽธ์ง‘ ํ”ผ๋“œ๋ฐฑ, ํ˜‘์—… ์ฝ๊ธฐ ํ™˜๊ฒฝ, ๊ต์œก ํ”Œ๋žซํผ, ๋ฌธ์„œ ๊ฒ€ํ†  ๋ฐ ํŠน์ • ํ…์ŠคํŠธ์— ๊ณ ์ •๋œ ๋งฅ๋ฝ์  ํ† ๋ก ์ด ํ•„์š”ํ•œ ๋ชจ๋“  ์ƒํ™ฉ์— ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค.

Note that these docs are specific to the Collab Chat functionality. You can add commenting for content with lots of pages, like Books, with thread-per-page, without using collab chat. FastComments also does not charge per-page or per-thread. Collab Chat is specifically when you want to allow users to select text and comment on the highlighted section of text.

You can see an example here.


์˜ˆ์ œ Internal Link

๊ธฐ๋ณธ ์˜ˆ์ œ

Collab Chat์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ ๋ฐฉ๋ฒ•์€ ๋‹จ์ผ ์ฝ˜ํ…์ธ  ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋Œ€์ƒ์œผ๋กœ ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด ์˜ˆ์ œ๋Š” ๊ธฐ์‚ฌ์— ํ…์ŠคํŠธ ์ฃผ์„ ๊ธฐ๋Šฅ์„ ํ™œ์„ฑํ™”ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค:

๊ธฐ๋ณธ Collab Chat ์˜ˆ์ œ
Copy CopyRun External Link
1
2<!DOCTYPE html>
3<html>
4<head>
5 <title>My Article with Collab Chat</title>
6</head>
7<body>
8 <div id="article-content" style="min-height: 500px">
9 <h1>My Article Title</h1>
10 <p>This is a paragraph that users can annotate. Simply highlight any text to start a discussion!</p>
11 <p>You can have multiple paragraphs, and users can highlight text across any of them.</p>
12 </div>
13
14 <script src="https://cdn.fastcomments.com/js/embed-collab-chat.min.js"></script>
15 <script>
16 FastCommentsCollabChat(document.getElementById('article-content'), {
17 tenantId: 'demo'
18 });
19 </script>
20</body>
21</html>
22

๋งž์ถค URL ID ์˜ˆ์ œ (์ฑ… ํŽ˜์ด์ง€, ๊ธฐ์‚ฌ ๋“ฑ)

๊ธฐ๋ณธ์ ์œผ๋กœ Collab Chat์€ ํŽ˜์ด์ง€ URL๊ณผ ์š”์†Œ ๊ฒฝ๋กœ ๋ฐ ํ…์ŠคํŠธ ๋ฒ”์œ„๋ฅผ ๊ฒฐํ•ฉํ•˜์—ฌ ๋Œ€ํ™”๋ฅผ ์‹๋ณ„ํ•ฉ๋‹ˆ๋‹ค. ๋Œ€ํ™” ๊ทธ๋ฃนํ™” ๋ฐฉ๋ฒ•์„ ๋ณด๋‹ค ์„ธ๋ฐ€ํ•˜๊ฒŒ ์ œ์–ดํ•˜๋ ค๋ฉด ๋งž์ถค urlId๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

Collab Chat with Custom URL ID
Copy Copy
1
2<script src="https://cdn.fastcomments.com/js/embed-collab-chat.min.js"></script>
3<script>
4 FastCommentsCollabChat(document.getElementById('article-content'), {
5 tenantId: 'demo',
6 urlId: 'book-one-page-2'
7 });
8</script>
9

URL ๊ตฌ์กฐ๊ฐ€ ๋ณ€๊ฒฝ๋˜๋”๋ผ๋„ ๋™์ผํ•œ ๋Œ€ํ™”๋ฅผ ์œ ์ง€ํ•˜๋ ค๋Š” ๊ฒฝ์šฐ๋‚˜ ์—ฌ๋Ÿฌ ํŽ˜์ด์ง€์— ๋™์ผํ•œ ๋Œ€ํ™” ์ฃผ์„์„ ๊ณต์œ ํ•˜๋ ค๋Š” ๊ฒฝ์šฐ์— ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

๋‹คํฌ ๋ชจ๋“œ ์˜ˆ์ œ

์‚ฌ์ดํŠธ ๋ฐฐ๊ฒฝ์ด ์–ด๋‘์šด ๊ฒฝ์šฐ ๋‹คํฌ ๋ชจ๋“œ ์ง€์›์„ ํ™œ์„ฑํ™”ํ•˜์—ฌ ์ฑ„ํŒ… UI๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ํ‘œ์‹œ๋˜๋„๋ก ํ•˜์„ธ์š”:

Collab Chat with Dark Mode
Copy CopyRun External Link
1
2<!DOCTYPE html>
3<html>
4<head>
5 <title>My Article with Collab Chat - Dark Mode</title>
6 <style>
7 body {
8 background-color: #1a1a1a !important;
9 color: #e0e0e0 !important;
10 font-family: system-ui, -apple-system, sans-serif;
11 padding: 20px;
12 margin: 0;
13 }
14 #article-content {
15 max-width: 800px;
16 margin: 0 auto;
17 background-color: #2d2d2d;
18 padding: 20px;
19 border-radius: 8px;
20 }
21 h1 {
22 color: #ffffff !important;
23 }
24 p {
25 color: #e0e0e0 !important;
26 line-height: 1.6;
27 }
28 .fastcomments-collab-chat-top-bar {
29 background-color: #2d2d2d !important;
30 color: #e0e0e0 !important;
31 border-bottom: 1px solid #444 !important;
32 }
33 </style>
34</head>
35<body>
36 <div id="article-content" style="min-height: 500px">
37 <h1>My Article Title</h1>
38 <p>This is a paragraph that users can annotate. Simply highlight any text to start a discussion!</p>
39 <p>You can have multiple paragraphs, and users can highlight text across any of them.</p>
40 </div>
41
42 <script src="https://cdn.fastcomments.com/js/embed-collab-chat.min.js"></script>
43 <script>
44 FastCommentsCollabChat(document.getElementById('article-content'), {
45 tenantId: 'demo',
46 hasDarkBackground: true
47 });
48 </script>
49</body>
50</html>
51

์ƒ๋‹จ ๋ฐ” ๋น„ํ™œ์„ฑํ™” ์˜ˆ์ œ

๊ธฐ๋ณธ์ ์œผ๋กœ Collab Chat์€ ์‚ฌ์šฉ์ž ์ˆ˜ ๋ฐ ํ† ๋ก  ์ˆ˜๊ฐ€ ํ‘œ์‹œ๋œ ์ƒ๋‹จ ๋ฐ”๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

Collab Chat with Top Bar Disabled
Copy CopyRun External Link
1
2<!DOCTYPE html>
3<html>
4<head>
5 <title>My Article with Collab Chat - No Top Bar</title>
6</head>
7<body>
8 <div id="article-content" style="min-height: 500px">
9 <h1>My Article Title</h1>
10 <p>This is a paragraph that users can annotate. Simply highlight any text to start a discussion!</p>
11 <p>You can have multiple paragraphs, and users can highlight text across any of them.</p>
12 </div>
13
14 <script src="https://cdn.fastcomments.com/js/embed-collab-chat.min.js"></script>
15 <script>
16 FastCommentsCollabChat(document.getElementById('article-content'), {
17 tenantId: 'demo',
18 topBarTarget: null
19 });
20 </script>
21</body>
22</html>
23

๋Œ“๊ธ€ ์ˆ˜ ์ฝœ๋ฐฑ ์˜ˆ์ œ

commentCountUpdated ์ฝœ๋ฐฑ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋Œ“๊ธ€์ด ์ถ”๊ฐ€๋˜๊ฑฐ๋‚˜ ์—…๋ฐ์ดํŠธ๋  ๋•Œ๋ฅผ ์ถ”์ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

Collab Chat with Comment Count Callback
Copy Copy
1
2<script src="https://cdn.fastcomments.com/js/embed-collab-chat.min.js"></script>
3<script>
4 FastCommentsCollabChat(document.getElementById('article-content'), {
5 tenantId: 'demo',
6 commentCountUpdated: function(count) {
7 console.log('Total comments:', count);
8 document.getElementById('comment-badge').textContent = count;
9 }
10 });
11</script>
12

์—ฌ๋Ÿฌ ์„น์…˜ ์˜ˆ์ œ

ํŽ˜์ด์ง€์˜ ์—ฌ๋Ÿฌ ๊ฐœ๋ณ„ ์„น์…˜์—์„œ Collab Chat์„ ์ดˆ๊ธฐํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ ์„น์…˜์€ ์ž์ฒด์ ์ธ ๋…๋ฆฝ๋œ ์ฃผ์„์„ ๊ฐ€์ง‘๋‹ˆ๋‹ค:

Collab Chat on Multiple Sections
Copy Copy
1
2<div id="intro-section">
3 <h2>Introduction</h2>
4 <p>Content for the introduction...</p>
5</div>
6
7<div id="main-section">
8 <h2>Main Content</h2>
9 <p>Content for the main article...</p>
10</div>
11
12<script src="https://cdn.fastcomments.com/js/embed-collab-chat.min.js"></script>
13<script>
14 // ์†Œ๊ฐœ ์„น์…˜์—์„œ ์ดˆ๊ธฐํ™”
15 FastCommentsCollabChat(document.getElementById('intro-section'), {
16 tenantId: 'demo',
17 urlId: 'my-article-intro'
18 });
19
20 // ๋ณธ๋ฌธ ์„น์…˜์—์„œ ์ดˆ๊ธฐํ™”
21 FastCommentsCollabChat(document.getElementById('main-section'), {
22 tenantId: 'demo',
23 urlId: 'my-article-main'
24 });
25</script>
26

์˜จ๋ผ์ธ ๋„์„œ์— ์‹ค์‹œ๊ฐ„ ๋Œ“๊ธ€ ์ถ”๊ฐ€ Internal Link

์›ํ•˜๋ฉด ํŽ˜์ด์ง€๋ณ„๋กœ Collab Chat์„ ์ดˆ๊ธฐํ™”ํ•˜๊ณ  ํŽ˜์ด์ง€๋ณ„๋กœ ๋ณ„๋„์˜ ์Šค๋ ˆ๋“œ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ„๋‹จํžˆ urlId ๋งค๊ฐœ๋ณ€์ˆ˜ ์— book-one-page1๊ณผ ๊ฐ™์€ ๊ฐ’์„ ์ „๋‹ฌํ•˜์„ธ์š”. ์ด ๊ตฌ์„ฑ์€ ์ผ๋ฐ˜ ๋Œ“๊ธ€ ์œ„์ ฏ์—์„œ๋„ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

ํ…์ŠคํŠธ ์„ ํƒ ๋™์ž‘ Internal Link

How Text Selection Works

์‚ฌ์šฉ์ž๊ฐ€ Collab Chat ์ปจํ…Œ์ด๋„ˆ ๋‚ด์—์„œ ํ…์ŠคํŠธ๋ฅผ ์„ ํƒํ•˜๋ฉด, ์œ„์ ฏ์€ ๊ทธ ์„ ํƒ์„ ์บก์ฒ˜ํ•˜์—ฌ ํ† ๋ก ์„ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. ์„ ํƒ์€ ํ•œ ๋‹จ์–ด๋งŒํผ ์ž‘์„ ์ˆ˜๋„ ์žˆ๊ณ  ์„œ๋กœ ๋‹ค๋ฅธ ์š”์†Œ์— ๊ฑธ์นœ ์—ฌ๋Ÿฌ ๋‹จ๋ฝ๋งŒํผ ํด ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

Selection Delay

๋ฐ์Šคํฌํ†ฑ ์žฅ์น˜์—์„œ๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ํ…์ŠคํŠธ๋ฅผ ์„ ํƒํ•œ ์‹œ์ ๊ณผ ํ† ๋ก  ํ”„๋กฌํ”„ํŠธ๊ฐ€ ๋‚˜ํƒ€๋‚˜๋Š” ์‹œ์  ์‚ฌ์ด์— 3.5์ดˆ์˜ ์ง€์—ฐ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ๋‹จ์ˆœํžˆ ํ…์ŠคํŠธ๋ฅผ ๋ณต์‚ฌํ•˜๊ฑฐ๋‚˜ ์ฝ๊ธฐ ์œ„ํ•ด ๊ฐ•์กฐ ํ‘œ์‹œํ•  ๋•Œ UI๊ฐ€ ๊นœ๋นก์ด๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋ฐ”์ผ ๊ธฐ๊ธฐ์—์„œ๋Š” ํ„ฐ์น˜ ์Šคํฌ๋ฆฐ์—์„œ์˜ ํ…์ŠคํŠธ ์„ ํƒ์ด ๋” ์˜๋„์ ์ด๋ฏ€๋กœ ํ”„๋กฌํ”„ํŠธ๊ฐ€ ์ฆ‰์‹œ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.

Unique Conversation IDs

๊ฐ ๋Œ€ํ™”๋Š” ํŽ˜์ด์ง€ URL, DOM ์š”์†Œ ๊ฒฝ๋กœ ๋ฐ ์ง๋ ฌํ™”๋œ ํ…์ŠคํŠธ ๋ฒ”์œ„๋ฅผ ๊ฒฐํ•ฉํ•œ ๊ณ ์œ ํ•œ urlId๋ฅผ ๋ถ€์—ฌ๋ฐ›์Šต๋‹ˆ๋‹ค. ์ด๋Š” ๊ฐ ํ…์ŠคํŠธ ์„ ํƒ์ด ๋‚˜์ค‘์— ๋‹ค์‹œ ์ฐพ์„ ์ˆ˜ ์žˆ๋Š” ๋ณ„๋„์˜ ๋Œ€ํ™”๋ฅผ ์ƒ์„ฑํ•˜๋„๋ก ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค.

๊ตฌ์„ฑ์—์„œ ์‚ฌ์šฉ์ž ์ง€์ • urlId๋ฅผ ์ œ๊ณตํ•˜๋ฉด, ์ตœ์ข… ์‹๋ณ„์ž๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ์š”์†Œ ๊ฒฝ๋กœ ๋ฐ ํ…์ŠคํŠธ ๋ฒ”์œ„์™€ ๊ฒฐํ•ฉ๋ฉ๋‹ˆ๋‹ค.

Visual Highlights

ํŠน์ • ํ…์ŠคํŠธ ์„ ํƒ์— ๋Œ€ํ•œ ํ† ๋ก ์ด ์กด์žฌํ•˜๋ฉด ํ•ด๋‹น ํ…์ŠคํŠธ์— ์‹œ๊ฐ์  ํ•˜์ด๋ผ์ดํŠธ๊ฐ€ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. ํ•˜์ด๋ผ์ดํŠธ๋Š” ๋ฐฐ๊ฒฝ์ƒ‰์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌํ˜„๋˜๋ฉฐ, ๋งˆ์šฐ์Šค๋ฅผ ์˜ฌ๋ฆฌ๊ฑฐ๋‚˜ ์—ฐ๊ฒฐ๋œ ์ฑ„ํŒ… ์ฐฝ์ด ์—ด๋ ค ์žˆ์„ ๋•Œ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.

ํ•˜์ด๋ผ์ดํŠธ ์‹œ์Šคํ…œ์€ ์„ ํƒ๋œ ํ…์ŠคํŠธ๋ฅผ ์Šคํƒ€์ผ์„ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํŠน์ˆ˜ ์š”์†Œ๋กœ ๋ž˜ํ•‘ํ•˜์—ฌ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ์ด ์ ‘๊ทผ ๋ฐฉ์‹์€ ๊ธฐ๋ณธ HTML ๊ตฌ์กฐ๊ฐ€ ๋ณต์žกํ•˜๋”๋ผ๋„ ํ•˜์ด๋ผ์ดํŠธ๊ฐ€ ์ •ํ™•ํ•˜๊ฒŒ ์œ ์ง€๋˜๋„๋ก ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค.

Chat Window Positioning

์‚ฌ์šฉ์ž๊ฐ€ ํ•˜์ด๋ผ์ดํŠธ๋ฅผ ํด๋ฆญํ•˜๊ฑฐ๋‚˜ ์ƒˆ ์ฃผ์„์„ ์ƒ์„ฑํ•˜๋ฉด ์„ ํƒ๋œ ํ…์ŠคํŠธ ๊ทผ์ฒ˜์— ์ฑ„ํŒ… ์ฐฝ์ด ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค. ์œ„์ ฏ์€ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ทฐํฌํŠธ ๊ณต๊ฐ„์„ ๊ธฐ์ค€์œผ๋กœ ์ด ์ฐฝ์˜ ์ตœ์  ์œ„์น˜๋ฅผ ์ž๋™์œผ๋กœ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค.

์œ„์น˜ ์ง€์ • ์‹œ์Šคํ…œ์€ ์ฑ„ํŒ… ์ฐฝ์ด ํ•˜์ด๋ผ์ดํŠธ์—์„œ ์–ด๋А ๋ฐฉํ–ฅ์œผ๋กœ ํ™•์žฅ๋˜์–ด์•ผ ํ•˜๋Š”์ง€๋ฅผ ๋‚˜ํƒ€๋‚ด๊ธฐ ์œ„ํ•ด to-right, to-left, to-top, to-bottom๊ณผ ๊ฐ™์€ CSS ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋ฐ”์ผ ๊ธฐ๊ธฐ(๋„ˆ๋น„๊ฐ€ 768px ๋ฏธ๋งŒ์ธ ํ™”๋ฉด)์—์„œ๋Š” ๋” ๋‚˜์€ ์‚ฌ์šฉ์„ฑ์„ ์œ„ํ•ด ์ฑ„ํŒ… ์ฐฝ์ด ํ•ญ์ƒ ์ „์ฒด ํ™”๋ฉด์œผ๋กœ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

Chat Window Dimensions

๋ฐ์Šคํฌํ†ฑ์—์„œ๋Š” ์ฑ„ํŒ… ์ฐฝ์˜ ๋„ˆ๋น„๊ฐ€ 410px์ด๊ณ  20px ๊ฐ„๊ฒฉ๊ณผ ํ•˜์ด๋ผ์ดํŠธ๋œ ํ…์ŠคํŠธ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” 16px ํฌ๊ธฐ์˜ ์‹œ๊ฐ์  ํ™”์‚ดํ‘œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์น˜์ˆ˜๋Š” ์ผ๊ด€๋œ ๋™์ž‘์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด ๊ณ ์ •๋˜์–ด ์žˆ์ง€๋งŒ CSS๋กœ ์™ธํ˜•์„ ์‚ฌ์šฉ์žํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Cross-Element Selections

์‚ฌ์šฉ์ž๋Š” ํ•˜๋‚˜์˜ ๋‹จ๋ฝ ์ค‘๊ฐ„์—์„œ ๋‹ค๋ฅธ ๋‹จ๋ฝ์˜ ์‹œ์ž‘๊นŒ์ง€ ํ•˜์ด๋ผ์ดํŠธํ•˜๋Š” ๋“ฑ ์—ฌ๋Ÿฌ HTML ์š”์†Œ์— ๊ฑธ์ณ ํ…์ŠคํŠธ๋ฅผ ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฒ”์œ„ ์ง๋ ฌํ™” ์‹œ์Šคํ…œ์€ ์ด๋ฅผ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ฒ˜๋ฆฌํ•˜๋ฉฐ ์š”์†Œ ๊ฒฝ๊ณ„๋ฅผ ๋„˜๋Š” ๋ชจ๋“  ์„ ํƒ๋œ ํ…์ŠคํŠธ๋ฅผ ํ•˜์ด๋ผ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.

Browser Compatibility

ํ…์ŠคํŠธ ์„ ํƒ ์‹œ์Šคํ…œ์€ ๋ชจ๋“  ์ตœ์‹  ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ง€์›๋˜๋Š” ํ‘œ์ค€ window.getSelection() API๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ตฌํ˜• Internet Explorer ๋ฒ„์ „์—์„œ๋Š” ํ˜ธํ™˜์„ฑ์„ ์œ„ํ•ด document.selection์œผ๋กœ ํด๋ฐฑ๋ฉ๋‹ˆ๋‹ค.

Selection Persistence

ํ…์ŠคํŠธ ์„ ํƒ์— ๋Œ€ํ•œ ๋Œ€ํ™”๊ฐ€ ์ƒ์„ฑ๋˜๋ฉด ํ•ด๋‹น ์ฃผ์„์€ ํŽ˜์ด์ง€๋ฅผ ์ƒˆ๋กœ๊ณ ์นจํ•ด๋„ ์ง€์†๋ฉ๋‹ˆ๋‹ค. ์ง๋ ฌํ™”๋œ ๋ฒ”์œ„์™€ DOM ๊ฒฝ๋กœ๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉ์ž๊ฐ€ ํŽ˜์ด์ง€๋ฅผ ๋‹ค์‹œ ๋ฐฉ๋ฌธํ–ˆ์„ ๋•Œ ์œ„์ ฏ์ด ์ •ํ™•ํžˆ ๋™์ผํ•œ ์œ„์น˜์— ํ•˜์ด๋ผ์ดํŠธ๋ฅผ ๋ณต์›ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ๊ธฐ๋Šฅ์€ ํŽ˜์ด์ง€ ์ฝ˜ํ…์ธ ๊ฐ€ ์•ˆ์ •์ ์œผ๋กœ ์œ ์ง€๋˜๋Š” ํ•œ ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ…์ŠคํŠธ ๋‚ด์šฉ์„ ๋ณ€๊ฒฝํ•˜๊ฑฐ๋‚˜ HTML์„ ์žฌ๊ตฌ์„ฑํ•˜๋ฉด ๊ธฐ์กด ์ฃผ์„์ด ๋” ์ด์ƒ ํ…์ŠคํŠธ์™€ ์ •ํ™•ํžˆ ์ผ์น˜ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ด์œ ๋กœ ํ™œ์„ฑ ์ฃผ์„์ด ์žˆ๋Š” ํŽ˜์ด์ง€์—์„œ๋Š” ๋Œ€๊ทœ๋ชจ ์ฝ˜ํ…์ธ  ๋ณ€๊ฒฝ์„ ํ”ผํ•˜๊ฑฐ๋‚˜, ์ฝ˜ํ…์ธ  ๋ณ€๊ฒฝ์ด ๋ถˆ๊ฐ€ํ”ผํ•œ ๊ฒฝ์šฐ ์ฃผ์„์„ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•˜๋Š” ๋ฐฉ์•ˆ์„ ๊ณ ๋ คํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

๋งž์ถคํ™” Internal Link


๋‹คํฌ ๋ชจ๋“œ ์ง€์›

๋™์  ๋‹คํฌ ๋ชจ๋“œ

์‚ฌ์ดํŠธ์˜ ๋‹คํฌ ๋ชจ๋“œ๊ฐ€ body ์š”์†Œ์— .dark ํด๋ž˜์Šค๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ์ œ์–ด๋˜๋Š” ๊ฒฝ์šฐ, Collab Chat UI๋Š” ์žฌ์ดˆ๊ธฐํ™” ์—†์ด ์ž๋™์œผ๋กœ ์ด๋ฅผ ๋ฐ˜์˜ํ•ฉ๋‹ˆ๋‹ค. ์œ„์ ฏ์˜ ์Šคํƒ€์ผ์€ ์ด ํด๋ž˜์Šค์˜ ์กด์žฌ์— ๋ฐ˜์‘ํ•˜๋„๋ก ์„ค๊ณ„๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹คํฌ ๋ชจ๋“œ CSS ์˜ˆ์ œ
Copy Copy
1
2/* ๋‹คํฌ ๋ชจ๋“œ CSS */
3body.dark {
4 background: #1a1a1a;
5 color: #ffffff;
6}
7

CSS๋กœ ์‚ฌ์šฉ์ž ์ง€์ • ์Šคํƒ€์ผ

ํ•˜์ด๋ผ์ดํŠธ, ์ฑ„ํŒ… ์ฐฝ ๋ฐ ๊ธฐํƒ€ ์š”์†Œ์˜ ์™ธํ˜•์„ CSS๋กœ ์‚ฌ์šฉ์ž ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์œ„์ ฏ์€ ์Šคํƒ€์ผ์‹œํŠธ์—์„œ ํƒ€๊ฒŸํŒ…ํ•  ์ˆ˜ ์žˆ๋Š” ํŠน์ • ํด๋ž˜์Šค๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

ํ…์ŠคํŠธ ํ•˜์ด๋ผ์ดํŠธ๋Š” FastComments์˜ ๋Œ“๊ธ€ ๋ฒ„๋ธ” ์Šคํƒ€์ผ๋ง ์‹œ์Šคํ…œ์„ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ, ํ‘œ์ค€ ๋Œ“๊ธ€ ์œ„์ ฏ์— ์ ์šฉํ•œ ๋ชจ๋“  ์‚ฌ์šฉ์ž ์ •์˜๋Š” Collab Chat์—๋„ ์˜ํ–ฅ์„ ๋ฏธ์นฉ๋‹ˆ๋‹ค.

์ƒ๋‹จ ๋ฐ” ์‚ฌ์šฉ์ž ์ง€์ •

์ƒ๋‹จ ๋ฐ”์—๋Š” ์˜จ๋ผ์ธ ์‚ฌ์šฉ์ž ์ˆ˜์™€ ํ† ๋ก  ์ˆ˜๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. topBarTarget์œผ๋กœ ์ปค์Šคํ…€ ์š”์†Œ๋ฅผ ์ œ๊ณตํ•˜์—ฌ ์œ„์น˜๋ฅผ ์‚ฌ์šฉ์ž ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

์‚ฌ์šฉ์ž ์ •์˜ ์ƒ๋‹จ ๋ฐ” ์œ„์น˜
Copy Copy
1
2FastCommentsCollabChat(element, {
3 tenantId: 'demo',
4 topBarTarget: document.getElementById('my-custom-header')
5});
6

๋˜๋Š” null๋กœ ์„ค์ •ํ•˜์—ฌ ์™„์ „ํžˆ ๋น„ํ™œ์„ฑํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

์ƒ๋‹จ ๋ฐ” ๋น„ํ™œ์„ฑํ™”
Copy Copy
1
2FastCommentsCollabChat(element, {
3 tenantId: 'demo',
4 topBarTarget: null
5});
6

๋ชจ๋ฐ”์ผ ๋™์ž‘

ํ™”๋ฉด ๋„ˆ๋น„๊ฐ€ 768px ๋ฏธ๋งŒ์ธ ๊ฒฝ์šฐ Collab Chat์€ ์ž๋™์œผ๋กœ ๋ชจ๋ฐ”์ผ ์ตœ์ ํ™” ๋ ˆ์ด์•„์›ƒ์œผ๋กœ ์ „ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์ฑ„ํŒ… ์ฐฝ์€ ํ…์ŠคํŠธ ์˜†์— ๋–  ์žˆ์ง€ ์•Š๊ณ  ์ „์ฒด ํ™”๋ฉด์œผ๋กœ ํ‘œ์‹œ๋˜๋ฉฐ, ๋” ์ฆ‰๊ฐ์ ์ธ ์ƒํ˜ธ์ž‘์šฉ์„ ์œ„ํ•ด ์„ ํƒ ์ง€์—ฐ์ด ์ œ๊ฑฐ๋ฉ๋‹ˆ๋‹ค.

์ด ๋™์ž‘์€ ๋‚ด์žฅ๋˜์–ด ์žˆ์œผ๋ฉฐ ๋ณ„๋„์˜ ๊ตฌ์„ฑ์€ ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์œ„์ ฏ์€ ํ™”๋ฉด ํฌ๊ธฐ๋ฅผ ์ž๋™์œผ๋กœ ๊ฐ์ง€ํ•˜๊ณ  ๊ทธ์— ๋”ฐ๋ผ ์กฐ์ •ํ•ฉ๋‹ˆ๋‹ค.

์ฑ„ํŒ… ์ฐฝ ์™ธํ˜•

์ฑ„ํŒ… ์ฐฝ์€ ๋ฐ์Šคํฌํ†ฑ์—์„œ ๋„ˆ๋น„๊ฐ€ 410px์ด๊ณ , ํ•˜์ด๋ผ์ดํŠธ๋œ ํ…์ŠคํŠธ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” 16px ํ™”์‚ดํ‘œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฐฝ์€ ๋ทฐํฌํŠธ์˜ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๊ณต๊ฐ„์— ๋”ฐ๋ผ ์ž๋™์œผ๋กœ ์œ„์น˜๋ฅผ ์ง€์ •ํ•˜๋ฉฐ, to-right, to-left, to-top, to-bottom ๊ฐ™์€ ์œ„์น˜ ์ง€์ • ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

์ด ์ฐฝ๋“ค์˜ ์ƒ‰์ƒ, ๊ธ€๊ผด, ๊ฐ„๊ฒฉ ๋˜๋Š” ๊ธฐํƒ€ ์‹œ๊ฐ์  ์†์„ฑ์„ ์กฐ์ •ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ์ž ์ง€์ • CSS๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฑ„ํŒ… ์ฐฝ์€ ํ‘œ์ค€ FastComments ์œ„์ ฏ๊ณผ ๋™์ผํ•œ ์ปดํฌ๋„ŒํŠธ ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ์ „์—ญ ์‚ฌ์šฉ์ž ์ง€์ •๋„ ์ƒ์†๋ฉ๋‹ˆ๋‹ค.

์ง€์—ญํ™”

Collab Chat์€ ํ‘œ์ค€ FastComments ์œ„์ ฏ๊ณผ ๋™์ผํ•œ ๋ชจ๋“  ์ง€์—ญํ™” ์˜ต์…˜์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. UI ํ…์ŠคํŠธ๋ฅผ ๋‹ค๋ฅธ ์–ธ์–ด๋กœ ํ‘œ์‹œํ•˜๋ ค๋ฉด locale ์˜ต์…˜์„ ์„ค์ •ํ•˜์„ธ์š”:

๋กœ์ผ€์ผ ์„ค์ •
Copy Copy
1
2FastCommentsCollabChat(element, {
3 tenantId: 'demo',
4 locale: 'es' // ์ŠคํŽ˜์ธ์–ด
5});
6

FastComments๋Š” ์ˆ˜์‹ญ ๊ฐœ์˜ ์–ธ์–ด๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ๋กœ์ผ€์ผ ์„ค์ •์€ ํ”„๋กฌํ”„ํŠธ, ๋ฒ„ํŠผ ๋ฐ ํ”Œ๋ ˆ์ด์Šคํ™€๋” ํ…์ŠคํŠธ๋ฅผ ํฌํ•จํ•œ ๋ชจ๋“  UI ํ…์ŠคํŠธ์— ์˜ํ–ฅ์„ ์ค๋‹ˆ๋‹ค.

์ƒ์†๋œ ์‚ฌ์šฉ์ž ์ง€์ • ์˜ต์…˜

Collab Chat์€ ํ‘œ์ค€ ๋Œ“๊ธ€ ์œ„์ ฏ์„ ํ™•์žฅํ•˜๋ฏ€๋กœ, ๊ธฐ๋ณธ ์œ„์ ฏ์˜ ๋ชจ๋“  ์‚ฌ์šฉ์ž ์ง€์ • ์˜ต์…˜์„ ์ƒ์†ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—๋Š” ์‚ฌ์šฉ์ž ์ง€์ • CSS ํด๋ž˜์Šค, ์‚ฌ์šฉ์ž ์ง€์ • ๋ฒˆ์—ญ, ์•„๋ฐ”ํƒ€ ์‚ฌ์šฉ์ž ์ง€์ •, ๋‚ ์งœ ํ˜•์‹ ์ง€์ • ๋“ฑ ๋งŽ์€ ํ•ญ๋ชฉ์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ „์ฒด ์‚ฌ์šฉ์ž ์ง€์ • ์˜ต์…˜ ๋ชฉ๋ก์€ FastComments์˜ ๋ฉ”์ธ ์‚ฌ์šฉ์ž ์ง€์ • ๋ฌธ์„œ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

์‚ฌ์šฉ์ž ์ง€์ • ํฐํŠธ ์‚ฌ์šฉ

์‚ฌ์ดํŠธ์—์„œ ์‚ฌ์šฉ์ž ์ง€์ • ํฐํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ Collab Chat UI๋Š” ํŽ˜์ด์ง€์˜ CSS์—์„œ ํ•ด๋‹น ํฐํŠธ๋ฅผ ์ƒ์†ํ•ฉ๋‹ˆ๋‹ค. ํ”Œ๋กœํŒ… ์ฑ„ํŒ… ์ฐฝ์ด ๋™์ผํ•œ ํฐํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ํ•˜๋ ค๋ฉด ์œ„์ ฏ ์ปค์Šคํ„ฐ๋งˆ์ด์ œ์ด์…˜ ๊ทœ์น™์„ ์ƒ์„ฑํ•˜๊ณ  ํ•ด๋‹น ๊ทœ์น™์˜ ์ปค์Šคํ…€ CSS์—์„œ @import๋กœ ํฐํŠธ๋ฅผ ํฌํ•จํ•ด์•ผ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


์‹ค์‹œ๊ฐ„ ๋™๊ธฐํ™” Internal Link

Real-Time Updates

Collab Chat๋Š” WebSocket ์—ฐ๊ฒฐ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจ๋“  ๋Œ€ํ™”๋ฅผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋™๊ธฐํ™”ํ•ฉ๋‹ˆ๋‹ค. ๋ˆ„๊ตฐ๊ฐ€ ์ƒˆ ์ฃผ์„์„ ์ž‘์„ฑํ•˜๊ฑฐ๋‚˜ ๋Œ“๊ธ€์„ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ํ† ๋ก ์„ ์‚ญ์ œํ•˜๋ฉด ๊ฐ™์€ ํŽ˜์ด์ง€๋ฅผ ๋ณด๊ณ  ์žˆ๋Š” ๋‹ค๋ฅธ ๋ชจ๋“  ์‚ฌ์šฉ์ž๋Š” ์ƒˆ๋กœ๊ณ ์นจ ์—†์ด ์ฆ‰์‹œ ์—…๋ฐ์ดํŠธ๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

How WebSocket Sync Works

Collab Chat๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜๋ฉด ์œ„์ ฏ์€ FastComments ์„œ๋ฒ„์— WebSocket ์—ฐ๊ฒฐ์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์ด ์—ฐ๊ฒฐ์€ ์‚ฌ์šฉ์ž์˜ ์„ธ์…˜ ๋™์•ˆ ์—ด๋ ค ์žˆ์œผ๋ฉฐ ํ˜„์žฌ ํŽ˜์ด์ง€์™€ ๊ด€๋ จ๋œ ์—…๋ฐ์ดํŠธ๋ฅผ ์ˆ˜์‹  ๋Œ€๊ธฐํ•ฉ๋‹ˆ๋‹ค.

WebSocket ์‹œ์Šคํ…œ์€ Collab Chat์— ๋Œ€ํ•ด ์„ธ ๊ฐ€์ง€ ์œ ํ˜•์˜ ๋ธŒ๋กœ๋“œ์บ์ŠคํŠธ ๋ฉ”์‹œ์ง€๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. new-text-chat ์ด๋ฒคํŠธ๋Š” ๋ˆ„๊ตฐ๊ฐ€ ํŽ˜์ด์ง€์— ์ƒˆ ์ฃผ์„์„ ์ž‘์„ฑํ•  ๋•Œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. updated-text-chat ์ด๋ฒคํŠธ๋Š” ๋ˆ„๊ตฐ๊ฐ€ ๊ธฐ์กด ๋Œ€ํ™”๋ฅผ ์—…๋ฐ์ดํŠธํ•  ๋•Œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. deleted-text-chat ์ด๋ฒคํŠธ๋Š” ๋ˆ„๊ตฐ๊ฐ€ ์ฃผ์„์„ ์‚ญ์ œํ•  ๋•Œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

Broadcast ID System

์‚ฌ์šฉ์ž๊ฐ€ ์ž์‹ ์˜ ๋™์ž‘์ด ๋‹ค์‹œ ๋ธŒ๋กœ๋“œ์บ์ŠคํŠธ๋˜์–ด ์ž์‹ ์—๊ฒŒ ๋˜๋Œ์•„์˜ค๋Š” ์—์ฝ” ํšจ๊ณผ๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๊ฐ ์—…๋ฐ์ดํŠธ์—๋Š” ๊ณ ์œ ํ•œ broadcastId๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ์ฃผ์„์„ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ ์—…๋ฐ์ดํŠธํ•  ๋•Œ ํ•ด๋‹น ํด๋ผ์ด์–ธํŠธ๋Š” ํ•ด๋‹น ์ž‘์—…์— ๋Œ€ํ•œ UUID๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. WebSocket์ด ์—…๋ฐ์ดํŠธ๋ฅผ ๋ชจ๋“  ํด๋ผ์ด์–ธํŠธ์— ๋ธŒ๋กœ๋“œ์บ์ŠคํŠธํ•˜๋ฉด, ์›๋ž˜ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ ํด๋ผ์ด์–ธํŠธ๋Š” ์ž์‹ ์˜ broadcastId์™€ ์ผ์น˜ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ•ด๋‹น ์—…๋ฐ์ดํŠธ๋ฅผ ๋ฌด์‹œํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ์‚ฌ์šฉ์ž๊ฐ€ ์„œ๋ฒ„๋ฅผ ํ†ตํ•œ ์™•๋ณต์„ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š๊ณ ๋„ UI์—์„œ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ์ฆ‰์‹œ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋ฉด์„œ๋„ ๋‹ค๋ฅธ ๋ชจ๋“  ์‚ฌ์šฉ์ž๊ฐ€ ์—…๋ฐ์ดํŠธ๋ฅผ ๋ฐ›๋„๋ก ๋ณด์žฅํ•˜์—ฌ ์›ํ™œํ•œ ์ƒํ˜ธ์ž‘์šฉ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

Live User Count

์ƒ๋‹จ ๋ฐ”์—๋Š” ํ˜„์žฌ ํŽ˜์ด์ง€๋ฅผ ๋ณด๊ณ  ์žˆ๋Š” ์‚ฌ์šฉ์ž ์ˆ˜๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ์ด ์ˆ˜์น˜๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ๋“ค์–ด์˜ค๊ณ  ๋‚˜๊ฐ์— ๋”ฐ๋ผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์—…๋ฐ์ดํŠธ๋ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž ์ˆ˜๋Š” ๋™์ผํ•œ WebSocket ์—ฐ๊ฒฐ์„ ํ†ตํ•ด ์ œ๊ณต๋˜๋ฉฐ ์—ฐ๊ฒฐ ๋ฐ ์—ฐ๊ฒฐ ํ•ด์ œ ์ด๋ฒคํŠธ์— ๋”ฐ๋ผ ์ž๋™์œผ๋กœ ์ฆ๊ฐ€/๊ฐ์†Œํ•ฉ๋‹ˆ๋‹ค.

Connection Resilience

๋„คํŠธ์›Œํฌ ๋ฌธ์ œ๋‚˜ ์„œ๋ฒ„ ์œ ์ง€ ๊ด€๋ฆฌ๋กœ ์ธํ•ด WebSocket ์—ฐ๊ฒฐ์ด ๋Š์–ด์ง€๋ฉด ์œ„์ ฏ์€ ์ž๋™์œผ๋กœ ๋‹ค์‹œ ์—ฐ๊ฒฐ์„ ์‹œ๋„ํ•ฉ๋‹ˆ๋‹ค. ์žฌ์—ฐ๊ฒฐ ๊ธฐ๊ฐ„ ๋™์•ˆ ์‚ฌ์šฉ์ž๋Š” ๊ธฐ์กด ์ฃผ์„๊ณผ ์ƒํ˜ธ์ž‘์šฉํ•  ์ˆ˜๋Š” ์žˆ์ง€๋งŒ ์—ฐ๊ฒฐ์ด ๋ณต๊ตฌ๋  ๋•Œ๊นŒ์ง€ ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž์˜ ์‹ค์‹œ๊ฐ„ ์—…๋ฐ์ดํŠธ๋Š” ๋ณผ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๋‹ค์‹œ ์—ฐ๊ฒฐ๋˜๋ฉด ์œ„์ ฏ์€ ๋†“์นœ ์—…๋ฐ์ดํŠธ๊ฐ€ ์—†๋Š”์ง€ ์žฌ๋™๊ธฐํ™”ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์‚ฌ์šฉ์ž์˜ ๊ฐœ์ž… ์—†์ด ํˆฌ๋ช…ํ•˜๊ฒŒ ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค.

Bandwidth Considerations

WebSocket ๋ฉ”์‹œ์ง€๋Š” ๊ฒฝ๋Ÿ‰์ด๋ฉฐ ์ƒํƒœ๋ฅผ ๋™๊ธฐํ™”ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ์ตœ์†Œํ•œ์˜ ์ •๋ณด๋งŒ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. ์ƒˆ ์ฃผ์„์„ ๋งŒ๋“œ๋Š” ๋ฐ ์ผ๋ฐ˜์ ์œผ๋กœ 1KB ๋ฏธ๋งŒ์˜ ๋Œ€์—ญํญ์ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์‹œ์Šคํ…œ์—๋Š” ํ™œ๋™์ด ๋งŽ์€ ๊ธฐ๊ฐ„ ๋™์•ˆ ๋ฉ”์‹œ์ง€ ๋นˆ๋„๋ฅผ ์ค„์ด๊ธฐ ์œ„ํ•œ ์ง€๋Šฅํ˜• ๋ฐฐ์นญ๋„ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

FastComments ๋Œ€์‹œ๋ณด๋“œ์˜ ์‚ฌ์šฉ๋Ÿ‰ ์ง€ํ‘œ๋Š” pubSubMessageCount ๋ฐ pubSubBandwidth๋ฅผ ์ถ”์ ํ•˜๋ฏ€๋กœ ์‚ฌ์ดํŠธ ์ „๋ฐ˜์˜ ์‹ค์‹œ๊ฐ„ ๋™๊ธฐํ™” ํ™œ๋™์„ ๋ชจ๋‹ˆํ„ฐ๋งํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Cross-Tab Synchronization

์‚ฌ์šฉ์ž๊ฐ€ ๋™์ผํ•œ ํŽ˜์ด์ง€๋ฅผ ์—ฌ๋Ÿฌ ๋ธŒ๋ผ์šฐ์ € ํƒญ์—์„œ ์—ด์–ด๋‘” ๊ฒฝ์šฐ ํ•œ ํƒญ์—์„œ์˜ ์—…๋ฐ์ดํŠธ๋Š” ๋‹ค๋ฅธ ํƒญ์— ์ฆ‰์‹œ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋™์ผํ•œ WebSocket ๋™๊ธฐํ™” ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ํ†ตํ•ด ์ž‘๋™ํ•˜๋ฉฐ ๋ณ„๋„์˜ ์ถ”๊ฐ€ ๊ตฌ์„ฑ์€ ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

Security

WebSocket ๋ฉ”์‹œ์ง€๋Š” ๋ณด์•ˆ ์—ฐ๊ฒฐ(WSS)์„ ํ†ตํ•ด ์ „์†ก๋˜๋ฉฐ ์‚ฌ์šฉ์ž๊ฐ€ ๊ถŒํ•œ์ด ์žˆ๋Š” ๋Œ€ํ™”์— ๋Œ€ํ•œ ์—…๋ฐ์ดํŠธ๋งŒ ์ˆ˜์‹ ํ•˜๋„๋ก ํ…Œ๋„ŒํŠธ ๊ฒ€์ฆ์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. ์„œ๋ฒ„๋Š” ๋ฌด๋‹จ ์•ก์„ธ์Šค๋‚˜ ์กฐ์ž‘์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๋ธŒ๋กœ๋“œ์บ์ŠคํŠธํ•˜๊ธฐ ์ „์— ๋ชจ๋“  ์ž‘์—…์„ ๊ฒ€์ฆํ•ฉ๋‹ˆ๋‹ค.


์งˆ๋ฌธ ์žˆ์œผ์‹ ๊ฐ€์š”?

FastComments Collab Chat์€ ์—ฌ๊ธฐ๊นŒ์ง€์ž…๋‹ˆ๋‹ค! ์งˆ๋ฌธ์ด ์žˆ์œผ์‹œ๊ฑฐ๋‚˜ ๊ตฌํ˜„์— ๋Œ€ํ•œ ๋„์›€์ด ํ•„์š”ํ•˜์‹œ๊ฑฐ๋‚˜ ๊ธฐ๋Šฅ ์ œ์•ˆ์ด ์žˆ์œผ์‹œ๋ฉด ์•„๋ž˜์— ์•Œ๋ ค์ฃผ์‹œ๊ฑฐ๋‚˜ ์ง€์›ํŒ€์— ์—ฐ๋ฝํ•ด ์ฃผ์„ธ์š”.

์‹ค์ œ ์˜ˆ์ œ๋ฅผ ๋ณด๋ ค๋ฉด Collab Chat์„ ํ”„๋กœ๋•์…˜์—์„œ ์‚ฌ์šฉํ•˜๋Š” Govscent.org๋ฅผ ํ™•์ธํ•ด ๋ณด์„ธ์š”.