Kiro Building Note 8 (v0.4)

8월 15일부터 9월 6일까지 22일 동안 진행한 v0.4!
위처럼 한번에 총 60페이지를 스캔하고 이렇게 전자책을 만들었다.
홀드 시스템
v0.3에서 아래와 같은 문제들이 있었다.
- 넘어간 종이가 제대로 펴지지 않음
- 넘어간 종이가 암 밑으로 다시 돌아옴
- 책 초반에 홀드암으로 홀드가 제대로 안됨
- 턴암이 한페이지만 넘겨야 할 떄 이미 넘겼던 페이지들까지 다 같이 들리면서 턴암의 힘으로 못 넘기게 됨
이런 문제들을 새로운 포암 시스템으로 모두 해결했다.

동작 방식은 위 유튜브 영상에서 볼 수 있다.
- 책의 복원력을 서보모터가 이기지 못한다. 다른 힘으로 복원력을 이겨내야 한다.
- N장 누르다가 살짝 떼고 1장을 끼워서 N+1장을 누르는건 단일 DoF로 불가능하다.
이런 두 가지 생각을 가지고 결국 고정하는 데에 2개 이상의 DoF가 필요하다는 결론을 내렸다. 하나는 N장을 누르고, 하나는 1장만을 누른다. N장을 누르는 암은 힘이 더 세야 하므로 모터의 힘으로 버티지 않고 구조물의 힘으로 버티도록 설계한다. 위 그림에서 N장을 누르는 암이 홀드암, 1장을 누르는 암이 프레스암이다.
넘어간 페이지가 돌아가려는 힘을 마찰력으로도 극복하기 위해서 홀드암에 실리콘 호스를 끼웠다. 마찰력이 증가해서 보다 고정이 더 잘되었다.
이후에 이 포암 전체를 제어하도록 제어 쪽 코드를 개선했고, 이외 정확도를 더욱 높였다.

이런 북홀더도 옆에 만들어서 계속 넘어가려는 책을 고정하도록 했다.
Wifi 설정
새롭게 받은 키로의 파워를 연결하면 Wifi를 모르기에 스튜디오를 통해 접속이 불가능하다. 이에 Wifi를 쉽게 설정할 수 있도록 해야 하는데 키로에는 카메라가 있다.

스튜디오에서 Wifi QR 코드를 생성하고 핸드폰으로 찍어서 기기 카메라에 가져다대면 자동으로 해당 Wifi로 연결된다.
기기는 인터넷에 연결이 안되어 있으면 자동으로 Wifi QR 스캔 모드로 들어가진다. 중간에 끊겨도 자동으로 QR 스캔 모드로 진입한다.
스튜디오





크게 라이브 탭과 라이브러리 탭으로 나눠진다.
라이브 탭은 5가지 패널로 구성되어 있다.
- 카메라 패널; 상단 중앙에 위치해 있으며 책이 잘 보이는지 확인한다.
- 상태 패널; 스캔이 시작되면 현재 상태를 보여준다. 어떤 단계가 진행 중인지 바로 파악할 수 있다.
- 로그 패널; 키로의 로그를 확인한다.
- 스캔 페이지 패널; 스캔한 페이지를 즉시 확인할 수 있으며 편집 버튼을 통해 HTML을 수정할 수도 있고, 삭제할 수도 있다. 라이브러리에서 보기 버튼 클릭으로 세션 탭으로 즉시 이동도 가능하다.
- 제어 패널; 시작, 일시정지, 초기화. 3가지 가능하다.
라이브러리 탭 안에서 세션 탭과 책 탭으로 나뉜다.
세션 탭에서는 스캔 세션들을 모두 확인할 수 있고 각 세션마다 페이지 리스트를 모두 확인 가능하다. 책으로 엮고 싶은 세션들을 함께 클릭해서 책으로 엮을 수 있다.
책으로 엮으면 책 탭에서 페이지를 모두 볼 수 있고 페이지 편집, 수정, 삭제, 순서 변경이 가능하다. 편집이 모두 완료되었으면 전자책으로 변환을 누르면 다운받아진다.
배포
Domain: Godaddy
Frontend: Vercel
Backend: g4dn.xlarge + docker + ec2 postgresql + nginx + certbot + S3
이렇게 https://www.kirostudio.io/ 로 배포했다.
이 도메인은 고대디에서 사고 Vercel로 네임서버 연결했다. frontend는 nextjs로 개발하고 쉽게 vercel로 붙혀서 main branch에 푸시하면 자동 배포되도록 해두었다.
backend는 우선 OCR을 해야 하기에 GPU Instance를 필요로 했고 제일 가성비인 g4dn.xlarge를 선택했다.
안정적인 환경에서 배포하고 싶어서 컨테이너화했다. 매번 풀받고, 이미지 빌드하고, 컨테이너 띄우는 자동 쉘 코드도 만들어두었다.
DB를 별도 RDS에서 띄울까 하다가 아직 그 단계는 아니라고 생각해서 EC2 안에서 서빙하고 컨테이너와 연결시켰다. DataGrip으로 DB 내 데이터를 확인한다.
https를 지원하기 위해 certbot으로 인증서를 발급받고 nginx로 트래픽을 연결해주었다.
이미지 파일과 전자책 파일은 Ec2가 아닌 별도 공간에서 저장하기 위해 S3로 업로드했다. 추후에 이미지 파일은 캐싱을 위해 CDN을 쓰게 될 것 같다.
EC2, DB 별도 모니터링은 하지 않고 있다. (고객이 아무도 없어 탈 트래픽이 없기에...)
v0.4 후기
생각보다 느렸던 것 같기도 하면서 그래도 많이 한 것 같기도 하다. 3주 시간이 있었는데 첫 한 주는 홀드 시스템 아이디에이션하고 구현하고 개선했고, 두번째 주는 키로 스튜디오 초안, 배포, Wifi 설정을, 세번째 주는 스튜디오 개발 마무리를 했다.
스튜디오를 원래 2-3일 정도 생각하고 있었는데 욕심을 살짝 부린 것 같기도 하다. 내가 스튜디오에서 넣고 싶었던 기능은 현재 스캔이 잘 되고 있는지 시각적으로 명확하게 보여주고 제어할 수 있게 해주고, 스캔한 페이지들을 쉽게 조작해서 책으로 만드는 것이었다. 여기까지가 MVP라고 생각했다.
지금 딱 거기까지 개발한 건 맞는 것 같다. 라이브랑 라이브러리 탭 모두 담고자 하는 기능이 명확하고 UI/UX가 받춰줘서 스튜디오가 잘 뽑힌 것 같다.
배포도 좀 욕심을 냈다. https, DB, S3 굳이 안해도 되긴 했을 것 같은데 2-3주 뒤 미래에 어차피 해야 될 것 같다는 생각에 할 때 제대로 해버렸다.
처음에 막연하게 AI 시키다 보니까 AI 결과물이 마음에 안 드는 순간들이 많아서 내가 다시 짠 것들이 대부분이다. UI적인 것은 거의 한번에 깔끔하게 나오는데 비즈니스 로직 쪽은 내 context 의존적인 것이 많아서 어려워하는 것이 이해는 간다. AI 결과물 보면서 나도 UX에 대한 감이 잡히고 점점 더 명확한 것을 요구할 수 있게 됐다. UX, DB, API, UI 4개 계속 같이 보면서 하나하나씩 더 개선하고 구체화했다. 오랜만에 프론트, 백엔드 개발 엄청 달려서 재밌었다.
소프트웨어만 하는 데에 2주 걸린 게 긴 것 같기도 한데 그래도 이 정도 퀄리티에 꽤 안정성 높은 배포까지 했으니 걸릴 만 했던 것 같기도 하다. 하드웨어의 부족함을 아주 좋은 UX의 스튜디오로 커버해야 했기에 시간을 투자할 만한 가치는 분명 있었던 것 같다.
v1.0
v0.4까지 했을 때 대부분의 책들에서 꽤 잘 되지만 안되는 책들이 분명 있다. 복원력이 큰 책들은 여전히 잘 되기가 어렵다. 이번 v1.0에서는 이에 대한 안내를 명확하게 하고 모든 책에 대해 다 지원하는 것은 향후로 미루고자 한다.
9/7부터 9/17까지 v1.0 진행하자. 11대 판매한다!
- 최적화 (1일)
- 스캔 속도, 비디오 등
- 고도화 (3일)
- 수많은 테스트를 하며 찾은 문제들 하나하나씩 더 풀며 고도화
- 넘긴 페이지 쭉 펴기 (휘어지면서 중앙 쪽 글자가 잘 안 보임)
- 매뉴얼 (0.5일)
- 11대 생산 (3일)
- 판매 (3일)
- 안내, 결제, 배송, CS 등
거의 다 왔다. 디테일 더 신경쓰고, 유저 입장에서 쭉 사용해보고, 테스트 많이 하고, 불확실성에 대해 유연하게 대처해보자. 가보자고!