-
[spring boot] 스프링 firebase database 사용하기Spring/spring boot 및 기타 2021. 5. 4. 18:31
firebase 가 클라이언트 사이드에서 구현하기 위한 severless db 로 많이 쓰이는데,
나 같은 경우는 db 를 구축하기 일단 비용 및 인프라가 없어서 간단히 만들려고 firebase 를 서버에서 사용하기 위한 db 로 일단은 선택했다.
일정량 이하는 free 로 사용할 수 있다.
firebase 프로젝트 생성
대쉬보드에서 프로젝트 추가를 통해 프로젝트를 생성
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 권한이 된다는 코드이다.
반응형'Spring > spring boot 및 기타' 카테고리의 다른 글
[Spring] multi datasource 동적으로 사용 - AbstractRoutingDataSource (0) 2021.08.03 [spring boot] mybatis 연동 및 설정 (0) 2021.06.23 [spring boot] 스프링 부트 h2 인메모리 db 시작하기 (0) 2021.04.27 [spring] 스프링 HikariDatasource 속성 값 (0) 2021.03.31 [spring] 스프링 elasticsearch NativeSearchQuery 사용방법 (0) 2021.03.16