서론: 코드 복붙만으로는 넘을 수 없는 안드로이드의 철벽
안드로이드 스튜디오라는 무거운 개발 프로그램을 설치하고, AI가 짜준 코틀린(Kotlin) 코드와 화면 디자인(XML) 코드를 제자리에 붙여넣었습니다. 웹사이트를 만들던 경험에 비추어 볼 때, 이 정도면 당연히 폰 화면을 잠그는 ‘스마트폰 중독 방지 앱’이 뚝딱 완성되어야 했습니다.
하지만 녹색 재생 버튼(Run)을 누르자마자, 화면 하단에는 웹 브라우저에서는 본 적 없던 무시무시한 빨간색 에러 메시지들이 폭포수처럼 쏟아졌습니다. 가장 치명적인 에러는 바로 “권한(Permission)이 거부되었습니다”라는 문구였습니다. 웹사이트는 브라우저 안에서만 얌전하게 돌아가지만, 스마트폰 전체 화면을 강제로 덮어버리는 강력한 앱을 만들려면 구글 안드로이드 운영체제의 깐깐한 허락을 받아야 했던 것입니다. 코딩 초보가 처음으로 마주한 네이티브 앱 생태계의 매운맛, 이른바 ‘퍼미션 지옥’에서 AI 사수와 함께 탈출하여 마침내 제 스마트폰에 첫 앱을 설치한 감격의 순간을 기록합니다.
1. 안드로이드의 문지기, ‘매니페스트(Manifest)’를 설득하라
AI에게 붉은색 에러 코드를 그대로 복사해서 던져주자, 원인은 명확했습니다. 제 앱이 다른 앱들 위에 강제로 화면을 띄우려(잠금 화면) 하는데, 안드로이드 시스템에 이를 미리 신고하지 않았다는 것입니다.
-
AI의 처방전: “안드로이드 앱에는
AndroidManifest.xml이라는 아주 중요한 명세서가 있습니다. 앱이 스마트폰의 어떤 기능(카메라, 인터넷, 화면 덮기 등)을 쓸 것인지 미리 적어두는 곳이죠. 이 파일에<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />라는 한 줄을 추가해야 합니다.”
웹 개발에서는 상상도 못 했던 ‘권한 신고서’ 개념이었습니다. AI가 알려준 대로 폴더를 열어 매니페스트 파일에 해당 코드를 한 줄 찔러 넣었습니다. 이것으로 앱이 시스템에 “저 화면 좀 덮겠습니다”라고 정식으로 허락을 구하는 절차가 끝났습니다.
2. 그래들(Gradle)의 저주와 디버깅의 연속
권한을 추가하고 다시 실행 버튼을 눌렀지만, 이번에는 ‘빌드(Build) 오류’가 발생했습니다. 안드로이드 스튜디오는 제가 붙여넣은 코드를 스마트폰이 이해할 수 있는 앱(APK) 파일로 압축하는 과정(빌드)을 거치는데, 여기서 부품이 모자라다며 파업을 선언한 것입니다.
이 역시 AI에게 증상을 틱 던져주었습니다.
-
나의 질문: “이번엔
Unresolved reference라는 에러가 뜨면서 빌드가 안 돼. 뭐가 문제야?” -
AI의 명쾌한 해답: “아, 제가 짜드린 코드 중에 최신 UI 라이브러리를 사용하는 부분이 있는데, 그 부품을 가져오겠다는 선언을
build.gradle파일에 안 해주셨군요! 이 줄을 추가하고 우측 상단의 ‘Sync Now(동기화)’ 버튼을 누르세요.”
AI가 시키는 대로 build.gradle 파일에 코드를 넣고 동기화 버튼을 누르자, 하단에서 로딩 바가 빙글빙글 돌며 모자란 부품들을 인터넷에서 스스로 다운로드하기 시작했습니다. 그리고 마침내 ‘Build Successful(빌드 성공)’이라는 영롱한 초록색 글씨가 떴습니다.
3. 내 손안의 작은 기적, 스마트폰에 첫 앱을 띄우다
이제 진짜 제 스마트폰에 이 앱을 넣어볼 차례입니다. USB 케이블로 노트북과 제 안드로이드 폰을 연결했습니다. (AI의 안내에 따라 폰 설정에서 ‘개발자 모드’와 ‘USB 디버깅’을 켜는 숨겨진 의식도 치렀습니다.)
안드로이드 스튜디오 상단에 제 스마트폰의 모델명(Galaxy S24)이 떴습니다. 심호흡을 하고 다시 한번 녹색 재생 버튼을 클릭했습니다.
잠시 후, 제 스마트폰 화면이 번쩍하더니 제가 기획했던 다크 모드의 ‘폰 잠금 앱’이 짜잔 하고 실행되었습니다!
타이머를 ‘1분’으로 맞추고 [잠금 시작] 버튼을 눌렀습니다.
순간 폰 화면 전체가 검게 변하며 “집중할 시간입니다. 남은 시간: 00:59″라는 글씨가 떴습니다. 홈 버튼을 누르고, 뒤로 가기 버튼을 연타해도 화면은 꿈쩍하지 않았습니다. 제가 기획한 로직대로 제 스마트폰이 완벽하게 통제당하는 순간이었습니다. 1분이 지나자 잠금이 스르륵 풀리며 원래 화면으로 돌아왔습니다. 브라우저에서 웹페이지를 띄우는 것과는 차원이 다른, 내 손안의 기기를 직접 지배하는 듯한 엄청난 쾌감이 밀려왔습니다.
4. 웹 에러 vs 네이티브 앱 에러 대처법 비교
| 디버깅 항목 | 웹 (Web) 서비스 에러 대처 | 안드로이드 앱 (App) 에러 대처 |
| 에러 확인 위치 | 브라우저 F12 (개발자 도구) 콘솔 창 | 안드로이드 스튜디오 하단 Logcat 및 Build 탭 |
| 에러의 주된 원인 | 오타, CSS 레이아웃 충돌, JS 변수 오류 | 권한(Permission) 누락, 라이브러리(Gradle) 미동기화 |
| 수정 후 반영 시간 | 코드 수정 후 ‘새로고침(F5)’ 즉시 반영 | 코드 수정 후 수십 초~수 분의 재빌드(Rebuild) 시간 소요 |
| AI의 역할 | 코드 로직 자체를 검수하고 즉시 수정 | 복잡한 설정 파일(Manifest, Gradle)의 위치와 필수 권한을 안내하는 내비게이터 |
결론: 기술의 장벽은 허물어졌다, 이제 남은 건 ‘사람’이다
“웹도 만들고, 안드로이드 앱까지 만들었어!”
비전공자인 제가 AI 비서 하나만 믿고 이루어낸 성과는 스스로 생각해도 놀라웠습니다. 로또 추첨기, 경마 게임, 네이버 블로그 변환기, 그리고 폰 화면 잠금 앱까지. 제 개인 도메인(heung-in.com)과 스마트폰에는 세상에 없던 나만의 포트폴리오가 가득 쌓였습니다.
하지만 개발의 기쁨에 취해있던 저에게 냉혹한 현실이 찾아왔습니다. 툴은 완벽하게 작동했지만, 제 웹사이트에 접속하는 사람은 오직 저와 제가 링크를 강제로 보낸 지인 몇 명뿐이었습니다. 아무리 좋은 마이크로 SaaS를 만들어도, 사람들이 검색해서 들어오지 않으면 무용지물입니다.
개발자에서 기획자로, 그리고 이제는 ‘마케터’로 변신할 시간입니다. 다음 15편에서는 텅 빈 내 웹사이트에 구글과 네이버의 사람들을 끌어모으기 위한 AI 기반의 SEO(검색엔진 최적화) 전략과 “기껏 만들었는데 아무도 안 와요”에 대한 처절한 생존기를 시작해 보겠습니다.