본문 바로가기

분류 전체보기34

TypeORM 오류, Cannot perform update query because update values are not defined 개요 서비스에 토스 페이먼츠를 붙이며 겸사겸사 기존 결제 로직을 손보고 있던 어느날.. 처음 보는 에러가 발생했다. Cannot perform update query because update values are not defined (업데이트 값이 정의되어 있지 않아, 업데이트 쿼리를 수행할 수 없습니다) 어느 부분에서 발생했는지, 코드를 통해 알아보자. 코드 async payment(transactionId: string): Promise { const payment = await this.paymentRepository.findOne({ transactionId }); let tossPayments: any; switch (payment.type) { // ... case "tossPayments".. 2023. 6. 23.
로컬 캐시(Local Cache)에서 글로벌 캐시(Global Cache)로 개요 현재 운영중인 서버에서, 전체 상품 리스트를 로컬 캐시에 넣어 사용하고 있다. 이 로컬 캐시는 어드민 페이지에서 상품을 수정하고, 캐시 업데이트 버튼을 누르면 갱신할 수 있다 (별도의 캐시 만료기간이 정해져 있지 않다) 그런데, 로컬 캐시 사용에 자잘한 문제점이 있다고 판단되어 글로벌 캐시로 마이그레이션하려고 한다. 판단 근거는 아래와 같다. 메모리 전체 상품 개수가 증가할수록 로컬 캐시가 차지하는 메모리의 양도 증가한다. 메모리는 서버의 스펙, 즉 비용과 직결되기 때문에 미래를 보면 글로벌 캐시를 사용하는게 더 효율적이다. 속도 로컬 캐시는 네트워크 통신을 거치지 않고 메모리에서 바로 데이터를 읽어오기 때문에 글로벌 캐시보다 처리 속도가 더 빠르다. 하지만 이미 프로젝트 내에서 사용중인 글로벌 캐.. 2023. 6. 4.
[Node.js] package.json과 캐럿/눈웃음(^)의 의미 개요 Node.js 프로젝트를 진행하면 항상 package.json 파일을 마주하게 된다. package.json 파일은 보통 아래와 같은 정보를 포함하고 있다. 프로젝트의 정보(이름, 버전, 개발자 등..) 커스텀 명령어 프로젝트가 의존하고 있는 패키지들의 정보 이정도면 package.json은 그냥 하나의 문서라고 부르는게 더 맞는 것 같다. 아무튼 프로젝트를 진행하다가.. package.json 문서에는 typeorm: "^0.2.32"로 되어 있는데 실제로는 0.2.45 버전이 설치되어 있어서, 뭐지? 하고 찾아보다가 눈웃음(^) 문자의 역할에 대해 알게되었다. 버전 우선 버전 형식에 대해 간단히 알아보자. 보통 각종 npm 모듈들의 버전은 x.x.x 형식으로 되어 있는걸 볼 수 있는데, 각 자리.. 2022. 9. 27.
PostgreSQL integer out of range 장애 대응기 개요 평화로운 날, 서비스에서 장애가 발생했다는 슬랙 제보를 받았다. 간단한 CS건이려니..하고 메시지를 읽었는데, 서비스 이용 자체가 불가능할 정도의 심각한 상황이었다(메인 기능인 채팅이 되지 않음...) 오류 로그를 확인해보려는 찰나에, 웹 클라이언트 개발자분께서 서버로부터 내려오는 에러 메시지를 공유해주셨다(훌륭) 무엇인가 하고 보니... integer out of range 처음 보는 에러였지만 간단명료해서 쉽게 의미를 파악할 수 있었다, integer의 범위를 벗어났습니다..! 3초간 뭐지? 하다가 과거 뉴스로 보았던 서비스 장애 사례가 떠올랐다. ㅋㅍ이었는지 11ㅂㄱ였는지는 자세히 기억나지 않지만, 한 이커머스 서비스에서 데이터베이스 상품 테이블에 등록되어 있는 상품의 수가 INTEGER타입의.. 2022. 7. 17.