본문 바로가기

프로젝트 후기

[Tost] 개발 후기

🗓  개발 기간 : 2020.10 ~ 2020.12.21

🔎 서비스 이름 : Tost

📌 서비스 한줄 소개 : 영알못을 위한 토익스피킹 모의 테스트, 토스트

✏️ 사용한 언어와 구조 : Swift, MVVM

📇 주요 라이브러리와 프레임워크 : RxSwift, AVAudioPlayer, Firebase 등

 

서론 : 

대학생연합동아리 SOPT에서 진행한 중장기 사이드 프로젝트 SOPT-Term Project로 참여하게 되었습니다. 

SOPT-Term(이하 솝텀) 프로젝트의 기획 의도는 동아리를 수료하고 놀고있는 (제법)고급인력, 또는 실무를 진행하고 있는 주니어를 대상으로 프로젝트의 기회를 제공하는 것이었습니다. 너무 좋은 기획의도라고 생각하고 다음에도 기회와 여건이 된다면 꼭 참여하고 싶습니다.

 

토스트 앱을 간단히 설명하면 토익스피킹을 위한 앱입니다. 따라서 오디오를 재생하고, 오디오를 녹음하고 다시 듣는 작업이 있어야 합니다.

이 부분을 열심히 작업했습니다. 

 

개발한 기능 소개 

토익스피킹 시험은 크게 여섯개의 챕터로 나뉘는데, 각 챕터마다 컨셉이 다릅니다.

큰 맥락으로는, 화면과 음성으로 안내되는 행동을 실행하면 됩니다.

1) 안내음성을 듣고,

2) 안내 화면을 보고,

3) 지시에 따라 목소리를 녹음하고

4) 녹음한 목소리를 들어볼 수 있습니다.

 

1

오디오 작업이 있어야 했습니다. 오디오 재생과 녹음을 담당하는 서비스파일을 구현했습니다. 여러 뷰에서 재사용이 가능하도록 만들었습니다. 각각 AudioPlayService, AudioRecordService 입니다.

 

2

오디오의 URL를 받아서`AVAudioPlayer(contentsOf: url)`의 인자로 넘길 때 웹에서 플레이되는 링크를 그대로 인자에 넘기면 재생이 안됐습니다. 따라서 URL 파일을 로컬로 받아오는 `AudioDownloadService`도 구현했습니다.

 

총 3개의 서비스파일은 뷰모델의 액션이 트리거될때마다 해당되는 메소드를 수행합니다.

 

어려웠던 점 :

역시나 오디오 기능이 처음이다보니 기능을 구현하고 어떻게 구조화해야할지 생각하는 것이 어려웠던 것 같습니다

모든 서비스파일은 추상화 타입으로 의존성을 주입하고 실행하고 있습니다. 각 함수명이 너무 정직한것 같습니다

미세팁으로 swiftify 같은 웹서비스를 이용하면 클래스 또는 구조체를 분석해서 프로토콜을 뽑아내 줍니다.

원래는 옵씨 -> Swift 컨버터로 유명하고 실제로 사용도 하고 있는데 프로토콜 추출 기능도 유용한 것 같습니다. ( 다른건 안해봄 )

swiftify.com/

 

Objective-C to Swift Converter | Swiftify

 

swiftify.com

 

>

뷰 구성에서 특이하거나 어렵거나 그런건 없어서, 위에서 언급한 바와 같이 URL을 로컬디렉토리로 받아오는 기능을 구현하는게 제일 난이도가 있었던 것 같습니다. 하지만 그것도 찾아보니 Alamofire에서 이미 제공해주고 있었습니다. 

 

실행되는 구조는 다음과 같습니다.

 

(1) 서버에서 오디오 파일 URL을 받아온다. 이 URL은 정상적인 URL이여야 합니다

(2) URL을 로컬로 받아온다

(3) 로컬에 저장된 URL을 AVAudioPlayer의 인자로 실행시킨다

URL을 받아 Observable<URL>을 리턴하고 있습니다. 

여기서 받는 URL은 S3의 URL,

리턴되는 Observable<URL>은 로컬내에 저장된 파일의 경로가 됩니다.

 

마치며 :

이 프로젝트는 솝텀프로젝트에서 대상을 수상한 프로젝트입니다. 앱스토어 릴리즈를 위해 (열심히) 디벨롭 중입니다.

감사하게도 iOS 개발자가 저 포함 두명이었는데, 프로젝트 하는동안 든든해서 너무 편안했다고 합니다. 재밌게 개발하고, 부담은 덜 수 있어서 너무 좋았습니다. 이렇게 개발하면 좀 좋을것 같다~!라는 생각이 조금 들었습니다.

 

오늘도 읽어주셔서 감사합니다. 궁금하신 점이 있다면 메일이나 댓글 부탁드립니다!

 

 

'프로젝트 후기' 카테고리의 다른 글

[애플워치 프로젝트] 개발 후기  (2) 2021.02.28
[생글] 개발 후기  (2) 2021.02.28
[placepic] 개발 후기  (0) 2021.02.22