"활짝"의 두 판 사이의 차이
(→구성원 및 추진체계) |
(→화면별 클래스 설계) |
||
(같은 사용자의 중간 판 56개는 보이지 않습니다) | |||
173번째 줄: | 173번째 줄: | ||
===기술개발 일정 및 추진체계=== | ===기술개발 일정 및 추진체계=== | ||
====개발 일정==== | ====개발 일정==== | ||
− | + | [[파일:개발일정_활짝.png]] | |
+ | |||
====구성원 및 추진체계==== | ====구성원 및 추진체계==== | ||
+ | ◇ 김*수(팀장): PM, 프로그램 기획, UI 디자인, 문서 작성, 백엔드 개발, 프론트엔드 개발 | ||
+ | |||
+ | ◇ 김*엽: 프로그램 기획, UI 디자인, 문서 작성, 백엔드 개발, 프론트엔드 개발 | ||
− | + | ◇ 최*웅: 프로그램 기획, UI 디자인, 문서 작성, 백엔드 개발, 프론트엔드 개발 | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | 프로그램 기획, UI 디자인, 문서 작성, 백엔드 개발, 프론트엔드 개발 | ||
==설계== | ==설계== | ||
===설계사양=== | ===설계사양=== | ||
====제품의 요구사항==== | ====제품의 요구사항==== | ||
− | + | ||
− | ==== | + | 1. 사용자는 로그인을 할 수 있다. |
− | + | ||
+ | 2. 사용자는 회원가입을 할 수 있다. | ||
+ | |||
+ | 3. 사용자의 활동 기록이 자동으로 생성된다. | ||
+ | |||
+ | 4. 사용자는 자신의 활동 기록을 관리할 수 있다. | ||
+ | |||
+ | 5. 사용자는 자신의 하루 기록을 관리할 수 있다. | ||
+ | |||
+ | 6. 사용자는 활동을 추천받을 수 있다. | ||
+ | |||
+ | 7. 사용자는 활동 통계를 제공받을 수 있다. | ||
+ | |||
+ | 8. 사용자는 일기를 자동으로 생성할 수 있다. | ||
+ | |||
+ | 9. 사용자는 하루 일기를 관리할 수 있다. | ||
+ | |||
+ | ====기능별 상세 요구사항==== | ||
+ | |||
+ | - 계정 관리 | ||
+ | 1. 사용자는 비밀번호, 이메일을 통해 회원가입할 수 있다. | ||
+ | 2. 사용자는 이메일, 비밀번호로 로그인할 수 있다. | ||
+ | 3. 사용자는 비밀번호를 초기화를 할 수 있다. | ||
+ | 4. 사용자는 계정을 탈퇴할 수 있다. | ||
+ | 5. 계정탈퇴 시 모든 데이터는 삭제된다. | ||
+ | 6. 사용자는 인증받은 이메일을 변경할 수 있다. | ||
+ | |||
+ | - 자동 기록 | ||
+ | 1. GPS를 통해 사용자의 위치정보를 수집한다. | ||
+ | 2. 사용자의 심박수 및 생체신호를 이용해 감정을 추정한다. | ||
+ | 3. 사진을 찍을 때 포함된 GPS 정보를 습득한다. | ||
+ | 4. GPS로 얻은 위치의 변동을 통해 기록할 활동을 구분한다. | ||
+ | 5. 기록할 활동의 위치와 시간을 기준으로 날씨정보를 수집한다. | ||
+ | 6. 위의 정보를 종합하여“활동 기록”을 생성한다. | ||
+ | |||
+ | - 활동 기록 | ||
+ | 1. 사용자는 활동 기록을 조회할 수 있다. | ||
+ | 2. 사용자는 활동 기록을 추가할 수 있다. | ||
+ | 3. 사용자는 활동 기록을 삭제할 수 있다. | ||
+ | 4. 사용자는 활동 기록에 텍스트를 추가할 수 있다. | ||
+ | 5. 사용자는 활동 기록의 텍스트를 수정할 수 있다. | ||
+ | 6. 사용자는 활동 기록의 장소를 수정할 수 있다. | ||
+ | 7 .사용자는 활동 기록의 시간을 수정할 수 있다. | ||
+ | 8. 사용자는 활동 기록에 감정을 추가할 수 있다. | ||
+ | 9 .사용자는 활동 기록의 감정을 수정할 수 있다. | ||
+ | 10. 사용자는 활동 기록에 사진을 추가할 수 있다. | ||
+ | 11. 사용자는 활동 기록에 사진을 삭제할 수 있다. | ||
+ | 12 .사용자는 활동 기록에 태그를 추가할 수 있다. | ||
+ | 13. 사용자는 활동 기록의 태그를 수정할 수 있다. | ||
+ | 14. 사용자는 활동 기록의 태그를 삭제할 수 있다. | ||
+ | |||
+ | - 하루 기록 | ||
+ | 1. 사용자는 하루 기록을 조회할 수 있다. | ||
+ | 2. 사용자는 하루 기록에 텍스트를 추가할 수 있다. | ||
+ | 3. 사용자는 하루 기록의 텍스트를 수정할 수 있다. | ||
+ | 4. 사용자는 하루 기록에 감정을 추가할 수 있다. | ||
+ | 5. 사용자는 하루 기록의 감정을 수정할 수 있다. | ||
+ | 6. 사용자는 활동 추천을 조회할 수 있다. | ||
+ | 7. 사용자는 하루 일기의 작성 현황을 캘린더 형태로 조회할 수 있다. | ||
+ | |||
+ | - 활동 통계 | ||
+ | 1. 사용자는 활동에 대한 기간별 통계를 그래프 형태로 제공받을 수 있다. | ||
+ | 2. 사용자는 활동을 순위의 형태로 제공받을 수 있다. | ||
+ | 3. 사용자는 조회 기간을 월간/주간으로 설정할 수 있다. | ||
+ | 4. 사용자는 활동통계를 감정 지도 형태로 제공받을 수 있다. | ||
+ | 5. 사용자는 활동통계를 활동 지도 형태로 제공받을 수 있다. | ||
+ | |||
+ | - 하루 일기 | ||
+ | 1. 사용자는 하루 일기를 조회할 수 있다. | ||
+ | 2. 사용자는 하루 일기를 자동으로 생성할 수 있다. | ||
+ | 3. 사용자는 하루 일기를 수동으로 생성할 수 있다. | ||
+ | 4. 사용자는 하루 일기를 수정할 수 있다. | ||
+ | 5. 사용자는 하루 일기를 삭제할 수 있다. | ||
+ | 6. 사용자는 하루 일기를 백업할 수 있다. | ||
+ | 7. 사용자는 하루 일기를 복원할 수 있다. | ||
+ | 8. 사용자는 하루 일기의 작성 현황을 캘린더 형태로 조회할 수 있다. | ||
===개념설계안=== | ===개념설계안=== | ||
− | + | ====자동기록==== | |
+ | |||
+ | - 위치 | ||
+ | - 구현 위치: 프론트 | ||
+ | - 사용하는 데이터: 가속도 센서 데이터 | ||
+ | - 생성하는 데이터: GPS 데이터 | ||
+ | - 구조 | ||
+ | 1. 가속도 센서로 이동이 감지되면 자동기록 루틴을 시작한다. | ||
+ | 2. 수집 딜레이 간격으로 정보를 수집한다. | ||
+ | 3. 활동 판단 결과로 수집을 지속하거나 대기상태로 전환한다. | ||
+ | 4. 활동으로 판단되면 활동기록 데이터 생성을 시작한다. | ||
+ | |||
+ | - 감정 | ||
+ | |||
+ | [[파일:감정추정설계_활짝.png]] | ||
+ | |||
+ | - 구현 위치: 프론트 | ||
+ | - 사용하는 데이터: 생체신호 데이터 | ||
+ | - 생성하는 데이터: 감정 데이터 | ||
+ | - 구조 | ||
+ | 1. 자동기록 루틴에서 생체신호 정보를 수집한다. | ||
+ | 2. 활동으로 판정되면 백엔드 API에서 감정 추정을 요청한다. | ||
+ | 3. 감정 추정 결과를 활동기록 데이터에 기록한다. | ||
+ | |||
+ | - 날씨 | ||
+ | - 구현 위치: 프론트 | ||
+ | - 사용하는 데이터: GPS 데이터 | ||
+ | - 생성하는 데이터: 날씨 데이터 | ||
+ | - 구조 | ||
+ | 1. 활동으로 판정되면 기상청 API로 초단기 실황 정보를 요청한다. | ||
+ | 2. 받은 기상 정보를 활동기록 데이터에 기록한다. | ||
+ | |||
+ | - 사진 | ||
+ | - 구현 위치: 프론트 | ||
+ | - 사용하는 데이터: GPS 데이터 | ||
+ | - 생성하는 데이터: 사진 데이터 | ||
+ | - 구조 | ||
+ | 1. 활동으로 판정되면 사용자 기기에서 해당 위치에서 찍힌 사진 확인한다. | ||
+ | 2. 해당 사진을 활동기록 데이터에 기록한다. | ||
+ | |||
+ | - 자동기록 흐름도 | ||
+ | |||
+ | [[파일:자동기록흐름도_활짝.png]] | ||
+ | |||
+ | |||
+ | ====활동기록==== | ||
+ | |||
+ | [[파일:활동기록개념설계_활짝.png]] | ||
+ | |||
+ | - 자동 생성 | ||
+ | - 구현 위치: 프론트 | ||
+ | - 사용하는 데이터: GPS 정보(경도, 위도, 시간), 생체신호 정보, 사진 | ||
+ | - 생성하는 데이터: 활동기록 데이터 | ||
+ | - 구조 | ||
+ | 1. 자동 기록 루틴에서 활동으로 판단되면 활동 기록을 생성한다. | ||
+ | 2. 자동기록의 데이터 수집 동작을 통해 가공된 데이터를 습득한다. | ||
+ | 3. 습득한 모든 정보를 포함하는 활동 기록을 생성하고 DB에 저장한다. | ||
+ | |||
+ | - 사용자 관리 | ||
+ | - 구현 위치: 프론트 | ||
+ | - 사용하는 데이터: 활동기록 데이터 | ||
+ | - 생성하는 데이터: 활동기록 데이터 | ||
+ | - 구조 | ||
+ | 1. 관리하고자 하는 활동기록 데이터를 불러온다. | ||
+ | 2. 사용자가 원하는 대로 데이터를 추가, 수정, 삭제 한다. | ||
+ | 3. 삭제 시 삭제 주의 알림을 통해 다시 한 번 사용자의 의도를 확인한다. | ||
+ | 4. 추가, 수정, 삭제된 정보를 DB에 갱신한다. | ||
+ | |||
+ | ====하루기록==== | ||
+ | |||
+ | [[파일:하루기록개념설계_활짝.png]] | ||
+ | |||
+ | - 세부기록 관리 | ||
+ | - 구현 위치: 프론트 | ||
+ | - 사용하는 데이터: 하루기록 데이터 | ||
+ | - 생성하는 데이터: 하루기록 데이터 | ||
+ | - 구조 | ||
+ | 1. 선택한 하루기록 데이터를 불러온다. | ||
+ | 2. 사용자가 원하는 텍스트, 일기, 감정을 포함하는 세부기록을 추가, 수정, 삭제한다. | ||
+ | 3. 삭제 시 삭제 주의 알림을 통해 다시 한 번 사용자의 의도를 확인한다. | ||
+ | 4. 추가, 수정, 삭제된 정보를 DB에 갱신한다. | ||
+ | |||
+ | - 하루 일기 생성 | ||
+ | |||
+ | [[파일:하루일기개념설계_활짝.png]] | ||
+ | |||
+ | - 구현 위치: 프론트, 백엔드 | ||
+ | - 사용하는 데이터: 하루기록 데이터, 일기 데이터 | ||
+ | - 생성하는 데이터: 하루기록 데이터, 일기 데이터 | ||
+ | - 구조 | ||
+ | - 프론트 | ||
+ | 1. 선택한 하루기록 데이터를 불러온다. | ||
+ | 2. 사용자가 일기 프로필을 선택 및 원하는 대로 수정한다. | ||
+ | 3. 백엔드 API에서 일기생성을 요청한다. | ||
+ | 4. 자동 생성 결과를 사용자에게 제공한다. | ||
+ | - 백엔드 | ||
+ | 1. 활동기록 데이터에서 필요한 데이터를 추출해 문장으로 변환한다. | ||
+ | 2. 사용자가 선택한 프로필에 맞게 문장을 가공하여 일기 생성 입력 데이터를 만들고, GPT API를 호출한다. | ||
+ | 3. 받은 내용을 프론트로 전송한다. | ||
+ | |||
+ | |||
+ | - 일기 백업 | ||
+ | - 구현 위치: 프론트 | ||
+ | - 사용하는 데이터: 하루기록 데이터>하루일기 데이터 | ||
+ | - 생성하는 데이터: 하루기록 데이터 | ||
+ | - 구조 | ||
+ | - 선택한 일기를 DB에 저장한다. | ||
+ | |||
+ | - 일기 불러오기 | ||
+ | - 구현 위치: 프론트 | ||
+ | - 사용하는 데이터: 하루기록 데이터>하루일기 데이터 | ||
+ | - 생성하는 데이터: 하루기록 데이터>하루일기 데이터 | ||
+ | - 구조 | ||
+ | - 백업된 일기를 선택한 하루기록의 일기로 불러온다. | ||
+ | |||
+ | |||
+ | ====하루 추천==== | ||
+ | |||
+ | [[파일:하루추천개념설계_활짝.png]] | ||
+ | |||
+ | - 활동기록 기반 | ||
+ | - 구현 위치: 백엔드 | ||
+ | - 사용하는 데이터: 활동 기록 데이터 뭉치 | ||
+ | - 생성하는 데이터: 추천 장소 데이터 | ||
+ | - 구조 | ||
+ | 1. 해당 하루기록의 활동기록들을 모두 종합한다. | ||
+ | 2. 평점을 기준으로 오름차순 정렬을 하고 순서대로 추천모델을 통해 사용된 활동기록 데이터의 장소 근처의 추천 장소를 추출한다. | ||
+ | 3. 추출한 추천 장소 데이터를 프론트에 전송한다. | ||
+ | |||
+ | - 통계기록 기반 | ||
+ | - 구현 위치: 백엔드 | ||
+ | - 사용하는 데이터: 활동기록 데이터 | ||
+ | - 생성하는 데이터: 추천 장소 데이터 | ||
+ | - 구조 | ||
+ | 1. 하루기록에 활동기록이 없을 경우 사용자의 한 달 통계 중 가장 많이 한 활동 및 장소를 종합한다. | ||
+ | 2. 종합한 데이터를 위와 동일한 방법으로 추천 장소를 추출한다. | ||
+ | 3. 추출한 추천 장소 데이터를 프론트에 전송한다. | ||
+ | |||
+ | ====활동 통계==== | ||
+ | |||
+ | [[파일:활동통계개념설계_활짝.png]] | ||
+ | |||
+ | - 감정 지도 | ||
+ | - 구현 위치: 프론트 | ||
+ | - 사용하는 데이터: 하루 기록 데이터 뭉치 | ||
+ | - 생성하는 데이터: 감정 지도 | ||
+ | - 구조 | ||
+ | 1. 사용자가 기간을 설정(주간, 월간, 임의 구간)한다. | ||
+ | 2. 선택한 기간에 해당하는 하루기록의 통계량을 계산하여 필요에 맞게 그룹화 된 데이터를 생성한다. | ||
+ | 3. 생성한 데이터를 토대로 지도 형태로 시각화 하고 그 아래에 통계를 리스트 형태로 시각화한 자료를 제공한다. | ||
+ | |||
+ | - 활동지도 | ||
+ | - 구현 위치: 프론트 | ||
+ | - 사용하는 데이터: 하루 기록 데이터 뭉치 | ||
+ | - 생성하는 데이터: 활동 지도 | ||
+ | - 구조 | ||
+ | 1. 사용자가 날짜를 선택한다. | ||
+ | 2. 선택한 날짜에 해당하는 하루기록 데이터를 불러와 지도위에 표시한다. | ||
+ | 3. 지도 아래에 활동기록과 이동경로를 타임라인 형식으로 제공한다. | ||
+ | |||
+ | - 감정 추이 꺾은선 그래프 | ||
+ | - 구현 위치: 프론트 | ||
+ | - 사용하는 데이터: 하루기록 데이터 뭉치 | ||
+ | - 생성하는 데이터: 꺾은선 그래프 | ||
+ | - 구조 | ||
+ | 1. 사용자가 기간을 설정(주간, 월간, 임의 구간)한다. | ||
+ | 2. 선택한 기간에 해당하는 하루기록의 통계량을 계산하여 필요에 맞게 그룹화 된 데이터를 생성한다. | ||
+ | 3. 생성한 데이터를 토대로 y축이 감정 점수, x축이 날짜인 꺾은선 그래프를 생성한다. | ||
+ | - 감정 통계 | ||
+ | - 구현 위치: 프론트 | ||
+ | - 사용하는 데이터: 하루기록 데이터 뭉치 | ||
+ | - 생성하는 데이터: 감정 통계 | ||
+ | - 구조 | ||
+ | 1. 사용자가 기간을 설정(주간, 월간, 임의 구간)한다. | ||
+ | 2. 선택한 기간에 해당하는 하루기록의 통계량을 계산하여 필요에 맞게 그룹화 된 데이터를 생성한다. | ||
+ | 4. 감정 단위로 그룹화된 데이터를 토대로 기간 동안의 감정 빈도를 시각화하여 제공한다. | ||
+ | |||
+ | - 활동 장소 통계 | ||
+ | - 구현 위치: 프론트 | ||
+ | - 사용하는 데이터: 하루기록 데이터 뭉치 | ||
+ | - 생성하는 데이터: 활동장소 통계 | ||
+ | - 구조 | ||
+ | 1. 사용자가 기간을 설정(주간, 월간, 임의 구간)한다. | ||
+ | 2. 선택한 기간에 해당하는 하루기록의 통계량을 계산하여 필요에 맞게 그룹화 된 데이터를 생성한다. | ||
+ | 3. 장소 단위로 그룹화 된 데이터를 토대로 빈도, 감정 등을 시각화하여 제공한다. | ||
+ | |||
+ | ====계정 관리==== | ||
+ | |||
+ | [[파일:계정관리개념설계_활짝.png]] | ||
+ | |||
+ | - 회원 가입 | ||
+ | - 구현 위치: 프론트 | ||
+ | - 사용하는 데이터: Password, Email | ||
+ | - 생성하는 데이터: 계정정보 데이터 | ||
+ | - 구조 | ||
+ | 1. 사용자가 PW, Email 정보로 가입을 시도한다. | ||
+ | 2. 백엔드에서 해당 주소로 인증 메일을 전송한다. | ||
+ | 3. 사용자는 해당 메일을 통해 인증을 거치고 나서 정식 회원으로 가입이 완료된다. | ||
+ | |||
+ | - 로그인 | ||
+ | - 구현 위치: 프론트 | ||
+ | - 사용하는 데이터: Email, Password | ||
+ | - 생성하는 데이터: 없음 | ||
+ | - 구조 | ||
+ | 1. 사용자가 Email, Passwrod로 인증서버에 인증요청을 보낸다. | ||
+ | 2. 인증이 되면 메인 화면으로 넘어가고, 그렇지 않으면 재입력을 요구한다. | ||
+ | |||
+ | - 비밀번호 찾기 | ||
+ | - 구현 위치: 프론트 | ||
+ | - 사용하는 데이터: ID, Email | ||
+ | - 생성하는 데이터: 없음 | ||
+ | - 구조 | ||
+ | 1. 사용자가 Email을 통해 비밀번호 찾기를 요청한다. | ||
+ | 2. 인증서버가 해당 메일이 가입되어있는지 확인하고 비밀번호 재설정 메일을 보낸다. | ||
+ | 3. 사용자는 재설정 메일을 통해 비밀번호를 재설정한다. | ||
+ | |||
+ | - 회원 탈퇴 | ||
+ | - 구현 위치: 프론트 | ||
+ | - 사용하는 데이터: 사용자 데이터 | ||
+ | - 생성하는 데이터: 없음 | ||
+ | - 구조 | ||
+ | 1. 사용자가 회원 탈퇴를 요청한다. | ||
+ | 2. 알림을 통해 다시한번 사용자의 의사를 확인하고 관련된 데이터를 제거한다. | ||
+ | |||
+ | - 개인정보 수정 | ||
+ | - 구현 위치: 프론트 | ||
+ | - 사용하는 데이터: 사용자 데이터 | ||
+ | - 생성하는 데이터: 사용자 데이터 | ||
+ | - 구조 | ||
+ | 1. 사용자에게 다시 비밀번호를 받아 인증과정을 거친다. | ||
+ | 2. 사용자가 원하는 개인정보를 수정한다. | ||
+ | 3. 수정된 정보를 DB에 갱신한다. | ||
+ | |||
+ | ===소프트웨어 구조도=== | ||
+ | [[파일:구조도_활짝.png]] | ||
+ | |||
+ | ◇ 안드로이드 애플리케이션 | ||
+ | |||
+ | - 활짝 서비스가 제공되고 사용할 수 있는 환경이다. | ||
+ | |||
+ | - Google이 개발한 네이티브 앱 구축 프레임워크인 Flutter를 사용하여 구현한다. | ||
+ | |||
+ | |||
+ | ◇ DB 및 인증 서버 | ||
+ | |||
+ | - 사용자 인증용 모듈과 활짝 서비스 운영에 필요한 데이터들을 저장 및 관리하는 서버이다. | ||
+ | |||
+ | - Google이 개발한 모바일 및 웹 애플리케이션을 위한 클라우드 플랫폼인 Firebase를 사용한다. | ||
+ | |||
+ | - Authentication API를 사용하여 계정 및 인증 절차를 구현한다. | ||
+ | |||
+ | - Firestore API를 사용하여 NO-SQL 기반의 데이터베이스를 구현한다. | ||
+ | |||
+ | - 별도 기능 모듈(서버)과 데이터 베이스 및 인증 서버의 배포 및 운영을 분리한다. | ||
+ | |||
+ | |||
+ | ◇ 서버 배포 | ||
+ | |||
+ | - 활동 추천 모듈, 자동 일기 생성 모듈 등의 활짝 서비스에서의 별도의 기능 모듈을 제공하고 운영하기 위한 서버이다. | ||
+ | |||
+ | - Google이 개발한 컨테이너 기반 Serverless 클라우드 인프라 플랫폼 Cloud Run을 사용한다. | ||
+ | |||
+ | - 모듈을 구현하기 위하여 Python 기반 웹 프레임워크인 Fast-API를 통해 REST-API를 작성한다. | ||
+ | |||
+ | - 구현한 모듈을 컨테이너 이미지로 만들고 관리하기 위하여 Docker를 사용한다. | ||
+ | |||
+ | - 컨테이너화된 모듈을 독립적으로 활짝 서비스에서 외부 절차가 필요한 기능을 동작 및 배포하기 위하여 Cloud Run을 사용한다. | ||
+ | |||
+ | ===소프트웨어 설계=== | ||
+ | ====데이터베이스 스키마==== | ||
+ | |||
+ | [[파일:데이터베이스_활짝.png]] | ||
+ | |||
+ | - 회원정보(User) | ||
+ | |||
+ | - uid <int>: 계정을 식별하기 위한 고유 식별자(PK). | ||
+ | - email <str>: 계정의 인증을 수행하기 위한 이메일. 아이디로써 사용한다. | ||
+ | - password <str>: 계정의 인증을 수행하기 위한 비밀번호. | ||
+ | - created_at <DateTime>: 계정이 생성된 시간. | ||
+ | - email_verified <boolean>: 계정의 이메일의 검증 유무용 Flag. | ||
+ | |||
+ | - 하루기록(DailyRecord) | ||
+ | |||
+ | - id <int>: 하루 기록을 식별하기 위한 식별자(PK). | ||
+ | - user_uid <int>: 계정을 식별하기 위한 고유 식별자(FK). | ||
+ | - emotion <int>: 감정 저장. | ||
+ | - created_at <DateTime>: 하루 기록이 생성된 시간. | ||
+ | - contents <int>: 하루 기록의 텍스트 저장. | ||
+ | - activity_records List<ActivityRecord>: 해당 일자의 활동 기록 리스트 저장 | ||
+ | - haru_diary <HaruDiary>: 해당 일자의 하루 일기 저장. | ||
+ | |||
+ | - 활동기록(ActivityRecord) | ||
+ | |||
+ | - id <int>: 활동 기록을 식별하기 위한 식별자(PK). | ||
+ | - daily_record_id <int>: 하루 기록을 식별하기 위한 고유 식별자(FK). | ||
+ | - user_uid <int>: 계정을 식별하기 위한 고유 식별자. | ||
+ | - x_value <float>: 활동 장소의 X 좌표값 저장. | ||
+ | - y_value <float>: 활동 장소의 Y 좌표값 저장. | ||
+ | - place <str>: 활동 장소의 이름 저장. | ||
+ | - emotion <int>: 감정 저장. | ||
+ | - start_at <DateTime>: 해당 활동 시작 시간. | ||
+ | - end_at <DateTime>: 해당 활동 종료 시간. | ||
+ | - weather <int>: 해당 활동 시간, 장소의 날씨. | ||
+ | - contents <str>: 활동 기록의 텍스트 저장. | ||
+ | - tags <str>: 활동 기록의 태그 저장. | ||
+ | - categories <str>: 장소의 카테고리. | ||
+ | |||
+ | - 하루일기(HaruDiary) | ||
+ | |||
+ | - id <int>: 하루 일기를 식별하기 위한 식별자(PK). | ||
+ | - user_uid <int>: 계정을 식별하기 위한 고유 식별자(FK). | ||
+ | - daily_record_id <int>: 하루 기록을 식별하기 위한 고유 식별자. | ||
+ | - usedTemplate <int>: 자동 일기 작성에 사용한 템플릿. | ||
+ | - currentContents <str>: 하루 일기의 현재 본문. | ||
+ | - created_at <DateTime>: 하루 일기가 생성된 시간. | ||
+ | - edited_at <DateTime>: 하루 일기가 수정된 시간. | ||
+ | - backupContents <str>: 하루 일기의 백업 본문. | ||
+ | - backup_at <DateTime>: 백업 본문이 생성된 시간. | ||
+ | - countOfAutoWriting <DateTime>: 자동 일기 작성 횟수. | ||
+ | ====전체 클래스 설계==== | ||
+ | |||
+ | [[파일:전체클래스도_활짝.png]] | ||
+ | |||
+ | [[파일:전체클래스설계_활짝.png]] | ||
+ | |||
+ | ====화면별 클래스 설계==== | ||
+ | |||
+ | '''◇ 하루기록 페이지''' | ||
+ | |||
+ | [[파일:하루기록페이지_클래스도_활짝.png]] | ||
+ | |||
+ | 하루 기록 페이지는 하루 기록과 그에 속한 활동 기록, 하루 일기, 하루 추천 등을 보여주는 페이지다. | ||
+ | |||
+ | 그러므로 ActivitryRecordDailyRecord 패키지 기능을 대부분 사용한다. (Statistics 패키지는 해당 페이지와 상관없으므로 사용하지 않는다.) | ||
+ | |||
− | + | [[파일:하루기록페이지_클래스설계_활짝.png]] | |
− | |||
− | === | + | |
− | + | '''◇ 캘린더 페이지''' | |
+ | |||
+ | [[파일:캘린더페이지_클래스도_활짝.png]] | ||
+ | |||
+ | 화면상 캘린더 페이지는 한 달간의 하루기록/하루일기를 보여주는 화면으로서 하루 기록 페이지와 비슷하게 동작한다. | ||
+ | |||
+ | 사용자는 이곳에서 한눈에 자신의 기록을 한 달 단위로 볼 수 있을 것이다. | ||
+ | |||
+ | 따라서 특정 기간에 대한 하루기록, 하루일기를 조회하는 기능을 사용한다는 점에서 하루 기록 페이지와 차이가 있다. | ||
+ | |||
+ | [[파일:캘린더페이지_클래스설계_활짝.png]] | ||
+ | |||
+ | |||
+ | '''◇ 활동 통계 페이지''' | ||
+ | |||
+ | [[파일:활동통계페이지_클래스도_활짝.png]] | ||
+ | |||
+ | 활동 통계 페이지의 경우 사용자의 활동기록들을 가져와 통계를 내어 이를 다양한 시각화 방식으로 제공하는 화면이다. | ||
+ | |||
+ | 이 화면에서 사용자는 통계자료들을 조회하는 행위만 일어나게 된다. 그러므로 위의 Statistics 패키지를 모두 사용하여 해당 서비스를 제공한다. | ||
+ | |||
+ | [[파일:활동통계페이지_클래스설계_활짝.png]] | ||
+ | |||
+ | |||
+ | '''◇ 사용자 설정 페이지''' | ||
+ | |||
+ | [[파일:사용자설정페이지_클래스도_활짝.png]] | ||
+ | |||
+ | 활동 통계 페이지의 경우 사용자의 활동기록들을 가져와 통계를 내어 이를 다양한 시각화 방식으로 제공하는 화면이다. | ||
+ | |||
+ | 사용자 설정 페이지의 경우 사용자 관리 기능을 하는 페이지다. | ||
+ | |||
+ | 이를 위하여 위의 Member 패키지의 기능을 사용한다. 이 화면에서 사용자는 자신의 사용자 정보를 조회, 수정, 삭제할 수 있다. | ||
+ | |||
+ | [[파일:사용자설정페이지_클래스설계_활짝.png]] | ||
+ | |||
+ | ====UI 설계==== | ||
+ | 1. 하루 기록 | ||
+ | |||
+ | [[파일:화면설계_하루기록_활짝.png]] | ||
+ | |||
+ | 2. 활동 기록 | ||
+ | |||
+ | [[파일:화면설계_활동기록_활짝.png]] | ||
+ | |||
+ | 3. 캘린더 | ||
+ | |||
+ | [[파일:화면설계_캘린더_활짝.png]] | ||
+ | |||
+ | 4. 통계 | ||
+ | |||
+ | [[파일:화면설계_통계_활짝.png]] | ||
+ | |||
+ | 5. 계정 관리 | ||
+ | |||
+ | [[파일:화면설계_계정관리_활짝.png]] | ||
==결과 및 평가== | ==결과 및 평가== | ||
===완료 작품의 소개=== | ===완료 작품의 소개=== | ||
− | ==== | + | |
− | + | ====설치 방법==== | |
− | ==== | + | |
− | + | [[파일:설치_활짝.png]] | |
+ | |||
+ | <nowiki>설치 링크: https://bit.ly/3NlzlN4</nowiki> | ||
+ | |||
+ | ====작동 장면==== | ||
+ | |||
+ | '''◇ 권한 설정 화면''' | ||
+ | |||
+ | [[파일:권한설정_활짝.png]] | ||
+ | |||
+ | '''◇ 하루기록''' | ||
+ | |||
+ | - 하루 감정 | ||
+ | |||
+ | [[파일:하루감정_활짝.png]] | ||
+ | |||
+ | - 하루 기록 | ||
+ | |||
+ | [[파일:하루기록_활짝.png]] | ||
+ | |||
+ | '''◇ 활동기록''' | ||
+ | |||
+ | - 수동 생성 | ||
+ | |||
+ | [[파일:활동기록수동생성_1_활짝.png]] | ||
+ | |||
+ | [[파일:활동기록수동생성_2_활짝.png]] | ||
+ | |||
+ | [[파일:활동기록수동생성_3_활짝.png]] | ||
+ | |||
+ | - 자동 기록 | ||
+ | |||
+ | [[파일:활동기록자동기록_1_활짝.png]] | ||
+ | |||
+ | [[파일:활동기록자동기록_2_활짝.png]] | ||
+ | |||
+ | - 활동기록 수정 | ||
+ | |||
+ | [[파일:활동기록수정_활짝.png]] | ||
+ | |||
+ | - 활동기록 삭제 | ||
+ | |||
+ | [[파일:활동기록삭제_활짝.png]] | ||
+ | |||
+ | - 활동 추천 | ||
+ | |||
+ | [[파일:활동추천_활짝.png]] | ||
+ | |||
+ | '''◇ 캘린더 페이지''' | ||
+ | |||
+ | – 하루 기록 | ||
+ | |||
+ | [[파일:캘린더페이지_하루기록_활짝.png]] | ||
+ | |||
+ | – 하루 기록 및 활동 기록 | ||
+ | |||
+ | [[파일:캘린더페이지_하루활동기록_활짝.png]] | ||
+ | |||
+ | - 하루 일기 – 수동 생성 | ||
+ | |||
+ | [[파일:하루일기수동생성_활짝.png]] | ||
+ | |||
+ | - 하루 일기 – 자동 생성 | ||
+ | |||
+ | [[파일:하루일기자동생성_활짝.png]] | ||
+ | |||
+ | - 하루 일기 – 수정 및 삭제 | ||
+ | |||
+ | [[파일:하루일기수정삭제_활짝.png]] | ||
+ | |||
+ | - 하루 일기 – 일기 보관 | ||
+ | |||
+ | [[파일:하루일기보관_활짝.png]] | ||
+ | |||
+ | - 하루 일기 – 일기 되돌리기 | ||
+ | |||
+ | [[파일:하루일기되돌리기_활짝.png]] | ||
+ | |||
+ | '''◇ 활동통계 페이지''' | ||
+ | |||
+ | - 기본 페이지 | ||
+ | |||
+ | [[파일:통계페이지_1_활짝.png]] | ||
+ | |||
+ | [[파일:통계페이지_2_활짝.png]] | ||
+ | |||
+ | [[파일:통계페이지_3_활짝.png]] | ||
+ | |||
+ | - 감정 지도(기본 지도) | ||
+ | |||
+ | [[파일:감정지도_1_활짝.png]] | ||
+ | |||
+ | [[파일:감정지도_2_활짝.png]] | ||
+ | |||
+ | - 활동 지도 | ||
+ | |||
+ | [[파일:활동지도_1_활짝.png]] | ||
+ | |||
+ | [[파일:활동지도_2_활짝.png]] | ||
+ | |||
+ | '''◇ 설정''' | ||
+ | |||
+ | - 내정보 수정 | ||
+ | |||
+ | [[파일:내정보수정_1_활짝.png]] | ||
+ | |||
+ | [[파일:내정보수정_2_활짝.png]] | ||
+ | |||
+ | - 로그아웃 | ||
+ | |||
+ | [[파일:로그아웃_활짝.png]] | ||
+ | |||
+ | - 회원탈퇴 | ||
+ | |||
+ | [[파일:회원탈퇴_활짝.png]] | ||
===관련사업비 내역서=== | ===관련사업비 내역서=== | ||
− | + | [[파일:개발사업비내역서_활짝.png]] | |
===완료작품의 평가=== | ===완료작품의 평가=== | ||
− | + | [[파일:완료작품평가_활짝.png]] | |
===향후계획=== | ===향후계획=== | ||
− | 내용 | + | '''가. 어려웠던 내용들''' |
+ | |||
+ | ◇ 모바일 애플리케이션 개발 숙련도 부족 | ||
+ | |||
+ | ◇ 자동 기록 수집 간 필요한 권한 설정 | ||
+ | |||
+ | ◇ 기존 제공 API를 활용하여 서비스 제공 – Place API, GoogleMapSDK | ||
+ | |||
+ | ◇ 생체 신호를 기반한 감정 추정 알고리즘 작성을 위한 이론적 근거 부족 | ||
+ | |||
+ | ◇ 감정 추정 데이터 획득을 위한 절차 및 인증 복잡 | ||
+ | |||
+ | ◇ PlayStore 업로드를 하기 위한 절차 | ||
+ | |||
+ | ◇ 활동에 대해 자동으로 수집할 수 있는 데이터의 부족 | ||
+ | |||
+ | |||
+ | '''나. 차후 구현할 내용''' | ||
+ | |||
+ | ◇ 생체 정보를 이용한 감정 추정 | ||
+ | |||
+ | ◇ 실제 사용자 데이터를 기반 활동 추천 기능 | ||
+ | |||
+ | ◇ 태그를 활용한 워드클라우드 – 활동 통계 페이지 | ||
+ | |||
+ | ◇ GPT 기반 자동 일기 작성이 아닌 미세조정된 언어 모델 사용 | ||
+ | |||
+ | ◇ 하루 기도 기능 간에 검색 기능 혹은 지도의 기능 추가 | ||
+ | |||
+ | ◇ 활동 기록 자동 생성 알고리즘 고도화 | ||
+ | |||
+ | == 부록 == | ||
+ | === 참고문헌 및 참고 사이트 === | ||
+ | |||
+ | <nowiki> | ||
+ | https://flutter-ko.dev/ | ||
+ | </nowiki> | ||
+ | <nowiki>https://pub.dev/packages/background_locator_2</nowiki> | ||
+ | |||
+ | <nowiki>https://developers.google.com/maps?hl=ko</nowiki> | ||
+ | |||
+ | <nowiki>https://developers.google.com/maps/documentation/places/web-service/overview?hl=ko</nowiki> | ||
+ | |||
+ | <nowiki>https://www.data.go.kr/data/15084084/openapi.do</nowiki> | ||
+ | |||
+ | <nowiki>https://firebase.google.com/docs/auth?hl=ko</nowiki> | ||
+ | |||
+ | <nowiki>https://pub.dev/packages/cloud_firestore</nowiki> | ||
+ | |||
+ | <nowiki>https://pub.dev/packages/firebase_core | ||
+ | </nowiki> | ||
+ | |||
+ | === 활짝 서비스 다운로드 링크 === | ||
+ | |||
+ | <nowiki>https://bit.ly/3NlzlN4</nowiki> |
2023년 6월 17일 (토) 14:11 기준 최신판
프로젝트 개요
기술개발 과제
국문 : 활짝: 상황 인식 기반 활동 자동 기록 애플리케이션
영문 : Hwaljjag: Context-awareness-based activity auto-recording application
과제 팀명
활짝
지도교수
정*규 교수님
개발기간
2023년 3월 ~ 2023년 6월 (총 4개월)
구성원 소개
서울시립대학교 컴퓨터과학부 20179200** 김*수(팀장)
서울시립대학교 컴퓨터과학부 20179200** 김*엽
서울시립대학교 통계학과 20175800** 최*웅
서론
개발 과제의 개요
개발 과제 요약
◇ ‘활짝’은 바쁜 현대인들이 더 편리하게 활동을 기록할 수 있도록 사용자의 활동을 자동으로 기록해주는 서비스이다. 과거부터 지금까지 사람들은 자신의 일상을 기록으로 남기고자 하려는 욕구가 있다. 하지만 이런 행위는 바쁜 현대인에게 귀찮거나 막상 쓸 때 기억이 나지 않아 어렵게 여겨질 수 있다. 그리하여 자동으로 일상을 기록해줌으로써 보다 편리하게 자신의 활동을 기록할 수 있는 서비스를 구상하였고, 그것이 바로 ‘활짝’이다. 이 애플리케이션에서 사용자는 자신의 활동이 자동으로 기록되며 활동들을 관리할 수 있다. 그리고 날짜나 활동에 감정표현 및 보다 자세한 작성을 할 수 있다. 이에 더해 다양한 통계와 활동 추천 서비스를 제공받을 수 있을 것이다.
개발 과제의 배경
◇ 일상을 기록하는 것은 가치 있는 행동이다.
기록이라 함은 후일에 남길 목적으로 글을 적는 것을 나타낸다. 과거부터 오늘날까지 계속 이어져 오고 있는 기록 문화는 사람이 자신의 무언가를 남기고 싶어 하는 욕구가 있음을 보여준다. 사람의 기억력만으로 자신의 과거를 온전히 기억하기에는 부족하다. 하지만 자신의 일상을 기록하고, 이를 봄으로써 사람들은 과거를 되돌아볼 수 있다. 이렇게 자신의 과거를 돌아볼 수 있다는 것은 곧 자기 객관화와 자기를 이해하는 데 도움이 된다. 이렇듯 일상을 기록하는 것은 단순 행위를 넘어 일상에서 자신을 되찾으려는 움직임으로 볼 수 있다.
◇ 온라인상으로 자신의 일상을 기록하는 인구가 늘고 있다.
요즘 일기를 쓰는 청년들은 오프라인뿐만 아니라 온라인에서도 일상을 기록한다. 대표적으로 네이버 블로그나 인스타그램을 꼽을 수 있다. 네이버 블로그의 경우 ‘주간일기챌린지’ 공개 이후 블로그 개설률이 14% 증가했다. 인스타그램은 현재 국내 SNS 사용자 수 1위를 달성할 정도로 압도적인 인기를 보여주고 있다. 하지만 이렇게 SNS에 일상을 올리는 것은 남에게 노출되는 서비스 특성상 보여주기식의 일상 공유의 성격이 강할뿐더러 개인적인 생각을 올리기에 꺼려지게 되는 것은 경계할 점이다.
◇ 자신의 일상을 기록하지 않는 사람이 많다.
일상을 기록하는 방법의 하나인 일기 쓰기의 실태를 찾아보았다. 인간성회복운동추진협의회에서는 2021년에 초·중등 학생 1,122명을 대상으로 일기 쓰기 실태를 조사해 결과를 발표했다. 조사 결과에 따르면 전체 응답자 중 일기를 쓰는 학생은 21.5%에 불과하고, 일기를 쓰지 않는 학생은 78.4%로 나타났다. 이는 5명 중 거의 4명은 일기를 쓰지 않는 것을 보여준다. 또한 일기를 쓰지 않는 이유로는 “귀찮다”라는 의견이 44.9%로 가장 많았고, 이어 “시간이 없다” 33%, “필요성을 느끼지 못했다” 20.9% 등으로 여러 이유가 등장하였다. 결과적으로 일기를 쓰지 않는 사람이 많으며 그 이유로는 귀찮거나 시간이 없기 때문임을 알 수 있다. 어릴 때의 습관이 계속 이어질 가능성이 높기 때문에 이는 성인에게도 비슷한 결과가 나올 것이다.
◇ 자동으로 일상을 기록하는 걸 원하는 사람이 많다.
LG CNS는 자동으로 일정을 기록하는 애플리케이션을 만들었고 이는 시장에서 큰 호응을 얻어 안드로이드와 IOS 시장을 합쳐 다운로드 수가 대략 20만 회를 넘는다. 또한 이 애플리케이션과 방식은 다르지만, 마찬가지로 자동일기 기능을 담은 여러 어플이 있다. 대표적으로 원스토어에 올라온 “Day Keeper”와 앱스토어의 “STEP-자동일기”를 꼽을 수 있다. 이를 보면 자신의 일상을 자동으로 기록해주는 서비스를 원하는 사람이 많음을 알 수 있다.
개발 과제의 목표 및 내용
◇ 사용자의 위치 정보를 기반으로 활동을 자동으로 기록하는 서비스를 제공한다.
◇ 사용자는 기록된 활동에 감정, 텍스트, 사진 등의 다양한 표현을 삽입할 수 있다.
◇ 사용자에게 자신의 활동에 대한 지도와 그래프 등으로 시각화된 통계를 제공한다.
◇ 사용자에게 활동 데이터를 기반으로 하루에 대한 피드백을 제공한다.
관련 기술의 현황
관련 기술의 현황 및 분석(State of art)
- 전 세계적인 기술현황
◇ Flutter
Flutter는 Google에서 개발 및 지원하는 오픈 소스 프레임워크이다. Flutter를 사용해 다수의 플랫폼에 대한 애플리케이션의 사용자 인터페이스(UI)를 단일 코드 베이스로 구축할 수 있다. 빠른 개발과 표현력 있고 유연한 UI, 네이티브 수준의 성능을 특징으로 하고 있다. 프로그래밍 언어로는 Dart를 사용한다.
◇ Dart
Google이 멀티 플랫폼상에서 동작하는 앱을 빠르게 개발하기 위해 디자인된 프로그래밍 언어이다. UI에 최적화되어 있고 실행 중인 앱에서 즉시 변경 점을 확인할 수 있는 등의 생산성을 제공하며, 모든 플랫폼에서의 빠른 컴파일을 속도를 제공한다.
◇ Firebase
앱과 게임을 빌드하고 성장시키는 데 도움이 되는 앱 개발 플랫폼이다. Google이 지원하며 빌드, 배포 및 모니터링 외에 여러 구글의 도구와 통합된 기능을 제공한다.
◇ GPS
미국이 개발 및 관리하는 위성 항법 시스템으로 세계 어디서든 3대 이상의 인공위성에서 신호를 받아 자신의 위치를 정확히 알아낼 수 있는 시스템이다. GPS를 통해 경도, 위도, 해발고도, 시간 정보를 알아낼 수 있다. 3개 이상의 위성으로부터 정확한 시간을 통해 거리를 측정하고 삼각 측량의 3차원 버전인 삼변 측량법을 이용해서 현재 위치를 정확히 계산할 수 있다. 일반적으로는 사용할 수 있는 모든 위성에서의 정보를 종합하여 정확도를 높인다. 위성과의 거리는 위성에서 정확한 송신 시간을 사용자에게 전달해주면 사용자는 수신 시간을 통해 신호가 오는 데 걸린 시간을 알 수 있고 전파의 속력을 알고 있기 때문에 쉽게 구할 수 있다. 스마트폰에서는 위성으로부터 직접 GPS 위성의 신호를 찾고 수신받으려면 긴 시간이 걸리므로 빠른 통신망을 통해 미리 위성의 궤도정보를 얻어 초기 접속 시의 속도를 개선하는 등의 기술을 활용하여 사용하고 있다. 미 정부에 의하면 스마트폰에서의 평균 오차는 4.9M 정도이며 이는 위성의 위치나 신호 막힘, 대기의 상태 등 여러 추가적인 요인에 의해 더 나빠질 수 있다. 이러한 오차는 사용자 단에서 보정을 통해 정확도를 높일 수 있는데, 우리나라의 경우 국토지리정보원이 고층 건물이 없는 평지에서 오차를 1M 내로 줄일 수 있는 GNSS 보정 정보(SSR) 기술을 공개했다.
◇ PPG(Photoplethysmogram) 센서
빛을 이용해 피의 흐름을 관찰하는 센서. “신체에서 얇은 부분은 빛이 약간 통과하는데 이를 이용해 혈액의 흐름을 관찰할 수 없을까?”라는 생각에서부터 개발된 기술이다. 심장이 피를 보내기 위해 뛰면 혈관을 따라 미세한 변화인 맥파(Plethysmogram, PTG)가 생긴다. 이는 혈액보다 훨씬 빠른 속도이며 이 속도는 동맥의 두께, 혈액의 밀도 같은 혈관 상태에 영향을 받는다. 따라서 맥파를 통해 사람의 순환계 – 심장 및 혈관 상태를 알 수 있다. PPG 센서는 이 맥파에 따라 변화하는 미세한 혈류량을 조사해서 파악한다. 혈류량에 따라 흡수되는 빛의 양이 달라지기 때문에 이를 측정하면 혈액량의 변화를 알 수 있다.
◇ Russell’s circumplex model
몇 가지의 기본 정서를 다차원 척도법을 통해 하위 차원인 valence(기쁜 정도), Arousal(활동 정도) 활성화의 2차원으로 분석한 모델. 총 8개의 그룹으로 나뉘며 28개의 형용사로 이루어져 있다. 활동 정도의 경우 생리적으로 각종 신경이 활동 중인 상태를 말하며 수면 상태일 때 가장 낮다. 간접적인 지표로는 호흡이 가쁘거나 혈압이 올라가는 신체적 변화를 들 수 있다.
◇ 생체신호와 감정
감정은 신화에 의해 형성된 생물학적 특징으로 동물의 생존을 위해 중요한 기능을 한다. 이와 관련된 대표적인 이론들로는 James-Lange 이론(1884), Cannon-Bard 이론(1929), Schachter-singer 이론(1962) 등이 있다. 이러한 이론들에서는 공통으로 감정의 발생과 자율신경계의 교감신경 각성의 연관성을 전제에 두고 이론들을 설명하고 있으며 감정의 발생과 신체적 반응이 필연적인 관계에 있음을 설명하고 있다.
◇ PPG센서를 이용한 감정 추정
“감정 인식을 위한 PPG 데이터의 심박 변이도 및 PSD 분석(Study on Heart Rate Variability and PSD Analysis of PPG Data for Emotion Recognition, 최진영, 김형신)”의 논문에서 PPG 센서를 이용한 감정 인식에 대한 가능성을 제시한다. 해당 논문에서는 위에서 소개한 이론들을 기반으로 감정을 정량적으로 평가하기 위해 스마트폰으로부터 사용자 상황정보와 생체정보를 이용한 연구를 간략하게 소개한다. 논문에 따르면 음성 인식의 경우 73%의 정확도를 가지지만 잡음으로 인한 한계가 있으며, 심전도를 이용한 연구는 94%의 높은 정확도를 가지지만 심전도 측정을 위해 고가의 장비가 필요하고 일상생활에서의 사용이 불가능하다는 한계가 있다. 이러한 이유로 저비용에 편리하고 신속한 결과를 얻을 수 있는 센서의 필요성을 제시하였고, PPG 센서를 활용하여 심박변이도(HRV: heart rate variability)를 측정하고 유럽심장학회에서 제시하는 기준에 따라 분류된 심박변이도의 주파수 영역을 통해 감정을 인식하는 실험을 진행했다. HRV를 고속 푸리에 변환을 거쳐 주파수 대역으로 나눠서 인식을 진행했는데, 대부분의 긍정적 감정의 경우 고주파수 대역이 감지되었지만, 저주파수 대역의 경우 긍정/부정 두 감정에서 모두 높은 비율로 감지되어 PPG 센서에만 의존해서 감정을 정확하게 인식하는 것에는 한계가 있음을 알 수 있는 실험이었다. 여기에 사용자의 상황 정보와 기타 생체 데이터를 추가할 수 있다면 정확도를 높일 수 있을 것으로 기대된다.
◇ GPT
여러 가지 형태의 정보를 통해 소통하는 모델로 이미지, 텍스트를 입력받아서 실생활에서의 경우 사람의 능력보다는 살짝 모자라지만, 다양한 전문 및 학술 벤치마크에서 인간 수준의 성능을 보여주는 결과물을 텍스트 형태로 제공한다. 현재 최신의 버전은 GPT-4이며 영어 모델의 경우 85.5%의 정확도를 보여주고 있다. GPT-3.5, 4를 활용한 인공지능 대화 서비스인 “ChatGPT”가 운영중에 있고, API의 형태로 비용을 내고 해당 모델을 사용할 수 있다.
- 특허조사
◇ ppg센서를 활용한 감정분석
- PPG신호를 이용한 딥러닝 기반의 감정인식 시스템 및 감정인식 방법 Deep learning based emotional recognition system and methods using PPG signals 출원인: 상명대학교 천안산학협력단 출원번호: 1020190103008 (2019.08.22) 설명: PPG신호를 이용한 딥러닝 기반 감정인식 시스템 및 감정인식 방법에 관한 특허
- 사용자의 생체정보 분석을 통한 감정상태 분석장치 및 방법 Apparatus and Method for Decision of Emotional state through analysis of Bio information 출원인: 주식회사 라이프사이언스테크놀로지 출원번호: 1020100101844 (2010.10.19) 설명: 사용자의 생체정보 분석을 통한 감정상태 분석장치 및 방법에 관한 것으로, 사용자의 신체로부터 수집한 맥파(PPG), 피부전기저항(GSR), 피부온도(SKT) 및 외부온도 등의 생체신호를 추출하고, 생체신호를 연산하여 사용자의 감정상태를 분석 및 판단하도록 하는 장치 및 방법에 관한 특허
◇ 위치기반 활동 정보 활용
- 시간 위치 데이터를 이용한 사용자 활동 기반 조언 시스템 및 그 방법 Counsel system based on user activity using position and time data, and method thereof https://doi.org/10.8080/1020180001023 출원인: (주)스파익스 출원번호: 1020180001023 (2018.01.04) 설명: 사용자의 위치 정보와 시간 정보에 근거해 활동을 분석하고 성별, 직종별, 나이별로 그룹을 나누고 등급을 설정한 뒤 같은 등급, 그룹에 속한 다른 사람들의 활동 데이터를 근거로 조언하는 시스템에 관한 특허
- 사용자의 활동에 기반하여 서비스를 제공하는 서비스 방법 및 시스템 SERVICE METHOD AND SYSTEM FOR PROVIDING SERVICE USING USER ACTIVITY 출원인: 엔에이치엔 주식회사 출원번호: 1020130111238 (2013.09.16) 설명: 사용자의 운동 활동을 감지하고 그 양을 측정하여 사용자에게 맞는 디지털 컨텐츠를 제공하는 방법 및 시스템에 관한 특허
- 기술 로드맵
시장상황에 대한 분석
- 경쟁제품 조사 비교
◇ 마이 다이어리
playstore에서 제공 중인 모바일 다이어리 앱이다. 다운로드 횟수는 1000만 회 이상, 평가 횟수는 73.9만으로 모바일 다이어리 시장에서 가장 큰 규모를 갖고 있다고 판단할 수 있고 4.8의 평점으로 사용자 만족도가 높은 서비스라고 판단할 수 있다. 특징으론, 전통적인 텍스트 형태의 일기 작성 서비스를 제공한다. 또한 기분을 10개의 시각적 태그를 통하여 제공하고 간편하게 노트를 관리하게 해준다. 수익 모델을 확인했을 때, 구독과 평생 구매 방식을 통해 프리미엄 기능을 과금하여 사용하는 정책을 사용한다. 구독하지 않는 사용자는 광고 노출을 통하여 수익을 창출한다.
◇ 하루콩
PlayStore, AppStore에서 제공 중인 서비스이다. 다운로드 횟수는 100만 회 이상, 평가 횟수는 3.26+2.4만으로 모바일 다이어리 시장에서 중간의 규모를 갖고 있다고 판단할 수 있고 4.8의 평점으로 사용자 만족도가 높은 서비스라고 판단할 수 있다. 특징으론, 하루의 기록을 귀여운 아이콘 태그를 이용하여 간단한 탭으로 손쉽게 기록하는 서비스이다. 알람을 설정하여 기록 시간을 사용자에게 알려줄 수 있고, 월별 & 연별 통계 리포트와 하루 우울 검사 기능 또한 제공한다. 수익 모델을 확인하면, 연간 & 월간 구독 방식으로 프리미엄 기능을 과금하여 사용할 수 있도록 제공한다. 구독하지 않는 사용자는 광고 노출을 통하여 수익을 창출한다.
◇ 하루조각
PlayStore, AppStore에서 제공 중인 서비스이다. 위치기반 자동 기록 앱으로서 다운로드 횟수는 10만 회 이상, 평가 횟수는 485+680으로 적지 않은 수요를 갖고 있다고 판단할 수 있고 3.8/3.9의 평점으로 사용자 만족도가 높지 않은 서비스라고 판단할 수 있다. 특징으론, 소비 정보, 은행 거래 정보, 수면 정보, 관심사 정보(구글 검색 & 유튜브 시청 기록), 위치 정보 등의 정보를 연동 받아 각각 조각이라는 이름을 붙여 하루마다 모아주고 이를 일별로 확인할 수 있는 서비스이다. 추가로 조각별 월별 리포트를 제공한다. 감정과 사진 추가, 텍스트 기록 작성을 제외하면 모두 자동으로 수집한다. 수집된 정보를 서비스 특징적으로는 현재 로그인 해제 문제와 다양한 데이터들이 제대로 연동되어 수집되지 않아 결함이 존재한다고 평가된다. 수익 모델을 분석했을 때, 과금 요소가 전혀 존재하지 않음을 확인했다.
◇ DayKeeper
OneStore에서 제공 중인 서비스이다. 다운로드 횟수는 5,000회 이상, 평가 횟수는 113으로 모바일 다이어리에서 작은 규모를 갖는다고 판단할 수 있다. 이는 플랫폼의 다양성이 부족이 원인일 수 있다고 분석된다. 평점은 4.7로 사용자의 만족이 높은 서비스라고 판단된다. 특징으론, 사진, 결제 문자, 캘린더, 통화 기록, SNS 등에서 연동받은 데이터를 바탕으로 하루에 대한 데이터를 모아서 제공한다. 추가로, 해당 날의 데이터를 보면서 텍스트 형태의 일기를 작성할 수 있는 서비스를 제공한다. 수집한 데이터를 카테고리별로 분리하여 제공하고, 일기는 별도의 탭에서 확인할 수 있다. 수익 모델은 2000원의 사용료 결제 이후 서비스를 사용할 수 있다.
- 마케팅 전략 제시
◇ 서비스 강점
- 자동 기록 서비스를 통해 기존 거대 다이어리 서비스와 차별성을 가질 수 있다.
- 추출된 활동 장소별로 세부적인 기록을 간단히 추가하여 일별 기록을 종합적으로 간편하게 확인할 수 있다.
- 하루의 기록을 자동으로 수집한 후 활용하는 서비스를 제공하여 경쟁사에 부족한 추가적인 서비스 이용 요인을 제공할 수 있다.
- 기록 리포트의 경우 주별 리포트를 제공하여 기존의 리포트보다 짧은 기간에서 분석 결과를 제공하여 차별점을 가질 수 있다.
◇ 서비스 약점
- 데이터를 자동으로 수집하고 이를 확인할 수 있다는 점에서 사용자들의 과도한 개인 정보 수집 우려가 존재할 수 있다.
- 텍스트 기반의 일기 작성을 선호하는 사용자에게는 기록을 관리하고 세부적으로 설정하는 요인(커스터마이징 기능)이 제공되지 않는다.
◇ 수익 모델(BM)
- 광고 배너: 기록을 수정하거나 단순하게 조회하는 화면에서 광고를 제공하면, 사용자에게 불편함을 발생시킨다고 판단할 수 있다. 제안 서비스의 구조에서 하루의 기록을 활용하여 제공하는 화면에서만 광고를 노출하면 전체적인 사용자 불편감을 낮출 수 있다고 판단된다. 하루 기록 활용 화면에서의 광고 배너를 통하여 수익을 창출할 수 있다.
- 구독 방식: 자동 일기 및 주간 리포트 등의 활용 서비스를 제공할 때 구독 정책을 통하여 추가적인 수익 창출이 가능하다고 판단된다. 구독 사용자에게는 광고 제거 등의 추가적인 혜택을 부여하여 구독 동기를 발생시킬 수 있다. 사용층 확보를 위해 2주에서 한 달간의 무료 프리미엄 서비스 혜택을 제공하여 모든 서비스 체험을 통해 모든 서비스를 사용자에게 경험하게 하여 유인책을 제공할 수 있다.
개발과제의 기대효과
기술적 기대효과
◇ 기존의 유사 앱과 비교했을 때 민감한 개인정보 수집을 하지 않고 다양한 기능을 간결하게 축소하여 더 안정성 높고 가벼운 앱을 제공할 수 있다.
◇ 감정 추정 방식이 웨어러블 기기를 통한 감정 분석을 위한 토대로 활용될 수 있다.
◇ 사회적으로 파장이 큰 GPT 언어 모델의 활용 사례로 기록될 수 있다.
경제적, 사회적 기대 및 파급효과
◇ 일기 작성 혹은 활동을 기록하지 않는 사람들에게 기록 자동화 서비스 및 분석을 제공하여 편의성을 제공할 수 있다.
◇ 여행을 가거나 특별한 장소에서 기억을 가진 사람들에게 간편하게 과거의 추억을 떠올리게 할 수 있다.
기술개발 일정 및 추진체계
개발 일정
구성원 및 추진체계
◇ 김*수(팀장): PM, 프로그램 기획, UI 디자인, 문서 작성, 백엔드 개발, 프론트엔드 개발
◇ 김*엽: 프로그램 기획, UI 디자인, 문서 작성, 백엔드 개발, 프론트엔드 개발
◇ 최*웅: 프로그램 기획, UI 디자인, 문서 작성, 백엔드 개발, 프론트엔드 개발
설계
설계사양
제품의 요구사항
1. 사용자는 로그인을 할 수 있다.
2. 사용자는 회원가입을 할 수 있다.
3. 사용자의 활동 기록이 자동으로 생성된다.
4. 사용자는 자신의 활동 기록을 관리할 수 있다.
5. 사용자는 자신의 하루 기록을 관리할 수 있다.
6. 사용자는 활동을 추천받을 수 있다.
7. 사용자는 활동 통계를 제공받을 수 있다.
8. 사용자는 일기를 자동으로 생성할 수 있다.
9. 사용자는 하루 일기를 관리할 수 있다.
기능별 상세 요구사항
- 계정 관리
1. 사용자는 비밀번호, 이메일을 통해 회원가입할 수 있다. 2. 사용자는 이메일, 비밀번호로 로그인할 수 있다. 3. 사용자는 비밀번호를 초기화를 할 수 있다. 4. 사용자는 계정을 탈퇴할 수 있다. 5. 계정탈퇴 시 모든 데이터는 삭제된다. 6. 사용자는 인증받은 이메일을 변경할 수 있다.
- 자동 기록
1. GPS를 통해 사용자의 위치정보를 수집한다. 2. 사용자의 심박수 및 생체신호를 이용해 감정을 추정한다. 3. 사진을 찍을 때 포함된 GPS 정보를 습득한다. 4. GPS로 얻은 위치의 변동을 통해 기록할 활동을 구분한다. 5. 기록할 활동의 위치와 시간을 기준으로 날씨정보를 수집한다. 6. 위의 정보를 종합하여“활동 기록”을 생성한다.
- 활동 기록
1. 사용자는 활동 기록을 조회할 수 있다. 2. 사용자는 활동 기록을 추가할 수 있다. 3. 사용자는 활동 기록을 삭제할 수 있다. 4. 사용자는 활동 기록에 텍스트를 추가할 수 있다. 5. 사용자는 활동 기록의 텍스트를 수정할 수 있다. 6. 사용자는 활동 기록의 장소를 수정할 수 있다. 7 .사용자는 활동 기록의 시간을 수정할 수 있다. 8. 사용자는 활동 기록에 감정을 추가할 수 있다. 9 .사용자는 활동 기록의 감정을 수정할 수 있다. 10. 사용자는 활동 기록에 사진을 추가할 수 있다. 11. 사용자는 활동 기록에 사진을 삭제할 수 있다. 12 .사용자는 활동 기록에 태그를 추가할 수 있다. 13. 사용자는 활동 기록의 태그를 수정할 수 있다. 14. 사용자는 활동 기록의 태그를 삭제할 수 있다.
- 하루 기록
1. 사용자는 하루 기록을 조회할 수 있다. 2. 사용자는 하루 기록에 텍스트를 추가할 수 있다. 3. 사용자는 하루 기록의 텍스트를 수정할 수 있다. 4. 사용자는 하루 기록에 감정을 추가할 수 있다. 5. 사용자는 하루 기록의 감정을 수정할 수 있다. 6. 사용자는 활동 추천을 조회할 수 있다. 7. 사용자는 하루 일기의 작성 현황을 캘린더 형태로 조회할 수 있다.
- 활동 통계
1. 사용자는 활동에 대한 기간별 통계를 그래프 형태로 제공받을 수 있다. 2. 사용자는 활동을 순위의 형태로 제공받을 수 있다. 3. 사용자는 조회 기간을 월간/주간으로 설정할 수 있다. 4. 사용자는 활동통계를 감정 지도 형태로 제공받을 수 있다. 5. 사용자는 활동통계를 활동 지도 형태로 제공받을 수 있다.
- 하루 일기
1. 사용자는 하루 일기를 조회할 수 있다. 2. 사용자는 하루 일기를 자동으로 생성할 수 있다. 3. 사용자는 하루 일기를 수동으로 생성할 수 있다. 4. 사용자는 하루 일기를 수정할 수 있다. 5. 사용자는 하루 일기를 삭제할 수 있다. 6. 사용자는 하루 일기를 백업할 수 있다. 7. 사용자는 하루 일기를 복원할 수 있다. 8. 사용자는 하루 일기의 작성 현황을 캘린더 형태로 조회할 수 있다.
개념설계안
자동기록
- 위치
- 구현 위치: 프론트 - 사용하는 데이터: 가속도 센서 데이터 - 생성하는 데이터: GPS 데이터 - 구조 1. 가속도 센서로 이동이 감지되면 자동기록 루틴을 시작한다. 2. 수집 딜레이 간격으로 정보를 수집한다. 3. 활동 판단 결과로 수집을 지속하거나 대기상태로 전환한다. 4. 활동으로 판단되면 활동기록 데이터 생성을 시작한다.
- 감정
- 구현 위치: 프론트 - 사용하는 데이터: 생체신호 데이터 - 생성하는 데이터: 감정 데이터 - 구조 1. 자동기록 루틴에서 생체신호 정보를 수집한다. 2. 활동으로 판정되면 백엔드 API에서 감정 추정을 요청한다. 3. 감정 추정 결과를 활동기록 데이터에 기록한다.
- 날씨
- 구현 위치: 프론트 - 사용하는 데이터: GPS 데이터 - 생성하는 데이터: 날씨 데이터 - 구조 1. 활동으로 판정되면 기상청 API로 초단기 실황 정보를 요청한다. 2. 받은 기상 정보를 활동기록 데이터에 기록한다.
- 사진
- 구현 위치: 프론트 - 사용하는 데이터: GPS 데이터 - 생성하는 데이터: 사진 데이터 - 구조 1. 활동으로 판정되면 사용자 기기에서 해당 위치에서 찍힌 사진 확인한다. 2. 해당 사진을 활동기록 데이터에 기록한다.
- 자동기록 흐름도
활동기록
- 자동 생성
- 구현 위치: 프론트 - 사용하는 데이터: GPS 정보(경도, 위도, 시간), 생체신호 정보, 사진 - 생성하는 데이터: 활동기록 데이터 - 구조 1. 자동 기록 루틴에서 활동으로 판단되면 활동 기록을 생성한다. 2. 자동기록의 데이터 수집 동작을 통해 가공된 데이터를 습득한다. 3. 습득한 모든 정보를 포함하는 활동 기록을 생성하고 DB에 저장한다.
- 사용자 관리
- 구현 위치: 프론트 - 사용하는 데이터: 활동기록 데이터 - 생성하는 데이터: 활동기록 데이터 - 구조 1. 관리하고자 하는 활동기록 데이터를 불러온다. 2. 사용자가 원하는 대로 데이터를 추가, 수정, 삭제 한다. 3. 삭제 시 삭제 주의 알림을 통해 다시 한 번 사용자의 의도를 확인한다. 4. 추가, 수정, 삭제된 정보를 DB에 갱신한다.
하루기록
- 세부기록 관리
- 구현 위치: 프론트 - 사용하는 데이터: 하루기록 데이터 - 생성하는 데이터: 하루기록 데이터 - 구조 1. 선택한 하루기록 데이터를 불러온다. 2. 사용자가 원하는 텍스트, 일기, 감정을 포함하는 세부기록을 추가, 수정, 삭제한다. 3. 삭제 시 삭제 주의 알림을 통해 다시 한 번 사용자의 의도를 확인한다. 4. 추가, 수정, 삭제된 정보를 DB에 갱신한다.
- 하루 일기 생성
- 구현 위치: 프론트, 백엔드 - 사용하는 데이터: 하루기록 데이터, 일기 데이터 - 생성하는 데이터: 하루기록 데이터, 일기 데이터 - 구조 - 프론트 1. 선택한 하루기록 데이터를 불러온다. 2. 사용자가 일기 프로필을 선택 및 원하는 대로 수정한다. 3. 백엔드 API에서 일기생성을 요청한다. 4. 자동 생성 결과를 사용자에게 제공한다. - 백엔드 1. 활동기록 데이터에서 필요한 데이터를 추출해 문장으로 변환한다. 2. 사용자가 선택한 프로필에 맞게 문장을 가공하여 일기 생성 입력 데이터를 만들고, GPT API를 호출한다. 3. 받은 내용을 프론트로 전송한다.
- 일기 백업
- 구현 위치: 프론트 - 사용하는 데이터: 하루기록 데이터>하루일기 데이터 - 생성하는 데이터: 하루기록 데이터 - 구조 - 선택한 일기를 DB에 저장한다.
- 일기 불러오기
- 구현 위치: 프론트 - 사용하는 데이터: 하루기록 데이터>하루일기 데이터 - 생성하는 데이터: 하루기록 데이터>하루일기 데이터 - 구조 - 백업된 일기를 선택한 하루기록의 일기로 불러온다.
하루 추천
- 활동기록 기반
- 구현 위치: 백엔드 - 사용하는 데이터: 활동 기록 데이터 뭉치 - 생성하는 데이터: 추천 장소 데이터 - 구조 1. 해당 하루기록의 활동기록들을 모두 종합한다. 2. 평점을 기준으로 오름차순 정렬을 하고 순서대로 추천모델을 통해 사용된 활동기록 데이터의 장소 근처의 추천 장소를 추출한다. 3. 추출한 추천 장소 데이터를 프론트에 전송한다.
- 통계기록 기반
- 구현 위치: 백엔드 - 사용하는 데이터: 활동기록 데이터 - 생성하는 데이터: 추천 장소 데이터 - 구조 1. 하루기록에 활동기록이 없을 경우 사용자의 한 달 통계 중 가장 많이 한 활동 및 장소를 종합한다. 2. 종합한 데이터를 위와 동일한 방법으로 추천 장소를 추출한다. 3. 추출한 추천 장소 데이터를 프론트에 전송한다.
활동 통계
- 감정 지도
- 구현 위치: 프론트 - 사용하는 데이터: 하루 기록 데이터 뭉치 - 생성하는 데이터: 감정 지도 - 구조 1. 사용자가 기간을 설정(주간, 월간, 임의 구간)한다. 2. 선택한 기간에 해당하는 하루기록의 통계량을 계산하여 필요에 맞게 그룹화 된 데이터를 생성한다. 3. 생성한 데이터를 토대로 지도 형태로 시각화 하고 그 아래에 통계를 리스트 형태로 시각화한 자료를 제공한다.
- 활동지도
- 구현 위치: 프론트 - 사용하는 데이터: 하루 기록 데이터 뭉치 - 생성하는 데이터: 활동 지도 - 구조 1. 사용자가 날짜를 선택한다. 2. 선택한 날짜에 해당하는 하루기록 데이터를 불러와 지도위에 표시한다. 3. 지도 아래에 활동기록과 이동경로를 타임라인 형식으로 제공한다.
- 감정 추이 꺾은선 그래프
- 구현 위치: 프론트 - 사용하는 데이터: 하루기록 데이터 뭉치 - 생성하는 데이터: 꺾은선 그래프 - 구조 1. 사용자가 기간을 설정(주간, 월간, 임의 구간)한다. 2. 선택한 기간에 해당하는 하루기록의 통계량을 계산하여 필요에 맞게 그룹화 된 데이터를 생성한다. 3. 생성한 데이터를 토대로 y축이 감정 점수, x축이 날짜인 꺾은선 그래프를 생성한다.
- 감정 통계
- 구현 위치: 프론트 - 사용하는 데이터: 하루기록 데이터 뭉치 - 생성하는 데이터: 감정 통계 - 구조 1. 사용자가 기간을 설정(주간, 월간, 임의 구간)한다. 2. 선택한 기간에 해당하는 하루기록의 통계량을 계산하여 필요에 맞게 그룹화 된 데이터를 생성한다. 4. 감정 단위로 그룹화된 데이터를 토대로 기간 동안의 감정 빈도를 시각화하여 제공한다.
- 활동 장소 통계
- 구현 위치: 프론트 - 사용하는 데이터: 하루기록 데이터 뭉치 - 생성하는 데이터: 활동장소 통계 - 구조 1. 사용자가 기간을 설정(주간, 월간, 임의 구간)한다. 2. 선택한 기간에 해당하는 하루기록의 통계량을 계산하여 필요에 맞게 그룹화 된 데이터를 생성한다. 3. 장소 단위로 그룹화 된 데이터를 토대로 빈도, 감정 등을 시각화하여 제공한다.
계정 관리
- 회원 가입
- 구현 위치: 프론트 - 사용하는 데이터: Password, Email - 생성하는 데이터: 계정정보 데이터 - 구조 1. 사용자가 PW, Email 정보로 가입을 시도한다. 2. 백엔드에서 해당 주소로 인증 메일을 전송한다. 3. 사용자는 해당 메일을 통해 인증을 거치고 나서 정식 회원으로 가입이 완료된다.
- 로그인
- 구현 위치: 프론트 - 사용하는 데이터: Email, Password - 생성하는 데이터: 없음 - 구조 1. 사용자가 Email, Passwrod로 인증서버에 인증요청을 보낸다. 2. 인증이 되면 메인 화면으로 넘어가고, 그렇지 않으면 재입력을 요구한다.
- 비밀번호 찾기
- 구현 위치: 프론트 - 사용하는 데이터: ID, Email - 생성하는 데이터: 없음 - 구조 1. 사용자가 Email을 통해 비밀번호 찾기를 요청한다. 2. 인증서버가 해당 메일이 가입되어있는지 확인하고 비밀번호 재설정 메일을 보낸다. 3. 사용자는 재설정 메일을 통해 비밀번호를 재설정한다.
- 회원 탈퇴
- 구현 위치: 프론트 - 사용하는 데이터: 사용자 데이터 - 생성하는 데이터: 없음 - 구조 1. 사용자가 회원 탈퇴를 요청한다. 2. 알림을 통해 다시한번 사용자의 의사를 확인하고 관련된 데이터를 제거한다.
- 개인정보 수정
- 구현 위치: 프론트 - 사용하는 데이터: 사용자 데이터 - 생성하는 데이터: 사용자 데이터 - 구조 1. 사용자에게 다시 비밀번호를 받아 인증과정을 거친다. 2. 사용자가 원하는 개인정보를 수정한다. 3. 수정된 정보를 DB에 갱신한다.
소프트웨어 구조도
◇ 안드로이드 애플리케이션
- 활짝 서비스가 제공되고 사용할 수 있는 환경이다.
- Google이 개발한 네이티브 앱 구축 프레임워크인 Flutter를 사용하여 구현한다.
◇ DB 및 인증 서버
- 사용자 인증용 모듈과 활짝 서비스 운영에 필요한 데이터들을 저장 및 관리하는 서버이다.
- Google이 개발한 모바일 및 웹 애플리케이션을 위한 클라우드 플랫폼인 Firebase를 사용한다.
- Authentication API를 사용하여 계정 및 인증 절차를 구현한다.
- Firestore API를 사용하여 NO-SQL 기반의 데이터베이스를 구현한다.
- 별도 기능 모듈(서버)과 데이터 베이스 및 인증 서버의 배포 및 운영을 분리한다.
◇ 서버 배포
- 활동 추천 모듈, 자동 일기 생성 모듈 등의 활짝 서비스에서의 별도의 기능 모듈을 제공하고 운영하기 위한 서버이다.
- Google이 개발한 컨테이너 기반 Serverless 클라우드 인프라 플랫폼 Cloud Run을 사용한다.
- 모듈을 구현하기 위하여 Python 기반 웹 프레임워크인 Fast-API를 통해 REST-API를 작성한다.
- 구현한 모듈을 컨테이너 이미지로 만들고 관리하기 위하여 Docker를 사용한다.
- 컨테이너화된 모듈을 독립적으로 활짝 서비스에서 외부 절차가 필요한 기능을 동작 및 배포하기 위하여 Cloud Run을 사용한다.
소프트웨어 설계
데이터베이스 스키마
- 회원정보(User)
- uid <int>: 계정을 식별하기 위한 고유 식별자(PK). - email <str>: 계정의 인증을 수행하기 위한 이메일. 아이디로써 사용한다. - password <str>: 계정의 인증을 수행하기 위한 비밀번호. - created_at <DateTime>: 계정이 생성된 시간. - email_verified <boolean>: 계정의 이메일의 검증 유무용 Flag.
- 하루기록(DailyRecord)
- id <int>: 하루 기록을 식별하기 위한 식별자(PK). - user_uid <int>: 계정을 식별하기 위한 고유 식별자(FK). - emotion <int>: 감정 저장. - created_at <DateTime>: 하루 기록이 생성된 시간. - contents <int>: 하루 기록의 텍스트 저장. - activity_records List<ActivityRecord>: 해당 일자의 활동 기록 리스트 저장 - haru_diary <HaruDiary>: 해당 일자의 하루 일기 저장.
- 활동기록(ActivityRecord)
- id <int>: 활동 기록을 식별하기 위한 식별자(PK). - daily_record_id <int>: 하루 기록을 식별하기 위한 고유 식별자(FK). - user_uid <int>: 계정을 식별하기 위한 고유 식별자. - x_value <float>: 활동 장소의 X 좌표값 저장. - y_value <float>: 활동 장소의 Y 좌표값 저장. - place <str>: 활동 장소의 이름 저장. - emotion <int>: 감정 저장. - start_at <DateTime>: 해당 활동 시작 시간. - end_at <DateTime>: 해당 활동 종료 시간. - weather <int>: 해당 활동 시간, 장소의 날씨. - contents <str>: 활동 기록의 텍스트 저장. - tags <str>: 활동 기록의 태그 저장. - categories <str>: 장소의 카테고리.
- 하루일기(HaruDiary)
- id <int>: 하루 일기를 식별하기 위한 식별자(PK). - user_uid <int>: 계정을 식별하기 위한 고유 식별자(FK). - daily_record_id <int>: 하루 기록을 식별하기 위한 고유 식별자. - usedTemplate <int>: 자동 일기 작성에 사용한 템플릿. - currentContents <str>: 하루 일기의 현재 본문. - created_at <DateTime>: 하루 일기가 생성된 시간. - edited_at <DateTime>: 하루 일기가 수정된 시간. - backupContents <str>: 하루 일기의 백업 본문. - backup_at <DateTime>: 백업 본문이 생성된 시간. - countOfAutoWriting <DateTime>: 자동 일기 작성 횟수.
전체 클래스 설계
화면별 클래스 설계
◇ 하루기록 페이지
하루 기록 페이지는 하루 기록과 그에 속한 활동 기록, 하루 일기, 하루 추천 등을 보여주는 페이지다.
그러므로 ActivitryRecordDailyRecord 패키지 기능을 대부분 사용한다. (Statistics 패키지는 해당 페이지와 상관없으므로 사용하지 않는다.)
◇ 캘린더 페이지
화면상 캘린더 페이지는 한 달간의 하루기록/하루일기를 보여주는 화면으로서 하루 기록 페이지와 비슷하게 동작한다.
사용자는 이곳에서 한눈에 자신의 기록을 한 달 단위로 볼 수 있을 것이다.
따라서 특정 기간에 대한 하루기록, 하루일기를 조회하는 기능을 사용한다는 점에서 하루 기록 페이지와 차이가 있다.
◇ 활동 통계 페이지
활동 통계 페이지의 경우 사용자의 활동기록들을 가져와 통계를 내어 이를 다양한 시각화 방식으로 제공하는 화면이다.
이 화면에서 사용자는 통계자료들을 조회하는 행위만 일어나게 된다. 그러므로 위의 Statistics 패키지를 모두 사용하여 해당 서비스를 제공한다.
◇ 사용자 설정 페이지
활동 통계 페이지의 경우 사용자의 활동기록들을 가져와 통계를 내어 이를 다양한 시각화 방식으로 제공하는 화면이다.
사용자 설정 페이지의 경우 사용자 관리 기능을 하는 페이지다.
이를 위하여 위의 Member 패키지의 기능을 사용한다. 이 화면에서 사용자는 자신의 사용자 정보를 조회, 수정, 삭제할 수 있다.
UI 설계
1. 하루 기록
2. 활동 기록
3. 캘린더
4. 통계
5. 계정 관리
결과 및 평가
완료 작품의 소개
설치 방법
설치 링크: https://bit.ly/3NlzlN4
작동 장면
◇ 권한 설정 화면
◇ 하루기록
- 하루 감정
- 하루 기록
◇ 활동기록
- 수동 생성
- 자동 기록
- 활동기록 수정
- 활동기록 삭제
- 활동 추천
◇ 캘린더 페이지
– 하루 기록
– 하루 기록 및 활동 기록
- 하루 일기 – 수동 생성
- 하루 일기 – 자동 생성
- 하루 일기 – 수정 및 삭제
- 하루 일기 – 일기 보관
- 하루 일기 – 일기 되돌리기
◇ 활동통계 페이지
- 기본 페이지
- 감정 지도(기본 지도)
- 활동 지도
◇ 설정
- 내정보 수정
- 로그아웃
- 회원탈퇴
관련사업비 내역서
완료작품의 평가
향후계획
가. 어려웠던 내용들
◇ 모바일 애플리케이션 개발 숙련도 부족
◇ 자동 기록 수집 간 필요한 권한 설정
◇ 기존 제공 API를 활용하여 서비스 제공 – Place API, GoogleMapSDK
◇ 생체 신호를 기반한 감정 추정 알고리즘 작성을 위한 이론적 근거 부족
◇ 감정 추정 데이터 획득을 위한 절차 및 인증 복잡
◇ PlayStore 업로드를 하기 위한 절차
◇ 활동에 대해 자동으로 수집할 수 있는 데이터의 부족
나. 차후 구현할 내용
◇ 생체 정보를 이용한 감정 추정
◇ 실제 사용자 데이터를 기반 활동 추천 기능
◇ 태그를 활용한 워드클라우드 – 활동 통계 페이지
◇ GPT 기반 자동 일기 작성이 아닌 미세조정된 언어 모델 사용
◇ 하루 기도 기능 간에 검색 기능 혹은 지도의 기능 추가
◇ 활동 기록 자동 생성 알고리즘 고도화
부록
참고문헌 및 참고 사이트
https://flutter-ko.dev/ https://pub.dev/packages/background_locator_2
https://developers.google.com/maps?hl=ko
https://developers.google.com/maps/documentation/places/web-service/overview?hl=ko
https://www.data.go.kr/data/15084084/openapi.do
https://firebase.google.com/docs/auth?hl=ko
https://pub.dev/packages/cloud_firestore
https://pub.dev/packages/firebase_core
활짝 서비스 다운로드 링크
https://bit.ly/3NlzlN4