Hello 👋

🧑🏻‍💻 A Developers who create code that changes the world

Database/MongoDB

[MongoDB] HTTP, gRPC ObjectId 타입 인식 문제

Potato_H 2025. 1. 8. 17:34

 

* MongoDB의 _id나 특정 키가 ObjectId 타입일 경우, 이를 문자열로 변환하지 않고 그대로 전송하면 클라이언트에서 처리할 수 없음

 

* 반대로 클라이언트에서 문자열로 보낸 값을 MongoDB 쿼리에서 ObjectId로 변환하지 않으면 쿼리 결과가 제대로 반환되지 않는 문제가 발생

 

데이터를 API로 주고받을 때, MongoDB 필드 중 ObjectId인 경우에는 서버/클라이언트에서 변환 처리를 명시적으로 해줘야함

 

이를 해결하기 위해, JSON 형식의 데이터를 처리할 때 _id 필드를 ObjectId 로 변환해주는 로직이 필요
def convert(value):
    if isinstance(value, dict):
        for key, item in value.items():
            if key == '_id' and isinstance(item, str):
                value['_id'] = ObjectId(value['_id'])

 

응답 데이터나 API 결과를 클라이언트로 반환할 때는 반대로 ObjectId를 문자열로 변환해야함
def convert(data):
    if isinstance(data, dict):
        for key, value in data.items():
            if key == '_id' and isinstance(value, ObjectId):
                data[key] = str(value)

 

 

REST API나 gRPC 등 클라이언트와 데이터 교환 시에는 _id 변환이 필수라고 보면 된다.
특히 FastAPI, Flask 등에서는 자동 변환되지 않기 때문에 직접 처리하는 게 안정적이다.