Microsoft 의 Cloud Service 인 Azure 를 회사에서 사용하다보니, Web App 을 배포하는 경우가 많습니다.
대부분의 API 프로젝트가 Spring Boot 기반으로 구현하다보니, Database connection string 와 다양한 환경변수값이 개발, 테스트, 운영에서 필요하게 되어 이를 해결하는 방법을 검색해 보았습니다.
Microsoft 에서 내용을 한글로 잘 번역해 놓아서 그대로 사용하겠습니다.
Application settings (앱 설정)
이 섹션에는 시작 시 웹앱이 포드하는 이름/값 쌍이 나와 있습니다.
- .NET 앱의 경우, 이 설정은 런타임 시 .NET 구성 AppSettings 으로 주입되어 기존 설정을 재정의합니다.
- PHP, Python, Java 및 Node 응용 프로그램에서는 런타임에 환경 변수로 이러한 설정에 엑세스 할 수 있습니다. 각 앱 설정에 대해 두개의 환경 변수가 만들어 집니다. 하나는 앱 설정 항목에 의해 이름이 지정되고, 다른 하나는 이름에 APPSETTINGS_ 접두사가 붙습니다. 둘다 같은 값을 포함합니다.
일단 마소의 설명입니다.
저는 Spring Boot 가 Java 기반으므로 환경변수를 가져오기 위해서는 System.getenv() 라는 메소드를 사용하면 편리하게 환경변수값을 가져올 수 있습니다.
예를 들어 APP_SERVICE_HINT 라는 Key 에 TEST_APP 이라는 문구를 넣어 놓았다고 하면,
String value = System.getenv("APP_SERVICE_HINT"); 내지는 String value = System.getenv("APPSETTINGS_APP_SERVICE_HINT"); 2가지 Key 를 모두 사용할 수 있다는 이야기입니다. 물론 여기서 가져온 value 값은 TEST_APP 이라는 문자열이겠지요.
앱 설정 이외에 Database Connection String 을 위한 별도의 Key, Value 공간을 제공하는데, 앱 설정과 동일하고, 설정하는 Database 의 종류에 따라서 접두사가 여러개 제공됩니다.
Connection string (연결 문자열)
연결된 리소스의 연결 문자열입니다.
.NET 앱의 경우, 이 연결 문자열이 런타임 시 .NET 구성 connectionStrings 설정에 주입되어 키가 연결된 데이터베이스 이름과 같은 기존 항목에 재정의합니다.
PHP, Python, Java 및 Node 응용 프로그램에서는 런타임에 이러한 설정을 환경 변수로 사용할 수 있으며, 환경 변수 앞에는 연결 형식이 옵니다. 환경 변수 접두사는 다음과 같습니다.
- SQL Server : SQLCONNSTR_
- MySQL : MYSQLCONNSTR_
- SQL Database : SQLAZURECONNSTR_
- 사용자지정 : CUSTOMCONNSTR_
예를 들어 MySQL 연결 문자열 이름이 connectionString1 로 지정된 경우 환경 변수 MYSQLCONNSTR_connectionString1 을 통하여 엑세스될 수 있습니다.
여기까지 마소의 설명입니다.
설명대로 각 연결 문자열을 설정하는 부분에는 Database 를 선택하는 추가적인 부분이 있는데, 이를 선택하면 해당 DB 에 대한 Connection string 을 사용할 수 있습니다. 위에 선언된 대로 SQLCONNSTR_ 등의 Prefix 와 함께 작성합니다.
앱상에서 호출하는 방식은 위와 마찬가지로 String value = System.getenv("MYSQLCONNSTR_connectionString1"); 으로 작성합니다.
참조