🍏 Spring Boot

[Spring Boot] Google Firebase와 Spring Boot 연결

cosmo225 2025. 4. 14. 01:18

오늘은 구글의 파이어베이스를 사용해 보려고 한다.

https://console.firebase.google.com/u/0/

 

🔥Google Firebase 프로젝트 생성

구글 파이어베이스 콘솔에 접속해서 Firebase 프로젝트를 만들어 준다. 

방법은 생각보다 더 간단했다. 

내 프로젝트 이름을 작성해 주고, 약관에 동의해 주면 된다.
나는 그냥 다 체크체크 했다

 

그리고 애널리틱스 위치는 대한민국으로 설정해 주고
마지막 프로젝트 만들기를 클릭하면

 

프로젝트 생성 완료!

 

 

이제 여기서 프로젝트 설정 -> 서비스 계정에 들어간다. 

그러면 이렇게 새 비공개 키 생성이 뜨는데 나는 자바를 사용해서 자바로 바꿨다. 
그리고 버튼을 누르면 .json 파일이 자동으로 다운로드 된다. 

 

🔥Spring Boot와 Firebase 연결

그리고 이제 스프링부트 프로젝트로 넘어가겠다.

아까 다운받은 json 파일은 main - resources 폴더 안에 넣어 준다. 

 

build.gradle 파일에 다음 문장을 추가하고, 리로드 해준다.

 

그리고 Config 패키지를 만들고 하위에 FirebaseConfig.java 파일을 생성한다. 
아까 비공개 키 생성할 때 예시로 뜨던 코드를 파일 안에 넣어준다.

FirebaseConfig.java

@Configuration
public class FirebaseConfig {
    @PostConstruct
    public void init() throws IOException {
        FileInputStream serviceAccount =
                new FileInputStream("src/main/resources/sweet-check-firebase-adminsdk-fbsvc-c98e76606d.json");

        FirebaseOptions options = new FirebaseOptions.Builder()
                .setCredentials(GoogleCredentials.fromStream(serviceAccount))
                .build();

        FirebaseApp.initializeApp(options);

    }
}

 

이러고 한번 실행 눌러봤는데 계속 오류가 떴다. 
알고 보니 

implementation 'org.springframework.boot:spring-boot-starter-data-jpa'

요놈이 나의 갈길을 막은 것. 나는 기본 db (h2, mysql) 대신 Firestore을 사용할 거라 jpa가 필요없다. 
Spring Boot는 기본적으로 JPA + RDB(MySQL, H2 등) 쓸 거라고 가정하고 실행되기 때문에,
DB 설정이 없으면 애플리케이션 실행 자체가 실패한다. 그래서 저 문장을 주석처리 해 줬다. 

 

어쨌든 다시 콘솔로 넘어와서

왼쪽 빌드 메뉴 중에서 Cloud Firestore를 찾아 접속한다. 

서울로 설정해 주고

우선은 테스트 모드로 시작해 보려고 한다. 

그러면 대시보드로 화면이 넘어가게 되는데

여기서 컬렉션 생성을 하면 된다. 기본으로 그냥 users 컬렉션을 만들어 봤다. 

잘 생성된 모습...

(내가 NoSQL은 처음이라 기본 키가 없다는 것이 생소하게 느껴졌다. ㅎ.ㅎ)

 

@Service
public class UserService {

    private final Firestore db = FirestoreClient.getFirestore();

    public void saveUser(String id, String name, String email) throws Exception {
        Map<String, Object> data = new HashMap<>();
        data.put("name", name);
        data.put("email", email);

        db.collection("users").document(id).set(data).get();
    }

    public Map<String, Object> getUser(String id) throws Exception {
        DocumentSnapshot snapshot = db.collection("users").document(id).get().get();
        return snapshot.exists() ? snapshot.getData() : null;
    }
}

그리고 서비스 클래스에서 이런 식으로 users 컬렉션에 사용자를 저장할 수 있다.