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를 통해 사용자는 작은 일상 미션을 반복 수행하며 식사, 청소, 샤워 등 무너졌던 일상 루틴을 점차 회복할 수 있다. 이러한 과정을 통해 자립 능력을 기르고, 스스로 일상을 관리할 수 있는 자신감을 얻게 된다.
- 정신적 안정 및 심리적 지원 제공 상담 예약 기능을 통해 전문적인 상담사의 도움을 받을 수 있어 사용자의 심리적 안정을 도모한다. 이를 통해 은둔형 외톨이들이 겪는 불안, 스트레스, 우울감 등 심리적 문제를 완화하는 데 기여한다.
- 사회적 연결 및 소통의 장 마련 커뮤니티 기능은 사용자 간의 소통을 촉진하고, 서로의 경험과 이야기를 나눌 수 있는 공간을 제공한다. 이를 통해 사회적 고립감을 완화하고, 서로의 도전을 응원하며 긍정적인 변화를 이끌어낼 수 있다고 기대한다.
회원가입 | 로그인 (소셜 로그인 포함) |
|
애니메이션 | HOME | 게시판 |
- 가입 후 들어갈 수 있는 애니메이션 페이지 - 이때 설정한 캐릭터 이름대로 다람이의 이름이 지어짐 |
- 홈화면에서 반겨주는 다람이와 온도계 |
- 마음의 이야기를 털어놓을 수 있는 게시판 |
챗봇 | 상담예약 |
- 매일 일정 시간에 오는 챗봇을 통해 미션 알림 - 평소에도 언제든 다람이와 채팅 |
- 전문가와의 상담을 할 수 있도록 예약 기능 구현 |
미션 | 미션 완료 |
- 매일 다람이가 주는 특별 미션(챗봇으로 알림) - 매일 간단한 일상 회복을 돕는 데일리 미션 |
- 미션 완료를 통해 포인트를 얻고, 다람이의 온도를 높일 수 있음 |
상담사 일정관리 |
- 요일별로 상담이 가능한 시간 조정 가능 |
상담사 상담 내역 확인/수정 |
- 내담자의 상담 내역을 확인하고 수정 |
-
다람이 Chat bot
- OpenAI API를 활용해 마스코트와 대화하는 듯한 대화를 자동 생성
- 특정 사용자의 대화내용이 필요한 상황에서 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();
-
알림
- 주기적인 알림을 구현하기 위한 Scheduling 사용
- 대규모 사용자 처리를 위해 Spring Batch를 적용
- 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(); }
-
회원
- Spring Security를 사용한 회원 관리 기능 구현
- Redis를 사용한 Expire 유효 기간 설정
- 클라이언트의 Cookie에 토큰을 저장하고 사용하도록 구현
-
WebRTC
- OpenVidu를 기반으로 한 상담사와의 실시간 화상 상담 기능 구현
- MediaPipe를 통해서 안면 인식을 하고 자동으로 캐릭터로 덧씌워주는 기능을 구현
const camera = new Camera(videoRef.current, { onFrame: async () => { await faceMesh.send({ image: videoRef.current }); }, width: 640, height: 480, }); camera.start();
-
요구사항, 기능 명세서
https://www.notion.so/b7da75e62bba4010bb199bb8d6f3d63c?pvs=4
-
API 명세서
https://www.notion.so/API-Reference-e67a43dfcf5c49e084a72192bebda2c6?pvs=4
이예빈: 백엔드와 프론트 모두를 담당해 openvidu를 활용하여 화상채팅을 구현해보면서 전체적인 과정을 공부할 수 있던 계기가 되었다. 그리고 처음으로 제대로된 팀 프로젝트를 진행해보았는데 시간이 부족할 것 같다라는 이유로 개발을 진행하면서 세부적인 부분을 정하는 때가 많았다. 하지만 이렇게 되니 오히려 개발하다가 이야기를 하는데 많은 시간을 할애하는 상황이 와서 개발 전 기획과 계획을 탄탄하게 하는 것이 좀 더 낫지않을까? 라는 생각이 들었다.
김성은: React.JS 프로젝트는 처음이라 서툴렀지만, 많은 것을 배울 수 있었습니다. 특히 PWA로 앱과 비슷한 경험을 제공할 수 있다는 점이 인상 깊었습니다. UTC와 관련된 시간 차이 오류를 해결하며 시간 데이터 처리에 대해 배웠고, 요일별 일정 타임테이블 구현 중 출력 순서 문제도 해결해 작업 프로세스의 중요성을 깨달았습니다. 이번 경험은 기술적 성장과 문제 해결 역량을 키울 수 있었던 의미 있는 시간이었습니다.
김영빈: 많은 것을 배울 수 있는 기회가 되었습니다. 특히 프로젝트의 방향성에 대해서 팀원들과 논의하고 고민했던 것이 정말 좋은 경험이었습니다. 여기서 얻어간 기술과 노하우로 더욱 발전하는 사람이 되도록 노력하겠습니다.
이대현: 처음 해보는 것들 투성이라 힘들지만 배우는게 많았던 것 같습니다. 스프링 시큐리티와 AWS EC2 서버에 직접 수동 배포도 해보고, 발전해서 Jenkins를 이용한 CI / CD까지.. 다들 감사합니다.
이예지: 일정관리와 기획의 중요성에 대해 많이 느꼈고, 다음 프로젝트를 하면서 일정 관리에 조금 더 신경쓰고 있습니다. 그래도 처음이라 모든 게 어려울 때, 팀원들이 다 같이 도와줘서 기술적으로도 팀 프로젝트라는 관점에서도 배우는 게 많았습니다.
정유진: JPA, MongoDB 등 처음 배우는 기술들이 많아서 힘들었지만, 그만큼 많은 것을 배웠고 의미 있는 시간이었습니다. 팀원 모두가 더 나은 기능을 위해 회의를 거듭했던 것이 기억에 많이 남는데, 남과 협력하고 부딪히며 최선의 결과를 내는 방법을 배울 수 있어 좋았습니다.
첫 회식 | 마지막 회식 |
---|---|