회고

Hwan·2023년 2월 27일
0

voicekeeper

목록 보기
16/16

앱 개발을 마치며

헤맸던 점

1. 외장메모리 & 내장메모리 저장

참고하는 자료 대부분이 오디오 파일이 아닌 이미지 파일을 기준으로 설명되어 있어, MediaPlayer와 MediaStore를 찾고 적용하는 데까지 시간이 오래 소요되었다.
녹음 파일이 만들어지면 앱 바깥에서도 찾아볼 수 있어야 했기 때문에 해당 파일을 외장메모리에 저장시켰다.
이 과정에서 관리 권한을 허용하는 것도 많이 배울 수 있었다.

모델의 결과를 받는 json 파일은 앱 바깥에서 볼 필요가 없으므로, 내부저장소에 저장하여 앱 안에서만 참조할 수 있게끔 덮어쓰기 방식으로 생성케 했다.
앱 내부에서 파일을 생성해야 했는데 Asset 폴더를 이용할 경우 경로에 덮어쓰기가 제한되는 문제가 있었다.
때문에 먼저 내부저장소에 json 파일이 있는지 확인한 뒤 직접 초기화하는 방식으로 코드를 완성시켰다.

2. Notification의 클래스화

서버에서 받아온 결과에 따라 알림을 띄울지 말지 결정해야 했고, 해당 통신 코드는 Class로 생성되었기 때문에 Notification 역시 Class로 정의하게 되었다.
Activity가 아닌 Class로 존재하기 때문에 Contect 객체가 없었다는 점이 가장 난해했는데, MyApplication.getAppContext를 사용하는 것으로 문제를 해결했다.
Class로 생성하게 되니 다른 어떤 화면에서도 쉽게 끌어다 쓸 수 있다는 점이 이점이었다.

3. Azure 서버와의 통신

서버와의 통신에서는 (특히 java 안드로이드를 다루는 것이 처음이라) 많이 헤맸다...

첫번째 시도: flask 웹서버
통신을 위해 OkHttp를 사용하면서, 서버와의 간략한 리퀘스트를 확인하기 위해 flask로 간단한 웹서버를 생성하여 테스트했다.

1단계 테스트로 로컬 서버를 만들었고,
2단계 테스트로 Azure에 flask 서버를 올려 통신했다.

flask 웹서버가 채택되지는 않았으나, 결론적으로 VM을 생성하면서 flask를 이용하여 모델의 작동을 이끌어낼 수 있었다.

두번째 시도: Storage와 Function App
Azure에서 제공하는 HTTP Trigger을 이용한 Function 앱으로 통신할 수 있었다.

클라이언트가 Function 앱에게 파일을 전송하면, Function 앱에서 해당 파일을 받고 응답을 하거나, json 파일을 생성하는 동작까지 모두 진행한 뒤 결과를 return 해주는 방식이었다.

다만 모델이 전부 돌아갈 때까지는 시간이 오래 걸리고, HTTP 응답을 한 번 보낸 후 무한정 기다린다면 time out 오류가 발생하기 때문에 아래의 방식으로 개선된다.

세번째 시도: Pooling
서버는 고유한 IP를 가지고 있지만, 클라이언트의 IP는 무척 다양하다. 때문에 서버에서 클라이언트에게 직접 결과를 가지고 통신하는 것보다는, 클라이언트가 지속적으로 Pooling하며 완성 파일이 있는지 찾아보는 방식을 채택하였다.

Pooling으로 방식을 바꾼 후로는 일정 시간(10초) 간격으로 HTTP Trigger에게 요청하여 Storage에 파일이 생성되었는지 확인하고, 요청한 파일이 있을 경우 해당 정보를 받아오게 되었다.

이 방법으로 time out 문제를 해결하고, 모델의 결과를 무사히 받아올 수 있었다.

개선 방안: Push
시간상의 문제로 진행하지는 못했지만, Pooling 외에도 Push라는 방법이 있다고 한다.

카카오톡에서 메세지를 받았을 때 알림창이 오는 것처럼, 클라이언트가 HTTP 통신을 계속 요청하지 않아도 서버에서 클라이언트로 바로 알림을 주는 것이 가능하다.

이 점에 대해서는 공부가 더 필요할 것 같아 개선사항으로 남겨둔다.

느낀 점

앱 개발은 예전부터 해보고 싶었지만 엄두가 잘 나지 않았던 분야이다.
특강을 들을 수 있어 시도할 수 있었지만, 사실 대부분의 기능은 교육으로 배우기보다는 직접 라이브러리를 찾고 내게 맞는 동작을 하는지 살피는 과정을 거치는 쪽이 더 이해가 잘 되었다.

코드를 만지는대로 눈으로 확인할 수 있는 점이 무척 매력적이었다. 실수로 잘못 건들면 앱 전체가 마비된다는 점이 무섭긴 했지만...ㅎㅎ

기회가 된다면, 예전부터 만들고 싶었던 앱도 제작해볼 수 있었으면 좋겠다.

개선할 점

  • Push 방식의 통신
  • 즉시 삭제가 아닌, 일정 기간 보관한 뒤 삭제되는 형식으로의 변경
  • 차후 목표: 토이 프로젝트 개발

0개의 댓글