스팀 앱 개발기 #145 - 개발 계획: Jetpack Compose 마이그레이션
개발 계획: Jetpack Compose 마이그레이션
기존 레거시 코드로부터 Jetpack Compose로 마이그레이션 작업은 계속 진행 중입니다. 작업이 얼마나 남았는지 클로드에 문의한 결과, 내용은 아래와 같습니다. 각 단계별로 진행할 예정이며, 현재 1단계 진행 중입니다.
추가로 아래 내용을 검토해 보니 수동으로 마이그레이션 작업은 사실상 어려운 내용이 아닌가 생각합니다. 지금은 AI의 도움을 받는 것이 현실적입니다.
Jetpack Compose 마이그레이션 현황
📊 요약
| 범주 | 총 개수 | Compose 완료 | 진행 중 | 레거시 |
|---|---|---|---|---|
| Activity | 6개 | 3개 | 0개 | 3개 |
| Fragment | 7개 | 3개 | 4개 | 0개 |
| Adapter | 2개 | 0개 | 0개 | 2개 |
| XML 레이아웃 | 20개 | - | - | 4개 사용 중 |
✅ Compose 완료
| 파일 | 비고 |
|---|---|
| Main2Activity.kt | setContent {} 사용 |
| PostImagePagerActivity.kt | ComposeView 기반 |
| ProfileImageActivity.kt | ComposeView 기반 |
| PostContentFragment.kt | 완전 구현됨 |
| WalletFragment.kt | 완전 구현됨 |
| AccountDetailsFragment.kt | 완전 구현됨 |
⚠️ 진행 중 (ComposeView는 사용 중이지만 setContent {} 비어있음)
이 Fragment들은 Composable 함수는 이미 만들어져 있지만, Main2Activity 전환에 따라 Fragment 자체가 삭제 예정인 상태로 보입니다.
| Fragment | Composable 구현 상태 |
|---|---|
| TagsFragment.kt | TagsScreen() 구현 완료 |
| ProfileFragment.kt | ProfileScreen() 구현 완료 (// This class will be deleted) |
| PostListFragment.kt | PostListScreen() 구현 완료 |
| AccountHistoryFragment.kt | AccountHistoryScreen() 구현 완료 |
❌ 레거시 (마이그레이션 필요)
| 파일 | 패턴 | 비고 |
|---|---|---|
| MainActivity.kt | DataBinding + XML Navigation | Main2Activity로 대체 예정 |
| SplashActivity.kt | setContentView(R.layout.activity_splash) | 단순 화면 |
| VoteListActivity.kt | DataBinding + RecyclerView | VoteListAdapter 포함 |
| VoteListAdapter.kt | RecyclerView.Adapter | LazyColumn으로 변환 필요 |
| PostItemListAdapter.kt | RecyclerView.Adapter | MainActivity에서만 사용 중으로 보임 |
| BaseActivity.kt | DataBindingUtil.setContentView() | MainActivity/VoteListActivity가 의존 |
🎯 권장 마이그레이션 순서
`1단계 (완료 예정인 Fragment 정리)
→ TagsFragment, PostListFragment, AccountHistoryFragment 삭제
(Composable은 이미 구현됨, Fragment 껍데기만 남은 상태)
2단계 (VoteList 마이그레이션)
→ VoteListActivity → Compose Activity로 변환
→ VoteListAdapter → LazyColumn으로 교체
3단계 (SplashActivity 마이그레이션)
→ setContentView → setContent {}로 변환
4단계 (MainActivity 제거)
→ Main2Activity로 완전 전환 후 MainActivity/BaseActivity/BaseFragment 삭제
→ PostItemListAdapter, XML 레이아웃 파일 정리`
핵심 결론: Fragment들은 대부분 Composable로 구현이 끝나있고, 실질적으로 남은 레거시의 핵심은 VoteListActivity(RecyclerView) 와 MainActivity(DataBinding + Fragment Navigation) 입니다. 이 두 곳이 마이그레이션의 주요 대상입니다.
지난 스팀 앱 개발기
- #144 - 개발 완료: 리팩토링: 타입 안전성과 일관성 개선
- #143 - 개발 완료: 내비게이션 컴포즈 활용하여 프로필 화면으로부터 다른 화면 이동
- #142 - 개발 완료: API 연동 코드 자동 생성 방안
- #141 - 개발 완료: Main2Activity 관련 리팩토링
- #140 - 개발 완료: Navigation Compose 활용하여 태그 화면에서 포스트 화면 이동
- #139 - 개발 완료: Main2Activity 클래스를 추가하고 내비게이션 라이브러리 변경
- #138 - 개발 완료: Hilt 라이브러리 활용한 의존성 주입 구현
- #137 - 개발 완료: libs.versions.toml 파일 생성
- #136 - 개발 완료: 사용자 히스토리 화면에서 스팀파워 보상을 SP로 보여주기
- #135 - 개발 완료: 태그 및 포스트 리스트 화면에서 텍스트의 HTML 태그 제거
- #134 - 개발 완료: (1) 태그/포스트 리스트 화면의 포스트 항목에 댓글 개수 보여주기 (2) 댓글 리스트를 Jetpack Compose로 리뉴얼
- #133 - 개발 완료: (1) 검색 버튼 클릭시 키보드 숨기기 (2) 버그 수정: 팔로잉 계정 수 오류
- #132 - 개발 완료: 포스트 이미지 페이저 화면에 XML 대신 Jetpack Compose 적용
- #131 - 개발 완료: 프로필 이미지 화면에 XML 대신 Jetpack Compose 적용
- #130 - 개발 완료: 태그 화면에 XML 대신 Jetpack Compose 적용
- #129 - 개발 완료: 지갑 화면에 XML 대신 Jetpack Compose 적용
- #128 - 개발 완료: 포스트 리스트 화면에 XML 대신 Jetpack Compose 적용
- #127 - 개발 완료: 프로필 화면에 XML 대신 Jetpack Compose 적용
- #126 - 개발 완료: 계정 히스토리 화면에 XML 대신 Jetpack Compose 적용
- #125 - 개발 완료: 댓글 리스트 바텀시트에 XML 대신 Jetpack Compose 적용
- #124 - 개발 완료: 포스트 화면에 XML 대신 Jetpack Compose 적용
- #123 - 개발 완료: 계정 상세 화면
- #122 - 개발 완료: 포스트 화면에서 댓글 리스트 보여주기
- #121 - 개발 완료: 사용자 히스토리 화면에서 항목 클릭시 링크 팝업 띄우기
- #120 - 개발 완료: 사용자 히스토리 화면
- #119 - 개발 완료: Comments, Replies 화면
- #118 - 개발 완료: 포스트(Posts) 화면
- #117 - 개발 완료: 블로그 화면
- #116 - 개발 완료: 프로필 화면
- #115 - 개발: 프로필 화면 구현에 필요한 ProfileViewModel 클래스 개발
- #114 - 수정: 태그 화면의 포스트 리스트 항목 레이아웃 변경
- #113 - 오류 수정: 태그 리스트 로딩 중 다른 화면 이동하면 앱 비정상 종료
- #112 - 포스트 화면에서 보팅 리스트 화면으로 연결
- #111 - 시작 화면 추가
- #110 - 오류 수정: 지갑 화면 시작시 오류 토스트 뜸
- #109 - 개선: 태그 입력하고 검색 버튼 클릭 또는 엔터 키 누르면 키보드 닫기
- #108 - 개선: 태그 검색창에 엔터 키 적용
- #107 - 버그 수정: 태그 화면 복귀시 포스트 리스트 다시 로딩됨
- #106 - 포스트 화면 개발
- #105 - 포스트 화면의 로직 처리를 담당할 PostViewModel 클래스 개발
- #104 - 포스트 내용 읽기 기능을 Repository, Use Case 패턴에 적용
- #103 - 포스트 내용을 읽기 위한 bridge.get_discussion API 연동 코드 작성
- #102 - 포스트 내용을 읽기 위한 bridge.get_discussion API
- #101 - build.gradle에서 라이브러리 이름과 버전 통합
- #1 ~ #100
Upvoted! Thank you for supporting witness @jswit.
🎉 Congratulations!
Your post has been upvoted by the SteemX Team! 🚀
SteemX is a modern, user-friendly and powerful platform built for the Steem community.
🔗 Visit us: www.steemx.org
✅ Support our work — Vote for our witness: bountyking5