728x90
프로젝트 소개
프로젝트 배경 및 동기
- 지역에서 행사를 하거나 지자체에서 어떤 혜택이나 복지같은거 보면 홍보가 잘 안되어 있는 경우가 종종 보인다.
- 길을 가다가 관심있는 정보를 봤을 때, 인터넷에 검색해보면 아직 게시가 안나와 있는 경우가 종종 보인다. 그럴 때, 그냥 포스터를 인터넷에 게시하는 것만으로도 나름 홍보의 효과가 있지 않을까? 라는 생각에서 시작함.
- 하지만 포스터를 하나하나 사진을 찍어서 블로그에 올리는 행위는 나로서는 비효율적인 행위라고 생각을 했다. 그리고 난 개발자이므로 이런 과정을 파이프라인으로 만들고 싶었다.
- 여기서 더 나아가서 chatGPT vision을 사용해서 포스터 안의 내용을 읽어서 포스팅을 할 때 제목과 내용을 작성하게 하면, 사진만 찍어서 매우 효율적으로 정보를 공유할 수 있지 않을까 생각하게 되었다.
프로젝트 목표
- 지역 행사 및 복지 정보를 효과적으로 홍보
- 포스팅 자동화 파이프라인 완성
- LLM api 활용
요구 사항 분석
요구 사항
- 포스터를 업로드하는 방법은 크게 두가지이다.
- 갤러리에서 포스터 사진을 선택
- 카메라로 사진을 찍어 업로드
- 카메라는 갤럭시 기본 카메라 어플을 쓸 예정이다. 왜냐하면 종이 인식이 정말 잘되기 때문이다.
- 사진을 찍거나 갤러리에서 사진을 선택하면 자동으로 프롬프트와 함께 AI 서버에 전송이 되고, 받아온 응답을 파싱해서 블로그에 업로드 한다.
- 포스터 내용을 잘 읽어서 요약을 잘해야 함.
- 제목 정확도: 90% 이상
- 본문 정확도: 80% 이상
설계
아키텍처 및 알고리즘 설계
인터페이스 설계
- 인터페이스는 하얀 화면에 각 기능별로 버튼을 구성할 예정이다. 따라서 설계가 별도로 들어가지 않음.
개발 환경 및 도구
프로그래밍 언어
python 또는 dart 또는 kotlin
- python의 kiwi를 쓰거나
- dart의 flutter를 쓰거나
- kotlin을 활용해서 android 개발을 진행
- 여러 시도 끝에 kotlin을 채택했다.
개발 도구 및 프레임워크
- android
- openAI(추후 클로바로 변경할 가능성이 있음. 이미지 번역 이슈 때문)
- framework
- python kivi
- android native(kotlin or java)
- flutter
- 중 선택
- github
개발 과정
초반 시행착오
kivy 사용여부
- 초반에는 최대한 python으로 구현하고 싶어서 kivy를 사용하다가, 카메라 기능 구현부터 막혀서 고민을 했다.
- 여러 고민 끝에 kivy를 활용하지 않았는데, 이유는 다음과 같다.
- kivy를 활용한 개발 참고자료를 찾기 힘들다는게 가장 컸다. 특히 한국 자료가 거의 없다.
- 그러다보니 chatGPT의 도움을 받는 것도 힘들었다. chatGPT 역시 데이터를 바탕으로 답변을 해주기 때문이다.
- 공식 문서도 부분적으로 과거 버전에서 업데이트가 안된 부분이 있는 듯 했다. 호환성 부분에서도 떨어졌다.
- 앞서 여러 원인에 의해 삽질을 해본 결과, 꾸역꾸역 구현을 할 수는 있겠지만, 고생한 것에 비해 개인적으로도 얻을게 없어 보였고(무엇보다 익숙한 언어를 사용해서 빨리 구현한다는 이점이 사라졌다.), 나중에 파이프라인을 구성하고 유지보수를 하기 겁나서 kivy 사용하지 않는 것으로 결정했다.
네이버 블로그 포스팅 여부
- 아무래도 이런 공공 정보는 한국인 대부분이 네이버를 사용하기 때문에 네이버에서 검색이 되는 것이 좋을 거라 생각을 했다.
- 따라서 네이버 블로그에 포스팅을 하는게 좋을 거라 생각했는데, 유감스럽게도 악성 포스팅 때문에 네이버 블로그 api 제공을 중단했다는 글을 봤다.
- 차선책으로 selenium을 이용해서 편법으로 포스팅을 할 수 있었지만, 정식 루트는 아니어서 운영 정책 위반에 걸릴 수도 있고 네이버 블로그 UI가 업데이트 되는 것에 취약해지기도 하는 등 여러 문제가 있었다.
- 대신 네이버 카페 글쓰기 api는 제공되고, 네이버 카페도 검색이 된다는 것을 확인할 수 있었다.
- 어쨌든 목적은 편리하게 정보를 제공하는 방법을 찾는 것이기 때문에, SEO 최적화만 잘 시킨다면 네이버 카페에 포스팅을 해도 충분히 효과를 볼 수 있을 것이라 생각했다.
sub tasks
- 우선 최소 목적을 달성하기 위해서 가장 필요한 task를 추려보고 우선순위 순으로 정렬해 보았다.
- chatGPT에 이미지 처리: 이게 안되면 프로젝트 자체를 중단시켜야 하기 때문에 가장 중요한 단계라고 생각해서 제일 처음에 배치했다.
- 이미지 처리 태스크 : 초반에는 kivy를 이용할 생각이어서 python으로 초기 코드를 작성했고, 추후 chatGPT의 도움을 받아 kotlin으로 쉽게 바꿀 수 있었다.
- 카메라 또는 갤러리에서 사진을 가져오기: 이 task를 쉽게 할 수 있는지 여부에 따라서 flutter/python/kotlin 중 어떤 것을 사용할지 결정해야 했기에 두번째 우선순위에 넣었다.
- kivy로 카메라 찍기 태스크 : 이게 잘 안돼서 flutter로도 해보다가 결국 android로 구현하기로 결심
- kotlin으로 android를 구현하는 것은 처음이었기 때문에 udemy 강의를 좀 봤다.
- 네이버 카페 API를 사용해서 글쓰기 구현: 이거는 api 명세가 잘 작성되어 있어서 잘 따라하고, 자료를 비교적 쉽게 찾아서 구현할 수 있을 것이라 생각했기 때문에 가장 마지막에 배치했다.
- chatGPT에 이미지 처리: 이게 안되면 프로젝트 자체를 중단시켜야 하기 때문에 가장 중요한 단계라고 생각해서 제일 처음에 배치했다.
작은 계획 수정
- 처음에는 카메라로 사진을 찍어 바로 서버에 넘기는 태스크를 수행하려 했지만, 그것보다는 갤러리에서 사진을 불러와서 서버에 전송하는게 더 빠르고 쉬워 보여서 갤러리에 있는 사진을 이용해서 포스팅하기로 했다.
여기까지 얼추 정리가 되어서, 이제부터 본격적으로 개발 작업을 시작한다.
참고자료
코틀린 강의: https://www.udemy.com/course/best-android-12-kotlin/
728x90
'진행중' 카테고리의 다른 글
[프로젝트] 지역 공공 포스터를 포스팅해보자. 3) 갤러리에서 이미지를 불러오기 (0) | 2024.04.09 |
---|---|
[프로젝트] 지역 공공 포스터를 포스팅해보자. 2) 네이버 아이디로 로그인(네아로) 구현 (0) | 2024.04.08 |
[프로젝트 냠냠] 개발 노트3. AISW 개발자 양성과정 및 프로젝트 후기 (1) | 2024.03.02 |
[프로젝트 냠냠] 개발 노트2-3. weekly calendar, 식단 관리(localStorage), 추천 기능 (0) | 2024.03.02 |
[프로젝트 냠냠] 개발 노트2-2. common template, DB 설계 (0) | 2024.03.02 |