Giter Club home page Giter Club logo

onjeong's Introduction

온정 (온라인 情(뜻 정) / 亭(정자 정))

프로젝트 설명

어르신들이 물리적 제약을 극복하기 위해 가족, 지인들과 영상통화를 하고,
디지털 소외를 해소하기 위해 실시간 응답 서비스를 제공하고,
디지털 접근성을 향상 시킬 수 있는 부가 기능을 제공하는 서비스

기술

App

  • Android Studio

Server

  • Java 17 (OpenJDK 17)
  • Spring boot 3.2.1
    • 의존성 관리
    • Auto Configuration
  • Spring Data JPA
    • 객체 중심의 ORM 쿼리 활용
  • Spring security
    • JWT 기반 토큰을 활용한 인증
    • ExceptionEntryPoint를 활용한 예외 처리
  • Firebase
    • 화상통화 푸쉬 알림을 통한 편의성 증대

DB

  • MySQL
    • 테이블의 성격을 고려한 객체 중심의 엔티티 설계
    • N:M 관계를 조인 테이블을 활용해 1:N, M:1로 풀어내 개발 복잡도 저하

Infra

  • Jenkins
    • CI / CD 구축을 통한 개발 효율성 증가
  • Openvidu
    • 화상통화 구현 플랫폼
  • Docker
  • Docker hub
    • 이미지 업로드를 통한 버전 관리에 활용

Cloud

  • AWS EC2
  • AWS S3
    • 회원 프로필 사진 저장

기능 리스트

1. 회원가입/로그인

  • 카카오 로그인 지원
  • JWT 토큰 인증 기반
  • 전화번호 인증

2. 날씨

  • 공공 데이터 포털 API에서 날씨 정보 추출
  • GPS를 통해 현재 주소 조회
  • 현재날짜부터 일주일 후 까지 다음 정보 제공
    • 현재 기온
    • 최저/최고 기온
    • 하늘 상태 (맑음, 구름 많음, 흐림)
    • 강수 형태 (없음, 비, 비/눈, 눈, 소나기)

3. 뉴스

  • 네이버 뉴스를 크롤링하여 실시간으로 제공
  • 5개의 카테고리 - 정치, 경제, 사회, 생활, 세계

4. 영상통화

  • 생성된 모임과 유저 조회 및 선택
  • 다대다 영상통화 기능
  • 초대받은 사람에게 알람

5. 상담원 연결

  • 상담원 개인 상담 방 생성/삭제
  • 상담원과 클라이언트 영상 상담 기능

6. 복지 서비스

  • 복지 서비스 Open API를 이용한 복지 목록 조회

7. 온라인 교육 동영상

  • Youtube ID 값을 이용한 영상 재생

8. 게임

  • 퍼즐 게임, 짝 맞추기 게임
  • 각 게임마다 점수 기준으로 랭크 계산 및 조회

9. 마이페이지

  • 회원 정보 조회 (이름, 전화번호, 프로필 이미지)
  • 프로필 이미지, 전화번호 수정
  • 모임 설정
    • 모임 생성 및 수정 (이름, 유저 리스트)
    • 모임 삭제
  • 연락처 동기화 (사용자의 연락처와 온정 회원을 비교)
  • 로그아웃

10. 푸시 알람

  • FCM 토큰 관리
  • 영상통화 초대 시 푸시 알람 요청 (헤드업 알림)

아키텍쳐

ERD

개선 과정

  • 회원가입/로그인

    • 노인들이 사용하기 쉽도록 카카오 로그인 적용
    • JWT를 활용하여 stateless한 상태 유지
  • 날씨

    • 데이터를 캐싱하여 성능 향상
      • 시간당 API 호출량이 대량으로 몰릴때 공공데이터 포털에서 요청 거부
      • 매번 API를 호출하는게 아닌 base_time을 기준으로 데이터를 캐싱
      • Error 평균 : 62% → 0%
    • 락을 통해 동시성 문제 해결
    • 변하는 부분과 변하지 않는 부분을 나누어 전략 패턴을 적용
      • 추가로 날씨와 관련된 API를 호출하는 기능이 생긴다면 클라이언트를 건드릴 필요없이 날씨 전략 인터페이스를 구현만 하면됨
      • 유지보수 용이
    • 올바른 인덱스 설계를 통해 쿼리 성능 개선
      • Response Time : 71.8% 감소
      • Throughput : 73% 증가
  • 뉴스

    • 뉴스를 분야별로 접할 수 있도록 분야별 사이트 웹 크롤링 사용
    • 프론트단에서 정적 크롤링을 사용하여 실행속도 증가
    • 크롤링 과정 중 코루틴을 사용하여 비용 절감, 복잡성 저하
  • 게임

    • 유저의 게임 점수를 조회할 때 마다 지연로딩으로 쿼리문이 N+1번 발생하는 문제에서 Fetch Join 사용

onjeong's People

Contributors

seheon-park avatar sunhyeok99 avatar jindoryy avatar jungyounn avatar bbssjj avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.