server

[GCP] GCP VM인스턴스 안에서 파일을 읽는 방법

inhooo00 2024. 3. 21. 01:41

프로젝트를 진행하다가, 파이어베이스 정보가 있는 worryboxFirebaseKey.json 파일을 깃허브에 올리지 않게 되었다.

그러다가 갑자기 의문점이 듦. 

"원래 배포 서버에서는 git pull 땡기고 실행하면 되는데, 저 json 파일은 pull 땡겨도 안 나오네?"

그렇게 되서 생각난 해결방법은 총 2가지

 

1. 환경변수로 넣기 

2. 직접 경로 안에 파일 만들어서 넣기

 

json 파일은 환경변수로 넣을 수 없어서 처음 해보는 2번 방법으로 하도록 마음 먹었다.

 

일단 git에 올려둔 파일의 경로를 보자!

@Configuration
public class FirebaseConfig {

    @PostConstruct
    public void init(){
        try{
            FileInputStream serviceAccount =
                    new FileInputStream("src/main/java/com/example/worrybox/utils/config/worryboxFirebaseKey.json");
            FirebaseOptions options = new FirebaseOptions.Builder()
                    .setCredentials(GoogleCredentials.fromStream(serviceAccount))
                    .build();
            FirebaseApp.initializeApp(options);
        }catch (Exception e){
            e.printStackTrace();
        }
    }
}

 

위 코드에서 경로만 보면 된다. 저기로 저렇게 가서 읽어 오는구나.. 라고 이해만 하면 된다.

 

 

 

바로 결론으로 가자면 저 경로에 직접 넣어서 읽는 방법은 찾지 못했다.

배포한 서버도 쉽게 말하면 하나의 다른 컴퓨터다. 따라서? 경로만 잘 지정하고 넣으면 잘 읽어오지 않을까~ 라는 생각을 했지만, 경로가 길어서 그런가 아니면 jar 파일 이슈인가 build에 문제가 생긴 것 같다.

그래서 새로운 경로를 이용하기로 했다.

수정된 코드

@Configuration
public class FirebaseConfig {

    @PostConstruct
    public void init(){
        try{
            InputStream serviceAccount =
                    new ClassPathResource("worryboxFirebaseKey.json").getInputStream();
            FirebaseOptions options = new FirebaseOptions.Builder()
                    .setCredentials(GoogleCredentials.fromStream(serviceAccount))
                    .build();
            if (FirebaseApp.getApps().isEmpty()) { // FirebaseApp이 이미 초기화되어 있지 않은 경우에만 초기화 실행
                FirebaseApp.initializeApp(options);
            }
        } catch (Exception e){
            e.printStackTrace();
        }
    }
}

달라진 점으로는 ClassPathResource 를 사용해서 worryboxFirebaseKey.json을 읽는 것 뿐이다.

이 방법은 spring 경로 중, worryboxFirebaseKey.json파일을  src/main/resources 디렉토리로 위치시키기만 하면 된다. 읽는 데 오류는 생기지 않았다. 스프링의 클래스 로더를 이용하여 파일을 읽는 방법이다.

 

 

이 경로 안으로 넣어 두면 배포 서버에서 json 파일 찾기 성공~