<소개>
송아지에 부착된 센서의 신호를 인공지능 기술로 분석하여 파악한 행동 데이터에 기반하여 질병을 조기발견하고, 농장주에게 행동 데이터를 시각화하여 제공하며 질병 발생시 알림을 주는 서비스
<주요 업무>
- API 서버 개발 (Node.js, Typescript, Express, AWS Amplify)
- 데이터베이스 스키마 설계 (MySQL)
- 크로스플랫폼(Android, iOS) 모바일 앱 설계 및 개발(Flutter)
<업무 상세>
API 서버 개발
Node.js, Typescript, Express
일관된 네이밍, 규칙을 적용한 RESTFul API를 설계하였습니다. 구두, 간단한 문서로 API를 개발하던 기존 방식에서 발생한 협업 구성원들의 Align이 맞지 않는 문제를 개선하기 위해 Postman API 문서 및 테스트 툴 사용을 제안하였고 필요한 Endpoint 그리고 Input, Output의 포맷의 예시를 모두 문서로 남겨 협업하는 팀원분들과 Align을 맞추었습니다.
데이터베이스 설계
MySQL, ERD, Liquibase
ER 다이어그램으로 모델을 설계하고 시각화하였습니다. 테이블 구축에 앞서, 데이터 분석팀에서 산출되는 데이터의 구조와 앱간에 연동하는데에 문제가 없는 구조인지, 요구사항이 변경되었을때 변경 및 확장에 무리가 없을지 잦은 중간공유와 논의를 통해 스키마를 확정지었습니다.
Liquibase 라이브러리로 스키마 버전관리, 배포자동화를 적용하였습니다.
크로스플랫폼 모바일 앱 설계 및 개발
Flutter, Dart, MVVM Design Pattern, Provider
앱 UI 아키텍처는 MVVM(Model-View-ViewModel) 디자인 패턴을 적용하였습니다. Flutter 프레임워크에서 MVVM 패턴을 공식적으로 지원하지 않고 있었기 때문에, Provider 상태관리 라이브러리로 MVVM 패턴 구조를 직접 설계 및 개발하였습니다.
뷰 컴포넌트들은 모듈화시켜 중복코드를 줄이고 재사용성을 높였습니다. 기능별 클래스 상속으로 중복 메소드 재작성을 제거하고 여러 모듈에서 사용되는 함수들은 따로 라이브러리로 관리하였습니다. 예를들어 팝업의 경우에, 팝업의 유형별로 클래스를 작성하고 최상위 팝업 클래스를 상속하는 구조로 설계하였습니다. 함수 안에서 계산이 필요하거나 공통적으로 사용하는 로직들은 다시 독립적인 함수로 분리하여 재사용성을 높였습니다.
그래프의 경우, 써드파티 그래프 라이브러리를 커스텀하기에는 요구사항을 만족시키기 어려워 직접 Paint(캔버스) 기반 그래프를 개발 하였습니다. OOP 개념을 통해 여러 유형의 그래프 클래스는 최상위 그래프 클래스를 상속받는 구조로 설계하였습니다. 그리기 함수들과 계산함수들을 함수로 분리하여 중복코드 사용을 지양하여 Bar, 선, 점, Band 그래프가 겹쳐져있는 경우나 특정 그래프만 표현할때나 여러 상황에서 유연하게 대처할 수 있었습니다.
주석기반 레퍼런스 문서 작성 툴인 dartdoc과 README.md를 적극적으로 작성하여 협업에 도움이 되도록 하였습니다.
개발, 테스트, 상용환경 각각의 Android, iOS 배포파일을 생성하는 쉘스크립트를 작성하였고 한번의 실행으로 번거로운 배포과정을 자동화시킬 수 있었습니다.
<경험>
개발 전 설계에 리소스를 쏟아 크리티컬한 버그가 거의 발생하지 않았고, OOP, MVVM 디자인 패턴을 적용한 모듈화를 통해 탄탄한 코드를 작성할 수 있었습니다. 출시 이후 크고 작은 신규, 변경 요구사항이 자주 들어왔음에도 큰 무리없이 빠르게 대응할 수 있었습니다.