[독일어 학습 앱 개발기 18편] 유지보수를 고려한 구조 설계 – 앱이 커져도 무너지지 않게 하는 기준

2026. 1. 30. 05:18AI Product Building/HalloGerman

반응형

이 글의 핵심
- 기능이 늘어나도 구조가 무너지지 않도록 설계한 기준과 판단 방식
- 독일어 학습 앱을 장기적으로 유지보수하기 위한 Android 구조 전략


17편에서 학습 데이터 저장 전략을 다뤘다면, 이번 18편에서는 그 데이터를 포함한 전체 앱 구조를 어떻게 유지보수 가능하게 설계했는지를 설명한다.

HalloGerman는 단기간에 끝나는 프로젝트가 아니라, 기능이 점점 추가되는 장기 앱을 목표로 했다. 그래서 처음부터 “나중에 고치기 쉬운 구조”를 전제로 설계했다.


1. 유지보수는 언제부터 시작되는가

많은 개발자들이 유지보수를 “출시 이후의 문제”라고 생각한다. 하지만 실제로는 첫 구조를 잡는 순간부터 시작된다.

다음 질문에 답하지 못하면, 앱은 빠르게 복잡해진다.

  • 이 기능은 어디에 추가해야 하는가?
  • 이 로직은 다른 화면과 공유되는가?
  • 이 코드를 바꾸면 어디까지 영향이 가는가?

HalloGerman에서는 이 질문에 항상 같은 답을 할 수 있도록 구조를 단순하게 유지했다.


2. 기능 단위 분리가 핵심이다

HalloGerman의 구조 설계에서 가장 중요하게 본 원칙은 기능 단위 분리다.

  • 플래시 카드
  • 쓰기 학습
  • 말하기 학습
  • 복습 로직
  • 홈 화면 진도

각 기능은 UI, 로직, 데이터 접근이 최대한 독립적으로 구성되어 있다.


3. UI 로직과 비즈니스 로직을 섞지 않은 이유

초기 개발 단계에서는 UI 코드 안에 로직을 넣는 것이 빠르다. 하지만 이 선택은 나중에 큰 비용이 된다.

HalloGerman에서는

  • UI는 화면 표시와 이벤트 전달만 담당하고
  • 학습 판단, 계산 로직은 별도 계층에서 처리한다

이 분리 덕분에 UI를 바꾸더라도 학습 로직은 거의 손대지 않는다.


3-1. 역할 분리 구조 예시


// UI
button.setOnClickListener {
    viewModel.onStudyCompleted()
}

// ViewModel
fun onStudyCompleted() {
    studyUseCase.recordStudy()
}

이 구조는 테스트와 유지보수를 모두 쉽게 만든다.


4. 공통 로직을 한 곳에 모은 이유

학습 앱에는 여러 기능에서 반복되는 로직이 많다.

  • 학습 기록 저장
  • 오늘 날짜 판단
  • 복습 대상 계산

이 로직들이 각 화면에 흩어지면, 수정할 때마다 모든 화면을 건드려야 한다. 그래서 공통 로직은 중앙에서 관리하도록 설계했다.


5. 기능 추가를 가정한 설계

HalloGerman에서는 아직 구현하지 않은 기능도 구조적으로 수용 가능해야 했다.

  • 문장 학습
  • 레벨별 학습 분기
  • 프리미엄 기능

그래서 기존 구조를 크게 바꾸지 않고도 새 기능을 추가할 수 있도록 확장 포인트를 남겨두었다.


6. 유지보수를 어렵게 만드는 대표적인 실수들

실제 개발 과정에서 의도적으로 피한 실수들은 다음과 같다.

  • 하나의 클래스에 너무 많은 책임 부여
  • 화면 간 직접 참조
  • 암묵적인 상태 공유

이 실수들은 초기에는 편하지만, 기능이 늘어날수록 구조를 망가뜨린다.


7. 유지보수 관점에서 본 로컬 데이터 전략

17편에서 설명한 데이터 최소화 전략 역시 유지보수를 고려한 선택이다.

저장 데이터가 적을수록

  • 마이그레이션 부담이 줄고
  • 버전 업데이트 시 리스크가 낮아지며
  • 테스트 범위가 명확해진다

구조와 데이터 전략은 항상 함께 고려되어야 한다.


8. 이 구조가 출시 이후에 주는 이점

유지보수를 고려한 구조 덕분에, 출시 이후에도

  • 버그 수정 속도가 빠르고
  • 기능 개선 시 영향 범위가 작으며
  • 사용자 피드백 반영이 수월하다

이 차이는 시간이 지날수록 더 크게 벌어진다.


9. 다음 편 예고

다음 19편에서는 이제 기술적인 개발을 넘어 무료 학습 앱에서 수익화를 고민하게 된 이유, 즉 AdMob 도입 배경을 다룬다. 개발자가 처음 마주하게 되는 현실적인 선택을 정리할 예정이다.


참고 자료

 

 
반응형