안녕하세요! @gbgg입니다.
이번 포스팅에서는 파이어베이스(Firebase)의 실시간 데이터베이스 기능을 중점적으로
다루어 보겠습니다. 직접 따라해보고 찾기힘든 자료들도 정리하다보니 연재 텀이 길어질 것 같습니다만 그만큼 퀄리티 있게 준비해서 포스팅 해 보겠습니다.
제가 전문가가 아니다보니 부족한 점이나 잘못된 부분이 있을 수 있습니다. 피드백 주시면 즉시 반영하겠습니다.
개발할 앱/웹 등이 정보를 제공하거나 받아와야 할 경우, 또는 데이터를 주고 받아야 할 경우 등등 데이터베이스 기능은 개발에 있어 필수라고 생각합니다. 파이어베이스에서는 다양한 백엔드 서비스를 제공하고 있는데 그 중 가장 대표적인 기능이 '실시간 데이터베이스' 입니다.
이번 포스팅에서는 이 기능을 사용하여 데이터를 읽고 쓰는 작업을 진행해 보겠습니다.
1. Google 계정
2. Android Studio 1.5 이상
앱 개발을 위해 안드로이드 스튜디오를 설치하였습니다.
위 링크로 들어가셔서 다운받으시면 됩니다.
지난 포스팅에서 살짝 소개해 드렸던 프로젝트 생성 부분입니다.
프로젝트 추가 + 를 클릭합니다.
프로젝트 ID는 변경할 수 없고 앱 개발시 계속 사용해야 하므로 신중하게 선택해주세요.
프로젝트의 생성 갯수는 8개로 제한되어있습니다. 이후에 추가하기위해서는 기존 프로젝트를 삭제해야하며 약간의 쿨타임이 있는 것으로 알고 있습니다. 이부분은 자세히 찾아 본 후 다시 말씀드리겠습니다.
프로젝트가 생성되었다면 왼쪽 상단에 있는 설정 버튼을 누릅니다.
설정에 들어가면 '내 앱' 부분에 있는 'Android 앱에 Firebase 추가' 를 선택합니다.
여기까지 따라오셨다면 이제는 앱을 생성할 차례입니다.
'안드로이드 스튜디오'를 실행하고 '프로젝트 생성'을 해 주시면 됩니다.
어플리케이션 이름을 설정해줍니다. 저는 'SteemitTest'로 하겠습니다.
테스트 할 안드로이드 핸드폰의 스텟에 맞춰 SDK를 설정해줍니다.
Enpty Activity로 생성하겠습니다.
프로젝트가 성공적으로 생성되었다면 이제 다시 Firebase로 넘어가 보겠습니다.
패키지 이름을 확인하기 위해 Project Structure를 클릭해 줍니다.
Modules - app - Flavors 항목에 들어가 Application Id를 복사합니다.
복사한 id 'com.example.djeu7.steemittest' 를 붙여넣어줍니다.
생성한 프로젝트이름에 따라 id가 다를 수 있습니다.
'앱 등록'을 클릭했다면 다음과 같은 화면이 나옵니다.
'다운로드 google-services.json'을 눌러 파일을 다운받습니다.
이제 앱으로 넘어가겠습니다.
Android 보기에서 Project 보기를 선택하여 하위 디렉토리를 볼 수 있도록 합니다.
gradle, idea, app, build 등등이 있는데 app 폴더에 아까 다운로드 한 google-services.json을 넣습니다.
성공적으로 완료되었다면 다음과 같이 app폴더 하위에 표시됩니다.
이제 SDK를 설정해 보겠습니다. 두 가지 작업을 진행해야 합니다.
먼저 프로젝트 단위의 build.gradle에는 classpath 'com.android.tools.build:gradle:3.0.0'와
classpath 'com.google.gms:google-services:3.1.0'를 붙여넣어줍니다.
다음으로 모듈의 app - build.gradle 을 클릭합니다.
dependencies 하위에 compile 'com.google.firebase:firebase-database:11.8.0'를 복사하여 추가합니다.
그리고 하단에 apply plugin: 'com.google.gms.google-services'를 추가해줍니다.
위 그림처럼 복사하여 붙여넣으면 됩니다.
정상적으로 붙여넣었다면 상단에 Sync Now를 클릭하여 변경사항을 적용시킵니다.
다음은 데이터를 주고받기 위한 사용 권한을 부여해야합니다.
AndroidManifest.xml에 <uses-permission android:name="android.permission.INTERNET" /> 를 추가해줍니다.
파이어베이스 웹 사이트로 돌아와 '규칙' 항목에 접속합니다.
읽기와 쓰기 권한을 부여할 수 있는데 이 기능으로 로그인을 했을 경우 쓸 수 있도록 셋팅할 수 있습니다.
지금은 읽고 쓰기 모두를 허용해주겠습니다.
{
"rules": {
".read": "true",
".write": "true"
}
}
버튼을 누르면 특정 데이터가 데이터베이스에 기록되도록 구현해보겠습니다.
안드로이드 스튜디오에서 버튼을 하나 생성해줍니다.
가장 먼저 버튼view를 연결하고 파이어베이스를 사용하기 위한 코드를 넣어보겠습니다.
app-java-MainActivity를 클릭하여 아래 코드를 붙여넣어봅시다.
public class MainActivity extends AppCompatActivity {
private Button sendbt;
private FirebaseDatabase firebaseDatabase = FirebaseDatabase.getInstance();
private DatabaseReference databaseReference = firebaseDatabase.getReference();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
sendbt = (Button) findViewById(R.id.button2);
sendbt.setOnClickListener(new Button.OnClickListener() {
public void onClick(View v) {
// 버튼 누르면 수행 할 명령
}
});
}
}
sendbt = (Button) findViewById(R.id.button2); 조금 전에 버튼을 생성할 때 생성한 이름을 넣어주면 됩니다.
저는 button2로 버튼명을 설정하였으므로 R.id.button2로 입력하였습니다.
sendbt.setOnClickListener(new Button.OnClickListener() {
public void onClick(View v) {
// 버튼 누르면 수행 할 명령
}
});
버튼을 눌렀을 때 호출되는 리스너입니다. '버튼 누르면 수행 할 명령'에 파이어베이스로 데이터를 보내는 코드를 작성해 보겠습니다.
databaseReference.child("message").push().setValue("2");
databaseReference.child("message").child("gbgg").setValue("2");
데이터 입력 방식에는 크게 두 가지가 있습니다.
child("message")는 JSON 데이터 형식에서 데이터의 '이름' 값을 의미합니다.
child("message").child("gbgg").setValue("2")를 해석해보자면 message - gbgg 항목의 값을 "2"로 덮어씌운다는 뜻입니다. 기존 message - gbgg 항목이 존재하지 않다면 새로 생성됩니다.
push()는 특정한 규칙의 child를 임의로 생성하면서 값을 넣습니다.
child("message").push().setValue("2");를 해석해보자면 message 이름값 하위에 특정한 규칙을 가진 child를 생성하면서 그 값을 "2"로 셋팅합니다.
push()를 사용할 경우 새로만들기 개념이므로 채팅 데이터가 쌓이듯이 데이터가 쌓이게 됩니다.
이번 포스팅에서는 push()를 사용하여 버튼을 누를 때 마다 데이터를 보내보겠습니다.
sendbt.setOnClickListener(new Button.OnClickListener() {
public void onClick(View v) {
databaseReference.child("message").push().setValue("2");
}
});
위와 같이 databaseReference.child("message").push().setValue("2");를 추가해 줍시다.
이제 모든 작업이 완료되었습니다. 핸드폰에 앱을 넣어보겠습니다.
애플리케이션에 있는 버튼을 누르면 Firebase 데이터베이스에 데이터가 전송되도록 설정하였습니다.
버튼을 눌러보겠습니다.
버튼을 누를 때 마다 Firebase 의 데이터베이스에 값이 전송되는 모습을 확인할 수 있습니다.
이번 포스팅에서는 앱을 생성하여 간단한 데이터를 전송해보았습니다.
앱을 생성할 때, 프로젝트를 생성할 때 셋팅작업을 항상 진행해주어야 하므로 여러 번 연습해 두는 것이 좋습니다.
이처럼 별도의 서버를 구성할 필요 없이 간편하게 데이터를 쓸 수 있습니다. 앱 개발에 있어 시간을 엄청나게 절약해주므로 매우 유용한 서비스라고 볼 수 있습니다.
파이어베이스의 데이터형식은 JSON 트리 형으로 @dakeshi 님께서 조언해 주신 것 처럼 초기에 데이터를 어떻게 구성할 것인지 확실하게 설계해 두어야 합니다. 그래야 특정 데이터에 접근하여 수정하고 추가하기 수월해지기 때문입니다. 이 부분을 중점으로 두고 포스팅을 진행하겠습니다.
다음 포스팅에서 찾아뵙겠습니다! @gbgg