/back-end

Primary LanguageJavaScript

image

복지받고 세상 편하게 살자!

복세편살은 복지 정책 및 뉴스 맞춤 추천 사이트입니다!


프로젝트 소개

🛠 Architecture

서비스 아키텍쳐 (2) (1)


⏰ 프로젝트 타임라인

  • 4월 22일 ~ 6월 3일 (6주)
  • 5월 19일 배포 & 마케팅 & UT 시작
  • 5월 27일 누적 사용자 500명 & 조회수 1만회 돌파
  • 6월 3일 누적 사용자 600명 & 조회수 2만회 돌파

🚀 기능

😃 간단하고 안전한 회원가입

  • 카카오를 통한 소셜 로그인으로 간단하고 안전하게 회원가입 할 수 있어요!

😃 간단한 정보 입력으로 복지 정책 추천 받기

  • 내가 입력한 정보를 바탕으로 받을 수 있는 복지 정책만 모아서 추천해드려요!

😃 원하는 정책을 검색 기능으로 간편하게

  • 키워드 검색이나 정책명, 카테고리 검색으로 빠르게 원하는 정책을 찾을 수 있어요!

😃 자주 찾는 정책은 북마크 기능으로 간편 확인

  • 북마크를 해두면 사이드바에서 간편하게 확인할 수 있어요

😳 필요없는 정책이 있을 때는 바로 삭제

  • 맞지 않는 정책이 있다면 알려주세요!를 클릭하면 해당 정책이 나에게 더이상 추천되지 않아요!

😜 다른 사람들에게 보여주고 싶은 정책이 있다면 공유하기

  • 공유 버튼을 누르면 클립보드로 url이 복사돼요

🤠 입력된 지역 정보를 바탕으로 지역 맞춤 뉴스만 추천

  • 입력한 지역 정보에 맞는 맞춤 복지 뉴스 추천돼요

💬 이용자들과의 실시간 채팅 기능

  • 복세편살을 이용중인 사람들과 자유롭게 실시간으로 대화를 나눌 수 있어요!

💡 놓치기 쉬운 정책을 알림 서비스로 놓치지 않기

  • 정책 신청 기한이 끝나기 일주일 전에 이메일로 정책을 북마크 해둔 사용자에게 알려드려요!

🛠 Tools

Design


Back-end

JavaScript NodeJS
NPM Express.js
AWS
MongoDB Redis
Passport
Jest

Front-end



Dev tools



이름 포지션 개인 깃허브 or 이메일
권지원 백엔드 https://github.com/zzpjw
이푸름 백엔드 https://github.com/pooreumu
김영우 백엔드 https://github.com/rlasuddn
최서라 프론트엔드 https://github.com/Seol827
한상원 프론트엔드 https://github.com/hsangwon
김지원 디자이너 🚢 clue653@gmail.com
백지윤 디자이너 🚢 qorwldbs1027@gmail.com

🔥이슈 및 트러블슈팅

➡️ CloudFront 배포 관련 문제

문제 : S3 버킷의 내용을 변경했다고 하더라도 캐시가 유지되는 시간내에서는 해당 변경 내용이 CloudFront에 즉시 반영되지 않는 문제

해결 : CloudFront의 Invalidations(무효화)를 진행하여 Edge Location에 저장된 캐시를 삭제

➡️ useSWR

문제 : Redux의 경우 서버의 응답값을 저장해 놓는 스토어 역할이 아닌 전역 상태 관리를 위한 라이브러리로, useEffect를 통해 mount될 때마다 서버에 불필요한 GET 요청을 하게 된다.

해결 : SWR은 기존 흐름을 벗어나지 않고 캐시 기능까지 가능한 data Fetching 라이브러리이며, 리덕스 action, reducer, store 등을 사용하지 않아 로직이 매우 간결해진다. 또한 캐시된 데이터를 활용하여 불필요한 데이터 호출과 랜더링에 시간을 쓰지 않아 효율적이다.

➡️ 성능 문제

문제 : 유저 정보를 통한 뉴스 크롤링과 정책 추천 로직이 메인 페이지가 보여질 때마다 지속적으로 계산되어야 하기 때문에 트레픽이 늘어남에 따라 디스크 사용량과 CPU 계산량이 크게 늘어나 성능상의 문제가 있었음

해결방안 : 계산된 데이터들을 캐싱 처리하여 불필요하게 반복되는 정책 추천 로직 줄이기

해결 : DB로의 직접적인 접근을 최소화 시켜서 처리 속도를 향상시킬 수 있는 키-밸류 인메모리 데이터베이스 Redis를 도입

효과 : redis 적용 효과 전후비교

➡️ 공공API 분류 문제

설명 : 데이터가 자체적으로 아동, 청소년, 청년, 노년 등의 생애주기로 분류가 되어 있어서 정확한 나이에 따라 정책을 분류할 수 없었고, 소득 기준이 적용되는 정책이 모두 저소득 정책으로만 분류가 되어 있어서 정확한 소득 분위에 따라 정책이 분류할 수 없는 문제가 있었습니다. 또한 미혼모를 포함해야할 임산부 정책이 결혼으로 카테고리화 되어있는 등의 잘못된 카테고리화 문제가 있었고 카테고리화 되어있지 않은 데이터들이 많았습니다.

해결 : 정책 세부 내용 등에서 패턴 파악과 정규식 키워드 추출을 통해 자체 분류 기준 생성 및 재카테고리화를 진행하여 해결

➡️ 비동기 처리 방식에 관한 문제

설명 : 레디스 전략으로 롸잇 쓰로우 전략을 사용하기 때문에 유저 정보가 바뀔때마다 레디스 셋을 하는데 이 세 가지의 레디스 셋이 서로 독립적임에도 불구하고 어싱크 어웨잇을 사용하고 있었기 때문에 성능상의 문제가 있을 수 있다는 점을 파악/클랜징 과정에서도 마찬가지의 문제가 발생

해결 : 프로미스 올을 사용하여 세가지 레디스 셋 작업이 동시에 이루어질 수 있도록 코드를 수정

효과 : 비동기 처리 방식 전후비교