FastComments.com

FastComments Image Chat는 사용자가 이미지의 아무 곳이나 클릭하여 토론 지점을 만들 수 있도록 하여 이미지에 대한 대화형 토론을 가능하게 합니다. 사용자는 이미지의 특정 부분을 클릭하여 해당 영역에 대한 대화를 시작할 수 있으며, 토론이 위치한 곳을 보여주는 시각적 마커를 생성합니다.

이 기능은 디자인 피드백, 제품 리뷰, 다이어그램이 포함된 교육 자료, 주석이 달린 사진 갤러리 및 특정 이미지 위치에 고정된 맥락적 토론을 원하는 모든 시나리오에 적합합니다.

반응형 디자인 Internal Link


백분율 기반 위치 지정

Image Chat는 이미지 위의 채팅 마커를 위치시키기 위해 픽셀 좌표 대신 백분율 기반 좌표를 사용합니다. 사용자가 이미지에서 클릭하면 위젯은 클릭의 픽셀 좌표를 이미지 너비와 높이의 백분율로 변환합니다. 이 방식은 이미지가 어떻게 표시되든 마커가 올바른 위치에 유지되도록 보장합니다.

예를 들어, 사용자가 너비가 1000px인 이미지의 왼쪽 가장자리에서 250픽셀 지점을 클릭하면 위젯은 이를 왼쪽에서 25%로 저장합니다. 다른 사용자가 모바일 기기에서 동일한 이미지를 너비 500px로 볼 때, 마커는 왼쪽에서 125픽셀 지점에 나타나며, 이는 여전히 너비의 25%입니다.

반응형 레이아웃에 대한 이점

이 백분율 시스템은 모든 기기 크기와 방향에서 Image Chat이 원활하게 작동하도록 합니다. 화면 너비, CSS 규칙, 또는 컨테이너 제약에 따라 이미지가 서로 다른 크기로 표시될 수 있지만, 마커는 항상 의도된 위치에 정확히 정렬됩니다.

대형 모니터를 사용하는 데스크톱 사용자는 소형 화면의 스마트폰 사용자가 보는 것과 동일한 상대적 위치에 마커를 봅니다. 마커는 이미지 자체와 비례하여 크기가 조정됩니다.

이미지 스케일링 및 종횡비

이미지가 스케일될 때 종횡비를 유지하는 한(이는 브라우저의 기본 동작입니다) 백분율 기반 마커는 완벽하게 정렬된 상태를 유지합니다. 위젯은 이미지가 비례적으로 스케일된다고 가정하고 이 가정에 기반해 위치를 계산합니다.

특정 치수와 함께 object-fit: cover와 같이 이미지 종횡비를 왜곡하는 CSS를 적용하면 마커 위치가 올바르게 정렬되지 않을 수 있습니다. 최상의 결과를 위해 이미지를 자연스럽게 스케일하도록 허용하거나 종횡비를 유지하기 위해 object-fit: contain을 사용하십시오.

채팅 사각형 크기

채팅 마커의 시각적 크기도 백분율 기반입니다. chatSquarePercentage 구성 옵션은 기본값이 5%이며, 이는 각 사각형이 이미지 너비의 5%임을 의미합니다. 이는 서로 다른 이미지 크기에서도 시각적 비중을 일관되게 유지합니다.

기본 5% 설정을 적용한 너비 1000px 이미지에서는 마커가 50px 정사각형입니다. 너비 500px 이미지에서는 동일한 마커가 25px 정사각형이 됩니다. 마커는 이미지 크기에 비례합니다.

모바일 동작

너비가 768px 미만인 화면에서는 Image Chat이 모바일 최적화 레이아웃으로 전환됩니다. 채팅 창은 마커 옆에 떠 있는 대신 전체 화면으로 열립니다. 이는 작은 화면에서 떠 있는 창이 이미지의 많은 부분을 가리는 문제를 줄여 더 나은 사용성을 제공합니다.

마커 자체는 여전히 백분율 기반 위치에 표시되고 클릭할 수 있습니다. 사용자는 모든 토론이 어디에 위치하는지 확인하고 마커를 탭하여 전체 화면 채팅 인터페이스를 열 수 있습니다.

동적 이미지 로딩

이미지가 비동기적으로 로드되거나 페이지 로드 후 크기가 변경되더라도 백분율 기반 시스템은 올바르게 작동합니다. 위젯은 이미지 요소를 감시하고 이미지 치수가 변경될 때마다 마커 위치를 재계산합니다.

이미지를 지연 로드하거나 서로 다른 브레이크포인트에서 다른 크기의 반응형 이미지를 구현하는 경우에도 이미지 크기가 변경되면 마커가 자동으로 조정됩니다.

기기 간 일관성

좌표가 데이터베이스에 백분율로 저장되므로 데스크톱에서 생성된 토론은 태블릿이나 휴대폰에서 볼 때도 정확히 동일한 상대적 위치에 나타납니다. 사용자는 위치 불일치 없이 여러 기기에서 협업할 수 있습니다.

이 동작은 양방향으로 작동합니다. 모바일 기기에서 특정 지점을 탭하여 생성한 토론은 대형 데스크톱 모니터에서 볼 때도 동일한 상대적 위치에 나타납니다.

뷰포트 고려사항

위젯은 뷰포트가 아니라 이미지 요소 자체를 기준으로 백분율을 계산합니다. 이는 페이지를 스크롤하거나 브라우저 창 크기를 변경해도 마커 위치에 영향을 주지 않음을 의미합니다. 마커는 뷰포트 변경과 무관하게 이미지상의 위치에 고정됩니다.

미래 대비 콘텐츠

백분율 기반 접근 방식은 레이아웃, 디자인 또는 기기 생태계의 변경에 대해 이미지 토론을 탄력적으로 만듭니다. 새로운 화면 크기와 기기가 등장하더라도 기존 토론은 업데이트나 마이그레이션 없이도 계속 올바르게 표시됩니다.


맞춤화 Internal Link

다크 모드 지원

Image Chat은 내장된 다크 모드 지원을 포함합니다. 구성에서 hasDarkBackground: true를 설정하면 채팅 창과 UI 요소가 자동으로 어두운 배경에 잘 어울리도록 조정됩니다.

FastCommentsImageChat(imageElement, {
    tenantId: 'demo',
    hasDarkBackground: true
});

다크 모드 스타일링은 채팅 창, 마커 사각형, 그리고 모든 인터랙티브 요소에 적용됩니다. 사이트에 다크 모드 토글이 있는 경우 모드가 변경될 때 위젯을 재초기화하거나 아래에 설명된 body 클래스 방식을 사용할 수 있습니다.

동적 다크 모드

사이트의 다크 모드가 body 요소에 .dark 클래스를 추가하여 제어되는 경우, Image Chat UI는 재초기화 없이도 자동으로 이를 반영합니다. 위젯의 스타일은 이 클래스의 존재에 반응하도록 설계되어 있습니다.

/* 다크 모드 CSS */
body.dark {
    background: #1a1a1a;
    color: #ffffff;
}

CSS로 사용자 지정 스타일

마커, 채팅 창 및 기타 요소의 외형을 CSS로 사용자 지정할 수 있습니다. 위젯은 스타일시트에서 타깃으로 삼을 수 있는 특정 클래스를 추가합니다.

채팅 사각형과 창은 FastComments의 댓글 버블 스타일 시스템을 사용하므로, 표준 댓글 위젯에 적용한 사용자 지정이 Image Chat에도 동일하게 영향을 미칩니다.

채팅 사각형 크기

chatSquarePercentage 옵션은 클릭 가능한 마커의 크기를 제어합니다. 기본값은 이미지 너비의 5%입니다:

FastCommentsImageChat(imageElement, {
    tenantId: 'demo',
    chatSquarePercentage: 7  // 더 크고 더 눈에 띄는 사각형들
});

값이 작을수록 이미지에 더 은은하게 녹아드는 마커가 생성됩니다. 값이 클수록 특히 모바일 기기나 접근성 측면에서 마커가 더 눈에 띄고 클릭하기 쉬워집니다.

모바일 동작

가로 폭이 768px 미만인 화면에서는 Image Chat이 자동으로 모바일 최적화 레이아웃으로 전환됩니다. 채팅 창은 마커 옆에 떠 있는 대신 전체 화면으로 표시되어 작은 화면에서 더 나은 사용성을 제공합니다.

마커는 이미지에서 반응형 위치에 그대로 표시됩니다. 사용자는 어떤 마커든 탭하여 전체 화면 채팅 인터페이스를 열 수 있습니다. 이 동작은 내장되어 있으며 별도의 구성은 필요하지 않습니다.

채팅 창 모양

채팅 창은 데스크톱에서 가로 300px이고, 마커를 가리키는 16px 화살표가 있습니다. 창은 사용 가능한 뷰포트 공간에 따라 to-right, to-left, to-top, to-bottom 같은 포지셔닝 클래스를 사용하여 자동으로 위치를 정합니다.

이 창들의 색상, 글꼴, 간격 또는 기타 시각적 속성을 조정하기 위해 사용자 지정 CSS를 추가할 수 있습니다. 채팅 창은 표준 FastComments 위젯과 동일한 컴포넌트 구조를 사용하므로 전역적으로 적용한 사용자 지정도 상속됩니다.

지연 초기화

채팅 창은 데스크톱 사용자의 경우 호버 시 또는 생성될 때 즉시 초기화됩니다. 이는 사용자가 실제로 마커와 상호작용할 때만 채팅 인터페이스를 렌더링함으로써 초기 로드 오버헤드를 줄여줍니다.

지연 초기화는 투명하게 발생합니다. 사용자는 지연을 느끼지 않지만, 이미지에 마커가 많은 경우 브라우저가 수십 개의 숨겨진 채팅 창을 렌더링할 필요가 없습니다.

지역화

Image Chat은 표준 FastComments 위젯과 동일한 모든 지역화 옵션을 지원합니다. UI 텍스트를 다른 언어로 표시하려면 locale 옵션을 설정하세요:

FastCommentsImageChat(imageElement, {
    tenantId: 'demo',
    locale: 'fr'  // 프랑스어
});

FastComments는 수십 개의 언어를 지원합니다. locale 설정은 프롬프트, 버튼, 플레이스홀더 텍스트를 포함한 모든 UI 텍스트에 영향을 미칩니다.

상속된 사용자 지정 옵션

Image Chat은 표준 댓글 위젯을 확장하므로 기본 위젯의 모든 사용자 지정 옵션을 상속합니다. 여기에는 사용자 지정 CSS 클래스, 사용자 지정 번역, 아바타 커스터마이징, 날짜 포맷팅 등 많은 항목이 포함됩니다.

사용 가능한 전체 사용자 지정 옵션 목록은 FastComments의 메인 커스터마이제이션 문서를 참조하세요.

사용자 정의 폰트 사용

사이트에서 사용자 정의 폰트를 사용하는 경우, Image Chat UI는 페이지의 CSS에서 해당 폰트를 상속합니다. 채팅 창은 페이지의 DOM 안에서 렌더링되며 기존 타이포그래피 설정을 준수합니다.

최상의 결과를 위해 Image Chat을 초기화하기 전에 사용자 정의 폰트가 로드되었는지 확인하거나, 폰트 로드 동안 스타일이 적용되지 않은 텍스트가 잠깐 보일 수 있음을 수용하세요.

마커 시각 디자인

사각형 마커는 이미지를 압도하지 않으면서 눈에 띄도록 미묘한 시각 디자인을 가지고 있습니다. 원하는 경우 CSS로 그들의 외관을 사용자 지정하여 다른 시각적 처리를 적용할 수 있습니다.

마커에는 사용자가 마우스를 올릴 때 피드백을 제공하는 호버 상태가 포함되어 있습니다. 터치 장치에서는 탭 상호작용이 채팅 창을 열어 즉각적인 피드백을 제공합니다.

실시간 동기화 Internal Link

Real-Time Updates

Image Chat은 모든 연결된 사용자 간에 모든 대화를 실시간으로 동기화하기 위해 WebSocket 연결을 사용합니다. 누군가 새로운 마커를 생성하거나 댓글을 추가하거나 토론을 삭제하면 동일한 이미지를 보고 있는 다른 모든 사용자는 새로 고침 없이 즉시 업데이트를 확인합니다.

How WebSocket Sync Works

Image Chat을 초기화하면 위젯이 FastComments 서버에 WebSocket 연결을 설정합니다. 이 연결은 사용자의 세션 동안 열려 있으며 현재 이미지와 관련된 업데이트를 수신 대기합니다.

WebSocket 시스템은 Image Chat을 위해 세 가지 유형의 브로드캐스트 메시지를 사용합니다. new-image-chat 이벤트는 누군가 이미지에 새 마커를 생성할 때 발생합니다. image-chat-updated 이벤트는 누군가 기존 대화를 업데이트할 때 발생합니다. deleted-image-chat 이벤트는 누군가 마커를 삭제할 때 발생합니다.

Broadcast ID System

사용자가 자신의 작업이 다시 자신에게 브로드캐스트되어 에코 효과가 발생하는 것을 방지하기 위해 각 업데이트에는 고유한 broadcastId가 포함됩니다. 사용자가 마커를 생성하거나 업데이트할 때 클라이언트는 해당 작업에 대해 UUID를 생성합니다. WebSocket이 업데이트를 모든 클라이언트에 다시 브로드캐스트할 때, 원래 작업을 수행한 클라이언트는 자신의 broadcastId와 일치하므로 해당 업데이트를 무시합니다.

이렇게 하면 사용자는 서버를 통한 왕복을 기다리지 않고도 UI에서 변경 사항을 즉시 볼 수 있으면서 다른 모든 사용자에게는 업데이트가 전달되도록 하여 원활한 상호작용을 보장합니다.

Connection Resilience

네트워크 문제나 서버 유지보수로 인해 WebSocket 연결이 끊기면 위젯은 자동으로 재연결을 시도합니다. 재연결 기간 동안 사용자는 기존 마커와 상호작용할 수 있지만 연결이 복구될 때까지 다른 사용자의 실시간 업데이트는 볼 수 없습니다.

재연결이 완료되면 위젯은 누락된 업데이트가 없도록 다시 동기화합니다. 이 작업은 사용자의 개입 없이 투명하게 발생합니다.

Bandwidth Considerations

WebSocket 메시지는 경량이며 상태 동기화에 필요한 핵심 정보만 포함합니다. 새 마커를 생성하는 데 일반적으로 1KB 미만의 대역폭이 사용됩니다. 시스템은 또한 활동이 많은 기간 동안 메시지 빈도를 줄이기 위해 지능형 배칭을 포함합니다.

FastComments 대시보드의 사용량 지표는 pubSubMessageCountpubSubBandwidth를 추적하므로 사이트 전반의 실시간 동기화 활동을 모니터링할 수 있습니다.

Cross-Tab Synchronization

사용자가 동일한 페이지를 여러 브라우저 탭에서 연 경우 한 탭의 업데이트가 다른 탭에 즉시 표시됩니다. 이는 동일한 WebSocket 동기화 메커니즘을 통해 작동하며 추가 구성이 필요하지 않습니다.

사용자는 여러 기기에서 동시에 사이트를 열어둘 수 있으며 모든 기기가 동기 상태를 유지합니다. 데스크탑에서 생성된 마커는 두 기기 모두 동일한 이미지를 보고 있는 경우 사용자의 태블릿에 즉시 표시됩니다.

Security

WebSocket 메시지는 보안 연결(WSS)을 통해 전송되며, 사용자가 권한이 있는 대화에 대해서만 업데이트를 받도록 테넌트 검증이 포함됩니다. 서버는 브로드캐스트하기 전에 모든 작업을 검증하여 무단 액세스나 조작을 방지합니다.

Offline Behavior

사용자가 완전히 오프라인인 경우 기존 마커는 여전히 볼 수 있지만 새 마커를 생성하거나 다른 사용자의 업데이트를 볼 수는 없습니다. 위젯은 오프라인 상태를 감지하고 적절한 메시지를 표시합니다.

사용자가 오프라인 상태에서 마커를 생성하려 시도한 후 온라인으로 돌아오면 해당 작업은 큐에 보관되는 대신 실패합니다. 이는 데이터 일관성을 보장하기 위함입니다. 사용자는 연결이 복원된 후 작업을 다시 시도해야 합니다.

Performance Impact

WebSocket 연결은 성능에 미치는 영향이 최소입니다. 업데이트가 발생하지 않을 때 연결은 유휴 상태를 유지하며 활동이 발생할 때만 메시지를 처리합니다. 중간 수준의 마커 활동이 있는 일반적인 이미지의 경우 WebSocket은 이미지 자체를 렌더링하는 것보다 적은 CPU를 사용합니다.

수백 명이 동시에 접속하고 마커 생성 활동이 많은 페이지의 경우 시스템은 개별 클라이언트 연결에 영향을 주지 않으면서 성능을 유지하도록 수평적으로 확장됩니다.

Collaborative Use Cases

실시간 동기화는 Image Chat을 공동 작업 워크플로에 특히 강력하게 만듭니다. 디자인 팀은 모두가 마커 배치를 실시간으로 보면서 목업을 함께 검토할 수 있습니다. 고객 지원 팀은 문제를 식별하기 위해 스크린샷에 공동으로 주석을 달 수 있습니다. 교육 그룹은 모든 참가자가 생성되는 각자의 마커를 보면서 다이어그램을 토론할 수 있습니다.

즉각적인 피드백은 사용자가 업데이트를 보기 위해 새로 고침해야 하는 전통적인 댓글 시스템에 비해 더 몰입감 있고 생산적인 협업 경험을 만듭니다.

질문 있으신가요?

FastComments Image Chat에 대한 설명은 여기까지입니다! 질문이 있거나 구현에 도움이 필요하거나 기능 제안이 있으시면 아래에 알려주시거나 지원팀에 연락해 주세요.

실제로 동작하는 Image Chat을 보려면 데모 페이지의 라이브 데모를 확인하세요.