22월 9월 7일부터 10월 5일까지 처음으로 앱의 기획에서부터 출시를 경험하였다. 경험을 보다 확실하게 기억하기 위해 회고를 진행하였다.
이번 앱 아이디어의 시작은 아내로부터 얻을 수 있었다. 평소 피아노 개인레슨을 하는 아내는 수업은 어렵지 않지만, 그외 부가적인 일들이 번거롭다 하였다. 가령 예를 들어 레슨 완료 후 어머님들에게 비슷한 내용의 메세지(레슨비, 교제비 등 안내 문자)를 반복적으로 보내는 일이 번거롭다 하였다. 그래서 이러한 번거로움을 덜어줄 수 있는 앱을 만들어보면 어떨까 하는 것으로부터 시작되었다.
번거로움을 덜어주는 구체적인 방법으로 비슷한 내용의 문자를 템플릿으로 작성해 레슨이 완료될 때 메세지 버튼만 누르면 해당 템플릿이 작성된 화면을 띄워주는 것을 생각했다.
이러한 안을 가지고 Figma를 활용해 구현될 앱의 뷰들을 구체화하였다. 머릿속으로 뷰의 구성을 생각했던 것과 달리 구체화보니 실제 필요한 앱의 구성 요소의 차이를 확인할 수 있었다. 단순하게 학생들의 이름이 표시되고, 이름을 누르면 메세지 화면이 켜지는 과정을 생각했었는데, 구체화 과정을 통해 학생 등록 화면, 메인 화면, 학생 세부정보 화면 등으로 구체화됨을 확인할 수 있었다.
화면 구성
1) 메인, 등록, 세부화면 |
---|
2) 캘린더 화면 |
---|
3) 세팅화면 |
---|
뷰를 구체화 함으로써 각 뷰에서 다룰 데이터의 형식에 대해 고민해볼 수 있었다. 처음 기획 당시 다뤄야할 데이터에 대한 고려는 학생에 한정되었다. 학생정보만 표시함으로써 필요정보가 충분할 것으로 여겼다. 그러나 앞서 말한 구체화된 뷰마다 필요데이터가 나눠짐으로써 데이터구조가 세분화되었다. 학생정보, 레슨정보, 진행정보 등이 나눠질 수 있었다.
디자인과 데이터 구조를 잡으니 개발 공수기간을 세울 수 있었다.(이때까지만 해도 개발 공수 기간이 생각보다 여유 있다 생각했다.)
1) 데이터 구조 |
---|
사용하고자 한 기술은 다음과 같다.
처음 데이터를 구성할 당시 입력된 정보를 하나의 데이터 테이블로 구성하였다. 입력정보(이름, 주소, 연락처, 레슨 시작일, 레슨횟수, 레슨비)를 바탕으로 정보를 관리하는 것이 문제 없을 것으로 여겨졌다. 그러나 등록화면에서 넘어가 메인화면으로 표시될 때, 실제 필요한 정보는 입력정보 전체가 필요한 것이 아니었다. 세부정보 화면으로 넘어갈 경우 레슨 진행정보가 추가될 필요가 있었다. 캘린더 화면에서 레슨한 날짜를 추가하여 정보를 표시할 필요도 요구되었다. 뷰의 구성을 통해 데이터 구조 분할의 필요성을 알게 되었다.
그렇다면 한명의 학생에 대한 정보가 여러 테이블로 나눠질 경우 각 테이블간 일치 데이터를 어떻게 찾을 수 있을 것인가? 이 부분에 대한 고민이 가장 컸다. 테이블 간 고유의 값을 공유하고 있어야 고유 값을 기준으로 각 테이블에서 데이터 추출이 가능한 점이었다. 각 테이블에서 갖고 있는 정보를 살펴보면 고유 정보로 여기기 어려웠다. 예를 들어 이름은 동명이인이 있을 수 있다. 주소, 핸드폰 번호의 경우 같은 부모를 가진 학생 2명이 있을 수도 있다.
이에 대한 고민을 하던 중 realm 데이터 생성시 학생 테이블의 Primary key인 ObjectID를 다른 테이블(레슨, 진행정보)의 Primary key 로 사용하는 아이디어를 떠올렸다. 해당 Key값의 경우 생성시 고유 값으로 생성되어 다른 테이블에서 Primary key로 쓰더라도 다른 정보와 겹치지 않을 것이라 생각했다. 그러나 멘토와 팀원들의 피드백으로 통해 위 아이디어가 놓치는 점을 확인할 수 있었다. 테이블은 고유의 Primary 값을 가져야 하며, 그 값은 참조하는 형태가 되어서는 안된다. 참조의 부분은 Foreign Key를 통해 해결할 수 있는 점이었다. 각 테이블은 Primary key로 ObjectID를 갖되, 특별히 학생의 ObjectID를 레슨, 진행 테이블의 Foreign key로 가짐으로써 서로의 데이터를 참조할 수 있도록 구조를 만든 것이다.
이를 통해 각 뷰에서 데이터를 호출할 때, 각 뷰의 Foregin key 가 일치한 데이터만 뽑아 CRUD(생성 , 읽기, 업데이트 및 삭제)을 처리할 수 있게 되었다.
1) 반복된 코드 |
---|