프로젝트를 진행하다가, 파이어베이스 정보가 있는 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 파일 찾기 성공~
'server' 카테고리의 다른 글
[Server] Nginx가 뭔데 배포할 때마다 설치하는거지? (0) | 2025.01.21 |
---|---|
[Mysql] GCP VM 인스턴스 서버에서 배포후, 내 로컬에서 데이터베이스 확인하기 (0) | 2024.03.21 |