← Back

Emotion Diary Android Project

DailyLog

STT/TTS 기반 일기 작성 어플리케이션 프로젝트입니다.

Project Snapshot

Android Jetpack Compose UI
Diary 감정 기록과 결과 화면 구성
Calendar Calendar Provider 유지
Flow 실사용 흐름 기반 화면 구성

문제 정의

모두가 중요성을 느끼는 하루의 정리를 대화 기반으로 더 간단하게 기록하고, 그 결과를 바탕으로 일정 추천과 일정 관리까지 자연스럽게 이어질 수 있는 경험을 만들고자 했습니다.

핵심 구현 포인트

Compose 기반 화면 설계, Repository 계층 정리, Room DB 기반 로컬 데이터 저장, 캘린더 프로바이더 연동 유지, 결과 페이지와 프로필 그래프 흐름 검증을 중심으로 작업했습니다.

프로젝트 핵심 기능

일기 작성

질문형 흐름을 따라 하루의 감정과 상황을 기록하고, 결과 화면까지 자연스럽게 이어지도록 구성했습니다.

일기 기반 감정 분석

작성한 일기 내용을 바탕으로 감정 결과를 분석하고, 사용자가 자신의 하루를 돌아볼 수 있도록 피드백을 제공합니다.

감정 기반 일정 추천

분석된 감정 결과를 바탕으로 추천 활동을 제안하고, 이를 일정과 연결해 다음 행동으로 이어질 수 있게 했습니다.

캘린더 연동

앱 내부 기록과 기기 Calendar Provider 이벤트를 함께 보여주어 감정 기록과 일정 관리를 한 흐름으로 연결합니다.

실제 사용 흐름으로 따라가는 화면 구성

로그인

Main Entry

사용자는 홈 화면에서 오늘의 기록 상태를 보고, 고양이와 상호작용하거나 메뉴를 열어 다음 화면으로 이동합니다.

화면 안의 강조된 버튼을 직접 눌러도 같은 흐름으로 이동합니다.

    담당 역할

    화면 흐름 설계

    로그인, 회원가입, 튜토리얼, 홈, 일기 작성, 결과, 캘린더, 프로필까지 이어지는 주요 사용자 흐름을 설계하고 연결했습니다.

    Compose 기반 UI 구현

    앱의 감성적인 화면 구성을 유지하면서 각 화면의 레이아웃과 상호작용이 자연스럽게 이어지도록 Compose UI를 구현했습니다.

    로컬 데이터 구조 정리

    Room DB와 Repository 구조를 통해 일기와 사용자 데이터를 저장하고, 화면 코드와 데이터 계층이 분리되도록 정리했습니다.

    캘린더 및 프로필 흐름 검증

    Calendar Provider 연동, 일정 수정/추가, 감정 그래프, 프로필 편집까지 실제 사용 흐름 기준으로 화면 동작을 점검했습니다.

    개발 과정에서 신경 쓴 점

    01

    화면 감성 유지

    일반적인 앱 레이아웃 대신 방, 다이어리, 종이 질감 같은 오브젝트 중심 인터페이스를 유지했습니다.

    02

    서버 연동 흐름 검증

    서버가 정상적으로 동작하는 환경을 기준으로 일기 작성, 감정 분석 결과, 추천 흐름이 자연스럽게 이어지도록 화면 구성을 점검했습니다.

    03

    기기 기능 연결

    Calendar Provider는 유지해 실제 기기 일정과 앱 데이터를 함께 확인할 수 있도록 했습니다.

    04

    로컬 데이터 구조 정리

    Room DB를 활용해 일기와 사용자 정보를 안정적으로 저장하고, 화면에서 필요한 데이터를 일관된 흐름으로 불러올 수 있도록 구조를 정리했습니다.

    트러블슈팅

    01

    리소스 최적화를 통한 성능 개선

    초기에는 개별 리소스 수가 많고 해상도도 높아 화면 전환 시 앱이 무거워지는 문제가 있었습니다. 이를 해결하기 위해 전체 리소스 해상도를 조정하고, 분산되어 있던 개별 리소스를 통합하는 방식으로 구조를 정리해 렉 유발을 줄이고 보다 안정적인 동작 흐름을 만들었습니다.

    02

    디자인 방향성에 대한 팀 의견 조율

    초기 디자인을 구체화하는 과정에서 팀원들의 다양한 의견이 나왔고, 타당한 이유가 있는 제안은 적극적으로 수용해 화면에 반영했습니다. 반대로 방향성이 다르다고 판단한 경우에는 제 의견의 근거를 설명해 이해를 맞췄고, 양쪽 의견 모두 애매한 경우에는 팀장의 조율을 통해 기준을 정한 뒤 작업을 진행했습니다.

    03

    브랜치 통합 과정의 충돌 해결

    AI 파트에서 작업한 페이지와 제가 구현한 페이지가 브랜치 통합 과정에서 충돌하면서 일정이 지연되는 이슈가 있었습니다. 변경 범위를 다시 분리해 충돌 지점을 정리하고, 필요한 부분은 재확인 후 병합해 기능 흐름이 끊기지 않도록 통합 작업을 마무리했습니다.

    구조 설계

    화면은 UI에 집중하고, 데이터 처리는 ViewModel과 Repository가 분리해 담당하도록 설계했습니다.

    Remote > Local > Device > Repository > ViewModel > Screen

    데이터 흐름을 계층별로 분리해 화면 코드가 네트워크와 직접 결합되지 않도록 설계했습니다.

    사용한 라이브러리/기술

    프로젝트에 적용한 주요 기술과 라이브러리를 영역별로 정리했습니다. 핵심 기술은 강조 색상으로 구분했고, 기술명을 누르면 아래에서 사용 이유를 바로 확인할 수 있도록 구성했습니다.

    UI / Android

    ASR과 TTS 기능을 포함한 음성 기반 일기 앱에서는 응답 속도와 기기 자원 활용이 중요하다고 판단했습니다. 그래서 React Native나 Expo 같은 크로스플랫폼 방식보다 Android 네이티브 환경에 더 직접적으로 접근할 수 있는 Kotlin을 선택했고, 이를 통해 음성 처리 라이브러리 연동과 화면 성능을 보다 안정적으로 구성할 수 있었습니다.

    오브젝트 중심의 커스텀 UI를 빠르게 구성하고, 화면 상태 변화에 따라 로그인, 홈, 일기, 캘린더, 프로필 흐름을 일관되게 관리하기 위해 사용했습니다.

    Compose 기반 UI에서 기본 컴포넌트와 상호작용 패턴을 안정적으로 활용하면서, 프로젝트 톤에 맞게 커스터마이징하기 위해 사용했습니다.

    Android Activity 진입점에서 Compose 화면을 자연스럽게 연결하고 앱의 시작 구조를 간결하게 유지하기 위해 사용했습니다.

    화면 상태와 라이프사이클 변화를 Compose 화면 안에서 안정적으로 반영해 화면 전환과 상태 관리를 자연스럽게 처리하기 위해 사용했습니다.

    Data / Local Storage

    일기와 사용자 정보를 로컬에 안정적으로 저장하고, 화면 코드가 직접 데이터 저장소를 다루지 않도록 Repository 계층과 함께 구조를 분리하기 위해 사용했습니다.

    화면과 데이터 소스를 분리해 네트워크, 로컬 DB, 기기 기능을 한 계층에서 정리하고 화면 코드의 결합도를 낮추기 위해 적용했습니다.

    앱 내부에서 사용하는 데이터 구조를 직렬화하고 상태나 응답 값을 Kotlin 코드 중심으로 다루기 위해 사용했습니다.

    서버 응답 데이터를 Kotlin 객체로 안정적으로 변환하고 Retrofit과 함께 API 응답 처리를 구성하기 위해 사용했습니다.

    Network / Security

    서버와의 API 통신을 인터페이스 기반으로 명확하게 분리하고, 응답 처리 구조를 일관되게 관리하기 위해 사용했습니다.

    네트워크 요청과 응답 흐름을 안정적으로 처리하고, 인터셉터를 통해 통신 과정을 확장할 수 있도록 구성하기 위해 사용했습니다.

    API 요청과 응답 로그를 확인해 서버 연동 과정에서 발생하는 문제를 빠르게 점검하고 디버깅하기 위해 사용했습니다.

    앱에서 다루는 민감한 정보와 인증 관련 데이터를 더 안전하게 저장하기 위한 보안 계층으로 활용했습니다.

    Device / Background

    감정 기록과 실제 기기 일정을 연결해 사용자가 앱 내부 기록과 일정 관리를 한 화면 흐름 안에서 함께 확인할 수 있도록 하기 위해 사용했습니다.

    백그라운드 작업이나 지연 실행이 필요한 기능을 Android 환경에 맞게 안정적으로 처리하기 위해 사용했습니다.

    앱 내 음성 처리 기능을 지원하기 위한 라이브러리로 활용해 음성 기반 입력 흐름을 구현할 수 있도록 구성했습니다.

    포트폴리오용 검증 상태

    현재 이 페이지는 프로젝트 개요와 실제 화면을 한 번에 보여주는 발표용 요약 페이지 역할을 합니다.

    Compose Calendar Provider Portfolio Ready