분류 전체보기

·Project/ST00CK
여러가지 이것저것의 이유로 블로그 작성이 뜸했고 (변명), 꽤나 심오한 문제로 인해 프로젝트 아키텍쳐가 변경되었기 때문에 이제와서 글을 작성하게 되었다. 핵심적인 내용은 React-Native 기반의 EXPO 에서 React Vite 로 넘어오기로 결정하였고, 현재 '앱' 의 출시는 상대적으로 어려워 질 것 같다는 점이다.만약 EXPO 나 React native 검색을 통해 여기까지 찾아오게 되었다면 EXPO 사용은 다시한번 고민해봐야 할 것임을 장담한다 ...0. EXPO 에서 React Vite 로 변경된 이유초기 프로젝트 설계 단계에서 반응형 웹을 통해 웹과 앱에서의 UI/UX를 조절할 수 있었기 때문에, 전체적인 방향성을 웹앱(Web App) 형태로 잡게 되었다. 또한, 프론트엔드 개발 인력이 부..
·Project/ST00CK
알림 서비스를 사용하기 위해서는 Push Token 발급이 필요하다. 우리가 새로운 앱을 다운 받았을 때 알림을 동의하는지에 대한 여부를 물어보는 것을 본 적이 있을 것이다. 이것이 아마 정책에 따른 것이라 판단되어지며, 알림을 동의했을 경우 Push Token 이 발급되어 해당 유저에게는 알림 기능이 작동하고, 동의하지 않았을 경우 Push Token 이 발급되지 않아 알림 기능이 작동하지 않을 것이다. 따라서 이번 글에서는 Push Token 을 발급하는 과정을 작성하고, 개인적으로 구축한 DB 에 해당 Push Token 이 저장되어 관리될 수 있게 해보기로 한다.1. 의존성EXPO 에서 알림 기능을 위한 Push Token 을 발급받기 위해서는 expo-noritifications 가 필요하다. ..
·Project/ST00CK
알림서비스를 구현하기 위해서는 gRPC 와 RESTFul API 서버가 동시에 사용해야 했다. EXPO 에서는 네이티브 모듈을 직접 추가할 수 없기 때문에 gRPC 를 직접 호출하는 것은 불가능했다. 따라서 이것을 해결하기 위해 채팅서비스와 알림서비스 간의 통신은 gRPC 를 활용하고, EXPO 에는 REST API 를 사용해야 했다.0. 두개의 서버를 동시에 사용해야 하는 이유처음 설계시, 채팅서비스와 알림서비스 그리고 EXPO 간 통신을 모두 gRPC 를 사용하기로 하였다. 새로운 기술을 사용해 보고자 했으며 알림 서비스의 경우 무결성의 제약에 엄격하지 않았기 때문이다. 하지만 개발을 진행하는 과정에서 EXPO 는 gRPC 를 기본적으로 지원하지 않는다는 것을 알게 되었다. 또한, 알림 기능을 사용하..
·개인공부
ST00CK 프로젝트를 진행하면서 Redis 의 SET 에 대해 공부하게 되었다. 기존 Socket.IO 에서 사용한 Map 과 Set 의 어떤 차이가 있는지, 그리고 이어가서 Redis 에서의 Hash와 Set 은 어떤식으로 이루어져 있는지 공부한 것을 작성해보도록 한다.1. JavaScript 에서 Map 과 Set1.1 JavaScript Set (중복 없는 값의 집합)JavaScript 에서의 Set 은 중복된 값을 허용하지 않는 자료구조 이다. 배열과 유사하지만, 중복을 자동으로 제거한다. 간단하게 다음과 같이 코드를 작성해 볼 수 있다.// 과일 목록을 저장하는 Set 생성const fruits = new Set();// 과일 추가 (.add)fruits.add("apple");fruits.a..
·Project/ST00CK
기존에 오프라인 유저를 찾기 위하여 socket.io 에서 isOnline 과 isInRoom 을 관리하는 로직을 Map 과 Set 을 활용하여 구현하였다. 이는 메모리에 저장해서 관리되어지는데 이 때 서버가 재시작되면 모든 데이터가 사라진다는 것과 현재는 단일 서버 이지만 만약 멀티 서버 환경에서 사용되어진다면 데이터가 동기화되지 않는 오류가 발생할 것이다. 따라서 서버가 여러개여도 상태가 공유 가능하고 서버가 재시작 되어도 데이터를 유지할 수 있는 Redis 를 활용하여 조금 더 안정적인 서비스 운영이 될 수 있게끔 변경하고자 한다.1. ioredis vs redisNode.js 에서 Redis 와 연결하기 위해 사용하는 두 가지 주요 라이브러리는 ioredis 와 redis 가 있다. 둘 다 Red..
·Project/ST00CK
서버를 키고 postman 에서 socet.io 를 통해 연결할 때 , user123 과 user456 을 동시에 실행시키면 오류가 발생하였다. 이를 해결하는 과정을 작성한다.1. 문제 분석Error in KafkaConsumer: KafkaJSNonRetriableError: Cannot subscribe to topic while consumer is running at Object.subscribe (/Users/jeenukchung/Documents/ST00CK/node_modules/kafkajs/src/consumer/index.js:136:13) at consumeMessageFromKafka (/Users/jeenukchung/Documents/ST00CK/src/service..
·Project/ST00CK
지난번 글에서 gRPC 알림 기능을 구현한 것에 대해 작성하였는데, 알림 기능 구현을 위해 오프라인 유저를 판별하는 로직을 짜다보니 자연스럽게 socket.io 에서 이벤트 관련된 기능들이 중요했다. 그렇기 때문에 다양한 로직들이 추가 되었고 해당 로직을 조금 더 자세하게 작성하는 글이 될 것 같다.1. userSocketMap 과 roomUserMap 을 동시에 사용한 이유처음에 오프라인 유저를 찾기 위한 로직을 구현하는 중에 userSocketMap 하나만 가지고 유저의 온라인 오프라인을 판단하였다. 따라서 방을 나갔을 때의 유저 위치를 찾지 못하는 오류가 발생하였다. 가정은 두개였다. 유저가 오프라인일 경우 푸시 알림을 보내야 하고, 유저가 온라인 이지만 방에서만 나갔을 경우에도 알림을 보냈어야 했..
·Project/ST00CK
이전에 https://jeenukchung.tistory.com/62 을 작성하며 gRPC 통신을 간단하게 구현한 적 있다. 이제 공식적으로 알림서비스가 배포되었기 때문에 해당 서비스에 맞는 요청을 보내야 한다. 이번 글에서는 오프라인 유저를 찾아서 gRPC 로 요청하는 로직을 구현한다.1. 오프라인 유저 찾기 로직오프라인 유저를 찾기위한 가정을 다음과 같이 하였다.User 1, 2, 3 이 속해 있는 room A 가 있다고 가정하자. 만약 1 과 2 가 로그인하였을 경우 바로 socket.io 에 연결이 되며 동시에 userId 와 socket.id 가 맵핑을 한다. 유저 1과 2가 room A 에 입장하여 대화를 주고 받을 때, 해당 방에 속해있는 유저를 찾아 현재 대화방에 접속한 유저와 대조하여 오..
코린이 공대생
'분류 전체보기' 카테고리의 글 목록