-
Blazor 서버에서 하지 말아야 하는 것 - 1칼럼 2025. 1. 7. 17:24
근래에 블레이저 서버로 사이트 개발할 일이 있어 개발 중 고민했던 사항에 대한 정리이다.
케이스는 아래와 같다.
1. 일정 시간 동안 측정된 데이터를 다운로드하여야 한다.
2. 일정 시간에 제한은 없다.
3. 따라서, 해당 데이터의 파일이 어느 정도 크기일지 알 수 없다.
구현한 케이스는 아래와 같다.
1. string[]를 byte64로 변환하여 javascript link로 download 하는 방식
2. byte[]를 javascript link로 download 하는 방식
3. file writer를 사용하여 직접 다운로드 하는 방식
4. api로 filedownload 구현 후 link로 처리하는 방식
1번 2번 케이스는 서버 랜더링이므로 서버측 데이터가 가공 후 해석된 마크업을 생성해서 처리하는데 용량이 클 경우 브라우저 성능에 영향이 크다. (느려지거나 다운로드 탭이 멈추는 현상...)
3번 케이스도 동일하게 매우 느리고 서버측 부하로 서버가 다운되는 현상이 발생했다.
(200mb 파일을 처리할 경우 서버 메모리 상에서 1GB 가까이 소모한다.)
4번 케이스가 가장 깔끔하게 처리된다.
웹 개발에서 대부분 4번 케이스이지만 blazor 서버를 사용해서 개발하는 경우 3번 케이스가 가장 쉬운 개발 방법이다.
하지만, 성능과 메모리 소비율로 보면 1, 2, 3번 케이스 모두 적합하지 않다.
따라서, 블레이저 서버로 개발하더라도 대용량 파일에 대한 download처리는 api로 구현하는 것을 추천한다.
추가적으로 시계열 데이터라던지 대용량 데이터를 다루고자 할 때 kafka를 이용하는 것을 추천한다.
수집하는 데이터에 이벤트가 있다면 api나 web socket를 사용하여 종료를 수신받고 이후에 kafka를 이용하여 데이터 가공 후 S3나 Blob 스토리지에 업로드한 후 해당 파일을 링크로 다운로드하는 것이 가장 최선의 방법이 되겠다.
'칼럼' 카테고리의 다른 글
MCP를 해보며 느낀 철학적 통찰 (0) 2025.03.28 AI 환불처리감시 시스템에 대한 개인적인 생각 (0) 2025.03.11 이벤트는 집계인가, 기록인가? (0) 2024.11.12 길이 아닌 곳에서 길을 찾지 마세요. (0) 2024.03.06 좋은 관리자 UI란? (0) 2024.02.27