티스토리 뷰
이번 포스팅은 Spring Boot에 Firebase 연동하는 방법을 정리하려고 합니다.
Firebase SDK를 활용한 기본 연동 그리고 컬렉션에 있는 정보를 가져오는 방법을 간단히 정리 하겠습니다.
00. 디펜던시 등록
https://mvnrepository.com/artifact/com.google.firebase/firebase-admin
gradle
implementation group: 'com.google.firebase', name: 'firebase-admin', version: '8.1.0'
maven
<dependency>
<groupId>com.google.firebase</groupId>
<artifactId>firebase-admin</artifactId>
<version>8.1.0</version>
</dependency>
01. Firebase 연동 준비하기.
Firebase에 프로젝트 생성 및 Cloud Firestore은 사전에 생성하셔야 합니다.
Firebase 프로젝트 설정에서 "새 비공개 키 생성"으로 서비스 연결한 json을 다운로드 받아야 합니다.
프로젝트 설정 > 서비스 계정 메뉴로 들어 갑니다.
아래 Admin SDK 구성에서 "새 비공개 키 생성"을 클릭 합니다.
Firestore 연결 정보가 담긴 json을 다운로드 받게 됩니다.
해당 파일 이름을 알아 볼 수 있는 이름으로 변경합니다.
저는 serviceAccountKey.json으로 변경 했습니다.
그리고 이 파일을 spring boot 프로젝트에서 resources 폴더로 복사 합니다.
2. Spring Boot 설정
Spring Boot에 기본 설정 파일을 생성 합니다.
저는 config 패키지에 FirebaseConfig.class 를 생성 했습니다.
FirebaseConfig 파일은 아래와 같이 작성합니다.
@Configuration
public class FirebaseConfig {
@PostConstruct
public void init(){
try{
FileInputStream serviceAccount =
new FileInputStream("src/main/resources/serviceAccountKey.json");
FirebaseOptions options = new FirebaseOptions.Builder()
.setCredentials(GoogleCredentials.fromStream(serviceAccount))
.build();
FirebaseApp.initializeApp(options);
}catch (Exception e){
e.printStackTrace();
}
}
}
3. 간단한 API 연동 해보기.
Firebase에는 Users 컬랙션을 생성 했습니다.
그리고 Spring Boot에는 User Entity를 생성합니다.
Getter, Setter는 lombok을 이용하여 어노테이션을 설정했습니다.
Firebase 컬랙션
User.class
@NoArgsConstructor
@Getter
@Setter
@ToString
public class User {
private String id;
private String name;
private String email;
// firebase timestamp type
private Date create_dt;
private Date update_dt;
}
이번에는 간단한 User에 있는 정보를 가져오는 API를 생성합니다.
UserController.class
@RestController
@RequiredArgsConstructor
@RequestMapping("/exam/svc/v1")
public class UserController {
private final UserService userService;
@GetMapping("/users")
public ResponseEntity<Object> getUsers() throws ExecutionException, InterruptedException {
List<User> list = userService.getUsers();
return ResponseEntity.ok().body(list);
}
}
UserService.class & UserServiceImpl.class
public interface UserService {
List<User> getUsers() throws ExecutionException, InterruptedException;
}
@Service
@RequiredArgsConstructor
public class UserServiceImpl implements UserService {
private final UserDao userDao;
@Override
public List<User> getUsers() throws ExecutionException, InterruptedException {
return userDao.getUsers();
}
}
UserDao.class
@Repository
@Slf4j
public class UserDao {
public static final String COLLECTION_NAME = "users";
public List<User> getUsers() throws ExecutionException, InterruptedException {
List<User> list = new ArrayList<>();
Firestore db = FirestoreClient.getFirestore();
ApiFuture<QuerySnapshot> future = db.collection(COLLECTION_NAME).get();
List<QueryDocumentSnapshot> documents = future.get().getDocuments();
for (QueryDocumentSnapshot document : documents) {
list.add(document.toObject(User.class));
}
return list;
}
}
컬랙션에 신규 데이터를 입력하고 API를 호출하여 데이터가 정상적으로 조회 되는지 확인 합니다.
http://localhost:8080/exam/svc/v1/users
[{
"id": "19dfsafadfkasfjlkZFDAdz",
"name": "홍길동",
"email": "test@gmail.com",
"create_dt": "2021-06-16T10:30:23.662+00:00",
"update_dt": "2021-06-16T10:30:23.662+00:00"
}]
기본 연동은 위와 같이 확인하였습니다.
이제 CRUD를 구현해보도록 할게요.
다음 편에서 계속..
참고
서버에 Firebase Admin SDK 추가 | Firebase Documentation (google.com)
'BackEnd > SpringBoot' 카테고리의 다른 글
[Spring Boot JPA] JPA를 사용하기 위해 꼭 필요한 Dialect(방언)에 대해 알아보자. (1) | 2020.07.09 |
---|---|
[Spring Boot] Service, Component Autowired 필드 주입을 생성자 주입으로 변경하기. (0) | 2020.02.02 |
- Total
- Today
- Yesterday
- Component
- GPT서비스
- 파이썬
- 리엑트
- 30 Day LeetCode Challenge
- k8s metrics-server
- LeetCode 알고리즘 공부
- CHATGOT
- React 프로젝트 생성
- 지도학습
- Java leetcode
- numpy
- git
- 파이썬 numpy
- Java
- 버츄얼스튜디오코드
- LeetCode 30일 챌린지
- vscode
- 에라토스테네스
- react
- 퍼셉트론
- Python
- LeetCode 5월 챌린지
- LeetCode 풀이
- 넘파이
- 머신러닝
- 노드
- k8s metrics-server running
- Node
- GPTGOT
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |