스프링부트 환경 설정 파일(application.properties)에 외부 변수 설정하기

소개

스프링부트 환경 설정 파일인 application.properties 파일의 내용을 외부에서 변경하는 방법을 살펴봅니다.

GitHub에 공개된 소스에는 실제 서버에 대한 정보 또는 데이터베이스 연결 문자열을 남길 수 없습니다.

이러한 경우에는 기본은 로컬 데이터베이스를 바라보게 설정 후 Azure Web App에 업로드한 후에는 해당 서버의 Configuration 영역에서 지정한 데이터베이스 연결 문자열로 덮어쓰기가 가능하도록 설정할 수 있습니다.

 

환경 변수에 연결 문자열 저장하기

로컬에서 Git Ignore된 파일에 데이터베이스 연결 문자열 저장하려면, .vscode 폴더에 launch.json 파일을 두고 다음과 같이 "env" 섹션을 구성합니다.

여기서 FOO 이름으로 만든 정보는 application.properties에서 FOO 또는 CUSTOMCONNSTR_FOO로 읽어갈 수 있습니다. 

<그림> launch.json 파일에 env 환경 변수 값 설정

2021-09-19_13-25-45.png

</그림> 

<코드> /.vscode/launch.json 

{
    "configurations": [
        {
            "type": "java",
            "name": "Spring Boot-JavaCampusApplication<java-campus>",
            "request": "launch",
            "cwd": "${workspaceFolder}",
            "console": "internalConsole",
            "mainClass": "com.hawaso.javacampus.JavaCampusApplication",
            "projectName": "java-campus",
            "args": "",

            "env": {
                "DB_URL": "jdbc:sqlserver://JavaCampus.database.windows.net;databaseName=JavaCampus",
                "USER_NAME": "JavaCampus",
                "PWD": "",
                "FOO": "BAR"
            }

        }
    ]
}

</코드>

 

applicatoin.properties 파일에 외부 변수의 값 설정하기

외부(Azure Web App의 Configuration)에 설정된 값을 스프링 부트 프로젝트의 appliation.properties 파일에 다시 정의할 때에는 ${변수} 형태를 사용합니다.

특히 Azure Web App의 Configuration에서 지정한 Connection String 같은 경우에는 앞에 CUSTOMCONNSTR_ 접두어를 붙어야 합니다. 이 부분에 대한 더 많은 정보는 다음 경로의 아티클도 참고하세요. 

Configure a Java app for Azure App Service 

다음 그림은 FOO 이름의 외부 변수를 application.properties 파일에서 사용하는 모양입니다. 이 때, 외부 변수가 정의되어 있지 않으면 #{null} 리터럴을 추가해서 null 값으로 초기화할 수 있습니다. 

<그림> application.properties 파일에 외부 변수 값 설정

2021-09-19_13-29-19.png

</그림> 

<코드>

foo=${CUSTOMCONNSTR_FOO:#{null}}

</코드>

 

@Value Annotation으로 응용 프로그램 변수 사용하기

스프링 부트 프로젝트에 있는 application.properties 파일에서 지정한 키와 값을 프로젝트 내에서 사용하려한다면 @Value 애너테이션으로 특정 필드에 빈으로 주입해서 사용이 가능합니다.

다음 코드 샘플처럼 foo 필드에 foo 이름의 환경 변수 키에 해당하는 값을 읽어서 이를 테스트 REST API에서 출력해 본 내용입니다. 

2021-09-19_13-29-54.png

 

application.properties 파일에 foo=BAR 형태가 저장되어 있다면 "BAR"가 출력됩니다. 

2021-09-19_13-30-56.png

 

만약, application.properties 파일에 foo 키 값에 해당하는 내용이 없거나, 외부 파일에서도 따로 지정하지 않았다면 null이 출력됩니다. 

2021-09-19_13-55-27.png

 

만약, Azure Web App의 Configuration 영역의 Connection String 항목에 foo 이름으로 "Azure Web App"을 기록해 놓으면 그 값을 읽어 출력합니다. 

2021-09-19_14-14-23.png

 

마무리

GitHub와 같은 소스 저장소에 공개된 스프링 부트 프로젝트의 applicatoin.properties 파일에 실제 데이터베이스 서버의 URL 및 아이디, 암호가 저장되어 푸시되면 큰 일이 발생됩니다.

이러한 경우를 방지하기 위해서, 공개 소스에는 가짜 데이터 또는 공개해도 무관한 로컬 데이터베이스의 정보를 입력해 두고,

실제 서버에 게시(배포)했을 때에는 실 서버의 데이터베이스 연결 문자열을 지정하도록 설정하면 됩니다.

자바캠퍼스 사이트의 GitHub 소스에는 테스트 DB 정보가 들어 있고 실제 업로드된 후의 데이터베이스 연결 문자열은 Azure Web App에서 지정한 값으로 바뀌어 실행되도록 설정되어 있습니다.

이번 아티클에서는 필자가 평소 운영하는 방식 중 일부분을 강좌로 표현해 보았습니다. 

 

 

 

 

 

 

 

Comments


Comments are closed