결과부터 말하면 1차 평가에서 컷
https://github.com/solved-earth
solved.earth
Solved.Earth is designed based on the idea of applying the quest-reward method to envr. protection activities would provide big motivation for envr. protection. - solved.earth
github.com
참가 전 (1월 초)
2023년 1월 초에 고등학교 친구들로 부터 공개 SW 개발자 대회 참여를 권유받았다.
팀장이 프레임워크를 Flutter로 정해 방학동안 노마드 코더의 강의를 통해 학습하기로 하였다.
과연 고등학교때 앱을 제작할 정도의 실력을 가진자는 별로 없을 것이다. 특히 그냥 수시와 정시로 대학을 보내는 경쟁이 좀 치열한 고등학교에서는 더더욱 없을 것이다.
그냥 교과, 수능 공부로 컴공이나 관련학과를 가는 것이 더 쉬운 길이기 때문이다.
나도 마찬가지였다.
물론 학교에서 프로그래밍을 가장 잘 하는 사람들 중 하나로 꼽히지만, 기껏해야 C언어로 DFS, BFS 구현하는 것이 끝이였다.
그렇게 실질적인 프로그래밍을 한다는 부푼 맘을 가지고 강의를 들었다.
Dart 강의와 Flutter 강의를 대략 2주 정도에 끝냈다.
백엔드 개발이 없었기에 단순한 그래픽 노가다와 로직 설계처럼 느꼈다.
그래도 화려한 그래픽을 간단히 구현하고 바로 확인할 수 있다는 점이 좋았다.
주제 선정 (3/30)
재수하는 친구들과 다른 일정이 있는 친구들이 빠져 4명에서 대회에 참가하기로 하였다.
여러 주제가 나왔으나, 피아노 악보를 자동으로 넘겨주는 앱에서 출발하였다.
피아노와 같이 전자 악기를 사용하면 MIDI 정보가 나오게 된다.
이를 바탕으로 악보도 넘겨주고, 현재 위치를 표시, 그리고 연주에 대한 피드백도 알려준다.
악보는 PDF를 올리면 알아서 인식해준다.
주제 변경 (7/1)
어찌저찌하여 앱에서 입력되는 MIDI 값을 띄워주는 것은 구현을 했다.
-> 2023.08.17 - [코딩/Flutter] - Flutter로 Midi 입력(피아노 등)을 받는 앱 만들기
악보에서 MIDI 데이터를 추출하는 과정, 악보 PDF를 MIDI 데이터로 추출하는 과정,
화면 악보에서 현재 위치를 표시하는 과정이 어렵다고 판단하여 주제를 바꾸게 되었다.
바뀐 주제는 코딩 문제 사이트인 백준의 문제들의 태그와 레이팅을 매기는 solved.ac와 같이 특정한 환경문제를 제공 및 레이팅하는 앱이다.
해결한 도전과제마다 포인트며 대충 그런 것도 주고...
메인화면에 나무도 점점 커지며 꾸미고 그런 앱이다.
개발 과정
나의 역할은 크게 4가지 였다.
1. 앱 아키텍처 제작
2. Flutter 안드로이드 앱 제작
3. 각종 버그 해결
앱을 제작하는 사람 나와 팀장이였다.
내가 기반으로 만든 코드에 계속 새로운 코드가 쌓이다 보니 서로 사인이 어긋나는 부분이 있었다.
초중반에는 위젯의 파기와 인스턴스의 관리에 관한 문제가 많았다.
후반에는 API 통신 과정에서 여러 오류가 있었다.
4. Flutter에서 API 호출
VOLOv5 모델을 활용해 도전과제에서 빠진 물건들 찾는 과정이 있었다.
FastApi를 이용해 이미지 전달하고, 성공여부를 받는 부분을 Dio package를 활용해 제작하였다.
느낀 점
원래 처음에 Flutter을 다 같이 배우고 개발을 할 예정이었으나,
결국 Flutter 강의를 끝낸 인원이 2명이었기에 초기 개발을 많이 하였다.
또한 (나도 아직 한참 부족하지만...) 적절한 위젯 관리에 대한 개념이 팀적으로 부족해 관련 오류나 설계를 내가 많이 하였다.
그러나 중반 이후로 백엔드 개발과 인공지능, API 개발이 들어가면서 오히려 내가 만든 것들이 초라해보이기 시작했다.
앱 제작의 주된 시간이 디자인과 로직 구현에 사용되었는데, 디자인은 단순한 그래픽 노가다였고, 앱의 로직도 그렇게 복잡한 것도 아니었기 때문이다.
여러모로 별로 기여를 하지 못했다고 느꼈다. (팀원들 미안해요,...)
내가 좀 더 잘하고 열심히 했으면 이라는 생각이 남아있다...
앞으로 Figma와 같은 디자인 프로그램으로 빠르게 디자인 부분을 끝내고,
알고리즘도 공부하면서 로직 설계 공부,
DB랑 API도 공부할 계획이다.
+ 아이디어가 좋으면 이상하게 만들어도 상관없을 것 같다는 생각,...