AZ-204 Certified: 6-Day Configure Web application settings

소개

App Service에서 앱 설정은 애플리케이션 코드에 환경 변수로 전달되는 변수입니다.

학습 목표

  1. 배포 슬롯에 바인딩되는 애플리케이션 설정을 만듭니다.
  2. 앱에 대한 SSL/TLS 인증서를 설치하는 옵션을 설명합니다.
  3. 앱에 대한 진단 로깅을 활성화하여 모니터링 및 디버깅을 지원합니다.
  4. 디렉터리 매핑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
  1. Linux 시스템의 경우 (:)이 허용되지 않는다.
  2. 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)
ServermyServerAddress
DatabasemyDatabase
Connection string component

연결 문자열은 보통 앱의 구성 파일에 저장되거나, 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

  1. 디렉터리 맵핑(Driectory Mapping)이란?

    디렉터리 맵핑은 File system에서 특정 경로(Path)나 디렉터리를 다른 경로나 디렉터리에 연결하는 것을 의미한다. 쉽게 말하면, 바로 가기를 사용자 정의로 만드는 것이다.

    장점
    1. 경로 단축: 짧고 간단한 경로로 맵핑하여 사용자가 쉽게 접근할 수 있음
    2. 리소스 공유 및 재배치: 다른 서버의 경로를 로컬 환경에서 짧고 간단하게 경로를 지정할 수 있음
    3. 앱 구성: 특정 URL을 파일 시스템의 디렉터리에 맵핑하여 요청을 처리할 수 있음
    4. 보안 강화: 실제 파일 경로를 숨기고, 사용자에게 가상의 경로만을 노출시킬 수 있음


    예)
    /home/usr/documents 라는 경로가 길어서 docs라는 링크 이름을 만들어서 사용할 수 있다.
    Tip. Linux의 경우 Symbolic link 또는 Soft link가 있다.

    디렉터리 맵핑을 사용하면 파일 시스템의 유연성을 증가, 파일 관리를 효율적이고 안전하게 구성할 수 있다.
    ↩︎
  2. 중첩된 JSON 구조란?

    JSON JavaScript Object Notation 데이터 형식에서 한 객체 안에 다른 객체나 배열이 포함되는 구조를 의미한다.

    예) addressphoneNumbers가 중첩된 객체

    {
      “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”
        }
      ]
    } ↩︎