FE System Design - Financial Dashboard
Process
- 1.요구사항 분석, 기능/비기능 요구사항
- 2.UI 레이아웃 설계
- 3.컴포넌트 설계
- 4.상태관리 설계
- 5.API Interface 설계, 프로토콜 정립
- 6.멀티윈도우 설계
Requirements
Product Requirements:
- Dashboard should support multiple resizable charts
 
- Data can come from different data-sources
 
- Each-chart on the dashboard can have a different data-model, however the model that comes from the server is a generic
 
- You can add same charts multiple times and synchronize them using different parameters:
 - ticker
- timeframe
 
Non-product requirements:
- Network performance. Although, we expect that we have a good network connect, it would be great to understand how to optimize efficiency
 
- Rendering Stability. When we change the parameters of the data, can we still display a partial chart, while fetching a new chunk of data
 
- Legacy API. We need to implement architecture that would support any underlying API as long as it follows a data-format we establish
 
Layout Design
핵심 컨셉 : 샌드위치 디자인
3중 레이어로 구조를 잡는다.
- Grid Container : N*N개의 셀을 담는 컨테이너, 이벤트 위임을 담당한다.
- Cell Grid : 좌표를 담당하며 데이터는 어트리뷰트로 가진다.
- Chart Layer : 실제 그러지는 차트 컨테이너 이다.
- 부모 컨테이너 요소와 자식 요소가 64개 이상 많을때 이벤트 핸들러를 자식에 계속 추가하는것은 성능상 좋지않다.
- 이벤트 루프에 많은 이벤트 핸들러가 등록되었으니 느려질 수 있다. 이벤트 버블링을 이용해서 감지하자.
상태관리 설계
핵심 컨셉 : 버켓팅, IndexDB, 다운 샘플링, 업샘플링
- IndexDB는 유일하게 브라우저의 데이터를 하드디스크에 저장할 수 있는 수단이다.
- 시계열 데이터를 버킷(파티션 형태)으로 관리한다.
다운 샘플링
- 5분 짜리 캔들의 버킷 데이터 12개로 1시간짜리 캔들을 만들 수 있다.
- 네트워크 요청없이 자체적으로 계산 가능하다.
- CPU I/O vs 네트워크 I/O 중 더 효과적인것으로 택한다.
공간복잡도 계산
- asset_id 8 bytes 자산(종목)을 식별하는 고유 ID (예: 64비트 정수)
- open, close 8 bytes 시가(Open) 4 bytes, 종가(Close) 4 bytes. (아마도 부동소수점 Float32를 가정)
- bucket 4 bytes 캔들의 타임스탬프 또는 버켓 ID (예: 32비트 정수/초 단위 UNIX Time)
- timeframe	2 chars = 2 bytes	시간 간격(예: "1m", "5m", "1h")을 저장하는 문자열
 총 기본 레코드 크기 22 bytes (8 + 8 + 4 + 2)
해석 1: 1초(Second) 데이터 기준 (최대 1일)
- 86400: 하루(1일)는 24시간 × 60분 × 60초 = 86,400초입니다.
- 8 bytes: 만약 각 1초마다 8 bytes 크기의 데이터(예: 종가만)를 저장한다고 가정하면,
- 1일 저장 공간=86400×8 bytes≈0.7 MB
해석 2: 1년치 저장 공간 (원시 1초 데이터 기준)
- 365: 1년(365일)을 가정하여 위의 1일 저장 공간을 곱합니다.
- 1년 저장 공간=0.7 MB×365≈255 MB
네트워크 API 설계
프로토콜 장단점 비교
Websockets
- Pros : Real-time communication, Binary data 지원, Dual communication (양방향)
- Cons : Eng complexity (직렬화, 에러 핸들링, 상태 관리의 복잡성)
SSE (Server-Sent Events)
- Pros : HTTP/2 기반, Stateless (상태 없음), Reconnecting and error handling comes out of the box (재연결/에러 처리 기본 지원), Multiplexing (다중화 용이), Easy to scale and use (확장 용이 및 사용 편리)
- Cons : Slower than Web-sockets (Websocket보다 느릴 수 있음), Text-data 기반 (이진 데이터 처리에 불리), Mono-channel (단방향)
HTTP Streaming
- Pros : Binary data 지원, Benefits from HTTP/2 (HTTP/2의 장점 활용)
- Cons : Pretty slow (TCP) (상대적으로 느림), No frame marking (프레임 구분 어려움)
Web Transport
- Pros : UDP 기반 / QUIC / SRTT (더 빠른 프로토콜 활용), Faster the web-sockets (Websocket보다 빠름), Binary data 및 데이터 프레이밍 지원
- Cons : Limited browser & server support (브라우저/서버 지원이 제한적)
데이터 인코딩 최적화 (Protobuf)
- Protobuf (Protocol Buffers): Google에서 개발한 언어 중립적, 플랫폼 중립적, 확장 가능한 직렬화 메커니즘입니다.
- 효과: JSON이나 XML 같은 텍스트 기반 인코딩 방식과 달리, Protobuf는 데이터를 바이너리(Binary) 형태로 인코딩하여 전송합니다. 이 때문에 데이터 크기가 훨씬 작아지고(압축 효율), 인코딩/디코딩 속도가 빠릅니다.
- Protobuf를 사용할 경우, JSON 같은 일반적인 텍스트 기반 인코딩에 비해 데이터 크기가 6~8배 정도 작아지거나 혹은 처리 속도가 6~8배 정도 빨라진다는 성능 개선 효과를 추정하는 것입니다. 금융 데이터처럼 대용량 시계열 데이터를 전송할 때 매우 중요한 최적화 요소입니다.
다중 창 지원, 멀티 윈도우 지원
- SSOF 구현, Index DB를 쓰는 창은 1개여야 한다.
- 메인 노드와 워커 노드를 구분해야한다. ( Local Storge를 통해 구분 )
- Broadcast Channel과 이벤트 시스템을 구현한다.  - Race Condition을 피하기 위해서 워커노드의 변경사항들은 메인노드에게 채널로 전송하여 데이터를 처리한다.
 
- 특히 논리적 오류(Logical Race Condition) 주의