반응형
프로젝트를 진행하다 보면 ~/src/main/resources 폴더에 파일을 저장하고 가져와서 사용할 일이 있다. 이때 프로젝트를 빌드하게 되면 리소스 파일은 CLASS_PATH에 위치하게 된다.
따라서 로컬에서는 아래의 예시 코드로 실행해도 실행이 되지만. 실제로 빌드를 하고 배포를 했을 때는 에러가 발생한다.
...
fun getSheetService(): Sheets {
return Sheets.Builder(
GoogleNetHttpTransport.newTrustedTransport(),
GsonFactory.getDefaultInstance(),
HttpCredentialsAdapter(
ServiceAccountCredentials.fromStream(FileInputStream("src/main/resources/spread-sheet-credential.json"))
.createScoped(listOf(SheetsScopes.SPREADSHEETS))
.createDelegated(spreadSheetServiceUserName)
)
).setApplicationName(spreadSheetServiceApplicationName).build()
}
...
따라서 아래와 같은 방법으로 리소스 파일을 가져와야 한다.
리소스 파일 가져오기
스프링에서는 CLASS_PATH엥 저장된 리소스 파일을 쉽게 가져올 수 있도록 ClassPathResource라는 클래스를 제공한다.
위에서 보여준 예시 코드를 아래와 같이 바꾸어 사용하면 에러를 해결할 수 있다.
...
fun getSheetService(): Sheets {
// 리소스 파일 가져오기
val resource = ClassPathResource("spread-sheet-credential.json")
return Sheets.Builder(
GoogleNetHttpTransport.newTrustedTransport(),
GsonFactory.getDefaultInstance(),
HttpCredentialsAdapter(
ServiceAccountCredentials.fromStream(resource.inputStream)
.createScoped(listOf(SheetsScopes.SPREADSHEETS))
.createDelegated(spreadSheetServiceUserName)
)
).setApplicationName(spreadSheetServiceApplicationName).build()
}
...
위 예시에서 사용된 resource.inputStream외에도 여러가지 기능을 제공한다.
resource.file // 파일 객체
resource.filename // 파일 이름
resource.inputStream // InputStream 객체
resource.path // 파일 경로
resource.URL // URL 객체
resource.URI // URI 객체
반응형
'Back-end' 카테고리의 다른 글
AWS CloudWatch 경보 Slack으로 전송하기 (0) | 2024.01.09 |
---|---|
서킷 브레이커[CirCuit Breaker] 패턴이란? (0) | 2023.04.09 |
자바 직렬화(Serializable) (0) | 2022.10.04 |
HTTP Method & Patch 등장에 따른 Dispatcher Servlet의 변화 (0) | 2022.08.02 |
[Kotlin] Kotlin + Springboot 에서의 validation (0) | 2022.04.27 |