전체 글
-
NestJs(Node) 환경에서 TossPayments Seller 코드 예제NestJs 2024. 12. 17. 00:24
개요 저희 회사에서는 결제/지급대행 기능을 TossPayments를 통해 구현 되어있습니다. 그런데 9월 즈음부터 새로 가입한 사업자들이 '개인사업자'가 아닌 '개인'으로 등록되고 있었습니다. 원인은 토스 API 변경! v1에서는 서브몰(submall)이라는 이름으로, v2에서는 셀러(seller)라는 이름으로 서비스가 제공되고 있습니다. v1에서는 '개인'을 '개인사업자'의 의미로 '개인', '법인'으로만 사용했으나v2에서는 '개인', '개인사업자', '법인'으로 '개인사업자' 코드가 추가 되었습니다. 이것 때문에 9월 이후 '개인'으로 등록된 셀러정보를 전부 삭제하고 다시 등록 했습니다. 기존 서브몰(v1)도 문제가 있던터라(데이터 삭제해도 같은 ID로 등록이 안됩니다. v2에서는 refSeller..
-
[이슈] 토스 페이먼츠 중복 결제NestJs 2024. 10. 30. 21:31
'고객소통' 채널에 앱 사용자가 청약몰 서비스를 이용하면서 결제가 두 번 되었다는 이슈가 공유되었습니다. 데이터를 확인해 본 결과 정말로 2번 결제가 되었네요..첫 번째 결제 요청이 승인처리 되기까지 4분 걸렸고,두 번째는 20초 미만 걸렸습니다. Grafana로 해당 시점의 DB 부하, API 상태 등을 점검하였을 땐 이상이 없었습니다. 결제 승인 소요시간이 4분 걸린점을 감안하고 코드를 보니 충분히 발생할 수 있는 코드였습니다. 현재 결제 승인 프로세스는 다음 순서로 이뤄집니다. 1. 결제 승인 처리 전 상태 유효성 검사2. 토스로 결제 승인 요청(지연 발생)3. 주문 결제 완료(data 상태 변경) 앱 사용자가 첫 번째 시 '결제 완료' 화면이 안보여서, 뒤로가기 누른 후 다시 결제하였고두 번째 결..
-
키크론(keychron) 키보드 K6 PRO 블루투스 끊김 문제 해결Keyboard 2023. 6. 28. 19:10
키크론 K PRO 무선이어폰 간섭 관련 블루투스 펌웨어 업데이트 (keychron.kr) 키크론 K PRO 무선이어폰 간섭 관련 블루투스 펌웨어 업데이트 키크론 K PRO 시리즈 키보드블루투스 펌웨어 업데이트이 블루투스 펌웨어는 K PRO 시리즈 키보드와 무선 이어폰 사이의 블루투스 신호 간섭 문제를 해결하기 위한 업데이트입니다.해당 블루투스 keychron.kr 한국 공식 판매처에서 K PRO 키보드 펌웨어 소프트웨어를 다운받아 펌웨어 업데이트를 진행 합니다. 저 같은 경우 K6 PRO를 사용한지 두 달 째 되가는데 키보드를 치는 와중에 블루투스 끊기는 현상이 너무 잦았습니다. 혹시나 싶어 공식 홈페이지를 들어가보니 블루투스 관련 펌웨어 업데이트가 있어 한 번 진행했고, 다행이 이 문제는 해결 되었습니..
-
[오답] Jest로 Axios 테스트 시 Cannot use import statement outside a moduleNestJs 2023. 3. 13. 20:19
NestJs 프로젝트에서 Axios 라이브러리 설치하고 Jest 테스트를 돌리면 아래와 같이 오류가 발생 합니다. SyntaxError: Cannot use import statement outside a module at Runtime.createScriptFromCode (../node_modules/jest-runtime/build/index.js:1728:14) at Object. (../node_modules/@nestjs/axios/dist/http.module.js:25:33) 해결방법 jest 버전 업 : 29.2 이상 ts-jest 버전 업: 29.0.5 이상 참고: https://github.com/axios/axios/issues/5101
-
TypeOrm 0.2 - Relations 성능 이슈NestJs 2023. 2. 24. 16:55
Version: 0.2 Mysql 스키마 관계 Main(데이터 1개) Sub 1(데이터 10개) Sub 2(데이터 10개) Sub 3(데이터 10개) Sub 4(데이터 10개) Sub 5(데이터 10개) 문제 find 옵션 중 relations를 사용하여 Sub 테이블을 질의하면 처음엔 괜찮다가 데이터가 조금만 쌓여도 느리다. 원인 relations를 사용하면 다른 테이블들의 정보를 조회할 때 Left Join을 사용한다. 예를 들어 5개의 서브 테이블에 데이터가 10개씩만 들어가 있어도 10 * 10 * 10 * 10 * 10 = 1만 개의 데이터가 조회된다. 해결방법 각각의 서브 테이블에 대해 select 결과 값을 Main 객체에 맵핑해준다. const main = await mainReposito..
-
[Lambda] 고정 IP 할당AWS 2022. 4. 2. 16:23
서론 Lambda로 토이 프로젝트를 진행하는데, DB로 Atlas MongoDB를 선택했습니다.(무료라서!) Atlas MongoDB의 Network Accesss whitlist에 추가할 Lambda IP가 없어, Elastic IP Address를 VPC(Net Gateway)에 할당 후 이 VPC를 Lambda에 연결 합니다. 참고로 API 콜이 없더라도 Net Gateway 비용은 계속 청구됩니다.. T_T 본론 작업은 다음과 같이 크게 3단계로 구분 됩니다. VPC 셋팅은 간단하지만 여러 단계로 이루어져 있습니다. VPC 셋팅 보안그룹 셋팅 Lambda VPC 설정 1. VPC 셋팅 VPC(가상 사설 클라우드)는 AWS 리소스를 시작할 수 있는 클라우드의 가상 네트워크입니다. 자체 사설 IP 주..
-
Serverless + NestJS + MikroORM 조합 시 문제NestJs 2022. 3. 6. 17:45
서론 토이 프로젝트를 진행하면서 그동안 눈여겨보고 있던 MikroORM을 적용해봤다. 회사에서는 TypeORM을 사용하고 있고, 크게 불편하지 않았지만, 몇 가지 알려진 이슈가 오랫동안 해결되지 않는 점이 마음에 걸려 MikroORM을 한 번 익히고자 했다. Mongoose를 또 익히자니 귀찮고, TypeORM 문법과 비슷한것도 한 몫 했다. 토이 프로젝트에 nestjs(monorepo), serverless-dotenv, swagger 기능을 삽질하며 적용하고, mikroORM까지 적용했다. 본론 serverless offline --stage=development는 동작이 잘되는데, serverless deploy --stage=development하면 packaging 단계에서 에러가 발생된다. ✖..