본문 바로가기

Android 공부/프로젝트 회고

GitRank

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, 대학 및 기관 등 여러 방면에서 필터링한 정보를 파악하는 시스템을 정량적인 분석과 평가를 거쳐 건전한 경쟁 심리를 유도하고자 한다.

 

직면한 문제점들

  1. RecyclerView가 스크롤 시 뒤섞이는 오류
    • 사용자의 commit, issue 등 활동에 대한 토큰 수 기반으로 랭킹을 RecyclerView로 나열하였으나 순서가 섞여 랭킹을 제대로 확인할 수 없었음
    • 고민 및 해결 방안
      • RecyclerView의 ArrayList의 순서를 직접 정렬
        • 등수를 기준으로 정렬되었으나 여전히 스크롤 후 섞여 반려
        • 조사 후 RecyclerView의 View 재사용 문제임을 파악하게 되었으며 다음 두 가지 방법 발견
      • RecyclerView의 View 재사용 제거
        • View를 잿사용하여 얻는 성능적 이점이 사라지므로 반려
      • RecyclerViewAdapter의 ViewType을 position 값을 반환하게 재정의  
        • 데이터의 값 자체는 변동이 없어 적용 가능
        • 여러 ViewType을 사용하지 않아 position을 반환해도 재사용에 영향을 주지 않음
        • 부작용이나 단점이 없는 해당 방법을 채택
    • 해결 및 결과
      • ViewType을 position 값을 반환하게 재정의 방식 채택
      • RecyclerView를 스크롤 하여도 랭킹 등 뒤섞임 없이 해결


  1. 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보다 더 빠른 성능
        • 사용자에게 브라우저의 표준화된 경험을 제공 가능
    • 해결 및 결과
      • Custom Tabs로 GitHub OAuth2 로그인 구현
        • cookie와 permission을 공유하기 때문에 한 번 로그인하면 다시 로그인 할 필요 없음
        • 기존보다 더 빠른 페이지 로딩으로 더 좋은 성능 제공 (평균 화면 로딩 시간 2초 -> 1초)
        • PlayStore 재심사 후 출시 성공

  2. 정보 과다로 인한 복잡한 화면
    • commit, issue, pr 등 사용자들이 원하는 정보들이 매우 많아 보기 편하고 이해하기 쉬운 데이터의 표현 방법이 요구됨
    • 고민 및 해결 방안
      • Repository끼리, 내부의 개발자들끼리 비교하기 위한 그래프, 차트가 필요
        • 직접 그래프, 차트를 구현하기 위한 시간이 부족해 관련 라이브러리를 조사하게 됨
        • 그래프, 차트로 데이터들을 시각화할 방법을 구글링을 통해 MPAndroidChart 발견
      • 그래프와 차트 종류가 다양하고 적용하기 쉬운 MPAndroidChart를 적용
        • MPAndroidChart의 그래프 종류가 다양하여 원하는 모양으로 다양하게 적용할 수 있음
        • 가장 중요한 막대그래프 나열 등을 겹치거나 누락되는 것 없이 구현할 수 있어 채택
    • 해결 및 결과
      • MPAndroidChart를 채택하여 보다 편리한 데이터 시각화 제공
        • 사용자들의 활용도 비교에 1대1 대응 막대그래프 사용
        • Repository 비교에 세부 데이터는 표, 언어 비율은 원형 그래프로 구현
        • Repository의 Sparkline은 직선 그래프를 이용하여 구현 

 

 

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