public void initialize(){
try{
//키파일 로드
FileInputStream firebase_private_key= new FileInputStream("키파일.json");
//파이어베이스 키 인증
GoogleCredentials credentials = GoogleCredentials.fromStream(firebase_private_key);
FirebaseOptions options = new FirebaseOptions.Builder()
.setCredentials(credentials)
.build();
//파이어베이스SDK 초기화
FirebaseApp.initializeApp(options);
log.info("\t Firebase initialize complete - ");
}catch(IllegalStateException e){
log.error(e.getMessage());
}catch(Exception e){
e.printStackTrace();
}
}
FirebaseApp.initializeApp(options);
를 수행하면 프로세스 내에 파이어베이스클라이언트 클래스의 인스턴스가 생성된다.
파이어베이스 클라이언트는 싱글톤으로 인스턴스가 생성되어서 프로세스내부에서 언제든지 인스턴스를 가져올수있다.
파이어스토어는 파이어베이스에서 제공하는 NoSql형식의 데이터베이스이다. 파이어베이스 콘솔에 접속해서 파이어스토어를 구성을 보면 단계는 다음과 같다.
기본 구조
컬렉션
└ 도큐먼트
└ 필드 : 데이터
기본구조와 같이 최상위에 컬렉션이 있고 그밑에 도큐먼트가있다 그리고 그밑에 드디어 데이터를 저장할 수 있다.
그리고 도큐먼트 밑에 다시 컬렉션부터 다시 포함시킬 수 있다.
확장 구조
컬렉션
└ 도큐먼트
├ 필드 : 데이터
└ 컬렉션
└ 도큐먼트
└ 필드 : 데이터
이렇게 얼마든지 데이터를 확장시킬 수 있다. 때문에 NoSQL의 특성을 가지고 있으며, 데이터를 다룰때 정확한 구조를 알고 사용해야 한다는 단점이 있지만 형식에 얽매이지 않을수있다.
참...좋지만 나쁘다.....
위에서 초기화한 파이어베이스SDK의 싱글턴인스턴스를 가져와서 파이어스토어의 데이터를 가져올 수 있다.
아래 코드는 파이어스토어의 데이터를 콘솔창에 출력하는 코드이다.
Firestore firestore = FirestoreClient.getFirestore();
Iterator<CollectionReference> collections = firestore.listCollections().iterator();
Iterator<DocumentReference> documents = null;
while(collections.hasNext()){
CollectionReference collection = collections.next(); //콜렉션 가져오기
String collection_id = collection.getId(); //콜렉션 ID 가져오기
System.out.println("-------------------------------------");
System.out.println("Collection ID : "+collection_id);
documents = collection.listDocuments().iterator(); //콜렉션에 포함된 도큐먼트 가져오기
while(documents.hasNext()){
DocumentReference documentReference = documents.next();
String document_id = documentReference.getId(); // 도큐먼트 ID가져오기
System.out.println("\t- Document ID : "+document_id);
ApiFuture<DocumentSnapshot> apiFuture = documentReference.get(); //필드와 벨류값을 다루는 클래스(스냅샷)
DocumentSnapshot snapshot = apiFuture.get();
System.out.println("\t\t --------- field : value ---------");
/**
* 람다
* 1. Objects.requireNonNull()메서드로 null체크
* 2. null이 아니면 forEach문 실행
* 3. 필드명과 데이터 출력
*/
Objects.requireNonNull(snapshot.getData()).forEach((key, value)->System.out.println("\t\t - "+key + " : " + value));
}
}
위는 파이어베이스 내부에 컬렉션과 도큐먼트의 리스트를 가져와서 한번씩 전부 출력하는 로직이다.
하지만 사실은 개발할때는 모든 이름을 알고있으므로 아래와 같이 사용하면된다.
DocumentReference documentReference = firestore.collection("콜렉션아이디").document("도큐먼트아이디");
댓글 영역