본문 바로가기

Dart & Flutter/Firebase auth + Spring boot

Kakao 로그인을 위한 Spring boot + Firebase Admin SDK 설정 #03

Firebase sns_login 세 번째 시간이다.  오늘은 카카오 로그인 구현을 위한 Firebase admin SDK설정과 Spring boot api서버를 설정한다. 

 

Index 

  • Firebase admin SDK 설정 및 비공개 키 생성
  • Spring boot api서버 생성 및 세팅

 

Firebase admin SDK 설정 및 비공개 키 생성

지난 시간에 만들어 놓은 Firebase 콘솔에서 프로젝트를 선택하면 아래 이미지가 나오고 차례대로 선택한다.

프로젝트 설정 > 서비스 계정 > SDK 구성 언어 선택 > 새 비공개 키 생성

Firebase Admin SDK 설정

 

저장 하는 새 비공개 키는 적당히 자신이 알아볼 수 있도록 변경한다.
그리고 혹시라도 프로젝트를 git으로 등록할 때에는 꼭!!! gitignore에 명시해서 github에 올리지 말자!!
나는 testsnsloginsecret.json으로 저장함!

비공개키 생성

 

Spring boot api 서버 생성 및 세팅

스프링을 다룰줄 알고 있다고 가정하고 있기 때문에 기본 프로젝트 설명은 하지 않는다.

 

Java : 11

Spring boot : 2.5.1

dependency 

  starter-web

  devtools

  lombok

  firebase admin

 

pom.xml 

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.5.1</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>testsnslogin_server</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>testsnslogin_server</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        <java.version>11</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
 
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.google.firebase</groupId>
            <artifactId>firebase-admin</artifactId>
            <version>7.3.0</version>
        </dependency>
    </dependencies>
 
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <excludes>
                        <exclude>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                        </exclude>
                    </excludes>
                </configuration>
            </plugin>
        </plugins>
    </build>
 
</project>
 
cs

 

 

생성한 비밀키 프로젝트에 복사

src/main/resources 아래 넣어준다.

 

FirebaseConfig.java 파일 생성

package com.example.testsnslogin_server.config;
 
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
 
import javax.annotation.PostConstruct;
 
import com.google.auth.oauth2.GoogleCredentials;
import com.google.firebase.FirebaseApp;
import com.google.firebase.FirebaseOptions;
 
import org.springframework.context.annotation.Configuration;
 
@Configuration
public class FirebaseConfig {
 
    @PostConstruct
    public void init() {
        try {
            FileInputStream serviceAccount = new FileInputStream("src/main/resources/serviceAccountKey.json");
            FirebaseOptions options = FirebaseOptions.builder().setCredentials(GoogleCredentials.fromStream(serviceAccount)).build();
            FirebaseApp.initializeApp(options);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        
    }
    
}
cs

 

FileInputStream 생성자 인자로 Admin SDK를 다운로드하였던 파일 경로를 넣어준다.

 

연결 테스트 

Spring boot 서버를 debug모드로 start 한 후 실제 FirebaseOptions 객체가 만들어지고 FirebaseApp.initializeApp(options)가 정상 작동되는지 확인한다.

 

Debug 모드로 Server 기동

연결 테스트 Debug

FirebaseConfig.java의 Init 메서드가 실행되고 왼쪽 창에 실제 FirebaseOptions 객체가 생성된 걸 확인할 수 있다.

 

생성된 FileInputStream serviceAccount / FirebaseOptions options 객체

생성된 FirebaseOptions 객체

 

스프링 부트를 기동 했을 때 생성된 객체가 확인되면 우선 기본 연결은 정상으로 판단할 수 있다. 

다음 시간에는 연결된 Spring boot 서버로 카카오 로그인 방법을 포스팅할 예정이다! 오늘은 끝!!