애니메이티드 빔

Animated beam

두 노드를 잇는 연결선 위로 밝은 점이 흐르듯 이동해서 "데이터가 오가고 있다"는 인상을 주는 다이어그램 장식.

다른 이름: Connector pulseFlowing connection line
···
html
<svg viewBox="0 0 320 160" width="100%" height="100%" preserveAspectRatio="xMidYMid meet">
  <path id="p1" d="M40,40 C110,40 110,80 160,80 C210,80 210,120 280,120" fill="none" stroke="var(--line)" stroke-width="2"/>
  <path id="b1" d="M40,40 C110,40 110,80 160,80 C210,80 210,120 280,120" fill="none" stroke="var(--accent)" stroke-width="2.5" stroke-linecap="round" stroke-dasharray="8 40"/>
  <path id="p2" d="M40,120 C110,120 110,80 160,80 C210,80 210,40 280,40" fill="none" stroke="var(--line)" stroke-width="2"/>
  <path id="b2" d="M40,120 C110,120 110,80 160,80 C210,80 210,40 280,40" fill="none" stroke="var(--accent-2)" stroke-width="2.5" stroke-linecap="round" stroke-dasharray="8 40"/>
  <circle cx="40" cy="40" r="9" fill="var(--surface)" stroke="var(--line)" stroke-width="2"/>
  <circle cx="40" cy="120" r="9" fill="var(--surface)" stroke="var(--line)" stroke-width="2"/>
  <circle cx="160" cy="80" r="12" fill="var(--accent)"/>
  <circle cx="280" cy="40" r="9" fill="var(--surface)" stroke="var(--line)" stroke-width="2"/>
  <circle cx="280" cy="120" r="9" fill="var(--surface)" stroke="var(--line)" stroke-width="2"/>
</svg>
css
svg{width:min(340px,92%);height:auto}
#b1{animation:flow 2.2s linear infinite}
#b2{animation:flow 2.2s linear infinite 1.1s}
@keyframes flow{to{stroke-dashoffset:-480}}

SVG path로 두 노드 사이 곡선을 그리고, 그 위에 같은 경로를 따라가는 stroke만 다른 두 번째 path를 겹칩니다. 두 번째 path의 stroke-dasharray를 "짧은 선 + 짧은 여백"을 일정 간격으로 반복하도록 설정하고 stroke-dashoffset을 계속 움직이면, 짧은 선 여러 개가 줄지어 경로를 따라 흘러가는 것처럼 보입니다.

경로 자체는 정적이고 옅은 색으로 항상 보이게 두고, 그 위를 지나가는 짧은 선(빔)만 밝은 accent 색과 약간의 blur로 강조합니다. 노드가 여러 개면 각 연결선마다 dashoffset 애니메이션의 시작 지연을 다르게 줘서 모든 빔이 동시에 출발하지 않게 합니다.

연동(Integration) 다이어그램, 아키텍처 소개 섹션에서 "이 서비스들이 실시간으로 연결돼 있다"는 걸 정적인 선보다 훨씬 직관적으로 전달합니다.

언제 쓰나

제품 연동 소개, 아키텍처 다이어그램, "여러 도구가 하나로 모인다"는 랜딩 섹션에 씁니다. 빔이 너무 많으면 오히려 어디를 봐야 할지 헷갈리니 핵심 연결선 2~3개에만 쓰세요.