프로젝트/오디 (12) 썸네일형 리스트형 FCM 알림 비동기 + 이벤트 리스닝으로 리팩터링 하기 - 2편(테스트) 안녕하세요 브로콜리입니다. 지난 글에서는 동기화되어 있던 FCM 알림 로직을 비동기 + 이벤트 리스닝을 방식으로 리팩터링한 과정에 대해 소개해드렸습니다. 그 과정에서 1) 알림 로직과 비즈니스 로직간의 결합도 감소 2) latency 성능 개선 이라는 이점을 얻을 수 있었습니다. 그러나, 모든 구현의 완성은 테스트인만큼 비동기 + 이벤트 리스닝 방식을 어떻게 테스트할지 고민이 생겼습니다.Situation : 비동기 + 이벤트 리스닝 방식을 테스트하자! 다시한번 상황을 짚어보겠습니다. 비동기 + 이벤트 리스닝 방식으로 개선된 알림 서비스는 다음과 같은 모습입니다.1) 상위 모듈은 fcmEventPublisher를 통해 이벤트를 발행합니다.2) 발행된 이벤트는 fcmEventListener를 통해 수신합니다.. FCM 알림 비동기 + 이벤트 리스닝으로 리팩터링 하기 - 1편 Situation : 알림 로직이 비즈니스 로직과 강결합 & 동기 코드로 좋지 않은 성능 친구의 지각을 방지해주는 프로젝트 `오디`는 사용자에게 다양한 알림을 보내줍니다. 알림의 종류는 다음과 같습니다.타입보내는 시점설명입장 알림약속방 참여 시기친구가 약속방에 참여했음을 알립니다.출발 알림약속에 지각하지 않을 출발 시각본인 혹은 친구가 지각하지 않으려면 지금 출발해야 함을 알립니다.위치 정보 확인 가능 알림실시간 친구 위치 확인 가능 시점현 시각 이후로 친구들의 실시간 위치를 확인 가능함을 알립니다.재촉 알림내가 지각 위기일 때 && 친구가 나를 재촉했을 때친구에게 재촉 알림을 발송합니다. == 콕 찌르기 그러나, 알림에 대한 도메인이 커지면서 몇 가지 문제라 생각되는 지점들이 보였습니다. 문제1. 알.. 인수 테스트로 사용자 유즈 케이스 파악하기 Situation : 2차 UT에서 발생한 예상치 못한 에러 프로젝트 오디에서는 10.10 - 10.24일 간 20명의 패널을 대상으로 사용자 유저 경험을 수집했습니다. 이 중 가장 많은 피드백을 받았던 것 중 하나가 바로 약속방을 나가는 기능을 만들어달라는 것이었습니다. 이에 2차 UT 이전까지 약속방을 나갈 수 있는 기능을 개발하기로 결정하였고, 구현부터 테스트 코드까지 코드 리뷰를 통해 검증된 코드를 merge 하였습니다. 그러나 2차 UT 당일 날, UT 패널인 비토로부터 약속에서 나간 이후 동일 약속에 참여가 되지 않는다는 문자가 왔습니다. 이에 로그를 살펴보니 약속 참여원인 Mate에 회원 아이디(member_id)와 약속 아이디(meeting_id)를 기준으로 구성한 복합 unique 조건에.. 🔐 로그인 상황별 FCM 디바이스 토큰 싱크 맞추기 feat) 전략 패턴 안녕하세요 브로콜리입니다. 안드로이드 프로젝트 오디에서는 지난 레벨3 4차 스프린트에서 카카오 SDK api를 활용한 카카오 로그인을 지원하기로 결정하였습니다. 이에 따라 안드로이드 팀과 함께 인증과정에 대한 합의가 필요했는데요. 이번 글에서는 어떠한 방식으로 인증 로직을 구현하고 그 과정에서 어떠한 고민들을 했는지 소개해보고자 합니다.1. 무엇이 고민이었는가 : 로그인 상황별 FCM 디바이스 토큰의 싱크 맞추기 1) 카카오 인증정보 받기 - 안드로이드 측에서 SDK를 활용해 회원 관련 정보를 받습니다 2) 오디 서버에 인증하기 - POST /auth/kakao api에 회원 정보를 넘겨 인증을 시도합니다 - 서버에서는 액세스 토큰과 리프레시 토큰을 발급해줍니다 3) 토큰을 통한 인증 -.. 💭프로젝트 '오디' 핵심 기능 리팩터링 상상일지 : 웹 소켓 전환 시나리오 안녕하세요 브로콜리입니다. 오늘 이야기할 글의 소재는 일전에 포스팅하였던 오디 프로젝트의 실시간 친구 도착예정정보 공유 기능 구현에서 이어집니다. https://hellobrocolli.tistory.com/186 프로젝트 `오디` 핵심 기능 구현 일지 : 실시간 친구 도착 예정정보 공유 기능언제, 어디서, 무엇을 하든 지각하지 않게 도와주는 서비스 `프로젝트 오디`에서는3차 스프린트 목표로 실시간 친구 도착 여부를 알 수 있는 기능을 핵심 기능으로 삼았습니다. 프로젝트 오디hellobrocolli.tistory.com 지난 글에서는 오디 서비스의 핵심 기능인 친구의 도착 예정정보를 실시간 위치를 기반으로 알려주는 기능을 구현했던 과정과 리팩터링까지 소개해드렸는데요. 다만 폴링 방식의 경우 계속 커넥션을.. 프로젝트 `오디` 핵심 기능 구현 일지 : 실시간 친구 도착 예정정보 공유 기능 언제, 어디서, 무엇을 하든 지각하지 않게 도와주는 서비스 `프로젝트 오디`에서는3차 스프린트 목표로 실시간 친구 도착 여부를 알 수 있는 기능을 핵심 기능으로 삼았습니다. 프로젝트 오디의 서비스가 궁금하신 분들을 위해 소개 영상을 첨부합니다.https://youtu.be/-dsyc4CppL0 여기서 `실시간 친구의 도착 여부를 알 수 있는 기능`이란 약속 30분 전부터 친구에게 물어보지 않아도 시간 내에 도착할 수 있을지, 어느정도 걸릴지 등 실시간으로 친구의 위치를 기반으로 도착 예정정보를 제공하는 기능을 일컫습니다. 즉, 우리는 소비자에게 두 가지 기능을 제공해주고자 했습니다.1) 시간 정보 : 친구가 약속장소까지 몇 분정도 남았는지 알 수 있다2) 지각 정보 : 친구가 지각할지, 안 할지 물어보.. 🌐NAT gateway로 private 서브넷에서 외부 API 호출하기 안녕하세요 브로코딩입니다. 오늘은 프로젝트 '오디'에서 EC2가 private subnet안으로 들어감에 따라 외부 API 호출이 되지 않았던 문제를 극복했던 과정에 대해 기록해볼까 합니다. 🤔 Situation : 무슨 상황이었나? : private 서브넷 인스턴스에서 외부 API를 호출하지 못함 상황은 이렇습니다. 우아한 테크코스 레벨4 운영환경에서 미션 요구사항은 public subnet에 있는 prod 서버를 private subnet 내로 옮기는 작업이었습니다. AS- IS TO-BE 여러가지 변화가 있지만 이슈를 겪게 했던 가장 큰 변화는 바로 public subnet 내에 있었던 prod 서버 ec2가 private subnet으로 들어가면서부터였습니다. 현재 오디 팀에서는 실시간 대.. CD 배포 스크립트 실행 중 오류가 발생한다면? : tag를 활용한 롤백 전략 구축 하기 우아한 테크코스 Level 3 마지막 주에는 크루와 코치님 한분이 팀을 이루어 서로가 팀 프로젝트 안에서 배운 것을 면접 식으로 문답하는 '레벨 인터뷰'라는 문화가 있습니다. 저는 CI / CD 스크립트 작성을 맡아 이에 대한 질문을 받았는데요. 많은 질문 중 한 가지 질문에 크게 당황하며 답하지 못했던 기억이 있습니다. 바로 이 질문인데요. CD 스크립트 수행 중 오류가 발생하면이를 대처할 롤백 전략을 세워두셨습니까? 왜 생각해보지 못했나?- 운영 단계가 아니라 dev 서버 밖에 존재하지 않았기에 CD 스크립트 실패를 크게 염두해두지 않았습니다 그러나, 운영환경에서 CD 스크립트가 실패한다면? 그러나 운영 단계에서는 애플리케이션을 띄우는 과정에서 오류가 발생했다면 이를 대처할만한 롤백전략의 중요성.. 이전 1 2 다음