본문 바로가기

프로그래밍/안드로이드

[Android/Firebase] 안드로이드 프로젝트에 Firestore 연동

앱 개발 중에 데이터베이스를 사용해야 할 일이 있었는데 검색해보니 안드로이드 스튜디오는 DB와 직접 통신이 불가능하고 중간에 중계를 해주는 서버가 필요하다는 정보를 얻었다. 그래서 쉬운 방법이 없나 찾아보다가 Firestore라는 데이터베이스를 발견했다.

 

Firestore는 구글에서 서비스 중인 NoSQL 데이터베이스다. Firestore는 컬렉션(Collection)문서(Documents)가 있고, 문서내엔 키-값 쌍으로 이루어진 데이터가 있다. 각 문서는 하위 컬렉션을 가질 수도 있다.

 

개인적으로 생각하는 장점은 쉽고 빠르게 안드로이드 프로젝트에 적용할 수 있다는 것, 그리고 단점은 자체적인 텍스트 검색 기능의 부재다. (SQL의 LIKE 같은 기능이 없음)

 

Firebase (google.com)

 

Firebase

Firebase는 고품질 앱을 빠르게 개발하고 비즈니스를 성장시키는 데 도움이 되는 Google의 모바일 플랫폼입니다.

firebase.google.com


Firebase 프로젝트 생성

Firestore를 사용하기 위해선 먼저 Firebase 프로젝트를 생성해야 한다. 위의 Firebase 링크로 이동해서 다음 절차를 수행한다.

 

1. 시작하기 클릭
2. 프로젝트 생성
3. 프로젝트명 입력 (원하는대로)
4. Google 애널리틱스, 계속 버튼 클릭
5. Google 애널리틱스 계정, Default Account를 선택. 새 계정을 만들어도 상관없을 듯? (안 해봤음)

 

프로젝트 만들기 버튼을 누르면 프로젝트 생성 후 메인 페이지로 넘어간다.

Firestore 데이터베이스 생성

Firebase 프로젝트를 생성했다면 Firestore 데이터베이스를 생성할 차례다. 다음 절차를 수행한다.

 

1. 좌측 메뉴에서 Cloud Firestore 선택
2. 데이터베이스 만들기 클릭
3. 보안 규칙을 설정해야 하나 지금은 테스트 모드를 선택해 자유로운 읽기, 쓰기가 가능하도록 만든다
4. 데이터베이스 위치 선택, 여기서는 asia-northeast3(서울)을 선택했다

데이터베이스 위치에 대한 자세한 내용은 다음 링크를 참조한다.

 

프로젝트의 위치 선택  |  Firebase (google.com)

 

프로젝트의 위치 선택  |  Firebase

위치 설정이 필요한 Firebase 제품은 다음과 같습니다. Google 애널리틱스 — Firebase 프로젝트에서 Google 애널리틱스를 사용 설정하면 애널리틱스 보고 위치를 선택하라는 메시지가 표시됩니다. 이

firebase.google.com

위치를 선택하고 사용 설정을 누르면 데이터베이스 생성 작업이 수행되고 Firestore 페이지로 넘어간다.

안드로이드 프로젝트와 Firestore 연동

Firestore 데이터베이스를 생성했으면 마지막으로 안드로이드 프로젝트와 연동해야 한다.

 

1. 상단 메뉴에서 Tools - Firebase 를 찾아 누른다
2. Firestore를 사용할 것이므로 Firestore를 선택한 후 아래 'Read and write documents with Cloud Firestore'를 누른다
3. 'Connect to Firebase' 버튼을 누른다
4. Firebase 콘솔창이 나오면 이전에 생성했던 프로젝트를 선택한다
5. 해당 창이 뜨면 '연결' 버튼을 누른다
6. 자동으로 안드로이드 프로젝트와 연결이 시작되고, 연결이 완료가 되면 1번 항목에 Connected가 표시된다. 아래 'Add Cloud Firestore to your app' 버튼을 누른다
7. Gradle에 Firestore를 추가한다는 창이 뜬다. 'Accept Changes' 버튼을 누른다

Gradle 싱크까지 완료되면 Firestore 사용을 위한 준비 과정은 끝이다. Firestore 인스턴스 선언 시 오류가 발생하지 않는다면 제대로 된 것이다.

MainActivity.kt
 
class MainActivity : AppCompatActivity() {
    private lateinit var binding : ActivityMainBinding
    val db = FirebaseFirestore.getInstance()    // Firestore 인스턴스 선언

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityMainBinding.inflate(layoutInflater)
        val view = binding.root
        setContentView(view)
    }
}