Skip to content
/ OnDo Public

은둔형 외톨이를 위한 생활 습관 개선 서비스

Notifications You must be signed in to change notification settings

KSE0514/OnDo

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Ondo

삼성 청년 SW아카데미(SSAFY) 11th 공통프로젝트

✅ 프로젝트 진행 기간

2024.07.02 ~ 2024.08.16

✅ 멤버소개

이예빈 김성은 김영빈 이대현 이예지 정유진

@dpqls0356

@KSE0514

@ybk1

@leedhfsd

@Sophia0705

@JYOOJIN
팀장 | BE | FE FE | DESIGN BE BE | INFRA FE | DESIGN BE

✅ 기술스택

Back-end
Front-end
Infra

Tools

✅ 시스템 아키텍쳐

아키텍쳐

✅ 프로젝트 소개

서비스 목적

2023년 한국보건사회연구원 조사에 따르면, 19∼34세 청년 가운데 고립 청년의 비율은 2021년 기준 전체 청년의 5.0%, 약 53만8000명에 달한다고 한다. 이러한 은둔형 외톨이들은 일상생활의 특히 은둔형 외톨이 중 많은 사람들이 밥 먹기, 청소, 샤워 등 일상적인 루틴이 무너진 상태로 지내며, 이를 스스로 극복하기 어려워한다. Ondo는 이러한 사람들을 위해 일상 루틴을 되찾고 삶의 활기를 되찾을 수 있도록 도움을 주고자 시작하게된 프로젝트이다.


서비스 목표

최종 목표 : 고립 청년 문제 해결 기여

은둔형 외톨이들이 Ondo를 통해 스스로의 변화를 만들어가고 사회와 다시 연결될 수 있는 환경을 제공하여 고립 청년 문제 해결에 기여한다.

  • 일상 루틴의 회복과 정착 지원 사용자가 작은 미션부터 시작해 꾸준히 일상적인 루틴을 쌓아가며 건강한 생활 습관을 되찾을 수 있도록 돕는 것을 목표로 한다.
  • 심리적 안정과 전문적 지원 제공 상담 예약 기능을 통해 사용자가 자신의 고민과 문제를 상담할 수 있도록 하여 심리적 안정감을 제공하고, 필요한 경우 전문가의 도움을 받을 수 있도록 지원한다.
  • 사회적 연결 촉진 커뮤니티 기능을 통해 사용자 간 소통을 촉진하고, 서로의 이야기를 공유하며 긍정적인 상호작용을 장려한다.
  • 사용자 성장과 동기 부여 미션 수행을 통해 경험치를 획득하고 캐릭터를 성장시키는 게임화된 요소를 제공하여 사용자가 지속적으로 동기를 가지고 서비스에 참여할 수 있도록 한다.

기대효과

  • 일상 회복 및 자립 능력 향상 Ondo를 통해 사용자는 작은 일상 미션을 반복 수행하며 식사, 청소, 샤워 등 무너졌던 일상 루틴을 점차 회복할 수 있다. 이러한 과정을 통해 자립 능력을 기르고, 스스로 일상을 관리할 수 있는 자신감을 얻게 된다.
  • 정신적 안정 및 심리적 지원 제공 상담 예약 기능을 통해 전문적인 상담사의 도움을 받을 수 있어 사용자의 심리적 안정을 도모한다. 이를 통해 은둔형 외톨이들이 겪는 불안, 스트레스, 우울감 등 심리적 문제를 완화하는 데 기여한다.
  • 사회적 연결 및 소통의 장 마련 커뮤니티 기능은 사용자 간의 소통을 촉진하고, 서로의 경험과 이야기를 나눌 수 있는 공간을 제공한다. 이를 통해 사회적 고립감을 완화하고, 서로의 도전을 응원하며 긍정적인 변화를 이끌어낼 수 있다고 기대한다.

✅ 기능 소개

Member

회원가입 로그인
(소셜 로그인 포함)
애니메이션 HOME 게시판
- 가입 후 들어갈 수 있는 애니메이션 페이지
- 이때 설정한 캐릭터 이름대로 다람이의 이름이 지어짐
- 홈화면에서 반겨주는 다람이와 온도계 - 마음의 이야기를 털어놓을 수 있는 게시판

OnDo Features

챗봇 상담예약
- 매일 일정 시간에 오는 챗봇을 통해 미션 알림
- 평소에도 언제든 다람이와 채팅
- 전문가와의 상담을 할 수 있도록 예약 기능 구현
미션 미션 완료
- 매일 다람이가 주는 특별 미션(챗봇으로 알림)
- 매일 간단한 일상 회복을 돕는 데일리 미션
- 미션 완료를 통해 포인트를 얻고, 다람이의 온도를 높일 수 있음
상담사 일정관리
- 요일별로 상담이 가능한 시간 조정 가능
상담사 상담 내역 확인/수정
- 내담자의 상담 내역을 확인하고 수정

✅ 활용기술, 기술 설명

  • 다람이 Chat bot

    1. OpenAI API를 활용해 마스코트와 대화하는 듯한 대화를 자동 생성
    2. 특정 사용자의 대화내용이 필요한 상황에서 MongoDB를 사용해 Document 단위로 조회하여 성능 개선
    WebClient webClient = WebClient.builder().build();
    String url = "https://api.openai.com/v1/chat/completions";
    
    webClient.post()
      .uri(url)
      .header("Content-Type", "application/json")
      .header("Authorization", "Bearer " + api)
      .bodyValue(dto)
      .retrieve()
      .toEntity(ChatCompletion.class)
      .block();
  • 알림

    1. 주기적인 알림을 구현하기 위한 Scheduling 사용
    2. 대규모 사용자 처리를 위해 Spring Batch를 적용
    3. Firebase Cloud Message를 사용해 기기단위 알림 서비스 제공
    private final String[] SCOPES = {"https://www.googleapis.com/auth/firebase.messaging"};
    
    public String getAccessToken() throws IOException {
    	ClassPathResource resource = new ClassPathResource("firebase.json");
    
    	GoogleCredentials googleCredentials = GoogleCredentials
    		.fromStream(resource.getInputStream())
    		.createScoped(Arrays.asList(SCOPES));
    	googleCredentials.refreshIfExpired();  // refreshIfExpired로 토큰 갱신
    	googleCredentials.refreshAccessToken();
    	return googleCredentials.getAccessToken().getTokenValue();
    }
  • 회원

    1. Spring Security를 사용한 회원 관리 기능 구현
    2. Redis를 사용한 Expire 유효 기간 설정
    3. 클라이언트의 Cookie에 토큰을 저장하고 사용하도록 구현
  • WebRTC

    1. OpenVidu를 기반으로 한 상담사와의 실시간 화상 상담 기능 구현
    2. MediaPipe를 통해서 안면 인식을 하고 자동으로 캐릭터로 덧씌워주는 기능을 구현
    const camera = new Camera(videoRef.current, {
      onFrame: async () => {
        await faceMesh.send({ image: videoRef.current });
      },
      width: 640,
      height: 480,
    });
    camera.start();

✅ 산출물(ERD, 명세서, 파일구조)

ERD

ERD

명세서

✅ 결과공유, 느낀점

이예빈: 백엔드와 프론트 모두를 담당해 openvidu를 활용하여 화상채팅을 구현해보면서 전체적인 과정을 공부할 수 있던 계기가 되었다. 그리고 처음으로 제대로된 팀 프로젝트를 진행해보았는데 시간이 부족할 것 같다라는 이유로 개발을 진행하면서 세부적인 부분을 정하는 때가 많았다. 하지만 이렇게 되니 오히려 개발하다가 이야기를 하는데 많은 시간을 할애하는 상황이 와서 개발 전 기획과 계획을 탄탄하게 하는 것이 좀 더 낫지않을까? 라는 생각이 들었다.

김성은: React.JS 프로젝트는 처음이라 서툴렀지만, 많은 것을 배울 수 있었습니다. 특히 PWA로 앱과 비슷한 경험을 제공할 수 있다는 점이 인상 깊었습니다. UTC와 관련된 시간 차이 오류를 해결하며 시간 데이터 처리에 대해 배웠고, 요일별 일정 타임테이블 구현 중 출력 순서 문제도 해결해 작업 프로세스의 중요성을 깨달았습니다. 이번 경험은 기술적 성장과 문제 해결 역량을 키울 수 있었던 의미 있는 시간이었습니다.

김영빈: 많은 것을 배울 수 있는 기회가 되었습니다. 특히 프로젝트의 방향성에 대해서 팀원들과 논의하고 고민했던 것이 정말 좋은 경험이었습니다. 여기서 얻어간 기술과 노하우로 더욱 발전하는 사람이 되도록 노력하겠습니다.

이대현: 처음 해보는 것들 투성이라 힘들지만 배우는게 많았던 것 같습니다. 스프링 시큐리티와 AWS EC2 서버에 직접 수동 배포도 해보고, 발전해서 Jenkins를 이용한 CI / CD까지.. 다들 감사합니다.

이예지: 일정관리와 기획의 중요성에 대해 많이 느꼈고, 다음 프로젝트를 하면서 일정 관리에 조금 더 신경쓰고 있습니다. 그래도 처음이라 모든 게 어려울 때, 팀원들이 다 같이 도와줘서 기술적으로도 팀 프로젝트라는 관점에서도 배우는 게 많았습니다.

정유진: JPA, MongoDB 등 처음 배우는 기술들이 많아서 힘들었지만, 그만큼 많은 것을 배웠고 의미 있는 시간이었습니다. 팀원 모두가 더 나은 기능을 위해 회의를 거듭했던 것이 기억에 많이 남는데, 남과 협력하고 부딪히며 최선의 결과를 내는 방법을 배울 수 있어 좋았습니다.

✅ ❤온도팀 사진❤

첫 회식 마지막 회식
첫 회식 마지막 회식

About

은둔형 외톨이를 위한 생활 습관 개선 서비스

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published