Spring Boot에서 프로젝트를 생성하여 Firestore에 있는 데이터 작업을 하려고 합니다.
Firebase에는 다음과 같이 collection을 만들어서 데이터를 입력 하였습니다.
이 데이터베이스에 데이터를 조회, 추가, 수정, 삭제하는 기능을 Spring Boot를 이용하여 만들어 보려고 합니다.
Spring Boot에서 Spring Starter Project를 선택하여 신규 프로젝트를 생성 합니다.
입력 사항은 테스트이니까 대충 적어 넣고 Next 버튼을 클릭 합니다.
Dependency는 Spring Web만 추가 했습니다. Finish 버튼을 클릭 합니다.
pom.xml에 firebase를 추가 합니다. 현재 6.13.x 버전까지 나와있는데 한 단계 낮추어서 적어봤습니다.
<dependency> <groupId>com.google.firebase</groupId> <artifactId>firebase-admin</artifactId> <version>6.12.1</version> </dependency> |
Firebase의 필드에 해당하는 Vo를 생성 합니다.
package com.copycoding.firebase;
public class Member { String id; String name; int age; String tel;
public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getTel() { return tel; } public void setTel(String tel) { this.tel = tel; } } |
Service를 생성하기 위해 먼저 Interface 파일을 생성하고
package com.copycoding.firebase;
public interface FirebaseService {
public insertMember(Member member) throws Exception;
public Member getMemberDetail(String id) throws Exception;
public String updateMember(Member member) throws Exception;
public string deleteMember(String id) throws Exception; }
|
Service Implement도 작성 합니다.
package com.copycoding.firebase;
import org.springframework.stereotype.Service;
import com.google.api.core.ApiFuture; import com.google.cloud.firestore.DocumentReference; import com.google.cloud.firestore.DocumentSnapshot; import com.google.cloud.firestore.Firestore; import com.google.cloud.firestore.WriteResult; import com.google.firebase.cloud.FirestoreClient;
@Service public class FirebaseServiceImpl implements FirebaseService {
public static final String COLLECTION_NAME="member";
@Override public String insertMember(Member member) throws Exception { Firestore firestore = FirestoreClient.getFirestore(); ApiFuture<WriteResult> apiFuture = firestore.collection(COLLECTION_NAME).document(member.getId()).set(member); return apiFuture.get().getUpdateTime().toString(); }
@Override public Member getMemberDetail(String id) throws Exception { Firestore firestore = FirestoreClient.getFirestore(); DocumentReference documentReference = firestore.collection(COLLECTION_NAME).document(id); ApiFuture<DocumentSnapshot> apiFuture = documentReference.get(); DocumentSnapshot documentSnapshot = apiFuture.get(); Member member = null; if(documentSnapshot.exists()) { member = documentSnapshot.toObject(Member.class); return member; } else { return null; } }
@Override public String updateMember(Member member) throws Exception { Firestore firestore = FirestoreClient.getFirestore(); ApiFuture<WriteResult> apiFuture = firestore.collection(COLLECTION_NAME).document(member.getId()).set(member); return apiFuture.get().getUpdateTime().toString(); }
@Override public String deleteMember(String id) throws Exception { Firestore firestore = FirestoreClient.getFirestore(); ApiFuture<WriteResult> apiFuture = firestore.collection(COLLECTION_NAME).document(id).delete();
return "Document id :" + id + " delete"; } }
|
이제 마지막으로 Controller를 Rest Api 형식으로 작성 합니다.
package com.copycoding.firebase;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController;
@RestController public class FirebaseController {
@Autowired FirebaseService firebaseService;
@GetMapping("/insertMember") public String insertMember(@RequestParam Member member) throws Exception { return firebaseService.insertMember(member); }
@GetMapping("/getMemberDetail") public Member getMemberDetail(@RequestParam String id) throws Exception { return firebaseService.getMemberDetail(id); }
@GetMapping("/updateMember") public String updateMember(@RequestParam Member member) throws Exception { return firebaseService.updateMember(member); }
@GetMapping("/deleteMember") public String deleteMember(@RequestParam String id) throws Exception { return firebaseService.deleteMember(id); } } |
여기 까지는 일반 프로젝트와 동일한 방식으로 작성을 하면 됩니다.
package com.copycoding.firebase;
import java.io.FileInputStream; import javax.annotation.PostConstruct; import org.springframework.stereotype.Service; import com.google.auth.oauth2.GoogleCredentials; import com.google.firebase.FirebaseApp; import com.google.firebase.FirebaseOptions;
@Service public class FirebaseInitialize {
@PostConstruct public void initialize() { try { FileInputStream serviceAccount = new FileInputStream("./copycodingServiceAccount.json");
FirebaseOptions options = new FirebaseOptions.Builder() .setCredentials(GoogleCredentials.fromStream(serviceAccount)) .setDatabaseUrl("https://copycoding-bca04.firebaseio.com") .build();
FirebaseApp.initializeApp(options); } catch (Exception e) { e.printStackTrace(); }
} } |
추가로 Firebase에 접속하기 위한 설정 파일을 하나 생성해주면 됩니다.
이렇게 해서 프로그램이 완성 되었습니다.
이제 테스트를 해 봅니다.
귀찮으니 조회만 해 봅니다.
조회가 잘 되는 군요.
성의가 없는 것 같아 삭제도 해 봅니다.
삭제가 되었다고 하는데 Firebase 데이터베이스에 들어가 확인해 봅니다.
document 2번이 삭제 되어 있습니다. 이런 식으로 작업을 하면 됩니다.
- copy coding -
'Java' 카테고리의 다른 글
삼항 연산자, 조건 연산자, 물음표(?) 조건문 정리 (0) | 2022.04.27 |
---|---|
[Spring] java html tag 특수문자 escape 변환 (0) | 2021.12.09 |
[ObjectMapper] VO를 JSON 형태의 String으로 변환 (0) | 2020.05.10 |
Spring Boot Scheduler @Scheduled 이용한 Batch 작업 (0) | 2020.05.02 |
[OAuth2] Unsupported grant type: password (0) | 2020.04.17 |