ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [spring boot] 스프링 firebase database 사용하기
    Spring/spring boot 및 기타 2021. 5. 4. 18:31

     

    firebase 가 클라이언트 사이드에서 구현하기 위한 severless db 로 많이 쓰이는데, 

    나 같은 경우는 db 를 구축하기 일단 비용 및 인프라가 없어서 간단히 만들려고 firebase 를 서버에서 사용하기 위한 db 로 일단은 선택했다.

     

    일정량 이하는 free 로 사용할 수 있다.

     

    firebase 프로젝트 생성

    대쉬보드에서 프로젝트 추가를 통해 프로젝트를 생성

    console.firebase.google.com/

     

    firestore Database 를 생성하자.

    주의 할 것은 realtime database 와 firestore database 는 다르다.

    다른 점으로는 과금 정책도 다르고, realtime 이 더 비싸다고 한다.

    둘의 차이점은 아래 링크 문서에 있다.

    firebase.google.com/docs/database/rtdb-vs-firestore?hl=ko

     

    프로젝트 설정 에서 account 관련 키 파일을 다운받아야 한다.

    프로젝트 개요 > 프로젝트 설정 > 서비스 계정 > Firebase Admin SDK 

    에서 자바 를 클릭 후 

    새 비공개 키 생성 으로 파일을 다운받자. 

    다운 받으면 ~~~~.json 파일로 다운받아진다.

     

    스프링 spring boot 코드 

    pom.xml 라이브러리 다운

    <dependency>
    	<groupId>com.google.firebase</groupId>
    	<artifactId>firebase-admin</artifactId>
    	<version>6.11.0</version>
    </dependency>

     

    스프링 init 코드

    @Service
    public class FirebaseInitialize {
    
        @PostConstruct //has to be Run during the Start of
        public void initialize() {
            try {
                FileInputStream serviceAccount =
                        new FileInputStream("src/main/resources/serviceAccountKey.json");
    
                FirebaseOptions options = new FirebaseOptions.Builder()
                        .setCredentials(GoogleCredentials.fromStream(serviceAccount))
                        .setDatabaseUrl("https://{{데이터베이스명}}.firebaseio.com")
                        .build();
    
                FirebaseApp.initializeApp(options);
            } catch (Exception e){
                e.printStackTrace();
            }
        }
    
    }

     

    위에서 다운받은 json 파일을 이름을 변경해주고 resources 하위 경로에 넣자.

    databaseUrl 은 따로 나오는 곳은 없어 보였는데, 프로젝트 명 에 뒤에 .firebaseio.com 을 붙이면 된다.

    데이터베이스명은 firestore 조회 화면에 바로 나온다.

     

    데이터 샘플로 넣고 조회하기

    @Slf4j
    @Service
    public class FirebaseService {
    
        public static final String COLLECTION_NAME = "user";
    
        public void insertUser() throws Exception {
    
            Firestore db = FirestoreClient.getFirestore();
            User user = new User();
            user.setId("4444");
            user.setName("4444");
            ApiFuture<WriteResult> apiFuture = db.collection(COLLECTION_NAME).document("user_4").set(user);
    
            log.info(apiFuture.get().getUpdateTime().toString());
        }
    
    
        public void selectUser() throws Exception {
    
            Firestore db = FirestoreClient.getFirestore();
            User user = null;
            ApiFuture<DocumentSnapshot> apiFuture = db.collection(COLLECTION_NAME).document("user_4").get();
            DocumentSnapshot documentSnapshot = apiFuture.get();
            if(documentSnapshot.exists()) {
                user = documentSnapshot.toObject(User.class);
                log.info(user.toString());
            }
        }
    }

     

    User 라는 pojo 클래스를 만들고 넣어줘도 되고 HashMap 으로 만들어서 넣어줘도 된다.

    collection 과 document 라는 개념이 몽고db 와 흡사하다.

    collection 이라는 개념은 db와 같고, 하위의 document 가 테이블 과 개념이 같다. 조금 다른 점이 있다면 document 가 하위로 계속 들어갈 수 있다.

    사용 

        @Resource
        FirebaseService firebaseService;
    
        @Test
        public void 테스트() throws Exception {
            firebaseService.insertUser();
            firebaseService.selectUser();
        }

    이 정도 코드는 사실 안남겨도 되는데, 혹시나.

     

    결과 

     

    나 같은 경우는 저 코드를 작성했는데 한참 동작하지 않아서 이것저것 삽질을 조금 했다.

    나중에 시간이 지나고 되는걸 보면 database 를 생성하고 일정시간이 지나야 되는거 같긴 한데, 이건 확실치 않다.

    혹시 안되는 사람은 2시간 정도 경과하고 한번 다시 해보도록

     

    혹시나 권한 때문에 안되는 사람은 규칙(rule)을 확인하자.

    production 모드로 한 사람은 규칙에서 test 모드로 변경하면 된다.

    2021 년 6월 3일 까지는 read write 권한이 된다는 코드이다.

    반응형

    댓글

Designed by Tistory.