파이어베이스는 어떻게 작동하는가(챕터를 끝마치면서)
들어가면서
우선 웹을 만들고 비루하지만, 하나의 사이트를 호이스팅하는 경험까지 해볼 수 있었다
혹시 정글 다음기수 지원자 분들께서 이 글을 보신다면, 노베이스
라면 앞부분 챕터의 난이도만 보고 사전교육자료 공부시간을 적게 잡진 마시라는 조언을 드리고 싶습니다.
저는 비전공이고 이런 프로젝트형 구현은 처음인 사람이었는데(코딩 경험은 있음) 하루에 2-3시간 정도만 정글에 쓰다가 막판에 조금 힘들었습니다.
참고로 마지막에 aws와 db부분은 완전히 처음인지라(코틀린을 위한 가벼운 crud만 sql로 가능한 수준이었음) 하루에 4-5시간 이상 썼습니다.
아마 미리미리 했다면 최소한 하루 코딩 7시간을 찍지는 않았을 것 같습니다.
파이어베이스가 뭐지
다른 분야는 모르겠지만, 코틀린으로 어플을 만들어본 사람이라면 한번즈음 들어봤을 것이다.
간단하게 설명하면 회원가입이나 저장소 등을 좀 더 편하게 구현해주는 기능을 해주는 개발 플랫폼으로, 나처럼 백엔드 프로젝트 경험이 없는 사람도 회원가입 까지는 큰 문제 없이 가능할 정도로 잘 설계가 되어있다.
당시에는 이 플랫폼의 고마움을 몰랐으나, 이번에 직접 쌩 html과 js를 다루고 하나의 페이지를 호이스팅 해보면서 파이어베이스는 신이야
이 말만 거의 수십번을 외쳤던 것 같다.
파이어베이스의 주기능
리얼타임 데이터 베이스
json의 형태로 데이터를 내보내준다.
즉시 업데이트가 되는 특징이 있기 때문에, 게임 채팅 등에 활용이 가능하고
나의 경우 게시판의 crud기능을 구현할 때에 리얼타임 데이터 베이스를 활용하였다.
클라우드 스토리지
말 그대로 파일 저장소이다.
나는 테이스팅 노트 앱 제작당시 프로필 사진 업로드에 해당 기능을 사용하였다.
파이어베이스와 연동이 되는 저장소이기 때문에 파일의 액세스 권한을 설정하기에 용이하다.
클라우드 메시징
무료로 알람 전송이 가능한 기능이다.
알림메시지나 데이터 메시지 전송이 가능하며, 우리가 평소 어플에서 받는 알람 메시지와 형태가 유사하다.
Authentication
사용자의 인증과 관계되어있다.
구글,페이스북 로그인 등이 구현가능하고 oauth2.0토큰의 발급 역시 가능하다.
어떻게 작동할까
이번에 직접 웹을 만드는 경험을 하며 제일 궁금했던 것은 사용자 인증과 리얼타임베이스가 어떻게 작동하는가였다.
리얼타임 베이스
우선 리얼타임 베이스는 NoSQL에 해당한다.
그렇기 때문에 kotlin에서 sql을 import하기 위해 DBHelper클래스
생성을 하고 dataclass
로 그것들을 관리하는 복잡한 작업들을 하지 않아도 작동하다.
또한, 복잡한 SQL의 문법이 아니라 set/update
등 보다 직관적인 방식으로 사용이 가능하다.
동기화 방식
HTTP요청 방식이 아니라 객체를 통해 클라이언트와 실시간으로 동기화를 한다.
더 정확하게 말하자면 웹 소켓 방식으로 작동하는데, 그 원리는 다음 이미지와 같다.
즉 원래대로라면 우리가 저 모든 것을 구현해야겠지만, 파이어베이스가 앞단계들은 모두 제공을 해주고 우리는 데이터만 가져다쓸 수 있게 되는 것이다.
웹 소켓이란
웹 소켓 방식이란 간단하게 설명하면 클라이언트와 서버 간에 양방향 통신이 가능하며, 양쪽에서 독립적으로 데이터 전송이 가능한 백엔드 프로그래밍 방식중 하나이다.
기존의 http프로토콜의 경우 클라이언트가 서버에게 요청을 보내고, 서버가 응답을 하는 단방향 통신에 주로 사용하는 반면 웹소켓은 양쪽에서 독립적인 데이터 전송이 가능하다.
서버리스 프로그래밍 가능
물론 보안이 중요한 정보들에 대해서는 자신이 서버를 만들고 따로 관리하는 등의 과정이 필요하겠으나, 아주 간단한 사항들에 대해서는 그냥 파이어베이스의 리얼타임 데이터베이스와 일반 데이터베이스를 사용하더라도 기능구현이 가능해진다.
Authentication
사실 이 글을 시작하게 된 이유도 바로 이 기능이 어떻게 돌아가는지 공부해보고 싶었기 때문이 크다.
회원가입이라는 어떻게 보면 쉽고 어찌보면 어려운 로직을 정말 간단하게 할 수 있도록 도와주기 때문이다.
테이스팅 노트 어플을 만들던 당시에도, 다른 소셜로그인에 비해 구글로그인을 쉽게 할 수 있었던 것도 바로 파이어베이스의 바로 이 기능 덕분이었다.
인증 방법의 선택
사실 이 단계는 넣을까말까 고민한 단계인데 넣는 게 좋을 것 같아서 포함시켰다.
구글로그인이냐 일반 유저로 로그인 할 것이냐를 다루는 단계로 kotlin기준 클릭리스너의 조건을 설정해주는 단계이다.
유의점
이 단계 이전에 Firebase를 쓰기 위해서는 build.gradle에 implementation을 통해 의존성을 정의해주어야한다.
또한 인증이 진행되는 Class에서 인증이 진행되기 이전에 FirebaseApp.initializeApp(this)
를 통해 초기화를 시켜주어야한다.
사용자 인증의 단계
개발자는 이 단계에서 task.isSuccessful
을 통해 로그인의 성공 여부를 알 수 있다.
구글로그인의 경우 간단하게 구현이 가능한데, 소셜로그인까지 구현을 하려고 하면 네이버 카카오 등은 직접 개발자 센터에 가서 어플리케이션을 등록한 뒤 따로 API를 사용하여 처리해주어야한다.
서버측의 제공기능
- 클라이언트 요청
사용자가 로그인을 시도하면, 클라이언트 앱이 FirebaseSDK호출을 통해 파이어베이스 서버에 요청을 보낸다. - Firebase서버 수신
파이어베이스 서버는 클라이언트의 요청을 수신하고, 해당 인증방법에 따라 사용자의 시별을 위한 검증일 시작한다. - 인증 메서드 실행
이메일과 비밀번호가 유효한지 Firebase서버에서 유효성을 검사해준다.
소셜로그인의 경우 Oauth토큰(현재는 2.0사용해야)사용하여 해당 사용자의 유효성을 검증한다. - 인증의 성공/실패 반환
실패한 경우 오류메시지를 반환하고, 성공시 사용자 UID정보등이 성공했다는 내용과 함께 전송된다.개발자 처리
로그인성공 이후 필요한 작업(ex.sql데이터에 사용자 정보 넣기)을 수행한다(필요시) 또한 사용자가 로그인 이후로 볼 수 있는 페이지로의 이동(Intent로 마이페이지 보게 한다거나), 로그인 성공에 대한 Toast메시지를 띄우는 등의 작업이 여기에 포함된다.
댓글남기기