application.properties 파일 분리

brylimo·2023년 8월 19일

merci

목록 보기
4/7
post-thumbnail

spring boot로 소스코드를 작성할 때 보통 application.properties에는 데이터베이스 연결 설정, 보안키값 등 여러 민감한 값들이 저장된다.

merci 프로젝트의 소스코드는 모두 오픈할 생각이지만 그럼에도 불구하고 이런 값들은 공개되어서는 안되기 때문에 application-dev라는 이름으로 properties 파일을 하나 더 만들어 이 application-dev.properties 파일에 실제 값들을 저장하고 이 파일은 공개하지 않기로 하였다.(.gitignore 설정을 통해 application-dev.properties 공개를 막음)

깃허브에 있는 소스코드에서는 application.properties 파일만 공개될 것이므로 만약 프로젝트를 실제 클론받아서 실행하게 되면 비정상적으로 동작할 수 있다. 따라서 클론후 구동했을 때 비정상적으로 동작한다면 application.properties 파일을 의심하자.

이제 어떻게 application.properties 파일을 프로젝트 내에서 분리했는지 간략하게 설명하고자 한다. 이를 위해 merci 프로젝트의 구동환경에 대해 한번 짚고 넘어갈 필요가 있을거 같다.

merci 프로젝트는 spring boot를 이용해서 작성되어 있으나 JAR 배포가 아닌 톰캣 배포(war 배포)를 하도록 설정되어 있다.(ec2에서도 이를 염두해두고 도커를 이용해 톰캣 이미지를 다운받았었다.) 톰캣 배포를 선택한 이유는 거창한 이유가 있는 것은 아니고 후에 공간정보쪽 개발을 진행하게 될텐데 이 때 geoserver 사용을 염두해두고 있기 때문이다. 물론 jar 배포를 하게된다고 geoserver를 사용할 수 없는 것은 아니다. 다만 geoserver측에서 geoserver를 war 파일 형태로도 제공해주기 때문에 프로젝트에서 톰캣을 사용한다면 좀 더 수월하게 geoserver 설정을 진행할 수 있는 부분이 있다.

merci project가 톰캣배포를 하기 때문에 MerciApplication.java파일을 다음과 같이 수정해주었다.

@SpringBootApplication
public class MerciApplication extends SpringBootServletInitializer {
	static String APPLICATION_DEV = "spring.config.location=classpath:/application-dev.properties";

	public static void main(String[] args) {
		new SpringApplicationBuilder(MerciApplication.class).properties(APPLICATION_DEV).run(args);
		// new SpringApplicationBuilder(MerciApplication.class).run(args);
	}

	@Override
	protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
		return builder.sources(MerciApplication.class);
	}

}

war 파일을 생성하고 서블릿 컨테이너에 배포할 때는 해당 어플리케이션의 main 메서드가 호출되지 않는다.(반면에 jar 배포일 경우에는 main 메서드가 직접 호출된다.) 이 경우에는 대신에 서블릿 컨테이너가 애플리케이션을 시작하게 된다. SpringBootServletInitializer에 정의된 configure 메서드는 war 배포 시에 호출되게 되는데(jar 배포일 경우 이렇게 해줄 필요가 없다.) 다음과 같이 상속후 configure 메서드를 재정의해주게 되면 다른 properties 파일들을 등록해 줄 수 있게 된다.

new SpringApplicationBuilder(MerciApplication.class).run(args);

주석 처리된 이 코드가 실행되면 application.properties 파일이 인식되게 되고(기본으로 properties 지정이 없을 경우 application.properties 파일을 찾는다.)

new SpringApplicationBuilder(MerciApplication.class).properties(APPLICATION_DEV).run(args);

이 코드가 실행되면 경로 지정을 application-dev.properties로 해줬으므로 application-dev.properties 파일이 인식되어 실행되게 된다.

profile
나의 개발 기록 일지

0개의 댓글