Windows 서버에서 FastAPI 자동 실행 시 발생한 서비스 오류 대응기
·
개발 일상
상황회사 업무로 특정 사이트에 특정 시스템 구축을 해줘야 하는 상황이었다.제반 환경* 배포 환경(서버 os): Windows 2022 Server* 개발 환경(내 os): ubuntu 22.04 lts* python을 이용한 FastAPI 서버 구축* 해당 서버는 특정 클라이언트들에서 감지한 정보를 서버의 특정 경로(static 폴더)로 수집한다Ubuntu 개발 환경에서 구축한 FastAPI 서버를 Windows Server 2022 환경에 배포하고, 해당 서버가 자동으로 실행되도록 커스텀 서비스화(nssm 이용)하여 구축하였다.하지만 배포 후 자동 실행이 되지 않는 문제가 발생했고, 오류 로그도 남지 않아 디버깅이 어려웠다.아래는 static 경로 문제, 인코딩 문제, Windows 서비스 실행 특성 ..
YOLO 객체 감지 후 위험 영역 판단 로직 개선기
·
개발 일상
회사에서 개발 중인 AI 기반 안전 설비 시스템의 백엔드(python) 로직을 개선했다.카메라 영상에서 사람을 감지하고 사람이 설정한 위험 구역에 진입했는지를 판단해서 실시간으로 설비를 제어하는 시스템이다.기존 방식 이슈YOLO를 통해 사람을 감지하면 [x1, y1, x2, y2] 형태의 bbox 좌표가 얻어진다.이 좌표를 기반으로 DB에 저장된(설정한) ROI(위험 구역) 다각형과의 겹침 여부를 판단하는데기존의 코드를 분석하니 기존에는 bbox의 하단선(bottom)만 사용하는 방식이였고, 현장에서 개선사항이 발생해 판단 로직을 수정하게 되었다.bbox_matrix = LineString([(x1, y2), (x2, y2)])위와 같은 경우 객체의 하단면이 위험 구역에 닿지 않으면 위험으로 판정되지 않..
[python] data.dict() vs jsonable_encoder(). 그리고 datetime 쿼리 삽질기
·
개발 일상
문제 상황MongoDB에 저장된 데이터를 기간별로 가공해서 출력해주는 코드를 만들다가 이상한 점을 하나 발견했다.createdAt 같은 날짜/시간 필드가 문자열(string)로 저장돼 있던 것.처음엔 model에서 datetime으로 지정했으니까 당연히 datetime으로 들어갔을 거라 생각했는데, 막상 DB를 까보니까 "2024-01-01T12:00:00"처럼 string으로 저장되어 있던 것을 깨달았다.그래서 코드 전체를 훑기 시작했다.DTO, Model엔 분명히 datetime 타입으로 잘 들어가 있었고, 이상 없어 보였다.그런데 문제는 라우터 코드였다.라우터에서 데이터를 서비스 쪽으로 넘기기 전에 jsonable_encoder(data)로 한번 감싸고 있었는데, 이게 문제의 시작이었다.jsonab..
MongoDB Aggregation을 활용한 통계 API 구현(python)
·
개발 일상
상황회사 업무 중에 다른 통합 서비스와의 연동을 위해 내가 개발 중인 특정 시스템 백엔드에서 통계 기능을 API 형태로 제공해야 하는 상황이 발생했다. 이 기능은 일일, 주간, 월간 현황 등 다양한 기간별 통계를 제공해야 했고, 데이터베이스는 MongoDB를 사용하고 있었다. 이를 위해 MongoDB의 Aggregation Pipeline을 활용하여 데이터를 가공하였고, 특히 시간대(timezone) 처리에 주의를 기울였다.1. 데이터 저장 시 시간대 처리MongoDB는 기본적으로 날짜 데이터를 UTC 기준으로 저장한다. 따라서 한국 시간(KST)으로 입력된 날짜도 내부적으로는 UTC로 변환되어 저장된다. 예를 들어, 한국 시간으로 2025-05-21T15:47:52에 저장된 데이터는 MongoDB에서는..