한동안 모니터링 웹사이트 하나만 띄워 두기엔 아깝다는 라즈베리파이 5(8GB) 한 대가 생겼습니다. 거기에 7인치 터치 LCD까지 붙어 있어서, 창 하나 켜 두기엔 정말 아깝다는 생각이 들었습니다. 그래서 GPU 사용량, LLM 사용량, 에어컨 제어, 오늘 일정, 날씨를 한 화면에 몰아넣은 '연구실 모니터'를 만들어 봤습니다. 스크롤 한 번 없이, 터치로 바로 보고 조작하는 화면입니다.

왜 벽에 걸 웹 하나를 새로 만들었나
각 서버마다 모니터링 페이지가 이미 있습니다. 하지만 그 화면을 켜 놓으려면 새 탭을 열고 스크롤을 내려야 합니다. 서버실(연구실)에 걸어 두고 터치로 바로 보고 조작하려면, 스크롤 없이 한 화면에 다 들어오는 페이지가 필요했습니다. 처음엔 기존 페이지를 iframe으로 붙여 넣을까 생각했는데, 그러면 각 페이지가 제각각 스크롤되고 폰트도 달라집니다. 창을 여러 개 붙여 놓으면 창틀이 서로 다르고 방마다 문이 따로 있는 그런 느낌입니다. 결국 데이터를 직접 받아와 하나의 커스텀 페이지로 만드는 방향을 택했습니다.
라즈베리파이가 직접 끌어오는 스탠드얼론 구조
데이터 수집을 다른 머신에 맡길까도 고민했습니다. 하지만 라즈베리파이 자체가 직접 수집하는 쪽이 맞다고 봤습니다. 테일스케일을 붙여 각 GPU 노드와 LLM 프록시에 직접 접근하고, 라즈베리파이가 모든 지표를 모아 서빙합니다. 중간에 다른 머신을 끼우면, 배달을 전문으로 하는 사람을 하나 더 두는 것과 같습니다. 그 중간 사람이 감당할 부담이 생기고, 그 사람이 어긋나면 전달이 통째로 옆으로 새니 한 몸으로 처리하는 편이 안전합니다. 게다가 대시보드는 결국 라즈베리파이가 고장 나면 그걸로 끝이기 때문에, 한 몸에 다 들어간 스탠드얼론이 오히려 깔끔합니다.
화면 구성
화면은 좌측(모니터링)과 우측(제어)으로 나눴습니다.
좌측 먼저, GPU 4대를 한 줄로 묶었습니다. 두 개의 엣지 vLLM 노드, A6000, 그리고 워크스테이션(PRO 6000)입니다. 각 GPU의 부하 %와 온도, 그리고 딸려온 막대를 보여줍니다. 워크스테이션은 GPU 2장이라 한 칸에 0 / 98 %처럼 두 장치 값을 /로 표시하고, 막대도 반반으로 나눠 보여줍니다. 엣지 vLLM 지표는 요청, tok/s, KV, TTFT, 연결 클라이언트 이렇게 5박스로 잡았습니다. LLM 사용량은 리모트 서버의 사용량 대시보드에서 오늘 요청, 토큰, 비용, 캐시, 오류를 받아옵니다. 누적량이 아니라 오늘 기준이라 지금 상황이 정확히 보입니다. 어제까지의 누적이 아니라, 오늘 밥 먹은 것만 세는 계산서 같은 형태라서 지금 직면한 상황을 바로 파악할 수 있습니다.
우측은 제어구간입니다. 실내온도(센서), 에어컨 켜기/끄기, 자동제어 ON/OFF, TV 전원. 터치 한 번으로 에어컨을 켜고 끌 수 있습니다. 헤더에는 오늘 일정을 캘린더별 색 점과 시간, 제목으로 3×2로 띄웠고, 날씨는 순천향대와 지역 두 곳. 시계와 시간대별 인사말도 넣었습니다.
만들면서 겪은 일
가장 큰 수정은 iframe을 버린 일입니다. 각 사이트를 iframe으로 붙이니 스크롤과 폰트가 제각각이었습니다. 데이터를 직접 받아 커스텀 페이지로 만드니 훨씬 깔끔해졌습니다.
다음은 모니터링 프로세스가 같이 죽는 함정입니다. 대시보드가 쓰는 모니터링 서버가 웹 서비스의 자식 프로세스로 돌고 있어서, 웹 서비스를 재시작할 때 함께 죽었습니다. 부모가 문을 닫으면 자식이 같이 나가는 그런 구조였습니다. 그래서 그 모니터링 서버를 독립 서비스로 분리했습니다. 한 번 겪으니 다음부터는 안 죽습니다.
마지막으로 이모지가 네모로 보이는 문제가 있었습니다. 터치 LCD의 브라우저에 이모지 폰트가 없어서 ☀️가 □로 보였습니다. 폰트를 설치하니 살아났습니다.
한계와 다음 계획
아직 아쉬운 점도 있습니다. 실내온도 센서가 가끔 null로 들어오는데, 센서가 읽지 못하는 순간이 있어서 그때는 -로 표시합니다. 센서 폴링 쪽을 더 튼튼하게 다듬을 예정입니다. 일정이 많아지면 달력 6개가 한계입니다. 오늘 일정이 많아지면 6개까지만 보여주고 나머지는 생략하는데, '더 보기' 같은 확장은 아직 안 붙였습니다. 에어컨 제어는 IR로 하는데, 실제 작동 검증은 코드와 시나리오별로 조금 더 다듬을 필요가 있습니다.
그래도 요즘은 연구실에 들어가면 이 화면을 먼저 보게 됩니다. 에어컨은 켜져 있는지, GPU는 잘 돌고 있는지, 오늘 일정은 어떻게 되는지 한눈에 들어오니까요. 바쁠 땐 터치 한 번으로 해결되는 게 참 편합니다. 앞으로 센서와 IR 검증을 마무리해서, 정말로 '관리자 한 명' 대신일 수 있도록 다듬어 보려고 합니다.
'공부 > 인공지능' 카테고리의 다른 글
| 27B 로컬 LLM을 vLLM → llama.cpp로 갈아끼우며 동시성·속도 끌어올리기 (0) | 2026.09.09 |
|---|---|
| 빈 출력은 벤치 오류였습니다 — DS Vision-Exp 2×Spark 정착기 (속도 1.7배 + 유일한 JSON 통과) (0) | 2026.09.06 |
| thinking 기본값 xhigh의 세금 — 17배 태우고 같은 오답을 냈다 (GB10 듀얼 실측) (0) | 2026.09.03 |
| LLM 에이전트 메모리가 꽉 찼다 — 4계층 구조로 풀기까지 (0) | 2026.09.01 |
| DGX Spark 2대, 1M 컨텍스트 도전기 2. (부팅은 정복, 1M은 여전히 벽) (0) | 2026.08.29 |