1. 서
Chat GPT를 모르는 사람은 이제는 없을 것이다. 그정도로 GPT는 지금까지 엄청난 포스를 보여주었다. 물론 할루시네이션과 같이 미흡한 부분이 여전히 존재하긴 하지만, GPT가 보여주는 퍼포먼스와 함께 그 발전속도를 생각하면 앞으로가 더욱 무시무시하지 않을까 싶다. 새로운 모델이 발표될 때 마다 나오는 "이번엔 어떤 스타트업이 망할까?"라는 질문은 결코 호들갑이 아닌 현재진행중인 이야기이다.
각설하고, 몇년전에 간단한 애플리케이션을 만들어 보려 한 적이 있다. 당연하게도 제로베이스 상태에서 애플리케이션을 만든다는 것은 쉽지 않은 일이었다. 안드로이드 앱을 만들려면 생소했던 코틀린 언어, 안드로이드 스튜디오와 같은 프로그램을 다룰 수 있어야 했고, 그 높은 장벽으로 인해 '나만의 앱 만들기'는 수포로 돌아갔다.
어김없이 GPT를 쓰고있던 오늘 갑자기 옛 실패의 기억이 떠올랐다. 일단 GPT와 함께라면 당연히 간단한 앱 정도는 만들 수 있을 텐데, 다만 그 cost가 어느정도일지 궁금했다. 그리고 코틀린과 안드로이드 스튜디오에 대해 전혀 아는 바 없는 내가 하나의 허접한 앱을 만들기까지 걸린 시간은 불과 한시간 남짓에 불과했다. 정말 놀라운 시대임을 다시한번 느낀다.
2. 어떤 어플인가
"엄마가 좋아 아빠가 좋아?" - 수많은 어린이들을 괴롭혀온 질문이다. 이번에 만든 어플 또한 비슷한 맥락이다. 혹시 다음과 같은 고민을 해본 사람이 있을지 모르겠다 : 부모님께 전화를 드리는 경우에는 어느 쪽에 전화를 해야 할까?
Call Your Parents!(가제)는 공감능력이 뛰어나고 마음이 따뜻한 사람들을 위한 어플이다. 부모님중 어느 분께 전화를 드릴지 여부를 선택하는 일련의 프로세스를 프로그램 뒤편으로 숨기고 랜덤적인 요소를 가미함으로써 선택의 주체라는 고통스러운 역할로부터 완벽하게 벗어날 수 있게 하였다. 이제는 그저 버튼 하나만 누르면 된다.
반장난으로 만들어본 어플이지만 그 취지는 부모님께 더욱 자주 전화드리자는 것으로 굉장히 긍정적인 방향을 지향하고 있다. 이러한 취지를 더욱 잘 살릴 수 있는 부가적인 기능도 고민해보았는데, 일단은 매일 일정한 시각에 알림메세지를 띄우는 기능까지 함께 구현해 보았다.
3. 어떻게 만들었는가
서설에서 언급한 바와 같이 나는 코틀린과 안드로이드 스튜디오를 다룰줄 모른다. 그렇다고 프롬프트 엔지니어링을 (아직은) 제대로 공부하지도 않았다. 그냥 일반적인 대화만으로 GPT를 구슬려서 어플을 뽑아낸 것이다. GPT는 곱씹을수록 놀랍다. 그렇다면 GPT가 대체 어떤 명령을 듣고 작업을 수행하였는지 살펴보기 위해, 입력했던 프롬프트들 중에서 핵심적이고 그리 길지 않은 것들을 선별하여 이하에 나열해 본다.
- 코틀린으로 안드로이드 앱을 만들거야. 어떤 앱이냐면 전화번호 두 개를 저장해 놓으면 버튼을 눌렀을 대 두 번호중 하나에 랜덤하게 전화를 걸어주는 앱이야. 코틀린으로 만들어 볼래?
- 혹시 매번 번호를 입력해야 하는 거니? 그런 스타일 말고 한번 입력해 놨으면 수정하기 전까지는 언제 앱을 열어도 번호가 유지되었으면 하는데 이런 스타일로 수정해볼래?
- 이번에는 레이아웃을 살짝 변경해보려고 해. Call Random Number를 화면 중앙에 동그란 버튼으로 하고, 번호 입력란 두개도 이와 균형을 이루었으면 해. 이렇게 수정해줘
- 코드가 이상해. 버튼이 왼쪽 상단에서 겹쳐져 있어. 내가 말한대로 동그란 버튼은 화면 중앙에 오도록 하고, 번호 입력란 두개는 그냥 원래처럼 해줘
- 혹시 번호입력란 각각 옆에다가 조그만 네모 버튼을 만들 수 있을까? 각 버튼을 누르면 해당 입력란에 입력되어 있는 번호에 전화를 걸 수 있는 버튼을 추가해줘
- 다 좋은데 중앙의 동그란 버튼을 다시 모서리가 둥근 네모버튼으로 고쳐주고, 버튼 색깔도 단순한 파란색보다 좀더 세련된 색으로 바꿔줘
- 이제 번호입력란에 번호를 안적어 놓았는데 중앙이나 우측의 버튼을 누르는 경우 "번호를 입력하세요"라는 안내메세지를 띄우는기능을 추가해줄래?
- 내가 원하는 알림은, 앱이 실행중이든 실행중이지 않든 무조건 지정된 시간에 알림을 띄우는 거야. 마치 알람시계어플처럼 말이야. 이렇게 구현한게 아니라면 내가 말한 방식으로 고쳐줘
- 내 스마트폰에서 실행해보게 필요한 과정을 다시 자세히 알려줘
- 내 폰으로 실험해보니까 call 버튼이나 random call 버튼 둘다 번호 없을때 누르면 "번호를 입력하세요"라는 메세지가 떠야하는데 안뜨고 있고, 그리고 결정적으로 전화가 걸리지 않고 있어. 왜이런거야?
- 위 코드는 AndroidManifest.xml 파일이야 입력란 우측 버튼을 누르면 해당 입력란에 입력된 번호에 전화를 걸어야 하고, 중앙 버튼을 누르면 두 번호중 랜덤하게 전화를 걸어야 하며, 입력란에 번호가 없는 경우에는 번호를 입력하세요라는 메세지가 떠야하는데 이것들이 하나도 동작을 안하고 있어. 다행히 알림기능만 유일하게 잘 작동하고 있거든? 권한문제인가 하고 살펴봤는데 권한을 부여해도 기능이 동작하지 않고 있어. 이걸 해결해줘. 추가적으로 버튼을 눌렀을때 권한이 없는 경우에는 권한이 없다는 메세지가 떴으면 더 좋겠지?
- 권한 요청 처리는 그렇다치고, 문제는 내가 수동으로 권한을 부여하더라도 입력된 번호로 전화를 걸지 못한다는 점이 지금 문제의 핵심이야. 이 부분을 해결해야 해
- 수정하다보니까 알림 기능이 없어진거 같아. 우측 하단의 설정 버튼을 누르면 알림 시간 설정 버튼이 떠야 하는데 안뜨네. 알림기능이 제대로 동작하도록 필요한부분 수정해줘
- 내가 원하는 건 새로운 알람 설정 화면이 필요없어. 아까는 버튼 누르면 어떤 툴이 뜨더라고. 그렇게 해주면 돼. 내가 올려준 파일 이외의 파일은 필요없는 상황이야
- 혹시 어플에서 계속 번호입력란에 커서가 떠있는게 좀 불편한데, 어플 화면의 빈 곳을 클릭하면 커서가 안깜빡이도록 할 수 있을까?
- 두가지가 추가 되었으면 좋겠어 우선 번호를 한번 입력했다면 수정하지 않는한 계속 유지되었으면 좋겠고, 다음으로 지금 오후 9시를 기점으로 부모님께 전화 걸었나요? 지금 전화하세요! 라는 알림을 어플이 실행되든 안되든 그런 알림을 마치 알람시계처럼 정해진 시간(오후 9시, 우측 하단 버튼으로 조절가능)에 매일 매일 띄우고 싶은데 이게 동작을 안하고 있네. 이 부분들을 해결해줘
- 알림도 잘 동작하는걸 확인했어. 다만 고쳐야 할 부분이 있어. 첫째로, 사용자가 설정한 알림시각이 앱을 껐다 키면 초기화된다는 거야. 맨 처음에 디폴트로 오후 9시로 잡아놓되, 이후에 사용자가 변경하면 그 시간으로 고정시킬 수 있어야겠지? 둘째로, 알림이 앱을 실행하고 있는 상태에서만 뜬다는 거야. 알림은 앱이 실행되고 있든 그렇지 않든 떠야해. 마치 알람어플처럼 말이야 이 부분들을 해결해줘
이런 단순한 문장들을 가지고 GPT가 작업을 해내는 모습은 경이롭기까지 하다. 앞으로 프롬프트 엔지니어링을 제대로 공부한다면 GPT를 데리고 어떤 퀄리티의 결과물을 뽑아낼 수 있을지 정말 기대되는 부분이다.
4. 결어
어쩌다 보니 내 생에 최초의 앱을 만들게 되었다. 실제로 만들어보니 여러 느낀점이 있는데, 우선 단순 그 자체인 어플임에도 신경써야할 디테일한 요소가 굉장히 많다는 점이 놀라웠다. 직접 사용해보면서 찾아낸 커서의 포커스 해제라던지, 전화걸기에 필요한 권한 요청이라던지, 버튼을 누를 때 나타나는 효과 적용 등등 매우 많다. 여기에 더해 불특정 다수의 사용자들이 사용하면서 조금이라도 불편함을 느낄 수 있는 부분은 정말 셀 수 없이 많을 것이다. 내가 아무 생각없이 사용해왔던 어플들이 얼마나 대단한 것들이었는지 절실히 깨달을 수 있었다.
또한, 만들기 전에는 생각하지 못했으나 만드는 과정에서 생각해낸 추가하면 좋을 기능들이 꽤 있다. 예를들어, 일정 기간동안의 전화목록을 수집하여 부모님께 얼마나 전화를 드렸는지에 관한 통계를 사용자에게 제공하면 매우 좋을 것이다. 확실히 막연히 구상에만 그친 것 보다는 직접 부딪치면서 경험하는 것이 훨씬 값진 것 같다.
이왕 앱을 만들었으니 보완해야 할 부분이나 추가하고 싶은 기능들을 앞으로 수정 및 개선해 나갈 계획이다. 최종적으로는 디자인도 업그레이드하여 퀄리티를 대폭 높여 플레이스토어 마켓에 등록까지 해보고 싶다. 너무 어렵지도, 너무 쉽지도 않은 적당한 거리의 목표를 갖고 있다는 것은 즐거운 일인 것 같다.