수집·집계 주기
확인 작업으로 단축
내부망 순찰 앱 완성
01 · ABOUT
모르는 기술보다
풀리지 않은 문제가
더 불편합니다.
신입으로 입사해 처음 맡은 BEMS 프로젝트에서 백엔드 개발자는 저 혼자였습니다. 15분마다 계측 데이터를 모으고 집계하는 시스템이 며칠 뒤 멈추는 문제부터 해결해야 했습니다.
누구에게 답을 받을 수 없는 상황이라 로그를 남기고, 데이터가 들어오는 순간부터 저장되고 화면에 표시되는 과정까지 하나씩 나눠 확인했습니다. 데이터를 chunk와 bulk 단위로 처리하도록 바꾸고, 작은 팀이 운영하기에는 무거웠던 구성을 단순화했습니다.
그 뒤로 Flutter, 내부망, Oracle, RTSP, Serial, Modbus TCP처럼 처음 접하는 환경을 여러 번 만났습니다. 그때마다 필요한 만큼 빠르게 공부하고, 장비·DB·API·화면 사이의 연결을 직접 확인하는 방식으로 작업해 왔습니다.
“어떤 언어를 사용했는가”보다
“문제를 어디까지 추적해 해결했는가”를 경력의 기준으로 삼습니다.
02 · WORK EXPERIENCE
서로 다른 현장,
하나의 문제 해결 방식
멈추던 수집 시스템을 운영 가능한 구조로
15분마다 쌓이는 데이터를
끝까지 버티게 만들었습니다.
수만 개의 계측 포인트에서 전기·가스·태양광 데이터를 받아 Present Value에는 원시값을 저장하고, PVQ·PVH·PVD·PVM·PVY에는 시간 단위별 집계값을 생성하는 백그라운드 로직을 구현했습니다.
- 문제 며칠간 데이터가 누적되면 MongoDB가 멈추고 화면 조회도 느려지는 현상
- 판단 한 번에 처리하는 데이터량과 작은 팀에 비해 복잡한 운영 구성을 함께 줄일 필요
- 실행 chunk·bulk 처리와 insertMany 적용, DB 마이그레이션, Airflow DAG를 cron 기반으로 단순화
- 화면 넓은 기간은 요약 데이터로 보여주고 ECharts 줌 이벤트에서 상세 데이터를 불러오도록 개선
운영 기간 동안 기존 DB 중단 현상이 다시 발생하지 않았고, 대량 조회 시 화면 멈춤을 줄였습니다.
계획이 없던 자동화를 현장 도구로
처음 배운 Flutter로
순찰 기록 시간을 줄였습니다.
금융기관 본점의 폐쇄망 환경에서 약 200개 순찰 위치를 QR로 확인하고, 위치별 점검 항목과 이상 내용을 Oracle에 기록하는 모바일 앱과 Flask API를 만들었습니다.
- 학습 담당할 사람이 없어 Dart와 Flutter를 약 1주간 익히고 한 달 안에 WebView 기반 앱 완성
- 연동 방재·전기·기계 팀별 요구에 맞춰 API를 분리하고 내부망 고정 IP 환경에서 통합 배포
- 장애 로그와 코드를 역추적해 반환되지 않던 Oracle 연결에 close 처리를 추가하고 지연 오류 완화
- 자동화 월별 이상 여부를 기존 Excel 양식에 O/X로 채우는 GUI·PyInstaller 실행 파일 제안 및 구현
매일 30~60분 걸리던 수기 정리를 5분 이내의 전송 확인으로 줄였고, 월말 보고서는 두세 번의 클릭으로 생성하도록 바꿨습니다.
문서가 부족한 현장에서 패킷부터 확인
경보 신호와 CCTV 화면을
하나의 흐름으로 연결했습니다.
서로 다른 두 현장에 단독 파견되어 RTSP CCTV 스트리밍과 소방·열화상 경보를 연동했습니다. 평상시 4분할 화면에서 경보가 발생한 카메라를 전체 화면으로 전환하고, 복구 후 기존 화면으로 돌아가도록 구현했습니다.
- 레거시 Serial 기존 SI 서버를 유지한 채 분배기로 데이터를 함께 수신하고 USB-RS-485 원시 패킷을 분석해 파서 작성
- Modbus TCP 소방 업체 기술지원팀과 통화하며 Modbus Poll로 주소와 값을 직접 검증
- 화면 Python·PyQt5·VLC로 RTSP 재생, 경보 전환, 재연결, 중복 방지, 메모리 모니터링 구현
- 확장 엘리베이터·전기·조명·가스·태양광·지열·연료전지 설비를 Modbus TCP·BACnet·Socket·Serial로 연동
프로토콜 문서와 현장 지원이 충분하지 않은 상황에서도 신호를 직접 검증해 장비 데이터와 관제 화면 사이의 연결을 완성했습니다.
센서에서 알림과 대시보드까지
LoRaWAN 센서 데이터를
운영 화면까지 연결했습니다.
ChirpStack과 Dragino Gateway를 기반으로 온습도·전류·대기질 센서 데이터를 수신하고, MQTT 메시지의 payload를 설비 포인트별 계측값으로 변환했습니다.
- 수신 KR920 환경에서 센서와 Gateway를 연결하고 MQTT 기반 실시간 데이터 처리 구현
- 파싱 센서별 payload 형식을 분석해 point 단위로 분리하고 저장 구조에 맞게 변환
- 진단 Gateway 전환과 roaming 문제를 추적하고 ADR 설정과 현장 수신 상태 확인
- 활용 임계값 초과 알림과 ECharts 기반 계측 데이터 조회 화면 연결
무선 센서의 수신 상태부터 payload, DB 저장, 알림과 화면까지 이어지는 IoT 데이터 흐름을 직접 확인했습니다.
03 · TOOLBOX
필요한 기술을
문제에 맞춰
사용합니다.
Primary
Python · Flask · MongoDB · Oracle · REST API · Batch Processing
Applied in Products
Java · Flutter/Dart · PyQt5 · JavaScript · ECharts · FastAPI · PostgreSQL
Integration & Protocol
Modbus TCP/RTU · BACnet · RS-485/Serial · TCP Socket · RTSP · MQTT · LoRaWAN · ChirpStack
Delivery & Operations
Docker · cron · Git · Cloudflare Workers · Vercel · Render · PyInstaller
04 · SELECTED PROJECTS
업무 밖에서도
서비스를 끝까지
만들어 봅니다.
성과를 꾸미기보다 기획, 설계, 배포와 운영 과정에서 실제로 고민한 내용을 기록했습니다.
Unity Smart Factory Monitor
설비 데이터를 수집해 3D 관제 화면과 이력 API로 연결한 스마트 팩토리 PoC
가상 PLC의 Register 9개를 Modbus TCP로 수집해 MQTT로 발행하고, Unity에서 생산동과 설비 상태를 실시간으로 표시했습니다. FastAPI·SQLite로 센서 이력, 알람, KPI 조회 API를 구성했으며 Docker Compose로 전체 서비스를 실행할 수 있게 만들었습니다.
LIVE
혼밤
술을 마시지 않은 밤을 기록하고 서로 응원하는 절주 커뮤니티
OAuth 로그인, 일회성 티켓, WebSocket 채팅, 신고·차단·rate limiting, 통계·데이터 내보내기까지 서비스 운영에 필요한 흐름을 직접 설계했습니다.
LIVE
양도마니
공연 정보를 수집하고 중복 없이 갱신하는 티켓 양도 서비스
KOPIS XML을 페이지 단위로 수집하고 timeout·throttling·중복 제거·upsert를 적용해 공연 상태와 박스오피스 순위를 관리했습니다.
LIVE
이인용식탁
지도에서 식당을 고르고 함께 먹을 사람을 모집하는 서비스
Kakao Maps·Places와 위치 정보를 연결하고 모집·신청·수락·채팅·마감·삭제 흐름을 Cloudflare Workers와 D1으로 구현했습니다.
로컬 문서 RAG
PDF·TXT 문서를 문장 단위로 나누고 FAISS와 BM25 결과를 RRF로 결합한 뒤 CrossEncoder로 재정렬했습니다. 근거 문장을 함께 보여주도록 설계했습니다.
스피또 데이터 수집기
동적 슬라이드와 여러 페이지의 당첨 데이터를 Selenium과 BeautifulSoup으로 수집하고, 중복 제거 후 Excel로 저장하는 GUI 실행 파일을 만들었습니다.
05 · CONTACT
함께 일할 기회를
찾고 있습니다.
백엔드와 시스템 연동을 중심으로, 제품과 현장의 문제를 직접 해결할 수 있는 소프트웨어 엔지니어 역할을 찾고 있습니다. 새로운 기술과 도메인에도 열려 있습니다.