티스토리 뷰

반응형

이번 포스팅은 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)

반응형
댓글