Node.js로 Facebook Chatboot 서비스를 구축하며 다른 서비스들과 연동을 해야하는데 데이터 저장을 위한 DB로 Redis를 활용해보았다.
redis는 NoSQL DB로 key-value 구조로 데이터를 저장하는 구조라서 복잡한 서비스에 대한 데이터를 수용하기엔 적절치 않지만 NoSQL DB도 써볼겸 적용해보았다.
일단 Facebook chatbot에서 사용하는 아이디와 Facebook email 정보를 저장하고 Facebook Chatboot 고유 id 와 email 주소를 매핑 시켜줄 저장소를 DB0 에 저장했다. ( Redis는 기본적으로 16개의 독립적인 DB 구역을 사용할수 있다)
이는 최초 chatbot을 통해 내가 구현한 서비스와 facebook 계정을 연동 해주기 위한 DB로 활용되었다.
위 그림처럼 account linking 라고 메시지를 보내면 facebook과 MemoryCalendar 서비스를 연동시킬수 있는 url이 넘어오고 이를 클릭하고 facebook login 버튼을 눌러 연동을 하면 MemoryCalendar에서 해당 유저의 정보를 확인 할 수 있다.
facebook 연동 과정과 Redis에 저장되는 데이터를 함께 확인하면 아래와 같다.
- account linking 매시지 전송 : redis - user 고유 ID를 key값으로하고 랜덤하게 생성된 임이의 문자열을 value로 하여 encryptChatID를 key값으로 하는 저장소에 저장하였다.
- url클릭 후 facebook login 버튼 클릭 : facebook login 버튼을 눌러 연동을 하면 개인정보 접근이 가능하고 email 주소와 chat Id 를 맵핑 시켜 idMapper 를 key 로 하는 저장소에 저장하였다.
이와 같은 방법으로 email 주소를 통해 chatId 를 찾을 수 있도록 하였고 chatId 가 외부로 노출되는 경우를 방지하기 위해 임시 key 값을 발급하는 형태로 구조를 잡았다.
앞으로 서비스에서 사용될 개별 유저 셋팅에 대한 정보도 email 이나 chatid를 이용하여 설계하여 개발하면 된다.