본문 바로가기

[TIL][내일배움캠프]

[내일배움캠프][TIL] 24.01.25 (목) - Android 앱개발 심화 - 앱 개발 프로세스 / 디버깅

1. Android 앱개발 심화 - 앱 개발 프로세스 / 디버깅

 

저번 시간까지 데이터 저장과 데이터를 받아서 활용하는 방법에 대해서 알아봤다.

이번 시간에는 이제 실제로 앱을 구글 스토어에 내놓기 위해서 필요한 과정들과, 앱을 만들 때에 발생하는 버그들을 수정하는 방법에 대해서 알아보고자 한다.

 

 

앱 개발 프로세스

 

앱을 개발하는 최종적인 목적은 단연 구글 스토어에 배포하는 것이다.

그 과정에 대해서 하나하나씩 알아보자.

 

 

1. Idea

우선, 어떤 앱을 만들지에 대해서 구상한다.

 

이런 아이디어는 대개 우연한 계기에서 떠오를 때가 있고, 혹은 사회의 트렌드를 파악하면서 떠오를 때가 있다.

예를 들어서 '우연한 계기'는 어느 날 특정 경험을 했었는데 거기서 '아, 이럴 때 이런 앱이 있었다면'과 같은 생각이 들면서 '그렇다면 이걸 만들어야겠다'로 시작되고, '사회의 트렌드'는 '요즘에는 이게 유행이구나. 그러면 이거에 대한 수요가 많지 않을까?'와 같은 생각에서 시작된다.

 

 

2. Feature Set

그런 아이디어가 나왔으면, 다음으로는 구체적으로 어떤 특징적 기능들을 구현할지 생각한다.

 

혹은, 이 앱의 수익을 어떤 식으로 낼지도 결정한다.

보통 앱의 수익을 내는 수단은 다음과 같다.

 

1) 무료 + 광고

- 앱 사용은 전적으로 무료이지만, 대신 앱 내에 삽입된 배너광고를 통해 수익을 얻는 방법

- 유저가 앱 내에 삽입된 광고를 클릭할 때마다 소액의 수익 발생

- 광고로 인해 앱의 사용성이 저해되거나 유저가 귀찮아 할 수 있음

- 광고의 위치 및 방법에 대한 신중한 검토 필요

 

2) 유료

- 앱을 다운로드하기 위해 결제가 필요

- 앱이 돈을 지불할 정도의 가치가 있는지 고민

- 안드로이드보다 iOS 기기에서 더 높은 수익률을 보임

 

3) 무료 + 인앱결제

- 처음 다운로드할 때는 무료이지만, 앱 내에서 이루어지는 추가 구매를 통해 수익을 내는 모델

- 모바일 게임에서 많이 이용

- 앱에 대한 유저의 충성도가 강할수록 높은 수익률을 보임

 

4) 프리미엄 모델

- 기본적인 기능은 무료로 이용할 수 있고, 보다 더 많은 기능과 서비스를 원하는 유저에게는 유료 버전을 제공하는 방법

- 다운로드는 무료이지만, 무료 버전에서는 제한된 기능만을 사용할 수 있다는 점 때문에 유저들의 프리미엄 버전 구매율이 높음 (플레이스토어 전체 매출의 70% 차지)

 

5) 무료 체험판 앱 모델

- 유저는 앱을 무료로 다운로드하고 일정 기간 동안 앱을 체험해볼 수 있음

- 앱을 무료로 체험할 수 있게 함으로써 유저의 흥미를 끈 뒤, 모바일 앱을 구매하도록 유도

- 프로모션 캠페인이 있는 경우, 마케터가 유저에게 무료 체험 기간을 제공하는 방식으로 이용

 

하지만, 꼭 하나의 모델만 사용하리라는 법이 없다. 때에 따라서는 두 가지 이상을 섞어서 사용하는 경우들도 존재한다.

예를 들자면

  • 프리미엄 모델을 파는데 이 프리미엄 모델이 '더 많은 기능과 서비스를 위해서'가 아니라 '앱을 이용할 때마다 산발적으로 튀어나오는 광고를 보지 않기 위해서' 인 경우도 있다. (즉, 이런 경우는 1번과 4번을 합쳤다고 볼 수 있다. 프리미엄을 산다고 기능이 드라마틱하게 좋아지지는 않지만, 광고 시청에서 오는 시간 낭비를 줄여준다.)
  • 요즘 양산형 모바일 게임을 보다보면 과금을 통해 살 수 있는 팩은 팩대로 팔고, 유료 재화로 이용할 수 있는 기능을 광고를 통해서 열화판으로 제공하기도 하더라.

개발자는 어떤 모델로 수익을 낼지 판단하는 것 또한 중요하다. (물론 큰 회사라면 이런 수익 모델은 개발자의 입김보다는 경영부의 입김이 더 셀 수도….)

여담으로, 소위 이런 수익 모델을 요즘에 비즈니스 모델(Business Model), 줄여서 BM이라고 많이들 이야기한다.

 

 

3. Graphic Design

앱 개발 만큼이나 중요한 것이 바로 디자인이다.

보기 좋은 떡이 먹기도 좋다고 앱의 기능이 아무리 좋아도 디자인에서 하자가 있으면 한 눈에 끌 수가 없기 때문.

특히나 요즘 시대는 감성을 자극하는 것이 그 어느때보다 중요하기 때문에 그런 감성을 자극하는 디자인이 특히나 중요해졌다.

 

 

4. App Development

이제 앱을 만들어서 구현시키는 단계다.

 

 

5. Testing

  • UI Tests : 사용자를 대신해서 애플리케이션의 UI를 테스트한다.
    • 실제 디바이스나 에뮬레이터의 실행이 필요하기 때문에 세 단계중에 가장 느리고 비용이 많이 드는 테스트
  • Integration Tests : UI는 제외하고 개발자가 작성한 코드가 어떻게 안드로이드 프레임워크와 상호작용을 하는지 확인해볼 필요가 있을 경우.
    • 에뮬레이터나 실기기가 필요가 없다.
    • 이러한 구현 테스팅은 Roboelectric 이라는 툴이 안드로이드에서 가장 대표적인 툴이다.
  • Unit Tests(단위테스트) : System Under Test(SUT)는 개발자가 집중해서 지켜보는 하나의 클래스이다.
    • 모든 종속성은 올바르게 작동하는 것으로 간주한다. 해당 종속성은 mock 또는 stub이 된다.
    • 실제 디바이스나 에뮬레이터가 필요 없기 때문에 빠르게 적은 비용으로 작성할 수 있습니다.
    • Android에서 가장 일반적으로 사용되는 단위 테스트 도구는 JUnit과 Mockito

 

6. Launch

  • 플레이스토어 앱 등록을 위해서는, 먼저 구글 개발자 계정을 만들어야 함
  • **구글 개발자 콘솔사이트: https://play.google.com/apps/publish/**  (계정을 등록한 뒤, 이용료 25$ 를 결제)

 

7. Marketing

이렇게 앱을 만들고 스토어에 내놓았다고 끝이 아니고, 지속적인 업데이트와 더불어서 홍보를 해야 한다.

이런 마케팅에는 다음과 같은 원칙이 있다.

  1. 앱의 품질이 앱 홍보/오랜 사용의 기본 조건
  2. 높은 앱 순위가 최고의 홍보 방안
  3. 개발자나 유저들과 소통할 수 있는 공간(블로그, SNS 등)은 필수이나 사용 시기는 출시 전 부터
  4. 잘 모르면 다른 업체의 마케팅 방안을 참고하는 것도 방법

Google Play 순위 상승 요건

  • 신규 설치 수가 높아야
  • 앱 실행 빈도가 높아야
  • 설치수가 매일 지속 되어야
  • 앱이 삭제되지 않고 오래 유지 되어야
  • 업데이트는 반영하지 않는 것 같음

 

 

디버깅 

 

 디버깅(Debugging) : 모든 소프트웨어에서 소스 코드의 오류 또는 버그를 찾아서 수정하는 과정.

  • 소프트웨어가 예상대로 작동하지 않으면 프로그래머는 오류가 일어나는 원인을 알아내기 위해 코드를 분석
  • 디버깅의 유래 : 초기 컴퓨터 개발자 중 한 명인 그레이스 하퍼가 컴퓨터 고장의 원인을 조사하던 중 회로 사이에 나방 한 마리가 끼어있는 것을 발견한 것에서 유래. (이왜진) (여담으로 우리가 코드를 '짠다'라고 하는 것도 예전에는 정말로 코드를 베짜듯이 바느질을 해서였다고)
  • 디버깅이 중요한 이유 : 소프트웨어 품질과 최종 사용자 경험이 모두 개선

 

○ 디버깅 프로세스

  • 오류 식별
    • 개발자, 테스터 및 최종 사용자가 소프트웨어를 테스트하거나 사용하는 동안 발견한 버그를 보고
    • 버그의 원인이 된 정확한 코드 줄 또는 코드 모듈을 찾음
    • 번거롭고 시간이 많이 걸릴 수 있음
  • 오류 분석
    • 모든 프로그램 상태 변경 및 데이터 값을 기록하여 오류를 분석
    • 소프트웨어 기능에 미치는 영향을 기준으로 버그 수정의 우선 순위를 정함
    • 소프트웨어 팀이 개발 목표와 요구 사항에 따라 버그 수정 일정을 정함
  • 수정 및 검증
    • 개발자가 버그를 수정하고 테스트를 실행하여 소프트웨어가 계속 정상적으로 작동하는지 확인
    • 미래에 그 버그가 재발할지 확인하기 위해 새로운 테스트를 작성할 수도 있음

 

디버깅이 필요한 코딩 오류

  • 구문 오류 : 컴퓨터 프로그램에 잘못 입력된 명령문이 있을 때
  • 의미론적 오류 : 프로그래밍 명령문을 잘못 사용할 때
    • 예) x/(2 π)을 y = x / 2 * math.pi 으로 표기하면 컴퓨터 상에서는 (x π)/2 로 인식하게 됨.
  • 논리 오류 : 프로그래머가 컴퓨터 프로그램의 단계적 프로세스나 알고리즘을 잘못 입력할 때
  • 런타임 오류 : 소프트웨어 코드가 실행되는 컴퓨팅 환경으로 인한 오류
    • 예) 메모리 공간 부족, 스택 오버플로

 

○ 디버깅 전략

  • 점진적 프로그램 개발
    • 코드의 작은 부분을 자주 테스트할 수 있도록, 관리가 용이한 섹션으로 나누어 프로그램을 개발하는 방식
    • 발견한 모든 버그를 현지화
    • 코드의 큰 섹션을 작성한 후 여러 개의 오류를 해결하는 것이 아니라, 한 번에 하나의 버그만 해결할 수 있음
  • 역추적
    • 치명적인 오류가 발생한 위치부터 역방향으로 작업하여, 코드에서 정확한 발생 지점을 찾는 방식
    • 소규모 프로그램에서 널리 사용되는 디버깅 방식
    • 코드 줄의 수가 증가할수록 실행하기 힘듦
  • 원격 디버깅
    • 로컬 시스템과 분리된 환경에서 실행되는 어플리케이션을 디버깅
  • 로깅
    • 내부 데이터와 실행 시간 및 운영 체제 상태와 같은 기타 중요한 정보가 기록된 로그 파일을 조사하여 버그를 찾고 해결하는 방식
  • 클라우드 디버깅