다음을 통해 공유


ASP.NET 상태 관리 권장 사항

업데이트: 2007년 11월

상태 관리는 동일한 페이지나 서로 다른 페이지에 대한 여러 요청 사이에 상태 및 페이지 정보를 유지 관리하는 프로세스입니다. 모든 HTTP 기반 기술과 마찬가지로 Web Forms 페이지도 상태 비저장 특성을 가지므로, 일련의 요청이 모두 동일한 클라이언트에서 보낸 것인지의 여부나 심지어는 단일 브라우저 인스턴스에서 페이지나 사이트를 계속 사용 중인지의 여부도 자동으로 알 수 없습니다. 또한 페이지는 서버로의 각 라운드트립마다 소멸되었다가 다시 생성됩니다. 따라서 페이지 정보는 단일 페이지의 수명 주기가 끝나면 사라집니다. Web Forms 페이지의 주기와 서버 라운드트립에 대한 자세한 내용은 ASP.NET 페이지 수명 주기 개요를 참조하십시오.

ASP.NET은 서버 라운드트립 간에 상태를 유지할 수 있는 여러 가지 방법을 제공합니다. 이러한 옵션은 응용 프로그램에 따라 다르게 선택되어야 하며 다음과 같은 기준을 따라야 합니다.

  • 저장할 정보의 용량이 어느 정도인가?

  • 클라이언트에서 영구 쿠키를 사용할 것인가 아니면 메모리 내의 쿠키를 사용할 것인가?

  • 클라이언트와 서버 중 어디에 정보를 저장할 것인가?

  • 중요한 정보인가?

  • 어떤 종류의 응용 프로그램 성능 및 대역폭 조건을 갖고 있는가?

  • 대상 브라우저 및 장치의 성능은 어떠한가?

  • 사용자별 정보를 저장해야 하는가?

  • 정보를 저장하는 시간은 어느 정도인가?

  • 웹 팜(다중 서버), 웹 가든(단일 시스템의 다중 프로세스) 또는 단일 프로세스 중 무엇을 사용하여 응용 프로그램을 처리하는가?

클라이언트측 상태 관리 옵션

클라이언트측 옵션을 사용하여 페이지 정보를 저장하는 경우에는 서버 리소스를 사용하지 않습니다. 이러한 옵션은 일반적으로 보안 기능은 최소화되었으나 서버 리소스에 대한 요구가 적기 때문에 서버의 수행 속도가 빠릅니다. 그러나 정보를 저장하기 위해 클라이언트로 보내야 하므로 이러한 방법으로 저장할 수 있는 정보의 양에는 제한이 있습니다.

다음은 ASP.NET에서 지원하는 클라이언트측 상태 관리 옵션입니다.

  • 뷰 상태

  • 컨트롤 상태

  • 숨겨진 필드

  • 쿠키

  • 쿼리 문자열

뷰 상태

Web Forms 페이지는 동일한 페이지에 대한 여러 요청 사이에 값을 자동으로 유지하기 위한 기본 제공 구조로서 ViewState 속성을 제공합니다. 뷰 상태는 페이지에서 숨겨진 필드로 유지됩니다. 자세한 내용은 ASP.NET 상태 관리 개요를 참조하십시오.

뷰 상태를 사용하면 페이지를 원래 위치에 다시 게시할 때 라운드트립 간에 고유의 페이지 관련 값을 저장할 수 있습니다. 예를 들어 응용 프로그램이 사용자별 정보(페이지에서 사용되지만 컨트롤의 일부일 필요는 없는 정보)를 유지하는 경우 이를 뷰 상태에 저장할 수 있습니다.

뷰 상태를 사용할 때의 장점

  • 서버 리소스 불필요  뷰 상태는 페이지 코드 내의 구조에 포함됩니다.

  • 구현의 용이성   뷰 상태에서는 사용자 지정 프로그래밍을 사용할 필요가 없습니다. 뷰 상태는 컨트롤의 상태 데이터를 유지 관리하기 위해 기본적으로 설정됩니다.

  • 향상된 보안 기능  뷰 상태의 값은 숨겨진 필드를 사용하는 것보다 뛰어난 보안을 제공하는 유니코드 구현을 위해 해시, 압축 및 인코딩됩니다.

뷰 상태를 사용할 때의 단점

  • 성능 고려 사항   뷰 상태는 페이지에 자체적으로 저장되므로 큰 값을 저장하면 사용자가 페이지를 표시하고 게시할 때 속도가 느려질 수 있습니다. 특히 이 문제는 대역폭이 자주 제한되는 모바일 장치와 관련됩니다.

  • 장치 제한 사항  모바일 장치에는 큰 용량의 뷰 상태 데이터를 저장하기 위한 메모리 용량이 부족할 수 있습니다.

  • **잠재적 보안 위험   **뷰 상태는 페이지의 하나 이상의 숨겨진 필드에 저장됩니다. 뷰 상태에는 데이터가 해시된 형태로 저장되지만 여전히 훼손될 수 있습니다. 페이지 출력의 소스를 직접 열면 숨겨진 필드에 포함된 정보를 볼 수 있으므로 보안 문제가 발생할 수 있습니다. 자세한 내용은 ASP.NET 웹 응용 프로그램 보안웹 응용 프로그램의 기본 보안에 대한 유용한 정보를 참조하십시오.

컨트롤 상태

ASP.NET 페이지 프레임워크에서는 서버 트립 간 사용자 지정 컨트롤 데이터를 저장하기 위한 방법으로 ControlState 속성을 제공합니다. 예를 들어 여러 탭에 서로 다른 정보를 표시하는 사용자 지정 컨트롤이 있는 경우 해당 컨트롤이 예상대로 작동되도록 하려면 라운드트립 간에 어떤 탭이 선택되었는지 컨트롤에서 알아야 합니다. 이를 위해 뷰 상태를 사용할 수도 있지만, 이렇게 하면 개발자가 페이지 수준에서 뷰 상태를 해제하여 실제로 해당 컨트롤을 차단할 수 있습니다. 뷰 상태와는 달리 컨트롤 상태는 해제될 수 없기 때문에 컨트롤 상태로 데이터를 저장하는 것이 더 안정적입니다.

컨트롤 상태를 사용할 때의 장점

  • 서버 리소스 불필요   컨트롤 상태는 기본적으로 페이지의 숨겨진 필드에 저장됩니다.

  • 안정성   컨트롤 상태는 뷰 상태와 같이 해제될 수 없기 때문에 컨트롤의 상태를 관리하는 데 더 안정적인 방법입니다.

  • 다양성   사용자 지정 어댑터를 작성하여 컨트롤 상태 데이터의 저장 방법 및 위치를 제어할 수 있습니다.

컨트롤 상태를 사용할 때의 단점

  • 일부 프로그래밍 필요   ASP.NET 페이지 프레임워크에서 컨트롤 상태에 대한 기초를 제공하지만, 컨트롤 상태는 상태 지속을 위한 사용자 지정 방식의 메커니즘입니다. 컨트롤 상태를 완전하게 활용하기 위해서는 컨트롤 상태를 저장하고 로드하는 코드를 작성해야 합니다.

숨겨진 필드

페이지의 숨겨진 필드에 페이지 관련 정보를 저장하여 페이지 상태를 유지할 수 있습니다. 숨겨진 필드에 대한 자세한 내용은 ASP.NET 상태 관리 권장 사항을 참조하십시오.

숨겨진 필드를 사용할 경우에는 클라이언트에서 자주 변경되는 소량의 데이터만 저장하는 것이 가장 좋습니다.

참고:

숨겨진 필드를 사용하려면 페이지 URL(HTTP GET 메서드)을 통해 페이지를 요청하는 것이 아니라 HTTP POST 메서드를 사용하여 페이지를 서버로 전송해야 합니다.

숨겨진 필드를 사용할 때의 장점

  • 서버 리소스 불필요   숨겨진 필드는 페이지에 저장되고 페이지에서 정보를 읽습니다.

  • 폭넓은 지원   거의 모든 브라우저와 클라이언트 장치에서 숨겨진 필드가 있는 폼을 지원합니다.

  • 구현의 용이성   숨겨진 필드는 복잡한 프로그래밍 논리가 필요하지 않은 표준 HTML 컨트롤입니다.

숨겨진 필드를 사용할 때의 단점

  • 잠재적 보안 위험  숨겨진 필드는 무단으로 변경하기 쉽습니다. 페이지 출력의 소스를 직접 열면 숨겨진 필드에 포함된 정보를 볼 수 있으므로 보안 문제가 발생할 수 있습니다. 숨겨진 필드의 내용을 수동으로 암호화하고 해독할 수 있지만 이렇게 하기 위해서는 추가 코딩과 오버헤드가 필요합니다. 보안이 중요한 경우 중요한 정보를 클라이언트로 전송할 수 없도록 서버 기반 상태 메커니즘을 사용하십시오. 자세한 내용은 ASP.NET 웹 응용 프로그램 보안웹 응용 프로그램의 기본 보안에 대한 유용한 정보를 참조하십시오.

  • 간단한 저장소 아키텍처  숨겨진 필드는 다양한 데이터 형식을 지원하지 않습니다. 숨겨진 필드는 정보를 저장할 수 있는 문자열 값 필드를 하나만 제공합니다. 여러 개의 값을 저장하려면 구분 기호로 분리된 문자열과 이 문자열을 구문 분석하는 코드를 구현해야 합니다. 수동으로 다양한 데이터 형식을 숨겨진 필드에 serialize하고 숨겨진 필드에서 다양한 데이터 형식을 de-serialize할 수 있습니다. 하지만 이렇게 하려면 추가 코드가 필요합니다. 클라이언트에 다양한 데이터 형식을 저장해야 하는 경우에는 숨겨진 필드 대신 뷰 상태를 사용하십시오. 뷰 상태에서는 serialization이 기본 제공되며 데이터가 숨겨진 필드에 저장됩니다.

  • 성능 고려 사항   숨겨진 필드는 페이지에 자체적으로 저장되므로 큰 값을 저장하면 사용자가 페이지를 표시하고 게시할 때 속도가 느려질 수 있습니다.

  • 저장소 제한 사항  숨겨진 필드의 데이터 양이 매우 커지면 일부 프록시 및 방화벽에 따라 이러한 데이터가 포함된 페이지에 대한 액세스가 차단됩니다. 방화벽 및 프록시 구현에 따라 최대 데이터 양이 다르기 때문에 숨겨진 필드가 커질 경우 문제가 불규칙하게 발생할 수 있습니다. 여러 데이터 항목을 저장할 경우 다음 중 하나를 수행하십시오.

    • 각 항목을 별도의 숨겨진 필드에 둡니다.

    • 뷰 상태 청크가 설정된 뷰 상태를 사용하여 여러 숨겨진 필드로 데이터를 자동으로 구분합니다.

    • 클라이언트에 데이터를 저장하는 대신 데이터를 서버에 계속 둡니다. 클라이언트에 데이터를 많이 보낼수록 브라우저가 다운로드하거나 보내야 하는 데이터가 늘어나기 때문에 응용 프로그램의 응답 시간이 눈에 띄게 느려집니다.

쿠키

쿠키는 자주 변경되는 소량의 정보를 클라이언트에 저장하는 데 유용합니다. 이 정보는 요청과 함께 서버로 전송됩니다. 쿠키 작성 및 읽기에 대한 자세한 내용은 ASP.NET 쿠키 개요를 참조하십시오.

쿠키를 사용할 때의 장점

  • 만료 시기 구성 규칙  쿠키는 브라우저 세션이 종료될 때 만료될 수도 있고 클라이언트의 만료 규칙에 따라 클라이언트 컴퓨터에 무기한 보관될 수도 있습니다.

  • 서버 리소스 불필요  쿠키는 클라이언트에 저장되며 게시된 후 서버에서 읽습니다.

  • 단순성   쿠키는 단순한 키-값 쌍으로 구성된 간단한 텍스트 기반 구조입니다.

  • 데이터 지속성  클라이언트의 쿠키 만료 프로세스 및 사용자 개입에 따라 클라이언트 컴퓨터의 쿠키 보존 기간이 결정되지만 일반적으로 쿠키는 클라이언트에 보관되는 데이터 중 가장 오래 보관됩니다.

쿠키를 사용할 때의 단점

  • 크기 제한  대부분의 브라우저에서는 쿠키 크기를 4096바이트로 제한하고 있으나 새로운 브라우저 및 클라이언트 장치 버전의 경우에는 8192바이트의 쿠키를 지원하는 추세입니다.

  • 사용자에 의한 쿠키 거부   일부 사용자는 브라우저나 클라이언트 장치에서 쿠키 수신 기능을 사용하지 않으므로 이 기능이 제한됩니다.

  • 잠재적 보안 위험  쿠키는 손상될 가능성이 높습니다. 사용자가 컴퓨터에서 쿠키를 조작할 수 있기 때문에 잠재적으로 보안 위험을 일으키거나 쿠키를 사용하는 응용 프로그램에 오류가 발생할 수 있습니다. 또한 쿠키를 클라이언트로 보낸 도메인에서만 쿠키에 액세스할 수 있더라도, 해커들은 이전부터 사용자의 컴퓨터에 있는 다른 도메인에서 쿠키를 액세스하는 방법을 찾아내어 악용하고 있습니다. 쿠키를 수동으로 암호화 및 해독할 수 있지만 이를 위해서는 추가 코딩이 필요하며 암호화 및 해독을 위한 시간이 필요하기 때문에 응용 프로그램 성능에 영향을 줄 수 있습니다. 자세한 내용은 ASP.NET 웹 응용 프로그램 보안웹 응용 프로그램의 기본 보안에 대한 유용한 정보를 참조하십시오.

    참고:

    쿠키는 개별화를 위해 자주 사용되며, 이 경우 알려진 사용자에 맞게 내용이 사용자 지정됩니다. 대부분의 경우 인증 보다는 식별이 더 중요한 문제입니다. 그래서 일반적으로는 사용자 이름, 계정 이름 또는 고유 사용자 ID(예: GUID)를 쿠키에 저장하고 사용자의 개별적인 사이트 인프라 액세스를 위해 쿠키를 사용하는 방식으로 식별에 사용된 쿠키를 보호합니다.

쿼리 문자열

쿼리 문자열은 페이지의 URL 끝부분에 추가되는 정보입니다. 자세한 내용은 ASP.NET 상태 관리 개요를 참조하십시오.

쿼리 문자열을 사용하면 URL을 통해 사용자 페이지나 다른 페이지에 데이터를 다시 전송할 수 있습니다. 쿼리 문자열은 일부 상태 정보를 유지하는 단순하지만 제한적인 방법을 제공합니다. 쿼리 문자열은 제품 번호를 한 페이지에서 다른 페이지로 보내어 처리하는 경우처럼 정보를 한 페이지에서 다른 페이지로 전달하는 간편한 방법입니다.

쿼리 문자열을 사용할 때의 장점

  • 서버 리소스 불필요  쿼리 문자열은 특정 URL에 대한 HTTP 요청에 포함됩니다.

  • 폭넓은 지원  대부분의 브라우저와 클라이언트 장치에서 쿼리 문자열을 사용하여 값을 전달할 수 있습니다.

  • 구현의 용이성  ASP.NET은 HttpRequest 개체의 Params 속성을 사용하여 쿼리 문자열을 읽는 메서드를 비롯한 모든 쿼리 문자열 메서드를 지원합니다.

쿼리 문자열을 사용할 때의 단점

  • 잠재적 보안 위험   쿼리 문자열의 정보는 브라우저 사용자 인터페이스를 통해 사용자가 직접 볼 수 있습니다. 사용자가 URL을 즐겨찾기에 추가하거나 다른 사용자에 전송하여 이와 함께 쿼리 문자열의 정보를 전달할 수 있습니다. 쿼리 문자열에 중요한 정보가 포함된 경우 쿼리 문자열 대신 POST를 사용하는 폼의 숨겨진 필드를 사용하십시오. 자세한 내용은 ASP.NET 웹 응용 프로그램 보안웹 응용 프로그램의 기본 보안에 대한 유용한 정보를 참조하십시오.

  • 용량 제한  일부 브라우저 및 클라이언트 장치에서 URL 길이를 2083문자로 제한합니다.

상태 관리를 위한 클라이언트측 방법 요약

다음 표에서는 ASP.NET에서 사용할 수 있는 클라이언트측 상태 관리 옵션과 각 옵션을 사용할 때의 권장 사항에 대해 설명합니다.

상태 관리 옵션

권장 사용법

뷰 상태

원래 위치에 다시 게시될 페이지를 위해 소량의 정보를 저장해야 하는 경우에 사용합니다. ViewState 속성을 사용하면 기본 보안 기능이 제공됩니다.

컨트롤 상태

서버에 대한 라운드트립 사이에 컨트롤에 대한 소량의 상태 정보를 저장해야 할 경우에 사용합니다.

숨겨진 필드

원래 위치에 다시 게시되거나 다른 페이지에 게시될 페이지를 위한 소량의 정보를 저장해야 하며 보안이 중요하지 않은 경우에 사용합니다.

참고:
서버로 전송되는 페이지에만 숨겨진 필드를 사용할 수 있습니다.

쿠키

클라이언트에 소량의 정보를 저장해야 하며 보안이 중요하지 않은 경우에 사용합니다.

쿼리 문자열

한 페이지에서 다른 페이지로 소량의 정보를 전송하고 보안이 중요하지 않은 경우에 사용합니다.

참고:
동일한 페이지 또는 링크를 통해 다른 페이지를 요청하는 경우에만 쿼리 문자열을 사용할 수 있습니다.

서버측 상태 관리 옵션

페이지 정보를 저장하기 위한 서버측 옵션은 클라이언트측 옵션에 비해 보안은 뛰어나지만 웹 서버 리소스를 더 많이 사용할 수 있으므로 정보 저장소가 큰 경우에는 확장성 문제가 발생할 수 있습니다. ASP.NET에서는 서버측 상태 관리를 구현하기 위한 여러 가지 옵션을 제공합니다. 자세한 내용은 ASP.NET 상태 관리 개요를 참조하십시오.

다음은 ASP.NET에서 제공되는 서버측 상태 관리 옵션입니다.

  • 응용 프로그램 상태

  • 세션 상태

  • 프로필 속성

  • 데이터베이스 지원

응용 프로그램 상태

ASP.NET에서는 전체 응용 프로그램에서 볼 수 있는 전역 응용 프로그램 관련 정보를 저장하기 위해 HttpApplicationState 클래스를 통해 응용 프로그램 상태를 제공합니다. 응용 프로그램 상태 변수는 ASP.NET 응용 프로그램을 위한 효과적인 전역 변수입니다. 자세한 내용은 ASP.NET 응용 프로그램 상태 개요를 참조하십시오.

응용 프로그램의 값을 응용 프로그램 상태에 저장할 수 있습니다. 그런 다음에는 이 값이 서버에 의해 관리됩니다. 자세한 내용은 ASP.NET 상태 관리 개요를 참조하십시오.

여러 세션에서 공유되고 자주 변경되지 않는 데이터는 응용 프로그램 상태 변수에 삽입하기에 가장 적합한 데이터 형식입니다.

응용 프로그램 상태를 사용할 때의 장점

  • 구현의 용이성   응용 프로그램 상태 기능은 사용이 간편하고 ASP 개발자에게 친숙하며 다른 .NET Framework 클래스와도 일관성이 있습니다.

  • **응용 프로그램 범위   **응용 프로그램 상태는 응용 프로그램의 모든 페이지에서 액세스할 수 있으므로 응용 프로그램 상태에 정보를 저장한다는 것은 예를 들어, 세션 상태나 각 페이지의 정보 쿠키를 유지할 때와 달리 정보를 한 번만 저장한다는 의미가 될 수 있습니다.

응용 프로그램 상태를 사용할 때의 단점

  • 응용 프로그램 범위  응용 프로그램 상태 범위는 단점이 될 수도 있습니다. 응용 프로그램 상태에 저장된 변수는 응용 프로그램이 실행되고 있는 특정 프로세스에 대해서만 전역 특성을 가지므로 각 응용 프로그램 프로세스마다 값이 다를 수 있습니다. 따라서 웹 가든 및 웹 팜 서버 구성에서 고유한 값을 저장하거나 전역 카운터를 업데이트하는 경우에는 응용 프로그램 상태를 사용할 수 없습니다.

  • 제한된 데이터 영속성   응용 프로그램 상태에 저장된 전역 데이터는 쉽게 변하므로 서버의 실행이 중지되거나, 서버를 업그레이드하거나 종료하는 등으로 인해 이 데이터가 포함된 웹 서버 프로세스가 파괴되면 데이터도 손실됩니다.

  • 리소스 요구 사항   응용 프로그램 상태에는 서버 메모리가 요구됩니다. 즉 응용 프로그램의 확장성뿐 아니라 서버의 상태에도 영향을 줄 수 있습니다.

응용 프로그램 상태를 신중하게 디자인하고 구현하면 웹 응용 프로그램의 성능을 향상시킬 수 있습니다. 예를 들어, 일반적으로 사용되며 비교적 정적인 데이터 집합을 응용 프로그램 상태에 저장하면 데이터베이스에 대한 전체 데이터 요청 수를 줄임으로써 사이트 성능을 향상시킬 수 있습니다. 그러나 성능이 떨어질 수도 있습니다. 응용 프로그램 상태 변수에 많은 정보 블록이 포함되어 있으면 서버 로드가 증가되므로 웹 서버 성능이 저하됩니다. 응용 프로그램 상태에 저장된 변수가 차지하는 메모리는 값을 제거하거나 대체하기 전까지 해제되지 않습니다. 따라서 작고 자주 변경되지 않는 데이터 집합이 있는 응용 프로그램 상태 변수를 사용하는 것이 가장 좋습니다. 자세한 내용은 성능 개요를 참조하십시오.

세션 상태

ASP.NET에서는 세션 내에서만 볼 수 있는 세션 관련 정보를 저장하기 위해 HttpSessionState 클래스라는 세션 상태를 제공합니다. ASP.NET 세션 상태는 제한된 세션 시간 동안 같은 브라우저의 요청을 식별하고 해당 세션 동안 변수 값을 지속할 수 있는 기능을 제공합니다. 자세한 내용은 ASP.NET 상태 관리 개요ASP.NET 세션 상태 개요를 참조하십시오.

세션 고유의 값과 개체를 서버에서 관리하고 브라우저나 클라이언트 장치에서 사용할 수 있도록 세션 상태에 저장할 수 있습니다. 개별 세션에 따라 달라지는 수명이 짧고 중요한 데이터는 세션 상태 변수에 저장하는 것이 좋습니다.

세션 상태를 사용할 때의 장점

  • 구현의 용이성   세션 상태 기능은 사용이 간편하고 ASP 개발자에게 친숙하며 다른 .NET Framework 클래스와도 일관성이 있습니다.

  • 세션 고유의 이벤트  응용 프로그램에서 세션 관리 이벤트를 발생시키고 사용할 수 있습니다.

  • 데이터 지속성   세션 상태 변수에 포함된 데이터는 다른 프로세스 공간에 저장되므로 IIS(인터넷 정보 서비스)의 실행이 중지되거나 작업자 프로세스가 다시 시작되는 경우에도 지속될 수 있습니다. 또한 세션 상태 데이터는 웹 팜이나 웹 가든에서와 같이 여러 프로세스 사이에도 지속될 수 있습니다.

  • 플랫폼 확장성   세션 상태는 다중 컴퓨터 및 다중 프로세스 구성에서 모두 사용할 수 있으므로 확장성 시나리오를 최적화합니다.

  • 쿠키가 없는 세션 지원  세션 상태는 웹 응용 프로그램에 사용자 식별 기능을 제공하기 위해 일반적으로 쿠키와 함께 사용되지만 세션 상태는 HTTP 쿠키를 지원하지 않는 브라우저와 작동합니다. 하지만 쿠키 없이 세션 상태를 사용하려면 이 항목의 쿼리 문자열 단원에 설명된 보안 문제와 관련된 쿼리 문자열에 세션 식별자를 배치해야 합니다. 쿠키 없이 세션 상태를 사용하는 방법은 ASP.NET 웹 사이트 관리를 참조하십시오.

  • 확장성  자체 세션 상태 공급자를 작성하여 세션 상태를 사용자 지정하고 확장할 수 있습니다. 그런 다음 데이터베이스, XML 파일 또는 심지어 웹 서비스와 같은 다양한 데이터 저장소 메커니즘을 사용하여 사용자 지정 데이터 형식으로 세션 상태 데이터를 저장할 수 있습니다. 자세한 내용은 세션 상태 저장소 공급자 구현을 참조하십시오.

세션 상태를 사용할 때의 단점

  • 성능 고려 사항   세션 상태 변수는 제거하거나 대체될 때까지 메모리에 남아 있으므로 서버 성능이 떨어질 수 있습니다. 세션 상태 변수에 대용량 데이터 집합 같은 정보 블록이 들어 있으면 서버 부하가 커짐에 따라 웹 서버 성능이 저하될 수 있습니다.

프로필 속성

ASP.NET은 사용자 특정 데이터를 저장할 수 있는 프로필 속성이라는 기능을 제공합니다. 이 속성은 세션 상태와 비슷하지만 세션 상태와는 달리 사용자 세션이 종료될 때 프로필 데이터가 없어지지 않습니다. 프로필 속성 기능에는 영구 형식으로 저장되고 개별 사용자와 연결된 ASP.NET 프로필이 사용됩니다. ASP.NET 프로필을 사용하면 자체 데이터베이스를 만들고 유지 관리할 필요 없이 사용자 정보를 쉽게 관리할 수 있습니다. 프로필을 사용하면 또한 응용 프로그램의 어느 곳에서도 액세스할 수 있는 강력한 형식의 API를 사용하여 사용자 정보를 사용할 수 있습니다. 프로필에는 모든 형식의 개체를 저장할 수 있습니다. ASP.NET 프로필 기능에서는 형식과 관련되지 않은 방식으로 데이터를 계속 사용하면서도 거의 모든 종류의 데이터를 정의하고 유지 관리할 수 있는 일반 저장소 시스템을 제공합니다. 자세한 내용은 ASP.NET 프로필 속성 개요를 참조하십시오.

프로필 속성을 사용할 때의 장점

  • 데이터 지속성   프로필 속성에 배치되는 데이터는 외부 메커니즘에 저장되기 때문에 IIS를 재시작하거나 작업자 프로세스를 재시작하더라도 계속 유지됩니다. 또한 프로필 속성은 웹 팜이나 웹 가든에서와 같이 여러 프로세스 사이에도 지속될 수 있습니다.

  • 플랫폼 확장성  프로필 속성은 다중 컴퓨터 및 다중 프로세스 구성에서 모두 사용할 수 있으므로 확장성 시나리오를 최적화합니다.

  • 확장성   프로필 속성을 사용하려면 프로필 공급자를 구성해야 합니다. ASP.NET에는 프로필 데이터를 SQL 데이터베이스에 저장할 수 있도록 도와주는 SqlProfileProvider 클래스가 포함되지만, XML 파일이나 웹 서비스와 같은 사용자 지정 저장소 메커니즘을 사용하여 사용자 지정 형식으로 프로필 데이터를 저장하는 자신의 프로필 공급자 클래스를 만들 수도 있습니다. 자세한 내용은 ASP.NET 프로필 공급자프로필 공급자 구현을 참조하십시오.

프로필 속성을 사용할 때의 단점

  • 성능 고려 사항  프로필 속성은 데이터를 메모리에 저장하는 대신 데이터 저장소에 보관하는 방식을 사용하기 때문에 세션 상태를 사용할 때보다 전반적으로 느립니다.

  • 추가 구성 요구 사항  세션 상태와는 달리 프로필 속성 기능을 사용하려면 상당히 많은 구성을 사용해야 합니다. 프로필 속성을 사용하려면 프로필 공급자 구성 뿐만 아니라 저장하려는 모든 프로필 속성에 대한 사전 구성을 마쳐야 합니다. 자세한 내용은 ASP.NET 프로필 속성 개요ASP.NET 프로필 속성 정의를 참조하십시오.

  • **데이터 유지 관리   **프로필 속성을 사용하려면 상당히 많은 유지 관리가 필요합니다. 프로필 데이터는 비휘발성 저장소에 보관되기 때문에 데이터가 오래되었을 때 프로필 공급자에서 제공되는 적절한 정리 메커니즘을 응용 프로그램에서 호출하도록 해야 합니다.

데이터베이스 지원

웹 사이트에서 상태 유지를 위해 데이터베이스 지원을 사용하려는 경우도 있습니다. 일반적으로 데이터베이스 지원은 쿠키나 세션 상태와 함께 사용됩니다. 예를 들어 전자 상거래 웹 사이트의 경우에는 다음과 같은 이유 때문에 일반적으로 관계형 데이터베이스를 사용하여 상태 정보를 유지합니다.

  • 보안

  • 개별화

  • 일관성

  • 데이터 마이닝

다음은 쿠키를 지원하는 데이터베이스 웹 사이트의 일반적인 기능입니다.

  • 보안   방문자는 사이트 로그온 페이지에 계정 이름과 암호를 입력합니다. 사이트 인프라에서는 입력된 로그온 값으로 데이터베이스를 쿼리하여 해당 사용자에게 사이트 사용 권한이 있는지 확인합니다. 데이터베이스에서 사용자 정보의 유효성을 검사하면 웹 사이트에서는 해당 클라이언트 컴퓨터에 사용자의 고유 ID를 포함한 유효 쿠키를 배포합니다. 사이트에서 사용자의 액세스를 승인합니다.

  • 개별화   일반적인 보안 정보가 있는 경우 사이트에서는 클라이언트 컴퓨터에 있는 쿠키를 읽어서 각 사용자를 구분할 수 있습니다. 일반적으로 사이트의 데이터베이스에는 고유 ID별로 식별되는 사용자의 기본 설정을 설명하는 정보가 있습니다. 이 관계를 개별화라고 합니다. 사이트에서는 쿠키에 포함된 고유 ID를 사용하여 사용자의 기본 설정을 검색한 다음 사용자에게 원하는 내용과 정보를 제공하고 지속적으로 사용자의 기본 설정에 응답합니다.

  • 일관성   상거래 웹 사이트를 만든 경우에는 사이트에서 이루어진 상품 및 서비스에 대한 구매 기록을 유지할 수도 있습니다. 이 정보를 데이터베이스에 안전하게 저장해 두고 사용자의 고유 ID를 사용하여 참조할 수 있습니다. 이 정보를 사용하여 구매 거래가 완료되었는지 확인하거나 구매 거래가 취소된 경우 취할 조치를 결정할 수도 있습니다. 이 정보는 사이트를 통해 접수된 주문의 처리 상태를 사용자에게 알려주는 데에도 활용할 수 있습니다.

  • 데이터 마이닝   사이트 이용, 방문자 또는 제품 거래에 관한 정보를 데이터베이스에 안전하게 저장할 수 있습니다. 예를 들어 비즈니스 개발 부서에서는 사이트에서 수집된 이 데이터를 사용하여 다음 해 생산 방향이나 유통 정책을 결정할 수 있습니다. 또한 마케팅 부서에서는 사이트 사용자에 대한 인구 통계학적 정보를 파악할 수도 있습니다. 엔지니어링 및 지원 부서에서는 거래 정보를 확인하여 구매 과정에서 개선할 수 있는 부분을 파악할 수도 있습니다. Microsoft SQL Server와 같은 엔터프라이즈 수준의 관계형 데이터베이스에는 대부분의 데이터 마이닝 프로젝트에 사용할 수 있는 고급 도구 집합이 들어 있습니다.

위 시나리오의 각 단계에서 고유 ID를 사용하여 지속적으로 데이터베이스를 쿼리할 수 있도록 웹 사이트를 디자인하면 사이트에서 상태를 유지할 수 있습니다. 이런 방식을 통해 사용자는 사이트에서 자신을 개인적으로 기억하고 응답해 준다고 인식하게 됩니다.

데이터베이스를 사용하여 상태를 유지할 때의 장점

  • 보안   데이터베이스에 액세스하려면 엄격한 인증 및 권한 부여가 필요합니다.

  • 저장소 용량   데이터베이스에는 정보를 원하는 만큼 저장할 수 있습니다.

  • 데이터 지속성   데이터베이스 정보는 원하는 기간까지 얼마든지 저장할 수 있으며 웹 서버의 사용 가능성과 관련이 없습니다.

  • 강력함 및 데이터 무결성   데이터베이스에는 트리거와 참조 무결성, 트랜잭션 등 양질의 데이터를 관리하기 위한 여러 가지 기능이 있습니다. 세션 상태가 아닌 데이터베이스에 트랜잭션에 대한 정보를 저장하여 오류 발생을 줄일 수 있습니다.

  • 액세스 가능성   데이터베이스에 저장된 데이터는 다양한 정보 처리 도구를 사용하여 액세스할 수 있습니다.

  • 폭넓은 지원   다양한 데이터베이스 도구와 많은 사용자 지정 구성을 사용할 수 있습니다.

데이터베이스를 사용하여 상태를 유지할 때의 단점

  • 복잡성   상태 유지 관리 지원을 위해 데이터베이스를 사용하려면 더 복잡한 하드웨어 및 소프트웨어 구성이 필요합니다.

  • 성능 고려 사항   관계형 데이터 모델을 잘못 구성하면 확장성 문제가 발생할 수 있습니다. 또한 데이터베이스에 너무 많은 쿼리가 몰려 서버 성능이 저하될 수도 있습니다.

상태 관리를 위한 서버측 방법 요약

다음 표에서는 ASP.NET에서 사용할 수 있는 서버측 상태 관리 옵션과 각 옵션을 사용할 때의 권장 사항에 대해 설명합니다.

상태 관리 옵션

권장 사용법

응용 프로그램 상태

자주 변경되지 않고 많은 사용자가 이용하는 전역적인 정보를 저장해야 하며 보안이 중요하지 않은 경우에 사용합니다. 응용 프로그램 상태에는 많은 양의 정보를 저장하지 않는 것이 좋습니다.

세션 상태

개별 세션에 따라 달라지는 수명이 짧은 정보를 저장해야 하며 보안이 중요하지 않은 경우에 사용합니다. 세션 상태에는 많은 양의 정보를 저장하지 않는 것이 좋습니다. 세션 상태 개체가 만들어지고 응용 프로그램의 모든 세션이 존속하는 동안 유지됩니다. 많은 사용자에게 서비스를 제공하는 응용 프로그램의 경우에는 서버 리소스를 많이 사용하므로 확장성이 떨어질 수 있습니다.

프로필 속성

사용자 세션이 종료된 다음 계속 유지해야 하고 응용 프로그램을 이후 방문할 때 다시 검색되어야 하는 사용자 특정 정보를 저장하는 경우에 사용합니다.

데이터베이스 지원

거래를 관리하는 많은 양의 정보를 저장하는 경우 또는 응용 프로그램 및 세션을 다시 시작하더라도 정보가 유지되어야 하는 경우에 사용합니다. 데이터 마이닝이 중요하며 보안이 중요하지 않은 경우

참고 항목

개념

ASP.NET 상태 관리 개요

ASP.NET 쿠키 개요

ASP.NET 프로필 속성 개요

ASP.NET 세션 상태 개요

ASP.NET 응용 프로그램 상태 개요

기타 리소스

ASP.NET 상태 관리의 새로운 기능