
GitRank - 블록체인 기반 깃 랭크 시스템 (2023.01 ~ 20230.09)
Skills: Kotlin, Retrofit, Glide, Lottie, SharedPreferences, MPAndroidChart
Tools: Jira, Notion, GitHub
Member: Android(1), iOS(2), BackEnd(1)
기여도 : 기획 부터 출시까지 참여, 개발 - Android 100%
Github: https://github.com/tukcom2023CD/DragonGuard-JinJin
- Github는 무료 Git 저장소로, 2023년 1월에 사용자 수 1억 명을 돌파했다. 하지만 유저들의 Github 활용도를 한 눈에 비교하거나 역량을 정량적으로 판단하기 어려웠다.
- 이에 따라 개발자들에 대한 현재 개발 역량뿐만 아니라 타인 또는 Repository, 대학 및 기관 등 여러 방면에서 필터링한 정보를 파악하는 시스템을 정량적인 분석과 평가를 거쳐 건전한 경쟁 심리를 유도하고자 한다.
직면한 문제점들
- RecyclerView가 스크롤 시 뒤섞이는 오류
- 사용자의 commit, issue 등 활동에 대한 토큰 수 기반으로 랭킹을 RecyclerView로 나열하였으나 순서가 섞여 랭킹을 제대로 확인할 수 없었음
-
- 고민 및 해결 방안
- RecyclerView의 ArrayList의 순서를 직접 정렬
- 등수를 기준으로 정렬되었으나 여전히 스크롤 후 섞여 반려
- 조사 후 RecyclerView의 View 재사용 문제임을 파악하게 되었으며 다음 두 가지 방법 발견
- RecyclerView의 View 재사용 제거
- View를 잿사용하여 얻는 성능적 이점이 사라지므로 반려
- RecyclerViewAdapter의 ViewType을 position 값을 반환하게 재정의
- 데이터의 값 자체는 변동이 없어 적용 가능
- 여러 ViewType을 사용하지 않아 position을 반환해도 재사용에 영향을 주지 않음
- 부작용이나 단점이 없는 해당 방법을 채택
- RecyclerView의 ArrayList의 순서를 직접 정렬
- 해결 및 결과
- ViewType을 position 값을 반환하게 재정의 방식 채택
- RecyclerView를 스크롤 하여도 랭킹 등 뒤섞임 없이 해결
- 고민 및 해결 방안
- Custom Tabs 전환으로 Google Play의 WebView 정책 위반 해결
- GitHub OAuth2를 이용한 로그인을 WebView로 구현하여 출시하려 했으나 Google PlayStore에서 WebView 정책 위반에 의해 거절당함
- 고민 및 해결 방안
- WebView에 관한 정책 정독 및 해결 방안 탐색
- Google Play Support에서 받은 메일에서 공지한 🔗WebView에 관한 정책 위반사항을 파악함
- 위반사항 문제 해결을 위해 조사 후, WebView를 유지, 대체할 두 가지 방법 발견
- 웹 관리자에게 페이지 표시를 허가받았거나 웹 페이지의 소유자인지 제출 - 불가능
- GitHub를 소유하고 있지 않아 소유자가 아님
- GitHub OAuth2 사용을 허가받았으나 WebView에서 사용을 허가받지는 않았음
- Custom Tabs로 WebView를 대체하여 로그인 진행
- WebView를 사용하지 않아 정책 위반 사항이 아님
- WebView보다 더 빠른 성능
- 사용자에게 브라우저의 표준화된 경험을 제공 가능
- WebView에 관한 정책 정독 및 해결 방안 탐색
- 해결 및 결과
- Custom Tabs로 GitHub OAuth2 로그인 구현
- cookie와 permission을 공유하기 때문에 한 번 로그인하면 다시 로그인 할 필요 없음
- 기존보다 더 빠른 페이지 로딩으로 더 좋은 성능 제공 (평균 화면 로딩 시간 2초 -> 1초)
- PlayStore 재심사 후 출시 성공
- Custom Tabs로 GitHub OAuth2 로그인 구현
- 정보 과다로 인한 복잡한 화면
- commit, issue, pr 등 사용자들이 원하는 정보들이 매우 많아 보기 편하고 이해하기 쉬운 데이터의 표현 방법이 요구됨
- 고민 및 해결 방안
- Repository끼리, 내부의 개발자들끼리 비교하기 위한 그래프, 차트가 필요
- 직접 그래프, 차트를 구현하기 위한 시간이 부족해 관련 라이브러리를 조사하게 됨
- 그래프, 차트로 데이터들을 시각화할 방법을 구글링을 통해 MPAndroidChart 발견
- 그래프와 차트 종류가 다양하고 적용하기 쉬운 MPAndroidChart를 적용
- MPAndroidChart의 그래프 종류가 다양하여 원하는 모양으로 다양하게 적용할 수 있음
- 가장 중요한 막대그래프 나열 등을 겹치거나 누락되는 것 없이 구현할 수 있어 채택
- Repository끼리, 내부의 개발자들끼리 비교하기 위한 그래프, 차트가 필요
- 해결 및 결과
- MPAndroidChart를 채택하여 보다 편리한 데이터 시각화 제공
- 사용자들의 활용도 비교에 1대1 대응 막대그래프 사용
- Repository 비교에 세부 데이터는 표, 언어 비율은 원형 그래프로 구현
- Repository의 Sparkline은 직선 그래프를 이용하여 구현
- MPAndroidChart를 채택하여 보다 편리한 데이터 시각화 제공
Keep : 좋았던 점을 기반으로 앞으로 프로젝트를 진행할 때 계속 유지해야 할 사항
- GitHub을 이용한 다른 개발자들과의 협업 방식(Issue, PR, Actions)
- Jira를 이용한 일정 관리
- Figma를 이용한 디자인 관리 및 공유
- 문제나 변경에 빠른 대응 할 수 있는 애자일한 개발 방식
Problem : 아쉬웠던 점을 기반으로 앞으로 프로젝트를 진행할 때 개선되어야 할 사항
- 복잡한 로그인 과정 : GitHub OAuth 인증뿐만 아니라 블록체인 지갑 주소를 위한 인증도 해야 함
- 디자인 패턴에 대한 이해 부족 : 프로젝트에 MVVM을 적용하려 했지만 MVVM에 대한 학습 부족으로 인해 하나로 집약된 ViewModel로 구현하였으며, 유지 보수가 어려웠음
- 난잡한 프로젝트 구조 : 디렉터리 구분 기준울 화면, 기능이 아닌 Activity, Fragment, Adapter 등 역할로 정하여 유지 보수에 큰 어려움을 겪었음
- 잘못된 View 문제 해결 방법 : View 재활용으로 인한 RecyclerView의 뒤섞임 문제를 빠른 해결을 위해 문제의 원인 파악 및 해결이 아닌 ViewType을 변경하여 해결했으나, Item이 많아질 경우 ViewHolder가 많아져 성능 문제가 발생할 수 있게 됨
Try : Problem을 기반으로 다음 프로젝트에 적용해 볼 만한 Action Items
- 복잡한 로그인 과정 개선 : 불필요한 인증 제거 혹은 해당 기능이 필요한 서비스 이용 시 인증하게 변경하기
- 디자인 패턴 학습 및 적용 : MVVM에 대한 깊은 학습 및 적용을 통한 프로젝트의 유지 보수성 향상시키기
- 프로젝트 구조 개선 : ui, data, util로 크게 분류하고, ui는 Activity로 분리, data는 기능으로 service, repository 등을 분리하여 보다 이해하기 쉽게 구성하기
- 발견한 문제의 원인 해결 : 문제의 신속한 해결만이 아닌 근본적인 원인을 파악하고 이를 부작용 없이 해결할 수 있는 방안 조사 및 적용하여 해결하는 문제 조사 및 해결 방식 적용하기
'Android 공부 > 프로젝트 회고' 카테고리의 다른 글
| QuietNight (0) | 2026.05.07 |
|---|---|
| My-Alarm (0) | 2026.02.28 |
| GitRank-v2 (0) | 2026.02.26 |
| 똑립 (0) | 2026.02.25 |