다음을 통해 공유


ASP.NET 웹 사이트 경로

업데이트: 2007년 11월

웹 사이트에서 리소스로 작업하는 경우 리소스의 경로를 지정해야 할 때가 있습니다. 예를 들어 웹 사이트에서 다른 곳에 있는 페이지의 URL을 참조하거나 페이지에서 이미지 파일을 참조하기 위해 URL 경로를 사용할 수 있습니다. 마찬가지로 웹 응용 프로그램의 코드에서도 서버 기반 파일의 실제 파일 경로를 사용하여 파일을 읽거나 쓸 수 있습니다. ASP.NET에서는 리소스를 참조하고 응용 프로그램에서 페이지 또는 다른 리소스의 경로를 확인할 수 있는 기능을 제공합니다.

리소스 경로 지정

대부분의 경우 페이지의 요소나 컨트롤은 파일과 같은 외부 리소스를 참조해야 합니다. ASP.NET에서는 외부 리소스를 참조하기 위한 여러 가지 방법을 지원합니다. 이때 클라이언트측 요소로 작업하고 있는지 아니면 웹 서버 컨트롤로 작업하고 있는지에 따라 각각 다른 참조 방법을 선택합니다.

클라이언트 요소

페이지에서 웹 서버 컨트롤이 아닌 요소, 즉 클라이언트 요소는 원래 상태 그대로 브라우저에 전달됩니다. 따라서 클라이언트 요소에서 리소스를 참조할 경우에는 HTML의 표준 URL 규칙에 따라 경로를 작성합니다. 절대 URL 경로라고도 하는 정규화된 URL 경로 또는 다양한 유형의 상대 경로를 사용할 수 있습니다. 예를 들어, 페이지에 img 요소가 포함되어 있는 경우 다음 경로 중 하나를 사용하여 src 특성을 설정할 수 있습니다.

  • 절대 URL 경로. 외부 웹 사이트 같은 다른 위치에 있는 리소스를 참조하는 경우 절대 URL 경로가 유용합니다.

    <img src="https://www.contoso.com/MyApplication/Images/SampleImage.jpg" />
    
  • 응용 프로그램 루트가 아니라 사이트 루트를 기준으로 확인되는 사이트 루트 상대 경로. 이미지 또는 클라이언트 스크립트 파일과 같은 크로스 응용 프로그램 리소스를 웹 사이트 루트 아래의 폴더에 보관하려는 경우 사이트 루트 상대 경로가 유용합니다.

    다음은 웹 사이트 루트 아래 Images 폴더가 있는 경우의 예제 경로입니다.

    <img src="/Images/SampleImage.jpg" />
    

    웹 사이트가 https://www.contoso.com인 경우에는 경로가 다음과 같이 확인됩니다.

    https://www.contoso.com/Images/SampleImage.jpg
    
  • 현재 페이지 경로를 기준으로 확인되는 상대 경로.

    <img src="Images/SampleImage.jpg" />
    
  • 현재 페이지 경로의 피어로 확인되는 상대 경로

    <img src="../Images/SampleImage.jpg" />
    
    참고:

    기본적으로 브라우저에서는 현재 페이지 URL을 기본으로 사용하여 상대 경로를 확인합니다. 그러나 HTML base 요소를 페이지에 포함하여 대체 기본 경로를 지정할 수 있습니다.

서버 컨트롤

리소스를 참조하는 ASP.NET 서버 컨트롤에서는 클라이언트 요소의 경우와 마찬가지로 절대 또는 상대 경로를 사용할 수 있습니다. 상대 경로를 사용하면 페이지, 사용자 정의 컨트롤 또는 컨트롤이 포함된 테마의 경로를 기준으로 경로가 확인됩니다. 예를 들어 Controls 폴더에 사용자 정의 컨트롤이 있는 경우를 가정해 봅니다. 이 사용자 정의 컨트롤에는 ImageUrl 속성이 Images/SampleImage.jpg 경로로 설정된 Image 웹 서버 컨트롤이 포함되어 있습니다.

사용자 정의 컨트롤을 실행하면 경로가 /Controls/Images/SampleImage.jpg로 확인됩니다. 그 결과는 사용자 정의 컨트롤을 호스팅하는 페이지의 위치와 상관이 없습니다.

참고:

마스터 페이지에서는 콘텐츠 페이지의 경로를 기반으로 리소스 경로가 확인됩니다. 자세한 내용은 ASP.NET 마스터 페이지 개요를 참조하십시오.

서버 컨트롤에서 절대/상대 경로를 참조하면 다음과 같은 단점이 있습니다.

  • 절대 경로는 응용 프로그램 간에 이식 가능하지 않습니다. 절대 경로가 가리키는 응용 프로그램을 이동하면 링크가 해제됩니다.

  • 리소스나 페이지를 다른 폴더로 이동하면 클라이언트 요소 스타일의 상대 경로를 쉽게 관리할 수 없습니다.

이러한 문제를 해결하기 위해 ASP.NET에서는 서버 컨트롤에 경로를 지정할 때 사용할 수 있는 웹 응용 프로그램 루트 연산자(~)를 제공합니다. ASP.NET에서는 ~ 연산자를 현재 응용 프로그램의 루트로 확인합니다. ~ 연산자를 폴더와 함께 사용하여 현재 루트를 기반으로 경로를 지정할 수 있습니다.

다음 예제에서는 Image 서버 컨트롤을 사용할 때 이미지의 루트 상대 경로를 지정하는 데 사용되는 ~ 연산자를 보여 줍니다. 이 예제에서 이미지 파일은 페이지가 있는 웹 사이트의 위치와 상관없이 웹 응용 프로그램의 루트 바로 아래 있는 Images 폴더를 통해 읽습니다.

<asp:image  id="Image1"
  ImageUrl="~/Images/SampleImage.jpg" />

서버 컨트롤에서 경로와 관련된 모든 속성에 ~ 연산자를 사용할 수 있습니다. ~ 연산자는 서버 컨트롤에 대해 서버 코드에서만 인식됩니다. 클라이언트 요소에는 ~ 연산자를 사용할 수 없습니다.

참고:

모바일 장치용 페이지와 관련하여 응용 프로그램에서 쿠키 없는 세션을 사용하거나 쿠키 없는 세션이 필요한 모바일 장치의 요청을 받는 경우 경로에 물결표("~")를 사용하면 의도하지 않은 새 세션이 작성되고 기존의 세션 데이터가 소실되는 결과가 발생할 수 있습니다. 물결표가 포함된 경로(예: "~/path")를 사용하여 모바일 컨트롤의 속성을 설정하려면 ResolveUrl 메서드를 사용하여 경로를 확인한 다음 이를 속성에 할당해야 합니다.

현재 웹 사이트의 실제 파일 경로 확인

응용 프로그램에서 파일 또는 서버의 다른 리소스에 대한 경로를 확인해야 할 수도 있습니다. 예를 들어 응용 프로그램에서 프로그래밍 방식으로 텍스트 파일을 읽거나 쓰는 경우 읽기/쓰기 작업에 사용되는 메서드에 파일의 전체 실제 경로를 제공해야 합니다.

응용 프로그램을 이동하거나 배포하면 경로가 변경될 수 있으므로 실제 파일 경로(예: C:\Website\MyApplication)를 응용 프로그램에 하드 코드하지 않는 것이 좋습니다. 그러나 ASP.NET에서는 프로그래밍 방식으로 응용 프로그램 내의 실제 파일 경로를 가져오는 방법을 제공합니다. 그런 다음 기본 파일 경로를 사용하여 필요한 리소스의 전체 경로를 만들 수 있습니다. 파일 경로를 확인하기 위해 가장 일반적으로 사용되는 두 가지 ASP.NET 기능은 경로 정보를 반환하는 HttpRequest 개체의 속성과 MapPath 메서드입니다.

참고:

실제 파일 경로는 악의를 가진 사용자가 응용 프로그램 정보를 얻는 데 사용할 수 있으므로 클라이언트에 전달하면 안 됩니다.

요청 속성을 사용하여 경로 확인

다음 표에서는 응용 프로그램에서 리소스의 경로를 확인하는 데 유용한 HttpRequest 개체의 속성을 보여 줍니다.

이 표에 나열된 예제는 다음과 같은 가정을 기반으로 합니다.

  • 브라우저 요청에 사용된 URL은 https://www.contoso.com/MyApplication/MyPages/Default.aspx입니다.

  • "가상 경로"라는 용어는 서버 식별자 뒤에 나오는 요청 URL의 일부를 말하고 이 예제의 경우 가상 경로는 /MyApplication/MyPages/Default.aspx입니다.

  • 웹 사이트 루트의 실제 경로는 C:\inetpub\wwwroot\MyApplication\입니다.

  • 이 실제 경로에는 MyPages라는 폴더가 포함됩니다.

속성

설명

ApplicationPath

응용 프로그램에서 사용자가 요청하는 위치에 관계없이 현재 응용 프로그램의 루트 경로를 가져옵니다. 예를 들어, 이 속성은 /를 반환할 수 있습니다.

CurrentExecutionFilePath

현재 요청의 가상 경로를 가져옵니다. 서버 코드에서 요청이 리디렉션된 경우에는 CurrentExecutionFilePath가 적절하다는 점에서 FilePath 속성과 다릅니다. 예를 들어, 이 속성은 /MyApplication/MyPages/Default.aspx를 반환할 수 있습니다.

Transfer 또는 Execute를 호출한 결과로 실행되는 코드에서 이 속성을 가져오면 코드 위치가 경로에 반영됩니다.

FilePath

현재 요청의 가상 경로를 가져옵니다. 예를 들어, 이 속성은 /MyApplication/MyPages/Default.aspx를 반환할 수 있습니다.

CurrentExecutionFilePath 속성과 달리 FilePath는 서버측 전송을 반영하지 않습니다.

Path

현재 요청의 가상 경로를 가져옵니다. 예를 들어, 이 속성은 /MyApplication/MyPages/default.aspx를 반환할 수 있습니다.

PhysicalApplicationPath

현재 실행 중인 응용 프로그램의 루트 디렉터리에 대한 실제 파일 시스템 경로를 가져옵니다. 예를 들어, 이 속성은 C:\inetpub\wwwroot\를 반환할 수 있습니다.

PhysicalPath

요청한 URL에 해당하는 실제 파일 시스템 경로를 가져옵니다. 예를 들어, 이 속성은 C:\inetpub\wwwroot\MyApplication\MyPages\default.aspx를 반환할 수 있습니다.

MapPath 메서드 사용

MapPath 메서드는 이 메서드에 전달되는 가상 경로의 전체 실제 경로를 반환합니다. 예를 들어 다음 코드에서는 웹 사이트 루트의 파일 경로를 반환합니다.

Dim rootPath As String = Server.MapPath("~")
String rootPath = Server.MapPath("~");
참고:

MapPath 메서드에 전달되는 경로는 절대 경로가 아니라 응용 프로그램에 대한 상대 경로여야 합니다.

참고 항목

개념

ASP.NET 웹 사이트 레이아웃

ASP.NET 웹 응용 프로그램의 페이지 및 응용 프로그램 컨텍스트