본문 바로가기

회고/TIL

Postgres - Datatype

프로젝트를 진행중인 같은 팀원분의 에레를 핸들링하다가 알게된 사실!

 

MySQL에서 Postgresql 로 넘어오면서 당황한 것중 하나가 Datatype을 bigint 로 설정해주었을때 불러오는 값이

number 타입인지 string타입인지 에 대한것이었다.

 

상품 관리 엔티티에는 totalStock 이란 컬럼이 존재를 했고 타입을 bigint 로 준 상황.

상품의 정보를 find 메서드를 통해 가져와 보니 자꾸만 string 값을 반환을 해주어서 서비스 로직 처리했을때 원하는 결과값을 못얻어냈다.

 

유저가 물품 3개를 구매를 했다가 취소를 했다 가정을 했을때, 그럼 totalStock에는 + 3 이 되어져야 하는 로직이다.

근데 String 타입을 불러오는 바람에 현 재고가 30 개라 가정을 해보면

 

'33개' 가 아닌 '303개' 가 되어버리는 상황인 것.

 

Postgresql 관련 내용을 찾아보다 발견하게 된 내용이 있기에 첨부한다.

https://github.com/typeorm/typeorm/issues/873

특정 데이터 타입을 어떻게 주냐에 따라 반환되는 값을 알수있었는데,

이유를 들어보자면 bigint 같은 경우 당연히 숫자로 표현을 못하는 부분이 존재하기에 매우 큰 숫자의 경우 'e' 라는 글자를 붙여 표현이 되어지는데 이 값이 만약 숫자로 반환 된다 하면 당연히 에러가 발생될 것이다.

오버플로우를 방지 하기위해서 postgresql 에서는 이런식으로 안전망을 해둔것으로 여겨지는데

 

개인적으론 훨씬 안정적 요소가 될 수 있겠다 싶었다.

'회고 > TIL' 카테고리의 다른 글

webRTC - socket io  (0) 2023.09.06
DAU & WAU & MAU  (0) 2023.08.29
Redis - cache  (0) 2023.08.19
Sequelize - Scope  (0) 2023.08.02
Typescript - Generic  (0) 2023.07.28