본문 바로가기

전체 글13

NestJS EventEmitter 와 실제 사용 현재 NestJS, React Native, Next.js를 활용해 모바일 앱을 개발하고 있는 주니어 풀스택 개발자입니다.최근 새로운 비즈니스 모델(BM)을 고민하면서, 유저의 리텐션과 참여율을 높일 수 있는 앱 내 미션 시스템(TODO 기능)을 도입하기로 결정했습니다.이 미션 시스템은 EventEmitter를 기반으로 하여, 유저의 특정 행동을 감지하고 조건을 만족하면 자동으로 미션을 완료 처리하며 보상을 지급하는 방식으로 설계했습니다.EventEmitter를 선택한 이유 와 대체 기술EventEmitter와 같은 메세지 브로커 기반 이벤트 처리를 도와주는 라이브러리 들이 있습니다RabbitMQ /비동기 작업, 미션 큐Kafka / 대규머 유저 이벤트 처리Redis Pub/sup / 간단한 마이크로서비.. 2025. 6. 8.
Redis 를 사용하여 실검/인기/검색랭킹 구현해보기 feat:Sorted Set 구현한 검색 랭킹에 대한 워크플로우 입니다.유저가 검색 키워드를 입력하면 해당 시간대의 키 테이블에 저장됩니다. 만약 테이블에 이미 존재하는 키워드라면, 키워드의 Score 를 1씩 증가 시키고,그 후, zUnionStore를 사용해 최근 6개의 테이블을 Sorted Set에 저장 후  Score 기준으로 상위 3개를 검색 랭킹에 반환하고,마지막으로  백업을 위해 DB에 저장하는 방식으로 구현하였습니다.Redis 를 사용한 이유바로 속도때문입니다.RDB를 사용하면 캐시되지 않았다고 가정할 경우 데이터를 디스크에서 불러오지만 Redis는 항상 메모리에서 가져오게 됩니다. 실무에서 사용한다면 Redis의 랭킹 정보가 휘봘될수 있기때문에 Redis백업을 해두거나, 랭킹정보 or랭킹 정보를 생성하는 Seed 데.. 2024. 8. 25.
Nestjs + React 환경에서 PortOne 을 사용한 결제 서비스 구현해보기 현재 진행중인 프로젝트에서 결제기능을 통해 유저의 포인트를 증가시키는 로직을 구현하게 되었습니다.그래서 결제 로직을 구현할때 "포트원(PortOne)" 을 사용하여  구현하기로하였습니다.포트원(PortOne) 이란다양한 결제 서비스를 한 번에 통합 관리할 수 있는 결제 플랫폼 입니다.포트원 주소: https://portone.io/korea/ko 먼저 코드를 작성하기전 간단한 워크플로우 를 그려봤습니다.유저가 결제버튼을 클릭하면,1.주문 정보가 저장되고, 포트원 결제 API가 호출되어 결제가 진행됩니다.2.결제 정보를 검증하고, 유저의 포인트를 증가시키며 포인트 내역을 저장합니다.3.만약 이 과정 중에 실패나 오류가 발생한다면 결제가 취소 되고, 변경사항이 롤백되며, 이미 결제 된 금액은 환불 됩니다.위.. 2024. 8. 25.
스트레스 테스트를 위한 Artillery 이번 파이널프로젝트 의 MVP를 구현하면서, 지금까지 만든 API들의 성능 테스트를 위해 여러 라이브러리를 찾아봤다그중, Artillery 와 JMeter 라는 라이브러리를 사이에두고 어떤 걸 사용하지에 대해 의논을 하다보니Artillery가 우리의 개발환경인 Javascript 생태계와 호환이 잘된다는걸 알았고 특히, 처음으로 스트레스 테스트를 해보는 우리에겐 "간편한 설정과사용"의 이점이 매력적으로 다가왔다.우리가 적용한 방법에 대해서 간단하게 기록해둘려고한다.npm install -g artillery명령어 를 통해 라이브러리를 설치해준후 위 보이는 것처럼 test.yaml 파일 을 생성해준다target : 요청 baseURLduration : n초동안 테스트arrivalRate : 초당 n회의 요.. 2024. 8. 9.