나는 로그인 기능을 구현을 하고 싶었다. 그러면 내가 어떤 기술들이 필요할 지 생각을 해보았다.
◼️ 내가 생각한 로그인에 필요한 기술
- 회원가입을 하여 회원가입한 정보를 DB에 저장을 할 수 있어야 한다.
- 회원가입을 통해 저장된 DB를 통해 데이터를 가져와 ID(e-mail)와 PW를 입력하여 올바른 정보를 입력하면 로그인돼야 한다.
[올바른 정보란 회원가입을 성공적으로 하면 ID와 PW(로그인 데이터)를 어떠한 플랫폼에서 저장한다는 뜻을 일컫는다.]
필요한 기술을 사용하기 위해 적합한 플랫폼이 무엇일까 찾아봤다.
나는 DB를 아직 다룰 줄 몰라 다루기 쉬워야 했고, 흔히 말하는 인증 서비스까지 갖춘 플랫폼을 Firebase_Realtime Database 라 선정을 하였다.
➡️ 그 이유는 Firebase_Realtime Database는 기존 DB들이 사용하는 SQL언어가 아니었고 NoSQL언어, 즉 코드를 통해 DB를 모르는 사람도 접근을 쉽게 할 수 있었기 때문이었다.
◼️ 잠시 지나가는 말로 NoSQL 데이터베이스의 작동방식에 대해 알아보자면..
NoSQL(비 관계형) 데이터베이스의 작동 방식 : NoSQL 데이터베이스에서는 데이터의 액세스 및 관리를 위해 다양한 데이터 모델을 사용합니다. 이러한 데이터베이스 유형은 큰 테이터 볼륨, 짧은 지연 시간과 유연한 데이터 모델이 필요한 애플리케이션에 최적화되었으며, 이는 다른 데이터베이스의 데이터 일관성 제약 일부를 완화함으로써 이루어진다.
NoSQL(비관계형) 데이터베이스을 사용 하면 좋은 점
- 유연성: NoSQL 데이터베이스는 일반적으로 유연한 스키마를 제공하여 보다 빠르고 반복적인 개발을 가능하게 해 줍니다. 이 같은 유연한 데이터 모델은 NoSQL 데이터베이스를 반정형 및 비정형 데이터에 이상적으로 만들어 줍니다.
- 확장성: NoSQL 데이터베이스는 일반적으로 고가의 강력한 서버를 추가하는 대신 분산형 하드웨어 클러스터를 이용해 확장하도록 설계되었습니다. 일부 클라우드 제공자들은 완전 관리형 서비스로서 이런 운영 작업을 보이지 않게 처리합니다.
- 고성능: NoSQL 데이터베이스는 특정 데이터 모델 및 액세스 패턴에 대해 최적화되어 관계형 데이터베이스를 통해 유사한 기능을 충족하려 할 때보다 뛰어난 성능을 얻게 해 줍니다.
- 고기능성: NoSQL 데이터베이스는 각 데이터 모델에 맞춰 특별히 구축된 뛰어난 기능의 API와 데이터 유형을 제공합니다.
[ 참고 : https://aws.amazon.com/ko/nosql/ ]
◼️ Firebase_Realtime Database 기술을 사용하기에 앞서 Firebase에 대해 궁금해져 알아보았다.
Firebase : 모바일 서버를 개발하기 위해서는 인증, 데이터베이스, 푸시 알람, 스토리지, API 등 모든 것을 개발해야 한다. 그러나 이는 매번 새로운 앱들과 별로 차이가 나지 않기 때문에 복잡한 과정들을 매번 개발할 때마다 하는 것은 시간낭비이다.
FireBase는 이 모든 플랫폼을 프로젝트 구축 시 자동적으로 만들어 준다. 또한 서버를 구축하기 위해서 리눅스 명령어를 알 필요도 없으며 도메인을 구입할 필요가 없고 개발하는 동안에는 서버를 구입할 필요도 없다.
FireBase라는 플랫폼을 통해 프런트엔드 개발자와 백엔드 개발자의 경계가 모호해질 것이며 적은 비용으로 매우 좋은 앱을 만들 수 있을 것이다.
Firebase의 기능
- 1. 인증 시스템
인증은 FireBase에서 로그인을 담당하는 부분이다. 로그인을 담당하는 부분은 직접 서버로 개발할 경우 매우 복잡하다. 그 이유는 인증된 사용자인지, 아닌지를 확인하는 세션 처리에서 그 세션으로 데이터베이스, 저장소에 접근해도 문제가 없는지 확인하는 보안 처리, 비밀번호 찾기, 아이디 찾기, 비밀번호 바꾸기, 이메일 인증 등등 복잡한 것을 구축해야 한다. 하지만 FireBase는 이 모든 것들을 지원한다! - 2. NoSQL 기반의 3세대 데이터베이스
현재 많이 사용되는 오라클이나, MySQL 같은 관계형 데이터베이스보다, FireBase는 Document 형식의 빠르고 간편한 NoSQL 기반의 데이터 베이스를 도입했다. 또한 FireBase는 다른 데이터 베이스들과 다르게 RTSP(Real Time Stream Protocol) 방식의 데이터 베이스를 지원하고 있다.
RTSP는 말 그대로 실시간으로 데이터들을 전송해주는 방식이다. 이 방식을 사용하면 소켓 기반 서버를 만들어서 통신하는 것보다 비약적으로 코드 양이 줄게 되어 코드 몇 줄로도 원하는 구성을 만들 수 있다. - 3. 원격 구성 지원
원격 구성이란 원격으로 앱의 환경 상태를 구성하는 것을 말한다. 앱의 배 경하면 테마나 폰트를 바꾼다던가, 업데이트창 알림창을 띄운다던가 앱의 환경을 원격으로 구성할 때 사용하는 기능이다. - 4. 콘솔 제공
콘솔이라는 용어는 쉽게 말해서 서버 관지라 페이지라고 생각하면 된다. 앱의 서버를 만들게 되면 리눅스, FTP, MySQL(데이터베이스), Node.JS 서버 혹은 Spring 서버, 푸시 보내기 API만 구축할 것이 아니라 이 모든 것을 관리할 수 있는 관리자 페이지가 필요하다. 회사나 조직에 있는 사람들이 리눅스나 데이터베이스, 서버를 다룰 줄 안다면 관리자 페이지가 필요 없을 수도 있지만, 그런 경우가 많지 않고, 또한 접근 보안을 위해서 관리자 페이지를 만들어야 한다. 그럼 앱을 만들기 위해서 앱 개발자뿐만 아니라 서버 개발자까지 필요해진다.
안드로이드 앱 하나를 만들기 위해 배보다 배꼽이 더 커져버릴 수 있다... 하지만 FireBase는 이 모든 것을 지원해준다. - 5. Analytics 제공
Analytics는 단어 그대로 통계를 말하고, 정확히는 다수의 사용자가 앱을 어떻게 사용하는지 통께 정보를 가지고 있다. 앱의 현재 접속자부터 오류 통계, 사용자 유지율, 고객들의 앱 업데이트 상태, 사용자들이 특정 페이지에 머문 시간, 이벤트 등을 추적할 수 있다. 이런 데이터들을 수집해서 사용자가 어떤 페이지에서 흥미를 잃었는지, 어떤 페이지가 인기가 많은 지 등을 찾아낼 수 있고, 맞춤 마케팅을 할 수 있다.
Firebase의 단점
- 1. 서버 응답 속도의 저하
예를 들어서, FireBase로 채팅 앱을 만들었는데 메시지가 늦게 간다던가 혹은 FireBase 인증을 성공한 후에 로그인을 하고, 메인화면에서 데이터베이스로 접근할 때, 서버가 응답하는데 시간이 조금 걸리는 경우가 있다. 이것은 FireBase의 고질적인 문제이고, 유료로 전환해도 서버 응답이 지연되는 부분은 해결되지 않는다. 그 이유는 서버가 해외에 있기 때문이다. FireBase가 국내에서 많이 쓰인다면 구글이 아시아 쪽 서버를 구축해 줄 것이고, 아마 응답 지연이 해결될 것으로 보인다. - 2. FireBase의 데이터베이스인 FireStore(신버전 데이터베이스), RealTime Database(구버전 데이터베이스) 모두 쿼리가 굉장히 빈약하다.
SQL에 익숙한 사람들은 FireBase 데이터베이스를 사용하게 되면 굉장히 당황해할 것이다. 그 흔한 OR 문으로도 검색되지 않으며, LIKE 문도 존재하지 않아서 비슷한 글자나 데이터를 검색할 수 없다. 그래서 FireBase를 사용하는 사용자들은 이 모든 데이터를 받아와서 안드로이드 기기에서 필터링해주는 방법을 권장하고 있다.
>> Firebase가 무엇이고 어떤 기능을 제공하고 사용하면 어떤 단점이 있는지 알아보았다. 내가 원하는 것은 쉽고 간결하게 회원가입, 로그인 기능을 구현하는 게 목적이었고, 이것은 firebase의 RealTime Database 과 인증(Authentication) 기능을 통해 쉽게 해결할 수 있을 것이다.
[ 참고 : https://medium.com/firebase-developers/what-is-firebase-the-complete-story-abridged-bcc730c5f2c0 ]
◼️ Firebase와 나의 안드로이드 스튜디오 프로젝트 연동 ◼️
연동하는 부분은 너무 길고 설명을 잘하는 사람들이 많기 때문에 사이트 첨부로 대체하겠다.
연동하기 : https://jsikim1.tistory.com/7 , https://hanyeop.tistory.com/154
Sha-1 값 찾기 : https://lasbe.tistory.com/11
필자는 연동하는 과정 속에서 많은 오류가 떴고 빌드가 되지 않았다. 나는 오류
Build was configured to prefer settings repositories over project repositories but repository 'BintrayJCenter' was added by build file 'build.gradle' << 내가 참고한 사이트를 적어놓겠다. [ https://ideajini.tistory.com/15 ]
내가 올린 사이트를 참고를 하고 나는 다양한 방법을 시도했고 내가 시도 끝에 오류를 잡은 방법은
- uildscript의 순서와 plugins 순서 유의해야 함
- 여기서 buildscript , allprojects 가 없으면 새로 만들어야 함
- allprojects를 새로 만들었는데 알고 보니 안드로이드 스튜디오가 버전이 업그레이드되면서 settings.gradle에 allprojects를 만들어야 함 (오류 찾느라 시간 많이 걸림)
- builder.gradle(module)
Firebase 공식 홈페이지에서 시킨 대로 apply plugin: 'com.android.application' / apply plugin: 'com.google.gms.google-services' 를 넣어줬으나 오류가 나서 빼줘야 했음
>> 내가 에러가 났을 때 시도한 방법들이다. 참고 바란다.
◼️ Firebase를 이용한 나의 프로젝트 회원가입, 로그인 기능 구현 ◼️
✔️ 1. 회원가입
✔️ 2. 로그인