다음을 통해 공유


계획 2단계: ASP.NET 설정 계획

키스 뉴먼과 로버트 맥머레이

2.1. 세션 상태 설정

클라이언트는 사이트를 방문할 때 일반적으로 페이지 간을 이동하며 방문하는 일부 페이지를 자주 변경합니다. 사용자가 웹 사이트 방문 중에 찾아보는 페이지와 수행하는 변경을 추적하려는 경우 세션 상태를 구성합니다.

응용 프로그램에 대해 세션 상태를 사용하도록 설정하면 사용자는 ASP.NET 응용 프로그램에서 웹 페이지를 처음 요청할 때 고유한 세션 ID를 받습니다. 세션 상태 데이터는 다음 방식 중 하나를 통해 서버에 저장됩니다.

  • In-process: 세션 상태는 ASP.NET 애플리케이션이 실행되는 작업자 프로세스에 저장됩니다.
  • 상태 서버: 세션 상태는 ASP.NET 애플리케이션이 실행되는 작업자 프로세스 외부에 저장됩니다.
  • SQL Server: 세션 상태는 SQL Server 데이터베이스에 저장됩니다.

참고

세션 상태 데이터에 대해 일반 상태가 아닌 사용자 지정 저장소를 구성할 수도 있습니다. 그러나 이 자습서에서는 해당 작업에 대해 다루지 않습니다. Visual Studio 11 프로젝트는 사용자 지정 저장소를 사용하여 SQL Server, SQL Compatc 및 SQL Azure를 지원합니다.

클라이언트에서 세션 상태 데이터를 쿠키에 저장할 수도 있습니다. 쿠키는 사용자 기본 설정 및 사용자 인증 정보와 같은 사용자 관련 정보를 저장하는 데 사용되는 데이터가 포함된 텍스트 파일입니다.

다음 섹션에서는 세션 상태 저장소 옵션에 대해 보다 자세히 설명합니다.

In-Process에 세션 상태 저장

In-Process 세션 상태 모드에서는 응용 프로그램이 실행되는 작업자 프로세스에 ASP.NET 응용 프로그램의 세션 상태 데이터가 저장됩니다. 이 모드는 IIS 8의 기본값입니다.

In-Process 세션 상태를 사용하는 경우 세션 상태 데이터에 가장 빠르게 액세스할 수 있다는 이점이 있습니다. 그러나 세션에 저장된 데이터가 많아지면 메모리도 더 많이 사용되므로 서버 성능이 저하될 수 있습니다.

In-Process 세션 상태를 구성하기 전에 세션 상태 데이터에 대해 작업자 프로세스를 재생하는 경우의 영향을 고려하세요. 작업자 프로세스가 재생되면 모든 세션 상태 데이터가 손실됩니다. ASP.NET 응용 프로그램에서 세션 상태 데이터를 유지해야 하며 데이터 액세스 속도가 1차적인 목표가 아니라면 out-of-process 세션 상태 모드를 사용하여 이 데이터를 저장하는 것이 좋습니다.

중요

In-Process 세션 상태를 적용하려면 Windows 상태 서비스(Aspnet_state.exe)가 실행 중이어야 합니다. 기본적으로 이 서비스는 Windows Server® 2012가 설치될 때 설치되며 수동 시작을 위해 구성됩니다. 시작 동작을 자동으로 변경하는 것이 좋습니다.

기본적으로 사용자가 20분 동안 ASP.NET 응용 프로그램에서 페이지를 요청하거나 새로 고치지 않은 경우 세션이 만료됩니다. 세션 개체는 웹 서버에서 메모리를 사용하므로 리소스를 절약하려면 제한 시간 값을 줄이는 것이 좋습니다.

중요: 사용자의 Session 개체에 저장된 정보가 시간 제한 기간 동안 웹 사이트에서 활성화되지 않은 경우 손실되므로 세션 제한 시간 값을 조정할 때는 주의해야 합니다.

In-Process 세션 상태 저장소를 사용하려는 경우 쿠키를 사용할지 여부도 결정합니다. 쿠키에 대한 자세한 내용은 세션 상태용 쿠키 모드를 참조하세요.

상태 서버를 사용하여 세션 상태 저장

상태 서버는 작업자 프로세스 외부에 있는 메모리에서 세션 상태 날짜를 유지 관리합니다. 이 구성을 사용하는 경우의 이점은 응용 프로그램 작업자 프로세스가 재생되어도 세션 상태가 유지된다는 것입니다. 중간 크기의 응용 프로그램에는 상태 서버를 사용하는 것이 좋습니다.

상태 서버는 Windows 상태 서비스(Aspnet_state.exe)에 따라 달라지며, 연결에서 세션 상태를 확인하기 위한 컴퓨터 키가 필요합니다.

상태 유지 관리 대상인 응용 프로그램이 포함된 것과 같은 웹 서버에서 상태 서버를 실행하는 경우 웹 가든 구성이 지원됩니다. 세션 상태 데이터를 보다 효율적으로 보호하려는 경우 세션 상태를 저장하는 별도의 서버가 포함된 웹 팜 구성을 사용하고 팜의 모든 서버에서 해당 구성을 공유할 수 있습니다. SQL Server를 사용하여 out-of-process 세션 상태를 유지 관리할 수도 있습니다.

중요: 프로세스 내 세션 상태가 적용되려면 Windows 상태 서비스(Aspnet_state.exe)가 실행 중이어야 합니다. 기본적으로 이 서비스는 Windows Server 2012가 설치될 때 설치되며 수동 시작을 위해 구성됩니다. 시작 동작은 자동으로 변경해야 합니다.

상태 서버를 사용하여 세션 상태를 저장하려는 경우 다음과 같은 디자인 관련 사항을 결정합니다.

  • 상태 서버의 연결 문자열 정의
  • 연결 시간이 초과될 때까지 기다릴 시간(초) 지정
  • 압축 사용 여부 결정
  • 쿠키에 세션 상태 데이터를 저장할지 여부 결정 쿠키에 대한 자세한 내용은 세션 상태용 쿠키 모드를 참조하세요.

SQL Server를 사용하여 세션 상태 저장

out-of-process 세션 상태의 유형 중 하나는 SQL Server를 사용하여 세션 상태 데이터를 저장합니다. 이 구성을 사용하는 경우 응용 프로그램 작업자 프로세스를 재생하거나 Windows 상태 서비스 또는 웹 서버의 작동이 중지되어도 세션 상태가 유지된다는 장점이 있습니다.

참고

이 설정은 SQL Azure를 지원하지 않습니다.

상태 유지 관리 대상인 응용 프로그램이 포함된 것과 같은 웹 서버에서 SQL Server를 실행하는 경우 웹 가든 구성이 지원되므로 웹 서버 확장성이 높아집니다. SQL Server를 다른 서버에서 실행할 때는 웹 팜 구성이 지원되므로 서버 그룹 간의 확장성이 크게 향상됩니다.

중요

out-of-process 세션 상태를 적용하려면 Windows 상태 서비스(Aspnet_state.exe)가 실행 중이어야 합니다. 기본적으로 이 서비스는 Windows Server 2012가 설치될 때 설치되며 수동 시작을 위해 구성됩니다. 시작 동작은 자동으로 변경해야 합니다.

중요

세션 상태용으로 SQL Server를 구성하기 전에 서버에서 InstallSqlState.sql 스크립트를 실행합니다. 기본적으로 이 스크립트는 에 %systemroot%\Microsoft.NET\Framework\V4.0.30319저장됩니다.

SQL Server 데이터베이스에 세션 상태를 저장하려는 경우 다음과 같은 디자인 관련 사항을 결정합니다.

  • 데이터베이스의 연결 문자열 정의
  • 연결 시간이 초과될 때까지 기다릴 시간(초) 지정
  • 다시 연결을 시도할 때까지 기다릴 시간(초) 지정
  • 사용자 지정 데이터베이스 사용 여부 결정
  • 압축 사용 여부 결정
  • 쿠키에 세션 상태 데이터를 저장할지 여부 결정 쿠키에 대한 자세한 내용은 세션 상태용 쿠키 모드를 참조하세요.

웹 서버에 연결하는 클라이언트의 세션 상태를 추적하는 방법 중 하나는 쿠키를 사용하는 것입니다. 쿠키를 사용하거나 사용하지 않도록 또는 연결에 사용되는 브라우저에 따라 달라지는 쿠키 동작을 선택하도록 웹 서버를 구성할 수 있습니다.

세션 쿠키는 세션 정보를 해당 세션의 클라이언트 정보와 연결합니다. 세션은 사용자가 사이트에 연결하는 기간입니다. 쿠키는 클라이언트와 웹 서버 간의 모든 요청과 함께 HTTP 헤더에 포함되어 전달됩니다.

쿠키를 사용하여 세션 상태를 추적하는 것은 쿠키를 사용하지 않는 다른 방법보다 효율적입니다. 쿠키에는 리디렉션이 필요하지 않기 때문입니다. 또한 사용자는 쿠키를 통해 웹 페이지 책갈피를 지정할 수 있으며 특정 사이트에서 다른 사이트를 방문했다가 원래 사이트로 돌아오는 경우 상태를 유지할 수 있습니다. 사용자 쿠키의 단점 중 하나는 사용자가 브라우저에서 쿠키를 사용하지 않도록 설정할 수 있다는 점입니다.

디바이스 프로필 쿠키 사용 모드를 사용하면 브라우저에서 쿠키를 지원하는 경우 브라우저에서 쿠키를 사용합니다. 그렇지 않으면 쿠키가 사용되지 않습니다. 장치 프로필이 쿠키를 지원하는 것으로 표시되면 사용자가 쿠키 지원을 사용하지 않도록 설정했는지 여부에 관계없이 쿠키가 사용됩니다.

중요

장치 프로필 사용 쿠키 모드를 사용할 때는 만료된 세션 ID가 다시 생성되도록 설정합니다. 이렇게 하면 웹 서버가 토큰을 만료시킨 후 다시 생성할 수 있으므로 잠재적 공격자가 쿠키를 캡처하여 웹 서버 콘텐츠 액세스 권한을 얻을 데 사용할 수 있는 시간이 줄어듭니다.

자동 검색 쿠키 모드에서는 모바일 장치의 프로필이 쿠키를 지원하면 해당 장치가 쿠키를 사용하며, 그렇지 않으면 쿠키가 사용되지 않습니다. 쿠키를 지원하는 것으로 알려진 데스크톱 브라우저의 경우 브라우저에서 쿠키를 지원하도록 설정되어 있으면 ASP.NET이 쿠키 사용을 시도합니다. 쿠키를 지원하지 않도록 설정되어 있으면 세션 상태는 URL에 저장됩니다.

중요

자동 검색 쿠키 모드를 사용할 때는 만료된 세션 ID가 다시 생성되도록 설정합니다. 이렇게 하면 웹 서버가 토큰을 만료시킨 후 다시 생성할 수 있으므로 잠재적 공격자가 쿠키를 캡처하여 웹 서버 콘텐츠 액세스 권한을 얻을 데 사용할 수 있는 시간이 줄어듭니다. 제한 시간 값은 기본값인 20분 미만으로 줄이는 것이 좋습니다.

쿠키를 사용하지 않고도 세션 상태를 구성할 수 있습니다. URI(Uniform Resource Identifier)를 사용하여 세션 상태를 처리할 때는 세션 ID가 URI 요청의 쿼리 문자열로 포함된 다음 URI가 원래 요청한 URL로 리디렉션됩니다. 세션 기간 동안에는 변경된 URI 요청이 사용되므로 쿠키는 필요하지 않습니다.

중요

URI를 사용할 때는 만료된 세션 ID가 다시 생성되도록 설정합니다. 이렇게 하면 웹 서버가 토큰을 만료시킨 후 다시 생성할 수 있으므로 잠재적 공격자가 쿠키를 캡처하여 웹 서버 콘텐츠 액세스 권한을 얻을 데 사용할 수 있는 시간이 줄어듭니다.

URI를 사용하여 세션 상태를 추적하면 브라우저 지원 문제 및 사용자가 쿠키를 사용하지 않도록 설정할 가능성과 같은 쿠키의 단점을 방지할 수 있습니다. 그러나 URI를 사용하는 경우 다음과 같은 단점이 있습니다.

  • 절대 URL을 사용하는 경우 세션 상태가 손실됩니다. 즉, 사용자가 다른 응용 프로그램으로 이동했다가 이전 응용 프로그램으로 돌아오면 해당 페이지에 사용자가 입력한 내용이 더 이상 남지 않습니다.
  • 세션 상태가 손실되므로 사용자가 웹 페이지 책갈피를 지정할 수 없습니다.

쿠키를 사용하여 세션 상태를 저장하려는 경우 다음과 같은 디자인 관련 사항을 결정합니다.

  • 쿠키 모드 선택: 자동 검색, 쿠키 사용, 장치 프로필 사용, URI 사용
  • URI를 사용하도록 선택한 경우가 아니면 쿠키의 이름 지정
  • URI를 사용하도록 선택한 경우가 아니면 쿠키의 시간이 초과될 때까지의 시간(분) 지정
  • 쿠키를 사용하도록 선택한 경우가 아니면 만료된 세션 ID를 다시 생성할지 여부 결정

2.2. 페이지 및 컨트롤 설정

ASP.NET 페이지에는 페이지 실행 시 ASP.NET가 인식 및 처리하는 추가 요소가 포함되어 있습니다. 또한 다시 사용할 수 있는 사용자 지정 컨트롤도 ASP.NET 페이지에 포함될 수 있습니다. 이러한 사용자 지정 컨트롤은 서버에서 처리됩니다. 따라서 서버 코드를 사용해 ASP.NET 웹 페이지 속성을 설정할 수 있습니다.

참고

이러한 설정은 ASP.NET Web Forms에만 적용되며 ASP.NET MVC 또는 ASP.NET 웹 페이지에는 적용되지 않습니다.

IIS 8을 사용하면 다음 ASP.NET 페이지 및 사용자 컨트롤 설정을 구성할 수 있습니다.

  • 동작 설정: 예를 들어 웹 페이지의 뷰 상태와 현재 페이지 요청이 종료될 때 포함된 서버 컨트롤의 보기 상태를 유지하는지 여부입니다.
  • 일반 설정: 예를 들어 모든 페이지에 포함된 네임스페이스입니다.
  • 컴파일 설정: 예를 들어 페이지가 컴파일되는지 해석되는지 여부입니다.
  • 서비스: 예를 들어 세션 상태를 사용할 수 있는지 여부입니다.

IIS 8은 ASP.NET 페이지 및 컨트롤에 대한 기본 설정을 제공하지만 필요에 따라 해당 설정을 변경할 수 있습니다. 예를 들어 사이트에 대해 마스터 페이지 파일을 설정하거나 보기 상태를 사용하도록 설정할 수 있습니다.

웹 사용자 지정 컨트롤은 서버에서 실행되며 사용자 인터페이스 및 기타 관련 기능을 다시 사용할 수 있는 패키지로 캡슐화하는 컴파일된 구성 요소입니다. IIS 8에서는 애플리케이션의 여러 페이지에서 사용할 수 있는 사용자 지정 컨트롤에 대한 태그 접두사 및 네임스페이스 매핑을 지정할 수 있습니다.

응용 프로그램의 여러 페이지에서 사용되는 사용자 지정 컨트롤에 대해 태그 접두사/네임스페이스 매핑을 지정하려면 사용자 지정 컨트롤을 추가합니다.

참고

구성 설정을 추가하면 로컬 수준 및 해당 설정을 상속하는 자식 수준에 설정이 추가됩니다.

ASP.NET 사용자 지정 컨트롤을 구성하려는 경우 구성할 각 컨트롤에 대해 다음 정보가 필요합니다.

  • 컨트롤의 태그 접두사 지정
  • 컨트롤의.NET 네임스페이스 지정
  • 컨트롤이 있는 어셈블리 지정

2.3. 애플리케이션 설정

Web.config 파일에 포함된 구성의 일부로 키/값 쌍을 저장하려는 경우 응용 프로그램 설정을 구성합니다. 응용 프로그램 설정을 사용하면 응용 프로그램에 대해 저장된 구성 데이터에 빠르고 쉽게 액세스할 수 있습니다.

사용자 지정 컨트롤을 관리하려는 경우 특정 구성 수준에 대한 모든 사용자 지정 컨트롤이 포함된 목록을 확인할 수 있습니다. 이 목록은 태그 접두사, 원본이나 어셈블리 또는 범위(로컬/상속)를 기준으로 정렬할 수 있습니다. 컨트롤을 범위별로 그룹화하여 현재 구성 수준에 적용되는 사용자 지정 컨트롤과 부모 수준에서 상속된 사용자 지정 컨트롤을 확인할 수도 있습니다.

응용 프로그램의 여러 페이지에서 사용되는 사용자 지정 컨트롤에 대해 태그 접두사/네임스페이스 매핑을 지정하려면 사용자 지정 컨트롤을 추가합니다.

참고

구성 설정을 추가하면 로컬 수준 및 해당 설정을 상속하는 자식 수준에 설정이 추가됩니다.

응용 프로그램 설정을 구성하려는 경우 구성할 각 설정에 대해 다음 정보가 필요합니다.

  1. 설정의 이름 지정
  2. 설정의 값 지정

2.4. .NET 컴파일 설정

응용 프로그램 코드가 사용자의 요청을 서비스하려면 먼저 ASP.NET이 코드를 하나 이상의 어셈블리로 컴파일해야 합니다. 어셈블리는 파일 이름 확장명이 .dll인 파일입니다. ASP.NET 코드가 컴파일되는 방법을 제어하려는 경우 IIS 8에서 .NET 컴파일 설정을 구성합니다.

IIS에서는 다음 .NET 컴파일 설정을 구성할 수 있습니다.

  • 일괄 처리할 수 있는 최대 파일 크기 및 일괄 처리 컴파일당 포함할 수 있는 최대 페이지 수와 같은 일괄 처리 설정
  • 응용 프로그램이 다시 시작되기 전에 리소스가 동적으로 컴파일되는 횟수와 같은 동작 설정
  • 동적 컴파일 파일에 사용되는 기본 프로그래밍 언어와 같은 일반 설정

2.5. .NET 세계화 설정

세계화는 응용 프로그램 코드를 국제화한 다음 다른 언어 및 문화권으로 응용 프로그램을 지역화하는 프로세스입니다. 국제화 프로세스를 수행하면 가능한 경우 항상 같은 응용 프로그램 코드베이스를 사용하여 응용 프로그램 콘텐츠를 원하는 로캘로 번역, 저장, 검색 및 표시할 수 있습니다. 로캘은 언어 및 문화권 환경의 조합입니다. 여기에는 날짜 형식, 시간, 통화, 전화 번호 등이 포함됩니다. 지역화는 가능한 경우 코드는 그대로 유지하면서 문화권에 따라 콘텐츠를 번역하고 서식을 지정하여 다른 로캘에 맞게 응용 프로그램을 조정하는 것입니다.

서버에서 모든 ASP.NET 응용 프로그램에 세계화 설정을 적용하려는 경우 웹 서버 수준에서 ASP.NET 응용 프로그램에 대해 해당 설정을 변경할 수 있습니다. 또한 사이트, 응용 프로그램, 디렉터리 및 파일의 ASP.NET 세계화 설정을 편집할 수도 있습니다.

IIS에서는 다음과 같은 세계화 설정을 구성할 수 있습니다.

  • UI 문화권 또는 UI 언어와 같은 문화권 설정
  • 응답 헤더의 Encoding과 같은 인코딩 설정

참고

구성 설정을 편집하면 로컬 수준 및 해당 설정을 상속하는 자식 수준에서 설정이 변경됩니다.