[Firebase] 2. 파이어베이스(Firebase) 실시간 데이터베이스에 데이터 쓰기 (app)

in #kr-dev6 years ago (edited)

안녕하세요! @gbgg입니다.
이번 포스팅에서는 파이어베이스(Firebase)의 실시간 데이터베이스 기능을 중점적으로
다루어 보겠습니다. 직접 따라해보고 찾기힘든 자료들도 정리하다보니 연재 텀이 길어질 것 같습니다만 그만큼 퀄리티 있게 준비해서 포스팅 해 보겠습니다.

제가 전문가가 아니다보니 부족한 점이나 잘못된 부분이 있을 수 있습니다. 피드백 주시면 즉시 반영하겠습니다.


실시간 데이터베이스

개발할 앱/웹 등이 정보를 제공하거나 받아와야 할 경우, 또는 데이터를 주고 받아야 할 경우 등등 데이터베이스 기능은 개발에 있어 필수라고 생각합니다. 파이어베이스에서는 다양한 백엔드 서비스를 제공하고 있는데 그 중 가장 대표적인 기능이 '실시간 데이터베이스' 입니다.

이번 포스팅에서는 이 기능을 사용하여 데이터를 읽고 쓰는 작업을 진행해 보겠습니다.

  • 저 같은 개인이나 소규모 프로젝트의 경우 사용하기 적합하다고 생각합니다.
    사용이 편한만큼 제한적인 부분도 없지않아 있습니다. 참고하시기 바랍니다.

준비물

1. Google 계정
2. Android Studio 1.5 이상

앱 개발을 위해 안드로이드 스튜디오를 설치하였습니다.
위 링크로 들어가셔서 다운받으시면 됩니다.


프로젝트 생성 및 셋팅

파이어베이스 프로젝트 생성

지난 포스팅에서 살짝 소개해 드렸던 프로젝트 생성 부분입니다.
프로젝트 추가 + 를 클릭합니다.

프로젝트 ID는 변경할 수 없고 앱 개발시 계속 사용해야 하므로 신중하게 선택해주세요.

프로젝트의 생성 갯수는 8개로 제한되어있습니다. 이후에 추가하기위해서는 기존 프로젝트를 삭제해야하며 약간의 쿨타임이 있는 것으로 알고 있습니다. 이부분은 자세히 찾아 본 후 다시 말씀드리겠습니다.

프로젝트가 생성되었다면 왼쪽 상단에 있는 설정 버튼을 누릅니다.

설정에 들어가면 '내 앱' 부분에 있는 'Android 앱에 Firebase 추가' 를 선택합니다.

  • 패키지 이름
  • 앱 닉네임

여기까지 따라오셨다면 이제는 앱을 생성할 차례입니다.

'안드로이드 스튜디오'를 실행하고 '프로젝트 생성'을 해 주시면 됩니다.

어플리케이션 이름을 설정해줍니다. 저는 'SteemitTest'로 하겠습니다.

테스트 할 안드로이드 핸드폰의 스텟에 맞춰 SDK를 설정해줍니다.

  • 파이어베이스 classpath와 관련이 있으므로 가급적이면 호환되는 낮은 버전을 선택해주세요.

Enpty Activity로 생성하겠습니다.

프로젝트가 성공적으로 생성되었다면 이제 다시 Firebase로 넘어가 보겠습니다.

패키지 이름을 확인하기 위해 Project Structure를 클릭해 줍니다.

Modules - app - Flavors 항목에 들어가 Application Id를 복사합니다.

복사한 id 'com.example.djeu7.steemittest' 를 붙여넣어줍니다.

생성한 프로젝트이름에 따라 id가 다를 수 있습니다.

'앱 등록'을 클릭했다면 다음과 같은 화면이 나옵니다.

'다운로드 google-services.json'을 눌러 파일을 다운받습니다.

  • 생성한 안드로이드 스튜디오의 id가 잘못입력되었다면 다시 앞 과정을 진행하셔야 합니다.

이제 앱으로 넘어가겠습니다.

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를 클릭하여 변경사항을 적용시킵니다.

다음은 데이터를 주고받기 위한 사용 권한을 부여해야합니다.

  • SDK버전이 6.0 이상인 경우 다른방법으로 사용권한을 부여해야 합니다.

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 데이터베이스에 데이터가 전송되도록 설정하였습니다.
버튼을 눌러보겠습니다.

1.gif

버튼을 누를 때 마다 Firebase 의 데이터베이스에 값이 전송되는 모습을 확인할 수 있습니다.


Firebase 실시간 데이터베이스

이번 포스팅에서는 앱을 생성하여 간단한 데이터를 전송해보았습니다.
앱을 생성할 때, 프로젝트를 생성할 때 셋팅작업을 항상 진행해주어야 하므로 여러 번 연습해 두는 것이 좋습니다.

이처럼 별도의 서버를 구성할 필요 없이 간편하게 데이터를 쓸 수 있습니다. 앱 개발에 있어 시간을 엄청나게 절약해주므로 매우 유용한 서비스라고 볼 수 있습니다.

파이어베이스의 데이터형식은 JSON 트리 형으로 @dakeshi 님께서 조언해 주신 것 처럼 초기에 데이터를 어떻게 구성할 것인지 확실하게 설계해 두어야 합니다. 그래야 특정 데이터에 접근하여 수정하고 추가하기 수월해지기 때문입니다. 이 부분을 중점으로 두고 포스팅을 진행하겠습니다.

다음 포스팅에서 찾아뵙겠습니다! @gbgg


지난 포스팅
[Firebase] 1. 혁신적인 백엔드플랫폼 파이어베이스(Firebase)

Sort:  

정보 감사합니다. 👍

감사합니다! ^_^

잘 읽었습니다. firebase 프로젝트 생성시 기본적으로 갯수 제한이 있습니다. 요청하면 쿼터를 늘려주긴 하지만 이 부분도 알려주시면 시작하는 단계에서 많은 도움이 될 것 같습니다. 앞으로의 글들도 기대하겠습니다.~

항상 피드백주셔서 감사합니다!
예전에 5개가 최대였던걸로 기억하는데 지금 그 자료를 찾아보니 나오지가 않아서 언급을 못했네요! 감사합니다!

저도 쿼터가 없는지 알고 접근했다가 좀 황당했던 기억이 남아있습니다. 작년 7월달에 테스트한 기록을 찾아보니 8개로 제한이 있었습니다. 최근에는 달라졌는지 모르겠네요. 8개가 넘어가면 https://support.google.com/code/contact/project_quota_increase 이 페이지로 연결되는 링크가 나옵니다. 추가 확인해보시고 업데이트하시면 많은 분들께 도움이 되리라 생각합니다.

아아 8개인가요? 감사합니다! 이 부분은 많이 중요한부분이니 꼭 추가해야겠네요! 감사합니다!

좋은 컨텐츠가 즐거운 스티밋을 만드는거 아시죠?
짱짱맨이 함께 합니다

항상 감사합니다!

300 팔로워 축하드립니다! ㅎㅎ

저보다 빨리 확인하셨네요 ㅋㅋㅋ 감사합니다!! 이벤트도 열 예정이니 참가해주세용!

Congratulations @gbgg! You have completed some achievement on Steemit and have been rewarded with new badge(s) :

Award for the number of upvotes
Award for the number of comments

Click on any badge to view your own Board of Honor on SteemitBoard.
For more information about SteemitBoard, click here

If you no longer want to receive notifications, reply to this comment with the word STOP

By upvoting this notification, you can help all Steemit users. Learn how here!

어렵당.어려워 안할래 췌~<<

ㅠ_ㅠ 이론....... 지송지송

No idea what's going on here. Just happy to see a fellow #firebase developer that is writing articles here on steemit 😃

dennisalun Hi. I read your post on firebase.
Welcome to Developer Friend