현재 진행하고 있는 코드잇 스프린트의 초급 프로젝트 View My Startup 에서
발생한 장애 상황에 대한 트러블 슈팅입니다😃
본 프로젝트에 대해 간단하게 설명하자면,
사용자가 특정 스타트업을 선택하여 기업의 누적 투자 금액, 매출액 등의
기업 스펙을 확인하고 비교하며,
가상으로 투자를 해볼 수 있는 MVP 웹 서비스입니다.
현재 백엔드는 Node.js + Express 기반으로, DB는 PostgreSql + Prisma를 사용하여 구축하고 있습니다.
🚨 문제 상황
본 서비스는 스타트업의 상세 페이지를 통해 기업의 스펙을 제공합니다.
또한, 해당 기업에 가상으로 투자한 사람들의 목록을 투자금액을 기준으로 정렬하여 보여주는 기능이 존재합니다.
가상 투자 스키마 VirtualInvestment의 설계는 다음과 같습니다.

위의 가상 투자 테이블은 가상 투자의 id, 스타트업의 id, 투자자의 이름, 투자 금액, 투자 코멘트, 비밀번호, 생성/수정 날짜 및 시간 컬럼으로 이루어져있습니다.
이중에서 amount 컬럼은 BigInt로 설정되어 있는데,
이는 가상 투자 금액의 단위가 억 원대이기에 큰 규모의 숫자를 저장하고 처리하기 위함이었습니다.
한편, 투자 금액을 기준으로 순위를 정하는 기능을 구현하기 위해 startupService.js에 다음과 같은 로직을 작성했습니다.
const formattedInvestments = investments.map((i, index) => ({
id: i.id,
investorName: i.investor_name,
amount: i.amount,
comment: i.comment,
rank: skip + index + 1,
}));
문제가 되었던 코드는 위와 같습니다.
비즈니스 로직을 완성한 후 REST Client를 이용해 HTTP 요청을 보냈으나, 다음과 같은 에러가 발생했습니다.
TypeError: Do not know how to serialize a BigInt
at JSON.stringify (<anonymous>)
at stringify (C:\SprintProject\13-ViewMyStartup-4team-BE\node_modules\express\lib\response.js:1034:12)
at ServerResponse.json (C:\SprintProject\13-ViewMyStartup-4team-BE\node_modules\express\lib\response.js:245:14)
at file:///C:/SprintProject/13-ViewMyStartup-4team-BE/src/controllers/startupController.js:17:19
at async file:///C:/SprintProject/13-ViewMyStartup-4team-BE/src/utils/asyncHandler.js:7:7
위 에러는 BigInt를 어떻게 직렬화(Serialize)해야 할지 알 수 없다는 TypeError 였습니다.
기본적으로 JSON 표준 규격은 BigInt 타입을 지원하지 않기 때문에, JSON.stringify()가 BigInt를 인식하지 못합니다.
💡직렬화: 객체를 JSON 문자열로 변환하는 과정
🛠️ 문제 해결
"아! 그렇다면 BigInt를 변환하면 되는 거 아닐까? "
해결 방법은 정말 간단했습니다.toString()을 사용하여 BigInt 타입인 amount를 문자열로 변환하여 직렬화시키면 해결됩니다!
외에도 Number()을 이용하는 방법이 있겠지만,
Number 타입은 매우 큰 정수에서 정밀도 손실이 발생할 수 있는 우려가 존재하기에 데이터의 확장성(투자 금액의 총합의 숫자 단위가 매우 커질 것에 대비하여)을 고려해서string으로 변환하여 처리하는 방식을 택했습니다.
const formattedInvestments = investments.map((i, index) => ({
id: i.id,
investorName: i.investor_name,
amount: i.amount.toString(), //BigInt를 문자열로 변환
comment: i.comment,
rank: skip + index + 1,
}));
🤔 느낀 점
웹 개발을 하며 정말 다양한 언어, 프레임워크, 라이브러리를 접하고 있는데
각 도구들마다 가진 각기 다른 규칙과 특징을 경험하고 있습니다.
개발은 다양한 도구들을 접해보는 경험이 중요하다고 생각합니다!
데이터타입과 같은 요소들이 각기 다른 환경에서 어떻게 처리되는지 접해보고 경험해보는 것이 아주 중요함을 깨달을 수 있는 좋은 기회였습니다!
참고:
🔗stack overflow - TypeError: Do not know how to serialize a BigInt
🔗mdn - Number
🔗velog - JSON 직렬화와 역직렬화 개념 정리
'개발 > 🛠️ 트러블슈팅' 카테고리의 다른 글
| Next.js 서버 액션 사용 시 발생한 데이터 직렬화 불일치 문제 (0) | 2026.06.29 |
|---|---|
| DELETE 요청의 응답 - 200 vs 204 (0) | 2026.05.31 |
