소개
App Service에서 앱 설정은 애플리케이션 코드에 환경 변수로 전달되는 변수입니다.
학습 목표
- 배포 슬롯에 바인딩되는 애플리케이션 설정을 만듭니다.
- 앱에 대한 SSL/TLS 인증서를 설치하는 옵션을 설명합니다.
- 앱에 대한 진단 로깅을 활성화하여 모니터링 및 디버깅을 지원합니다.
- 디렉터리 매핑1에 가상 앱을 만듭니다.
앱 설정이란?
앱 설정은 코드 내에서 사용할 수 있는 환경 변수로 전달되는 설정이다.
이 앱 설정을 통해서 앱의 동작을 구성하고 중요한 정보를 안전하게 관리할 수 있다.
예) Database Connection string, API Key 등
Linux 또는 사용자 지정 컨테이너의 경우
Linux Application 및 사용자 지정 컨테이너의 경우, App Service가 실행할 때 '--env'
플래그(Flag)를 사용하여 앱 설정을 환경 변수로 전달한다. 왜냐하면, 앱이 실행되는 동안 필요한 데이터를 컨테이너 내부에서 접근할 수 있도록 하기 위해서이다.
ASP.NET 및 ASP.NET Core의 경우
.NET의 경우 앱 설정은 로컬 개발 환경에서 사용하는 ‘Web.config’ 또는 ‘appsettings.json’ 파일의 <appSettings> 섹션에 정의된 설정과 유사한 역할을 한다.
Tip. 중요한 차이점: App Service에서 지정한 앱 설정이 Web.config 또는 Appsettings.josn 파일의 설정을 재정의 한다.
설정 파일이 재정의 되면 좋은 이유 3가지
1. 환경 분리 가능: 로컬 개발 환경에서는 ‘Web.config’ 또는 ‘appsettings.json’에 정의된 설정을 사용하고, Azure에 배포 된 앱은 프로덕션 설정(예: Azure MySQL Database 의 연결 정보)을 사용하게 분리할 수 있다.
2. 보안 유지: 프로덕션 환경에 필요한 비밀(Secret) 정보는 App Service 앱 설정에서 관리되며 Azure 보안 기준에 따라 보호된다.
3. 암호화된(Encrypted) 저장: 앱 설정은 저장될 때 항상 암호화된다. 즉, Azure Datacenter내에서 안전하게 보관된다.
Configuration 설정 화면
설정 추가 및 편집
앱 설정을 추가하려면, Add/Edit application setting 을 선택하고 추가하면 된다.
Tip. 작업을 마친 후 업데이트를 선택한 뒤 다시 저장할 필요가 있다.
주의 사항
설정 값이 중첩된 JSON 구조2로 되어 있는 경우를 대비하여, App Service의 특정 형식을 따라야 한다.
모든 콜론(:)을 밑줄 두 개(__)로 대체
기존의 중첩된 JSON 설정 구조를 App Service 형식에 맞게 쉽게 변환 가능
Before: ApplicationInsights:InstrumentationKey
After: ApplicationInsights__InstrumentationKey
- Linux 시스템의 경우 (
:
)이 허용되지 않는다. - ASP.NET Core의 경우 밑줄 두 개 (
__
)를 중첩 구분자로 인식되기 때문이다.
연결 문자열(Connection string)이란?
앱과 데이터 베이스 또는 다른 네트워크 서비스 사이의 연결(Connection)을 설정하는데 사용되는 문자열이다. 이 문자열의 구조는 사용하는 서비스의 유형에 따라 다르다.
Tip. 문자열 속에는 앱에 필요한 DB 서버의 위치, User name, Password 등의 필요한 정보가 포함된다.
SQL Server connection string 예시
Server=myServerAddress;Database=myDataBase;User Id=myUsername;Password=myPassword;
위의 연결 문자열은 앱에서 SQL Server에 연결하기 위해서 사용되는 예시이다. 여기서 Key
=Value
구조에서 ;
가 구분자로 사용되는 것을 볼 수 있다.
키(Key) | 값(Value) |
Server | myServerAddress |
Database | myDatabase |
연결 문자열은 보통 앱의 구성 파일에 저장되거나, App Service의 앱 설정(Configure settings)에 저장된다. 주의할 점은 연결 문자열에 비밀번호와 같은 중요한 정보는 암호화되어 저장해야 한다는 점이다.
Tip. .NET
이외의 언어에 대한 앱 설정 대신 연결 문자열을 사용하려는 경우가 있습니다. 특정 Azure 데이터베이스 유형은 App Service 앱에서 데이터베이스에 대한 연결 문자열을 구성하는 경우에만 앱과 함께 백업됩니다.
JSON 형식의 연결 문자열
[
{
"name": "<key-1>",
"value": "<value-1>",
"slotSetting": false
},
{
"name": "<key-2>",
"value": "<value-2>",
"slotSetting": false
},
...
]
Learning Note
- 디렉터리 맵핑(Driectory Mapping)이란?
디렉터리 맵핑은File system
에서 특정 경로(Path)나 디렉터리를 다른 경로나 디렉터리에 연결하는 것을 의미한다. 쉽게 말하면, 바로 가기를 사용자 정의로 만드는 것이다.
장점
1. 경로 단축: 짧고 간단한 경로로 맵핑하여 사용자가 쉽게 접근할 수 있음
2. 리소스 공유 및 재배치: 다른 서버의 경로를 로컬 환경에서 짧고 간단하게 경로를 지정할 수 있음
3. 앱 구성: 특정 URL을 파일 시스템의 디렉터리에 맵핑하여 요청을 처리할 수 있음
4. 보안 강화: 실제 파일 경로를 숨기고, 사용자에게 가상의 경로만을 노출시킬 수 있음
예)
/home/usr/documents 라는 경로가 길어서docs
라는 링크 이름을 만들어서 사용할 수 있다.
Tip. Linux의 경우 Symbolic link 또는 Soft link가 있다.
디렉터리 맵핑을 사용하면 파일 시스템의 유연성을 증가, 파일 관리를 효율적이고 안전하게 구성할 수 있다.
↩︎ - 중첩된 JSON 구조란?
JSONJavaScript Object Notation
데이터 형식에서 한 객체 안에 다른 객체나 배열이 포함되는 구조를 의미한다.
예)address
및phoneNumbers
가 중첩된 객체
{
“name”: “John Doe”,
“age”: 30,
“address”: {
“street”: “123 Main St”,
“city”: “New York”,
“zipCode”: “10001”
},
“phoneNumbers”: [
{
“type”: “home”,
“number”: “212-555-1234”
},
{
“type”: “office”,
“number”: “646-555-4567”
}
]
} ↩︎