Skip to content

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

✨ 프로젝트 소개

하루에 한 줌씩 🧑🏻‍🌾🌱 꾸준히 습관을 기록해보자!

하루 한 줌은 체득하고 싶은 습관들을 기록하여 꾸준히 이뤄나갈 수 있도록 도와주는 서비스입니다.

사용자들이 단순히 자신의 습관을 만드는 것보다 좀 더 재미있게 습관을 형성할 수 있도록 하자는 취지에서 시작된 프로젝트입니다.
따라서 내 습관뿐만 아니라 친구의 습관까지 확인하고 독려할 수 있습니다.


📆 프로젝트 기간

  • 개발 기간: 2022/08/26 ~ 2022/10/07
  • 런칭: 2022/10/03
  • 유저 피드백: 2022/10/03 ~ 2022/10/07
  • 추가 업데이트: 2022/10/03 ~ 진행 중


📖 서비스 아키텍쳐

image



👊 아키텍쳐 도입 배경

Git Action
  • CI & CD 구축 당시 구축된 환경에서 팀원들이 개발에만 집중할 수 있게 만드려는 것이 우리의 중점 과제였다.
  • 대안으로는 Genkins Travis가 존재했으나 둘다 EC2서버를 두대로 CI & CD 구축해야 한다는 차이점이 존재했다.
  • Git Action은 하나의 서버로 CI & CD구축이 가능하여 서버 비용의 문제 감당 시 비용 최소화를 할 수 있다고
    생각했다.
  • 레퍼런스도 많고 러닝커브가 적으며 원격 저장소로 Git Hub를 사용하는 우리에겐 git action은 난이도도
    적용하기도 제일 쉽다고 생각했다.
  • 상기 이유들로 비용 최소화 , 최소한의 시간으로 구축된 환경을 만족한다고 생각하여 Git Action으로 자동
    배포환경을 구축했다.
  • google, kakao, naver 소셜로그인
  • 로그인을 구현하게 되었을 때 사용자들의 편의성을 고려하는 단계에서 일반 로그인은 편의성을 떨어뜨린다고
    판단했다.
  • 소셜 로그인으로 인증 , 인가를 보증된 소셜(kakao등)에 맡겨 간편한 로그인 처리 방식으로 편의성을 향상시키고자 하였다.
  • 소셜 로그인 중 애플의 경우 (1년간 9~12만원의 비용) 결제금액의 이슈로 카카오 , 네이버 , 구글 3개의
    소셜로그인을 선택하게 되었다.
  • git hub는 일반 사용자들에겐 접근성이 떨어진다고 판단했고 facebook은 naver, goolge로 대체 가능하다 판단했다.
  • 상기 이유들로 3개의 소셜 로그인을 선택하게 되었고 그에따라 편의성을 향상시킬 수 있었다.
  • Redis
  • 데이터의 I/O가 잦은 경우 변동성이 적은 데이터일때 매번 DB를 조회하는 것은 트래픽 부하와 성능 저하를 해결할 수 없었다.
  • 데이터를 캐싱 처리하는 경우 트래픽을 줄이고 성능을 향상시킬 수 있는데 이때 로컬캐시 , Redis를 고려하게
    되었다.
  • 로컬캐시(caffeine cache)를 고려하게 되었으나 무중단 배포 환경에서 휘발성 캐시가 사라질 위험이 존재한다고
    판단했고 scale-out시 데이터 정합성 문제가 생긴다고 판단했다.
  • Redis의 경우 여러 자료구를 지원하여 캐싱 처리, 데이터를 처리하기 편리하다고 생각했고 무중단 배포환경에서
    서버의 자원을 사용하기에 데이터가 사라질 위험이 존재하지 않았다.
  • Redis는 여러 서버간 데이터 정합성 문제도 해결할 수 있다고 생각했다.
  • 상기 이유들로 Redis를 캐싱처리를 위해 사용하기로 결정했다.
  • aws RDS MySql
  • DB를 저장하기 위한 RDBMS로는 RDBS와 NOSQL이 존재한다.
  • NOSQL은 검색속도가 월등하나 테이블간 연관관계를 설정할 수 없고 데이터의 형태가 정확하게 유지되지 않으며 데이터의 무결성이 지켜지지 않는다.
  • RDBMS는 데이터의 무결성이 지켜지며 일정한 스키마로 데이터를 관리할 수 있어 테이블 내 데이터를 각각 관리할 스트레스가 줄어들며 연관관계로 테이블들을 관리할 수 있다.
  • 상기 이유들로 RDBMS를 선택했으며 aws의 RDS인 MySql을 사용하기로 결정했다.
  • router53 , Amazon ELB
  • Front-End와 통신시 HTTP프로토콜로만 통신하는 것은 보안상의 위험성을 야기한다고 생각한다.
  • Back-End 배포시 HTTPS 프로토콜을 사용하여 보안을 높히고자 하였고 이때 aws의 router53, Amazon ELB를
    도입하는 것이 EC2를 사용하는 우리가 바로 적용할 수 있는 부분이라고 생각했다.
  • 상기 이유들로 HTTP,HTTPS프로토콜을 통신할 수 있는 배포 환경을 구축하는 것에 aws의 router53과 Amazon
    ELB를 이용하기로 결정했다.
  • SSE
  • 실시간 알림을 구현하기 위해선 기존의 HTTP 통신 방식(폴링 , 긴폴링)을 사용하기엔 자원의 낭비가 발생하여
    새로운 방식을 도입해야 했다.
  • 기존의 HTTP프로토콜을 사용하는 streaming방식의 SSE와 WebSocket을 사용하는 웹소켓 두가지가 존재했으나
    우리가 구현하려는 알림은 양방향의 알림이 아니었다.
  • 배터리 소모량이 적고 연결이 끊어지면 재연결을 시도하며 pollyfill로 모든 브라우저 지원이 가능하게할 수 있는 SSE가 우리의 알림과 맞는다고 판단했다.
  • SSE는 첫 연결 이후 매번 재요청을 하지않고 서버의 응답을 줄 수 있어 비용을 아낄 수 있는 측면과 웹소켓의 차이 , 프로젝트의 방향성을 고려하여 사용하기로 결정했다.


  • 💖 주요 기능

    📅지키고 싶은 습관들을 기록해 캘린더에서 확인할 수 있어요.
    • 시간과 캐릭터를 선택할 수 있습니다.
    • 습관은 3일과 7일 중에 선택할 수 있습니다.
    • 설정한 시간으로 타이머를 진행하고 습관을 달성할 수 있습니다.
    • 설정한 습관을 캘린더에서도 확인할 수 있습니다.


    🙌친구를 검색하여 팔로우하고 선택하면 친구가 기록한 습관을 확인할 수 있어요.
    • 친구의 이메일, 이름 또는 검색코드를 사용하여 검색할 수 있습니다.
    • 캘린더에서 친구가 공개 설정한 습관을 확인할 수 있습니다.

    👀친구의 습관에 좋아요와 댓글을 달아 소통할 수 있어요!
    • 친구가 어떤 습관을 했는지 둘러보고 응원과 코멘트를 남길 수 있습니다.

    👫친구에게 보여주고 싶지 않은 습관들은 프라이빗 설정으로 숨길 수 있어요!
    • 프라이빗을 설정한 습관은 친구들이 캘린더에서 볼 수 없습니다.

    🏅뱃지들은 어떻게 얻는지 비밀..! 서비스를 이용하면서 하나씩 얻어가는 재미를 느껴보세요!
    • 얻은 뱃지들은 이미지와 함께 언제 획득했는지 알 수 있습니다.
    • 얻지 않은 뱃지들은 물음표 모양의 뱃지와 함께 힌트를 제공합니다.


    📢실시간으로 알림을 받을 수 있어요!
    • 뱃지 획득, 댓글, 좋아요, 습관 달성 시 실시간으로 알림을 받을 수 있습니다.

    🙍‍♂️내 프로필을 편집할 수 있어요!
    • 사진과 이름, 상태메시지를 변경할 수 있습니다.
    • 친구들의 상태메시지는 팔로우 또는 팔로워 목록에서 확인할 수 있습니다.



    👪 TEAM 소개

    김민섭 리더 박민혁 최명순 전소연 부리더 배지영
    KakaoTalk_Photo_2022-03-30-14-34-07 KakaoTalk_Photo_2022-03-30-14-41-33 KakaoTalk_Photo_2022-03-30-14-41-33 KakaoTalk_Photo_2022-03-30-14-41-33

    🔧 기술 스택

    💻 백엔드





    💻 프론트엔드




    🎇 개발 포인트



    🚀 트러블슈팅

    About

    No description, website, or topics provided.

    Resources

    Stars

    0 stars

    Watchers

    0 watching

    Forks

    Releases

    Packages

    Used by

    Contributors

    Languages