[프로젝트] 한 번 Voca

!·2023년 2월 23일
0

한 번 Voca

목록 보기
1/1

그 동안 공부한 UIKit과 Swift를 바탕으로, 단어장 어플리케이션을 만들예정이다.
서버 없이 로컬 DB에 데이터를 저장하는 식으로, 앱 스토어 출시가 목표이다.
왜 단어장 어플리케이션을 계획했는지, 어떤 UI로 앱을 구성했는지, 필수 기능 등을 이번 포스트해서 작성하겠다.


왜 단어장 어플리케이션인가?

틈틈히 개발 공부를 하면서 마주하는 영어 단어를 공부하기 위해 iOS 원보카 어플리케이션을 내 아이폰에 설치했다.
내가 직접 단어를 추가하고 뜻을 정의할 수 있는 어플리케이션을 원했기때문에, 원보카는 몇 일동안 불편함없이 사용해왔다.
그러던 중, 원보카는 단어를 최대 50개까지 저장할 수 없음을 알게되었고 추가 결제를 하면 단어를 더 저장할 수 있도록 되어있다.

물론, 원보카 어플리케이션은 서버도 포함되어있기에 다른 유저들이 많이 외우는 단어나 커뮤니티와 같은 기능또한 제공해준다. 하지만 나처럼 굳이 서버 기능이 필요 없는 사용자의 경우에 단순히 내가 외울 단어만 저장하는데 비용을 지불해야한다는게 조금 아까웠다.


누구를 위한 어플리케이션인가?

따라서, 다른 유저와의 통신이 필요한 기능(커뮤니티, 다른 사람이 많이 외우는 단어)이 필요없는 라이트한 유저를 위해 이 어플리케이션을 고안했다. 추가적인 과금없이 로컬 DB(사용자의 아이폰)에 단어를 저장하는 방식으로 어플리케이션을 제작할 예정이다.


기능 명세

  • 단어 저장, 즐겨찾기, 수정, 삭제 : 최대한 직관적인 UI와 제스쳐로 처리할 수 있도록.
  • 음성 듣기 : AVFoundation 에서 기본적으로 제공하는 단어의 발음을 직접 들을 수 있다.
  • 단어 퀴즈 : 단어로 퀴즈를 맞출 수 있는 기능이다. 퀴즈 시작 시 여러 옵션(즐겨찾기한 단어, 개수 설정, 많이 틀린 단어 등등..)을 선택할 수 있으며, 결과창에서 퀴즈 결과를 한 눈에 볼 수 있도록 한다.
  • 통계 : 여러 통계에 대한 그래프, 랭킹과 같은 시각적 자료들을 보여주도록 한다. (DB 설계의 중요도가 요구된다.)

도전적 과제

아직 개발을 시작하지 않아, 어떤 도전적 과제가 있을지는 모르겠지만 프로토타입을 만들어보면서 고민해보았던 내용들을 적어보겠다.

  • DB 설계 : Core Data 를 이용해 객체 그래프의 관계를 어떻게 짜야할지 많은 고민이 필요하다. 또한, Core Data의 Reqeust 문의 양식이나, 데이터를 어떻게 저장하고 어떻게 통신해야할지에 대해 깊은 고민과 공부를 해야할 필요가 있다.

  • Bad 유저 : 개발자는 항상 본인이 생각하지 못한 행동(확인 버튼 안누르고 종료하기, 퀴즈 시작하고 백그라운드로 이동하기 등등)을 하는 유저고려해 앱 설계가 요구된다. 이에 대한 철저한 준비와 학습이 필요하다.

  • 처음접하는 UIKit과 프레임워크 : 음성듣기에 필요한 AVFoundation, 데이터 관리에 필요한 Core Data, 컬렉션 뷰와 같은 프레임워크는 한 번도 접해보지 않앗거나 수박 겉핥기식으로 공부했다. 이번 기회에 확실하게 공부할 수 있도록 하자.

  • 오픈소스 탐색 : 한 번도 내손으로 직접 오픈소스를 찾고 적용해본적이 없다. 이번 기회에 나에게 필요한 오픈소스를 찾고 공부해 볼 예정이다.


프로토 타입

탭 바 컨트롤러를 통해, 큼직한 기능들(단어장, 퀴즈, 통계, 설정)에 접근할 수 있도록 하였으며, 각 버튼과 연결된 뷰 컨트롤러들을 네비게이션 컨트롤러로 구성해 직관적인 애니메이션을 제공하고자한다.


프레임워크 및 라이브러리

  • AVFoundation : 단어 음성듣기에 필요한 프레임워크

  • Core Data : 애플에서 공식으로 지원하는 로컬DB, 엄밀히 말하면 DB는 아니다.
    Realm 과 Core Data중 무엇을 사용할 지 고민하였으나, 최종적으로 Core Data 로 결정하였다. 그 이유는 다음과 같다.
    Realm 의 경우 쿼리 요청 속도가 Core Data 에 비해 빠르지만 내가 보기에 이것이 유일한 단점같았다.
    또한, Core Data 는 애플에서 공식적으로 지원하기때문에 안정적인 점.
    CloudKit 과도 동기화를 할 수 있어 추후에 제공할 수 있는 기능(iCloud 계정과 연동 등)이 있는 점.
    비교적 용량이 가볍다는 점, 적은 양의 데이터의 경우 Realm 과 유의미한 속도 차이가 없다는 점때문이다.

  • 로티 애니메이션 : 스플래시화면이나 네비게이터의 경우, 필요할 수도 있다.

  • 이 외에 개발하는데에 필요한 프레임워크 및 라이브러리, 오픈 소스들도 포함될 예정이다. (그래프 관련 오픈소스등을 찾고 있다.)


아키텍쳐 및 패턴

  • DAO: Data Access Object의 약자로, DB와 클라이언트 로직 사이에 데이터 관리 객체이다. 데이터 관리 객체를 정의함으로써 짧은 코드 작성을 할 수 있으며 유지보수측면에도 편리하다.
  • MVC: Model - View - Controller 의 약자로 애플에서 공식적으로 다루는 앱 아키텍쳐 패턴이다. RxSwift 는 도입하지 않았기때문에 MVVM 패턴은 고려하지 않았다.

개발 인원 및 기간

개발 인원은 1명(나)이다. ㅎㅎ
목표 개발 기간은 4월전까지 완성하고 출시하는게 목표이다. 매일 투자해 개발하고 정리할 예정이지만 학습을 최우선 목표로 두고 개발해 나갈예정이다.

profile
개발자 지망생

0개의 댓글