Skip to content

Latest commit

 

History

History
102 lines (62 loc) · 8.88 KB

README.md

File metadata and controls

102 lines (62 loc) · 8.88 KB

YAPP 출석 Android

YAPP의 공식 출석 앱 Android 프로젝트입니다.

현재 상태

14개 Gradle 모듈의 공통 설정은 build-logic convention plugin으로 관리합니다. Hilt 앱 진입점과 Ktor API client·JSON 직렬화가 있고, 이번 주 세션과 현재 기수 일정 조회는 Domain·Data·Feature·App에 연결했습니다. 홈은 세션과 출석 인증 API를 사용하고 일정 탭은 현재 기수 세션을 조회합니다. 보고 계약과 YAPP 어댑터는 유지하지만 보고 UI 연결은 후속입니다.

로그인·회원가입 UI는 별도 Feature입니다. Google Credential Manager ID Token과 원본 nonce를 YAPP native-authentication API에 보내고, SIGNED_IN 세션을 암호화 저장하거나 SIGNUP_REQUIRED 토큰으로 기존 회원가입 입력 흐름을 진행합니다. 가입 성공 시 세션을 저장하고, 앱 시작 시 저장 세션을 복원해 메인 또는 로그인 화면을 엽니다.

홈의 주간 공지, 게시판 공지, My 회원 정보·출석 이력·점수는 API 연결 전까지 준비 중 상태를 표시합니다. 설정의 로그아웃과 YAPP 통합 탈퇴는 Domain·Data·App에 연결했습니다. 홈·게시판·My·일정은 각각 :feature:main:home, :feature:main:board, :feature:main:my, :feature:main:schedule로 분리되어 있으며 App이 네 화면과 탭·설정 이동 상태를 관리합니다.

인증 세션의 HTTP 401 자동 갱신, 원래 요청 1회 재시도와 동시 갱신 중복 방지를 구현했습니다. Data가 Google 로그인·가입·세션 갱신 API를 연결하고, Network가 토큰 쌍 복원·교체와 인증 처리를 소유합니다. :core:datastore가 Keystore로 암호화한 토큰 쌍을 백업 제외 경로에 저장하며 API 환경별로 분리합니다.

YAPP access/refresh token 쌍은 암호화해 저장·복원하고, 인증 요청의 401은 세션 갱신 뒤 한 번 재시도합니다. 임시 테스트 백엔드·데이터 어댑터·SQL은 개발 버전에서 제거했습니다. 일정·출석 인증·세션 갱신·로그아웃·통합 탈퇴는 확인된 YAPP API 계약을 사용합니다. 공지·My 정보 조회 API 연결은 후속입니다.

설정의 로그아웃과 YAPP 탈퇴 UI는 확인·진행·오류·재시도 흐름으로 연결했습니다. 탈퇴 API는 모든 기수 회원 자격과 세션을 종료하고 개인정보를 비식별화하는 통합 탈퇴입니다. 서버 응답이 성공한 경우에만 로컬 세션을 지우고 로그인 화면으로 이동합니다. 기준은 제품 정책입니다.

아키텍처와 모듈

인증된 API의 401 갱신과 원래 요청 1회 재시도, 동시 갱신 공유를 구현했습니다. Data의 인증·가입·갱신 API와 DTO, DataStore 토큰 저장소를 App singleton으로 조립하며, :core:datastore는 토큰 쌍을 암호화해 저장·복원합니다. 저장소 프로세스 재시작 검증 방법은 모듈 구조에 있습니다.

MVVM + 단방향 상태 흐름(UDF)을 사용하고, 비즈니스 규칙은 필요한 범위의 Clean Architecture로 분리합니다. 현재 14개 Gradle 모듈과 build-logic 설정, 디자인시스템 공통 표현, :core:preview의 재사용 Preview 데이터가 준비되어 있습니다. 로그인은 :feature:login, 가입 입력·단계·상태는 :feature:signup이 소유합니다. App은 Navigation Compose 2.10.2의 타입 기반 목적지와 Google ID 토큰 콜백을 조립하고, 메인 탭 내비게이션·선택 상태와 설정 화면 이동 상태도 소유합니다. 가입 단계와 입력값은 Feature의 SignUpViewModel 및 SavedStateHandle로 유지·복원합니다. 구현 상태와 모듈별 책임은 Wiki 모듈 구조, 의존성 방향과 라이브러리 선택은 Wiki 아키텍처에서 확인합니다. 출석 모델·정책·Repository·UI와 API 호출은 확정된 요구사항에 따라 구현합니다.

프로젝트 지식

YAPP LLM Wiki는 앱 정책, 아키텍처, 설계 패턴, 코딩 규칙의 기준 문서입니다. 확정된 정책은 분야별 문서와 결정 기록에 함께 반영합니다. 아직 공식화되지 않은 재사용 지식은 후보함에서 사용 근거를 검토합니다. Codex의 세션 갱신 절차는 AGENTS.md에 있습니다.

개발 환경

  • Android Studio와 Android SDK 37
  • JDK 25 (Gradle daemon JVM 설정으로 자동 선택)
  • Kotlin 2.2.10, Android Gradle Plugin 9.5.0-alpha02, Gradle 9.6.0
  • minSdk 24, targetSdk 37

Android Studio에서 프로젝트 루트를 열고 Gradle 동기화를 실행합니다. 로컬 SDK 경로는 local.properties에 설정하며 이 파일은 Git에서 제외됩니다.

빌드

./gradlew :app:assembleDebug

전체 모듈 설정과 연결을 검증합니다.

./gradlew :domain:build assembleDebug lintDebug

단위 테스트는 다음 명령으로 실행합니다.

./gradlew :app:testDebugUnitTest

현재 applicationId와 네임스페이스는 com.yapp.plus입니다. 비공개 테스트는 기존 release/v1.0.1 브랜치와 같은 Play 앱을 사용하며 실제 개발은 develop에서 이어갑니다. 자세한 절차는 CONTRIBUTING.md를 따릅니다.

기여

브랜치 생성, PR 대상, 릴리즈 절차는 기여 및 Git Flow 규칙을 따릅니다.

모든 PR의 추가·삭제 줄 수 합은 800 이하로 제한합니다. 개발 PR은 ui/ux·data·domain·feat별로 나누고 영역 라벨 하나를 붙입니다. PR policy 필수 검사가 변경량, 라벨, 한국어 제목과 유형 접두어 사용 여부를 확인합니다.

Codex 슬래시 커맨드

이 저장소의 Codex 설정은 새 세션의 모델을 gpt-6-luna, 추론 수준을 max로 지정합니다. 프로젝트를 신뢰한 Codex 세션에서 적용되며, 세션에서 명시적으로 선택한 모델이 있으면 그 선택이 우선합니다.

커맨드 원본은 .codex/prompts/에 보관합니다. Codex의 사용자 정의 프롬프트는 사용자 홈의 prompts 폴더에서 로드하므로, 저장소를 받은 뒤 다음 명령으로 설치하고 새 채팅을 열거나 Codex를 다시 시작합니다.

python3 scripts/install_codex_prompts.py
커맨드 용도 예시
/prompts:yapp-commit 변경 검토·검증·커밋 /prompts:yapp-commit ISSUE=1 TYPE=chore
/prompts:yapp-issue 중복 확인·이슈 생성 /prompts:yapp-issue TYPE=bug TITLE="로그인 오류" DETAILS="재현 방법..."
/prompts:yapp-pr 대상 브랜치·800줄 제한·영역 확인·PR 생성 /prompts:yapp-pr ISSUE=1 AREA=build TITLE="Codex 슬래시 커맨드 추가"

설치된 파일을 원본에 맞춰 갱신하려면 python3 scripts/install_codex_prompts.py --force를 실행합니다. 사용자 정의 프롬프트는 명령을 실행할 때 현재 세션의 모델을 자동으로 바꾸지 않습니다.

OpenAI Docs는 사용자 정의 프롬프트를 더 이상 권장하지 않지만, 명시적인 /prompts:<이름> 명령을 위해 이 형식을 사용합니다. Codex가 명령을 읽지 못하면 새 채팅에서 다시 시도하거나 Codex를 재시작합니다.

프로젝트 개발 스킬

검토·승인한 1~35번 규칙은 Wiki에 보관하고 .agents/skills/에서 작업별로 연결합니다. AGENTS.md의 안내에 따라 적용하거나 아래 이름으로 요청할 수 있습니다.

스킬 적용 범위
$yapp-architecture 계층 책임·의존성 방향
$yapp-coding-conventions Kotlin 서식·가시성·함수·이름·리소스
$yapp-design-patterns Route/Content·상태·요청·Repository·화면 이동
$yapp-module-structure 파일·패키지 배치와 모듈 추가·검증

.editorconfig에 기본 서식과 Kotlin 최대 줄 길이 100자를 기록했습니다. 포맷터와 정적 분석 플러그인은 별도로 선택합니다.

수정된 홈 화면

홈은 이번 주 세션·달력·출석 코드 입력/완료 흐름을 표시하고, 출석 검증은 YAPP API를 사용합니다. 보고 UI와 알림 진입·출석 점수 메뉴는 숨깁니다. 주간 공지와 게시판 목록·상세는 서버 API 연결 전까지 준비 중 상태를 표시합니다. 상태와 적용 범위는 제품 정책, 작업 기록은 #82를 참고합니다.