5. [Surveasy] Register & Login
아래의 게시물에 이어지는 개발 과정 기록입니다.
4. [Surveasy] 어플의 시작화면, Splash
아래의 게시물에 이어지는 개발 과정 기록입니다. 3. [Surveasy] 기능 구현 과정에서의 고민 아래의 게시물에 이어지는 개발 과정 기록입니다. 2. [Surveasy] 어플 기능 정리 및 구현방법 아래의 게시물
self-motivated-developer.tistory.com
어플의 첫 화면인 Splash가 끝나면 다음 화면은 대체로 둘 중 하나 일 것이다. 로그인/회원가입 또는 메인 홈화면 일 것이다. 우리 어플은 사용하려면 로그인이 반드시 필요했기 때문에 어플에 진입하고 난 후에 로그인/회원가입 페이지로 이동하도록 구현했다.
어떻게 사용하는지 , 어떤 기능이 있는지 대부분의 유저들이 알고있는 어플이 아니었기 때문에 처음에는 회원가입 전에 "어플 둘러보기" 의 기능을 추가하려 했었다. 하지만 로그인이 되어있는 상황에서 대부분의 홈화면의 데이터가 fetch 되는 과정이 필요했다. 그래서 아쉽게도 해당 기능을 제외하고 홈화면에는 로그인 된 유저만 진입 가능하도록 했다.
설문의 대상이 맞는지 확인할 수 있는 개인정보와 이후에 리워드가 입금될 계좌번호와 계좌주를 저장해야 했기 때문에 회원가입 과정이 조금은 무거웠다. 총 3 단계로 나뉘어 "약관 동의" , "기본적인 정보 추가 " , "계좌번호 입력" 을 각각 받았다. 약관 동의의 경우 약관을 확인할 수 있고, 동의하는 것 이외의 기능은 없었기 때문에 나머지 두 개의 과정만 간단히 설명한다.
정보 추가 단계
firebase auth 기능을 이용했기 때문에 최종적으로 아이디가 될 이메일, 비밀번호, 이름, 생년월일, 유입경로를 입력받았다. 대부분을 input 창에 직접 입력을 받는 방식으로 정보를 받았고 생년월일은 spinner, 유입경로는 select box 를 구현했다.
계좌번호 입력
계좌번호의 경우 은행/계좌번호/계좌주 세 가지 항목을 받아야 했기 때문에 select box 와 input box 를 함께 사용했다. 출시 이후 이 부분에서 다양한 요구사항을 확인할 수 있었는데, 처음 구현할 때 지역은행 등의 몇몇 은행들을 고려하지 못했었다. "기타" 항목으로 직접 입력을 할 수 없게 만들어 두었기 때문에 주거래 은행이 없는 경우 유저들이 리뷰를 통해서 "00은행을 추가해주세요" 라는 요구사항을 전달했었다. 하지만 기타 항목을 만들어 두었다가 오타가 나거나 유효하지 않은 은행을 기입할 경우 더 번거운 일이 발생할 수 있었기 때문에 주관식 항목을 추가하지는 않고 요구사항으로 들어온 은행을 select box 에 추가했다.
앞에서 언급했듯이 3단계로 이루어져 있는 회원가입 단계를 각각 activity 에서 관리하기에는 비효율적이었다. 그래서 하나의 activity 위에 세 개의 fragment 를 이용해서 입력된 데이터를 viewModel 에 저장하고 마지막 fragment에서 한번에 저장했다. 이런 방법을 사용했을 때 회원가입 과정에서 뒤로가기를 잘못 누르거나 어플이 종료되면 모든 과정을 다시 처음부터 입력해야 한다는 단점이 존재했다. 하지만 firestore 의 유저 document 에 두번 접근하는 것이 더 비효율적이라고 판단하고 viewModel 로 한번에 올리는 방법을 선택했다.
회원가입이 완료되면 유저가 직접 다시 로그인하고 그 이후부터 홈화면에 진입이 가능하게 구현했다.
회원가입의 마지막 단계에서 firebase auth function 중 register 를 가능하게 하는 function 을 사용했고 이후에 로그인 과정부터는 firebase auth login function 을 사용했다.
로그인 박스 아래의 자동 로그인 체크박스는 로그인 이후부터 어플에 진입할 때 자동 로그인을 설정할 것인지 여부를 선택할 수 있게 한다. 자동로그인을 체크하고 로그인하면 firebase firestore 의 auto login 항목과 어플의 room db 에 auto login 을 true 만들어준다.
회원가입/로그인 파트는 firebase function 을 주로 사용하여 구현했기 때문에 비교적 간단하게 구현할 수 있었다. 자체 서버를 만들어 구현하지 못해서 아쉬움이 남는 파트이기도 하다.