로컬 성공, 배포 후 문제
23 Dec 2024프로젝트 개발 중 Spring Batch에서 데이터를 가져온 뒤 CSV 파일에 저장하는 코드가 있었다.
로컬에서 테스트를 하고 잘 작동하는 것을 확인한 뒤 배포를 하니 문제가 발생했다.
로컬에서와 배포 서버의 경로 차이가 원인이었다.
로컬에서 개발을 하고 경로를 지정하여 빌드 후 실행해보면 해당 경로를 잘 찾는 것을 확인했지만 배포 후에는 경로가 달라지므로 상대 경로로 접근하는 것보다 절대 경로를 사용하는 것이 안전하다.
예를 들어, jar 파일로 빌드하여 배포하면 jar 파일의 루트 경로는 jar:file:/이 된다.
로컬에서는 file:/ 경로로 찾는다.
그렇기 때문에 클래스패스(classpath)를 통해 자원에 접근해야 한다.
로컬 환경에서 잘 작동하던 코드가 배포 환경에서는 권한을 요구하는 경우가 생길 수 있다.
예를 들면, CI/CD 배포 스크립트에서 gradlew의 권한이 없어서 실행하지 못하는 경우가 있을 수 있다.
그럴 땐 배포 스크립트에 권한을 부여하는 코드를 추가해주자.