서로 다른 서버 간 MongoDB 컬렉션 데이터 마이그레이션(ubuntu)
·
개발 일상
상황특정 백엔드 서버의 추가 기능 개발을 위해 동일한 테스트 환경 구축 작업을 하며, MongoDB에서 특정 컬렉션만 복사해서 옮겨야 할 일이 생겼다이 경우, 써드파티 프로그램을 이용하는 방법도 있지만, 라이센스 이슈나 상업적 이용 이슈로 인해 CLI를 활용하는 것이 나을 수 있다.이번에는 mongodump, mongorestore 명령어를 이용해 서로 다른 서버에 위치한 MongoDB 간 컬렉션 복사를 진행하였다.작업 환경os: Ubuntu 22.04외부의 특정 원격 서버 A(특정 ip)테스트용 로컬 서버 B (localhost)목적서버 A에 있는 MongoDB의 특정 컬렉션을 로컬 서버 B로 동일하게 복사하되, 컬렉션 데이터와 메타데이터(bson + metadata.json)를 그대로 가져와야 한다...
[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에서는..
주기적인 MongoDB 서비스 Down 증상 해결
·
개발 일상
문제 발견최근에 사내에서 호스팅하는 서버 중 하나에 접근이 안되어서 서버를 확인해보니 해당 서버 내의 MongoDB 서버가 일정 주기로 다운되는 현상을 발견했다. 문제 원인을 찾기 위해서 mongodb 로그를 확인해보니 다음과 같은 에러 메시지가 있었다참고 환경: ubuntu 22.04 os# mongod.log의 최근 내역 확인sudo tail -n 100 /var/log/mongodb/mongod.log...Failed to write to interim file buffer for full-time diagnostic data capture: /var/lib/mongodb/diagnostic.data/metrics.interim.tempActual exception type: mongo::error..