Gemini를 활용한 '사진 잘 찍는 팁을 알려주는 AI 서비스'
불과 일주일 전에 '원티드X네이버클라우드 프롬프톤' 결선 행사에 참여하고, 다시 일상으로 돌아오니 또 다른 AI 공모전이 우연히 제 눈에 띄었습니다. 외부 원고 일정으로 인해 3일 꽉꽉 채워 개발하여 마감 1시간 전에 겨우 제출한 '2024 조코딩 AI 해커톤 with Google'의 참가 후기를 정리해 보았습니다.
이번에 해커톤을 참여하게 된 가장 큰 이유는 최근에 프롬프톤에 참여했을 때 기획자로서 여러 인사이트를 얻을 수 있기도 했고 Gemini는 어떤 차별점이 있을까 궁금했기 때문입니다. 그래서 이번에는 AI를 활용해서 어떤 서비스를 만들까 또 다른 기대를 안고 시작을 했는데요. 시작부터 가볍게 삐끗했습니다.
제출 페이지를 보고 자유 주제인 줄만 알았는데 해커톤 안내 영상을 보니 'Google Gemini API 개발자 대회 (글로벌 해커톤)'와 동일한 심사 기준이 적용되더라고요. 자유 주제이지만 '접근성, 환경 지속 가능성, 사람들의 삶의 개선에 기여하는 영향력' 등의 세부 기준이 있었습니다. 뭔가 굉장히 사회적인 서비스를 만들어야 할 것 같아서 심사 기준을 고려한 새로운 아이디어를 틈틈이 생각해 보았습니다.
그렇게 심사 기준을 보기 전후에 나왔던 아이디어 두 개로 각각의 서비스를 제작하려 했지만, 웹 개발에 차질이 생겨서 결국 심사 기준에서 약간 벗어나도 유용성만큼은 좋았던 아이디어 하나만 서비스화 하기로 했습니다. 그래서 이번 해커톤은 '첫 해커톤 참여, Gemini로 만드는 AI 서비스, 참여상 피자'에 의의를 두고 진행하였습니다. (380여 건의 응모작 중 조코딩님 라이브 방송에 제가 만든 서비스가 소개되었습니다.)
이번에 만든 서비스, 'Nice Shot'은 사용자가 올린 이미지를 분석해서 더 감각적이고 멋진 사진을 찍을 수 있도록 팁을 주는, 간단한 기능이지만 데일리로 이용할 수 있는 서비스입니다.
Gemini API는 텍스트뿐만 아니라 이미지, 오디오, 비디오를 지원하는 멀티모달 프롬프팅인데요. API 문서의 사용 사례를 보니까 이미지 처리 능력이 생각보다 좋아서 '이미지' 입력값을 기반으로 답변을 제공하는 서비스를 만들고자 했습니다.
제가 최근에 다른 분의 사진을 찍어주면서 들었던 생각이 '나는 사진 찍는 감각이 정말 없다.'였습니다. 요즘에 사진 편집이나 보정 기술이 좋아졌다지만, 감각이 없어 망해버린 사진들은 어떻게 해도 소생이 안 되더라고요. 또, 사람들은 같은 사진을 수십 번씩 찍으며 사진을 잘 찍고 싶어 하는 니즈가 있습니다. 그래서 추억을 기록하고 순간을 공유하며 새로운 가치를 만드는 사진의 가치를 더욱 빛나게 해 줄 '사진 촬영 팁' 서비스를 기획하였습니다.
서비스 제공 방식은 사용자가 사진을 업로드하면, 해당 사진을 분석해서 다양한 사진 촬영 요소 중 우선순위가 높은 3개의 팁을 알려줍니다. 업로드한 사진에 맞춰서 팁을 제공하기 때문에 사진 의도를 고려하여 명확하고 효과적인 맞춤형 팁 정보를 받을 수 있습니다.
일정상 프롬프트 고도화에 많은 시간을 할애하지는 못 했지만, 개발과 테스트를 병행하면서 중간중간 개선이 필요한 부분에 대해서 고도화를 같이 진행하였습니다. 최종적으로 시스템 지시문에는 아래와 같은 내용을 중점적으로 구성하였습니다.
❶ 캐릭터 설정: 친절한 사진 전문가. 비전문가를 대상으로 이해하기 쉽게 팁을 제공
❷ 세부 내용: 휴대폰 카메라를 활용한 촬영 팁. 추상적인 내용이 아닌 명확한 내용 요청
❸ 전문성 부여: 사진 촬영 이론 기반의 답변 요청
❹ Temperature 설정: 창의적이고 다양한 답변을 제공하기 위해 높게 설정
❺ 퓨샷 (Few shot): JSON 형식으로 각 답변 요소에 대한 구체적인 예시 포맷 제공
테스트를 진행하면서 아쉬웠던 점은 Temperature을 높게 설정했지만 유사한 촬영 요소에 대한 답변이 자주 나온다는 점이었습니다. 해당 촬영 팁이 실제로 우선순위가 높을 수 있기에 강제로 답변을 막지는 않았습니다. 대신 전문성을 부여하고 예시를 다양한 내용으로 보강하여 유사한 내용이라도 사진 의도를 고려하여 맞춤형의 답변을 제공할 수 있도록 하였습니다.
(1) 앱빌더 활용 실패
프롬프톤 당시, 버블(bubble.io)로 웹 제작을 했기 때문에 훨씬 거뜬히 진행할 수 있을 것이라고 생각했고, 다행히도 API 연동까지는 정상적으로 되었습니다. 다만, 사용자가 업로드한 이미지를 서버에 등록하는 것이 아니라 버블에서 base64로 처리를 해야 했는데요. AI와 몇 시간 동안 자바코드도 작성하고 플러그인도 설치하며 여러 시도를 해보았지만 결국 방법을 찾지 못했습니다.
(2) 영상 보고 개발 진행
그렇게 자기 전까지 유튜브를 보며 방법을 찾아보다가 유튜버 조코딩님이 이번 해커톤 과제를 직접 진행하는 무려 10시간짜리의 영상을 보게 되었습니다. 비개발자인 저도 충분히 따라 해 볼 수 있을 것 같아서 바로 다음 날 구글의 IDX와 Firebase를 활용해 웹 서비스 개발을 시작하였습니다. '이미지 파일을 입력받고 답변을 제공한다'는 서비스 프로세스가 굉장히 유사했기 때문에 영상만으로도 제법 수월하게 진행했습니다. 물론 프로세스만 유사할 뿐, 세부적인 서비스 내용은 다르기 때문에 커스텀이 필요한 부분도 꽤 있었습니다.
(3) 커스텀 작업
커스텀이 필요한 부분은 AI에게 도움을 구하기도 하고, CSS의 경우에는 약소한 지식과 w3shools를 참고해서 생각해 둔 디자인으로 작업을 진행했습니다. 깔끔하지 않은 코드로 깔끔한 UI를 여차저차 완성하고 보니 너무 밋밋해 보였지만, 다채로운 사진들을 업로드해 보니까 딱 적당한 것 같습니다.
또, 처음에는 이미지 업로드에 제한을 두지 않았는데, 사파리에서만 HEIF 파일이 계속 오류가 나기도 하고 보안상의 이유로 파일 형식과 크기를 제한하는 작업을 AI가 권장했기 때문에 이 부분도 추가로 진행하였습니다. 그런데 JPEG랑 PNG로 제한을 하니 사파리에서 HEIF 파일을 정상적으로 처리하는 요지경 이슈가 있었습니다.
그리고 업로드한 사진을 서버에 저장하지는 않지만, Gemini API 무료 서비스 정책상 구글이 이용 데이터를 활용할 수 있기에 관련 내용을 명시하여 서비스 이용에 참고할 수 있도록 기획적인 부분에서도 고려하였습니다. 다만, 공식 문서에서는 유료 서비스의 이용 데이터를 활용하지 않는다고 하는데, 유무료 서비스의 구분이 다소 모호해서 결제 수단을 등록하기는 했지만 보수적으로 안내를 하였습니다.
(4) 개발 후기
배속으로 영상을 봤는데도 불구하고 10시간이 훨씬 지나 결국 새벽까지 코딩을 진행하였습니다. 조코딩님이 영상에서 배포 중간중간에 기지개를 켜시던데 어느 순간부터 저도 배포 텀이 생길 때마다 그러고 있더라고요. 혼잣말도 더 늘었습니다.
비개발자 기준으로 원티드 LaaS(LLM as a service)를 활용하는 것과 비교해서 서비스 제작 난이도의 차이가 상당히 큰 편이었습니다. 물론 멀티모달이라는 점과 앱빌더로 제작하지 않았다는 점을 고려해야겠지만, 간단한 코드 복붙에도 난항을 겪는 비개발자 입장에서 원티드 LaaS가 확실히 접근하기 용이했던 것 같습니다. API 호출 시에 프롬프트 및 필터 설정을 자동으로 불러오는 기능이나 가변 변수 설정 기능 등... 프롬프톤 참여 당시에는 당연하게 생각해서 크게 실감하지 못했었는데 지금 생각해 보면 유용한 기능들이었습니다.
그래서 이번 해커톤은 비개발자 입장에서 난이도가 꽤 높은 편이었지만 조코딩님의 영상과 AI의 도움 덕분에 신속하게 웹 서비스 개발까지 마칠 수 있었습니다. 또, IDX에서는 Gemini 채팅 기능이 제공되어서 작업 중인 코드에 대해 질의를 바로 할 수 있다는 점이 좋았습니다. 물론 할루시네이션이 발생하기에 결국 여러 AI의 답변을 참고하여 진행하긴 했습니다.
이번 해커톤을 통해 아주 잠깐이지만 개발자 체험을 해 볼 수 있었는데요. 기획자로서 앞으로는 꼭 필요한 요소와 기능인지를 깊이 생각해 보고 기획을 해야겠다는 성찰을 하게 되었습니다. 또, AI의 다양한 기능과 능력을 활용해서 유익한 가치를 전달하는 것뿐만 아니라 그 영향력의 무게를 알고 신중하게 접근하는 책임감도 다시 한번 생각해 볼 수 있었습니다.