[Android Clone App] 당근마켓(#003) 데이터 관리 툴 변경

이동현·2020년 8월 29일
0

일차 방식으로 포스팅을 하려고 했는데, 작업 단위를 일차로 구분하기 모호합니다.
따라서 포스팅 제목 형식을 바꾸었습니다.

005 : Django 사용 포기

어떻게든 서버를 이용하여 프로젝트를 진행해보려고 했지만..
내가 원하는 수준까지 서버를 구현하려면 공부를 해야 할 부분이 생각보다 많았다.
(간단할 것 같다고 얕잡아(봤던 건 아니지만..) 보았던 나에게 마음속으로 욕하는중..)

5일동안 인터넷에서 여러 자료를 찾아보며
실제로 Local에서만 동작하는 REST API를 만들어 보기도 했고,
이를 기반으로 샘플 테스트 앱을 만들어서 실행까지 해보았다.

하지만, 말 그대로 간단한 Field 값들에 대해서만 CRUD 기능정도 테스트가 가능했는데,
앞으로 내가 구현할 막대한 기능들을 생각해보면
진행할 프로젝트에서는 이러한 테스트로는 어림도 없는 수준이 될 것이 분명했다.

서버에 중점을 둘 프로젝트가 아니고
(단지 Retrofit을 사용해서 구현을 하고 싶었고, Firebase를 사용하기 싫었을 뿐이다..)
앞으로 구현하면서 스트레스를 분명 받겠지만 그 원인이 서버단 코드 때문이기를 원하지 않기 때문에 Django 사용을 멈추고 (경험이라고 받아들이기엔 아까운 나의 지난 5일 ㅠㅠ) 데이터 관리를 다른 방식으로 하기로 결정했다.

그럼 어떤 관리 툴을 사용 할 것이냐?
직접 구현하는 서버를 이용하지 않는다면.. 내가 아는 선에서 선택지는 얼마 없는 것 같다.
결국 절대 사용하지 않겠다고 다짐했던 Firebase Cloud Firestore를 사용하기로 결정했다!

이를 사용하기로 결정한 이유는 아래와 같다.

  1. 이전에 실패했던 경험이 있는데, 설마 같은 실수를 반복할까 싶어서
  2. 사진을 저장하는 저장소를 Firebase Storage를 사용하기로 결정했기 때문
  3. 다른 툴에 비해, 미래를 보았을 때 Firebase 사용법 공부를 해 놓으면 큰 도움이 될 것 같아서

대신.. 정말 데이터 구조를 잘 짜고 들어가야 함은 확실하고
쿼리문 적용을 잘 할 수 있도록.. 어떤 기능을 지원하는지 문서를 쭉 훑어보고 시작할 것이다.

006 : 회원가입 및 로그인 기능 구현

당근마켓 실제 앱에서 로그인 및 회원가입을 진행하는 방식은 다음과 같다.
휴대폰 번호 인증을 SMS를 통해 진행하고, 이미 등록된 휴대폰 번호 일 경우 즉시 로그인. 아닐 경우 회원 등록을 이어서 진행하는 방식이다.

우선 SMS 서비스를 이용하는 것은 돈이 필요하다. 그래서 지난 번 프로젝트를 진행했을 때는 형식적으로 뿐이 구현을 못했는데.. 가령 앱 자체에서 4자리 번호를 랜덤 생성하고, 생성된 번호를 입력해서 인증을 받는 방식으로 구현했었다.

본 프로젝트에서, 아마 UI적으로 유일하게 다르게 될 부분이 바로 회원등록 및 로그인 부분이 될 것이다. 애초에 회원 등록이 되지 않은 사용자는 메인 화면 진입이 안되도록 최초 설계 할 계획이다. (실제 당근마켓에서는 비회원도 지역설정만 한다면, 메인 화면으로 진입 가능하도록 만들어져있다.)

우선 비회원이 메인 화면에서 여러 작업을 할 경우, 이를 처리하는 로직이 매우 복잡해짐을 이전 프로젝트에서 경험을 했었기 때문인 이유가 있다. 다음 이유로는, 완성된 프로젝트에 기능적인 요소를 더해보는 연습을 해보고 싶기 때문이다.

최초에는 기능을 최소화하고, 후에 살을 붙여나가는 식으로 프로젝트를 꾸려나가고 싶은 마음이 크기 때문인데, 처음부터 모든 기능을 다 구현하려고 했다가 거의 대부분의 프로젝트들이 제대로 된 완성품도 없이 에러만 가득한 상태로 끝나버렸기 때문이다. 이번엔 적어도 제대로 돌아가는 앱이라도 만들어보고 싶다.

사설이 엄청 길었는데
결국은 회원가입 및 로그인 화면을 구현했다.

로그인 화면에 들어선 다음 자신의 아이디와 비밀번호를 입력해주면 Firebase Auth에서 등록된 계정 정보를 확인해 준 뒤, 일치하는 정보라면 위와같이 다음 화면으로 이동시켜 준다.

물론 비밀번호가 틀렸거나, 등록되지 않은 계정 정보가 존재할 수도 있으므로 각각의 경우를 분기 처리했다.

아래의 경우가 등록되지 않은 계정일 경우인데, 예를 누르면 회원의 정보를 자세히 입력할 수 있는 창으로 넘어간다.

회원 가입이 완료됐다면 회원이 등록했던 상세정보(지역, 닉네임 등)를 FireStore에 추가적으로 저장했다. 이 때, auth에서 제공하는 uid를 field 값으로 저장해서 PK 느낌으로 만들어놨다.
(지금 생각해보니 uid를 field 값으로 저장하는게 아니라 document의 이름으로 저장해도 괜찮을 것 같다는 생각이든다. 조금 더 알아봐야겠다.)


마무리

로그인 화면과 회원가입 화면은 임의로 내가 만들었기 때문에 당근마켓의 UI를 따라 갈 방법이 없다. 앞으로 당근마켓의 디자인 스타일을 파악해가며 그럴싸하게 만드는 방법 뿐이 없는 것 같다.

아 그리고, 비밀번호 부분에 마스킹을 안해뒀는데 이것도 처리해야한다 ㅋㅋ 할려고 했다가 까먹었는데 사진 업로드 하면서 알았다..

어쨌든 오늘 하루종일 Server를 어떻게 해야할까 고민이 많았는데 (오늘 뿐 아니라 5일 정도동안..)
그래도 Firebase 쓰기로 결정해서 그런지 마음이 매우 편해졌고.. 앞으로 진행을 슥슥 할 수 있지 않을까 기대를 해본다!

내일은 사용 할 각종 이미지 파일을 준비하고 사용 할 라이브러리를 미리 알아봐야겠다.

오늘 남은 시간은 FireStore 문서를 읽어보며 어떤식으로 데이터 구조를 짤지 생각을 더 해봐야겠다.

끝!

profile
영차영차

0개의 댓글