Programming/.NET

ASP.NET 에서 구성이나 설정사항에 관한 관리는 machine.config와 web.config라는 XML파일에 정의되며 이들 파일은 .NET Framework설치시 '\Windows\Microsft.NET\Framework\[Version]\Config' 폴더에 존재하게 됩니다.

 

 1. 파일구성

 

해당 폴더를 열어보면 machine.config나 web.config이 보일 것입니다. machine.config는 서버상에 존재하는 모든 응용프로그램에 공통적으로 적용하기 위한 설정정보를 가지고 있으며 web.config는 응용프로그램 단위로 적용하기 위한 설정정보를 가지고 있습니다.

 

이외에 config.comments와 config.default파일이 존재함을 알 수 있는데 comments파일은 각 설정정보에 관한 코멘트가 들어가 있고 default파일은 config파일의 복사본파일입니다. default파일은 예를 들어 설정이 잘못되어 초기상태로 되돌리고 싶을때 잘못된 config파일을 삭제하고 default를 기본 config파일로 변경하여 설정을 초기상태로 되돌리는데 사용될 수 있습니다. 참고로 comments와 default는 실제 프로그램의 동작에 적용되지 않는 파일입니다.

 

web_xxxxx.config 형식의 파일, 예를 들어 web_hightrust.config와 같은 파일은 신뢰수준을 정의하는 파일입니다. ASP.NET의 기본적인 신뢰수준은 Full 신뢰수준으로서 web.config를 보면 어떤 설정이 적용되어 있는지 확인할 수 있습니다.

 

<location allowOverride="true">
    <system.web>
        <securityPolicy>
            <trustLevel name="Full" policyFile="internal" />
            <trustLevel name="High" policyFile="web_hightrust.config" />
            <trustLevel name="Medium" policyFile="web_mediumtrust.config" />
            <trustLevel name="Low"  policyFile="web_lowtrust.config" />
            <trustLevel name="Minimal" policyFile="web_minimaltrust.config" />
        </securityPolicy>
        <trust level="Full" originUrl="" />
        <fullTrustAssemblies>
        ------------------------------------
        </fullTrustAssemblies>
        <partialTrustVisibleAssemblies />
    </system.web>
</location>

 

만약 신뢰수준을 변경하려 한다면 location 섹션의 allowOverride 속성을 false로 설정하고 trust 섹션의 level속성을 원하는 수준으로 변경하면 됩니다. 현재는 level이 Full로 되어 있는데 trustLevel의 name속성이 Full인것에 따라 policyFile이 internal로 적용될 것입니다. internal은 ASP.NET의 CAS(Code Access Security) 즉, 프로그램이 만들어진 것에 따라 결정됨을 의미합니다.

 

만약 신뢰수준을 변경하면 그에 맞는 policyFile이 적용되는데 각 파일은 개별적인 실행권한이 명시되어 있습니다. 예를 들어 web_hightrust.config에 보면

 

<IPermission
        class="RegistryPermission"
        version="1"
        Unrestricted="true"
/>

 

이러한 설정이 들어가 있는데 이는 레지스트리에 관한 권한이 부여되어 있음을 의미합니다.

 

참고로 config설정파일은 .NET Framework의 버전별로 2개 이상이 존재할 수 있습니다. 이 말은 각 버전별로 다른 구성설정이 적용될 수 있다는 것을 뜻합니다.

 

web.config의 경우 ASP.NET응용프로그램을 생성하면 프로젝트폴더에 자동으로 생성되는것을 확인할 수 있습니다. 보통 이러한 형태의 web.config파일은 독립적인 설정정보를 가지게 되지만 기본은 부모 web.config로 부터 상속되며 이 상속되는 설정은 각각의 web.config에서 필요에 따라 재정의가 가능합니다. 하지만 만일 최상위 web.config에서 allowOverride속성을 false로 하면 상속이 차단될 수 있습니다.

 

만약 프로그램이 동작중인데 설정파일의 내용이 변경되면 ASP.NET에서는 이를 자동으로 감지하여 새로운 구성정보를 읽어들이고 그에 맞는 프로그램의 도메인을 신규로 생성합니다. 기존 프로그램의 도메인은 모든 요청이 만료되면 자등으로 파기됩니다.

 

 2. 설정

 

(1) ConnectionStrings

 

DB와 같은 연결문자열 정보를 설정합니다.

 

<connectionStrings>
  <add name="db" connectionString="server=localhost;uid=sa;pwd=1234;daabase=testdb"/>
</connectionStrings>

 

설정 내용은 다음과 같은 방법으로 가져올 수 있습니다.

 

SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["db"].ConnectionString);

 

(2) SesstionState

 

세션을 어디에 저장할지에 대한 세션저장소를 설정합니다.

 

<sessionState mode="StateServer" cookieless="false" stateConnectionString=

"tcpip=192.168.0.1:42424" stateNetworkTimeout="60">

 

mode속성은 세션을 어디에 저장할지를 설정하는 속성입니다. 여기에는 Off, InProc, StateServer, SQLServer, Custom등을 설정할 수 있는데 StateServer와 SQLServer는 out-of-process 즉, ASP.NET의 프로세스외부로 세션을 저장하는 설정입니다.

 

만약 mode를 StateServer로 설정했다면 해당 서버에 ASP.NET State Service라는 서비스가 구동되어야 합니다. 이 설정은 윈도우의 제어판->서비스에서 'ASP.NET State Service'항목을 찾아 서비스를 시작하거나 아래 명령을 내려 서비스를 구동할 수 있습니다.

 

net start aspnet_state

 

cookieless는 HTTP를 통해 세션을 관리할 경우 설정하며 timeout으로 세션의 수명주기를 설정할 수 있습니다.

 

stateConnectionString은 mode가 StateServer일때 해당 서버와 통신하기 위한 문자열을 지정하는 곳인며 sqlConnectionString은 mode가 SQLServer인경우에 서버로의 연결문자열을 설정하게 됩니다. 이때 연결문자열은 ConnectionString의 값을 다음과 같이 참조할 수 있습니다.

 

<sessionState mode="SQLServer" sqlConnectionString="db">

stateNetworkTimeout은 StateServer에 세션을 저장하려고 시도할때의 타임아웃시간입니다.

 

SesstionState는 web.config의 system.web하위에 설정됩니다.

 

(3) Compilation

 

ASP.NET은 최초 프로그램이 요청될때 프로그램과 관련된 소스나 기타 리소스파일등이 동적으로 컴파일되어 코드캐시에 저장한뒤 서비스를 시작하게 됩니다. 만약 변경사항이 발생하면 기존 컴파일내용을 모두 무효화하고 자동적으로 재컴파일을 수행합니다.

 

이러한 컴파일동작은 Compilation으로 system.web하위에 다음과 같이 설정할 수 있습니다.

 

<compilation batch="true"></compilation>

 

compilation에 설정가능한 속성은 아래와 같습니다.

 

 batch

 일괄처리여부를 설정합니다. 기본값은 true입니다.

 maxBatchSize

 일괄처리로 컴파일하는 최대 페이지수를 설정합니다. 기본값은 1000입니다.

 maxBatchGeneratedFileSize

 일괄처리로 컴파일하는 어셈블리의 최대크기를 설정합니다. 기본값은 1000kb입니다. 

 batchTimeout

 일괄처리로 컴파일하는 시간을 설정합니다. 기본값은 15초입니다.

 optimizeComilations

 동적 컴파일시 전체를 대상으로 할지 변경된 부분만 대상으로 할지를 지정합니다. False는 전체 True는 일부를 의미합니다.

 debug

 릴리즈, 디버그 어셈블리의 컴파일 여부를 설정합니다.

 defaultLanguage

 동적컴파일에 사용할 프로그램 언어를 설정합니다. 기본값은 VB입니다.

 explicit

 비주얼 베이직 코드의 explicit 컴파일 옵션여부를 설정합니다. 기본값은 true입니다.

 numRecompilesBeforeAppRestart

 리소스 동적재컴파일 횟수를 지정합니다. 기본값은 15회입니다.

 strict

 비주얼 베이직 코드의 strict 컴파일 옵션여부를 설정합니다. 기본값은 true입니다.

 tempDirectory

 컴파일을 위한 임시디렉토리를 지정합니다. 기본값은 Windows\Microsoft.NET\Framework\[Version]\Temporary ASP.NET 폴더입니다.

 assemblies

 컴파일 처리 지시문을 설정합니다.

 buildproviders

 리소스파일을 컴파일하는데 사용되는 빌드공급자를 직접설정합니다.

 folderLevelBuildProviders

 build provider가 특정 폴더에 있는 사용자 정의 리소스파일을 컴파일할때 사용될지 여부를 설정합니다.

 expressionBuilders

 컴파일할때 사용될 리소스문자열을 지정합니다.

 codeSubDirectories

 런타임에 컴파일할 파일이 포함된 하위 디렉토리를 설정합니다.

 

(4) customErrors

 

ASP.NET에서 오류가 발생할 경우 오류관련 페이지를 보여주기 위해 설정하는 부분입니다.

 

<customErrors defaultRedirect="[url]" mode="On">
  <error statusCode="404" redirect="[url]"/>
</customErrors>

 

기본적으로 오류가 발생하면 defaultRedirect에 지시한 url의 페이지를 보여줍니다. 하지만 만약 오류코드의 내용이 404라면 여기에 지정한 redirect의 url페이지를 보여주게 됩니다.

 

mode는 사용자정의 오류페이지를 보여줄지를 지정하는 것으로 Off면 해당 설정을 해제합니다. 이 속성의 RemoteOnly값은 원격클라이언트에만 오류페이지를 보여주도록 합니다.

 

(5) authentication

 

ASP.NET 사용자 인증관련 설정입니다.

 

<authentication mode="Forms"></authentication>

 

mode 속성을 Windows로 지정하면 윈도우인증을 사용하게 됩니다. 이러한 인증은 웹서버에 접속이 가능한 윈도우계정을 통해 인증을 수행하는 것입니다.

 

mode 속성을 Forms로 하면 프로그램에서 직접 사용자를 구성하고 해당 사용자에 대한 인증을 처리할 수 있게 됩니다. 가장 많이 사용하는 인증방식으로 사용할 수 있는 속성도 다음과 같이 다양하게 존재합니다.

 

 name

 인증쿠키이름을 설정합니다. 기본값은 .ASPXAUTH입니다.

 loginUrl

 로그인시도시 표시될 페이지를 URL로 설정합니다.

 protection

 인증쿠키에 적용되는 암호화방식을 지정합니다. Encryption은 3DES 알고리즘으로 암호화를 수행하도록 하며 Validation은 암호화하지 않지만 전송과정에서 쿠키의 변조여부를 확인합니다. All은 Encryption과 Validation모두를 수행하도록 합니다.

 timeout

 분단위로 쿠키만료시간을 설정합니다. 기본값은 30분입니다.

 path

 쿠키의 경로를 지정합니다.

 requireSSL

 폼인증수행시 HTTPS연결여부를 지정합니다.

 slidingExpiration

 쿠키 timeout의 갱신여부를 지정합니다.

 cookieless

 쿠키사용방식을 지정합니다.

 defaultUrl

 Login이후 리다이렉션될 URL을 지정합니다.

 ticketCompatibilityMode

 Framework20은 티켓만료날짜에 로컬시간을, Framework40은 UTC를 사용합니다.

 domain

 도메인이름문자열을 설정합니다. 이 설정은 여러 사이트에서 인증쿠키를 공유하고자 할때 사용합니다.

 

(6) anonymousIdentification

 

익명사용자를 식별해야할 필요가 있는경우의 설정입니다.

 

<anonymousIdentification enabled="true" />

 

anonymousIdentification 설정의 enabled는 익명사용자설정에 대한 활성화 여부를 지정합니다. 그 외에 해당 설정에서 변경할 수 있는 속성은 authentication 설정의 속성과 일치합니다.

 

이 설정은 system.web하위에 위치해야 합니다.

 

(7) authorization

 

권한부여에 관한 설정입니다.

 

<authorization>
  <allow users="*" roles="" verbs="" />
  <deny users="?" roles="" verbs="" />
</authorization>

 

allow에는 허용할 사용자, 그룹 또는 전송방식(GET등.)을 설정하고 deny는 거부할 대상을 지정합니다.

 

대상은 ID나 그룹에 대한 명칭이 올 수 있고 2개 이상인 경우에는 ,로 구분하여 지정합니다. 이 외에 사용할 수 있는 특수문자로는 *와 ?가 있는데 *은 모든 사용자를 ?는 익명사용자를 뜻합니다.

 

해당 설정이 존재하는 web.config를 특정 aspx같은 페이지와 같은 위치에 두면 그 위치의 모든 URL에 대한 접근통제를 적용하게 되며

 

<location path="tmp">
  <system.web>
    <authentication>
      <allow users="" roles="" verbs="" />
      <deny users="" roles="" verbs="" />
    </authentication>
  </system.web>
</location>

 

위와 같이 location 요소하위에 권한설정을 하게 되면 location에 지정한 폴더를 대상으로 접근통제를 적용하게 됩니다. 단, location의 path속성에 tmp와 같은 폴더가 아닌 tmp\aaa.aspx 와 같은 페이지를 지정하면 해당 페이지만 접근통제의 대상이 됩니다.

 

(8) pages

 

ASP.NET 페이지의 동작에 관한 구성설정입니다.

 

<pages buffer="true" validateRequest="true"></pages>

 

pages 요소에 적용가능한 속성은 아래와 같습니다.

 

 buffer

 페이지를 전송할때 버퍼링여부를 설정합니다.

 enableSessionState

 세션상태의 활성화여부를 설정합니다.

 enableViewState

 뷰 상태 활성화 여부를 설정합니다.

 autoEventWireup

 Load나 Error와 같은 이벤트의 자동설정여부를 지정합니다.

 smartNavigation

 익스플로러 브라우저에만 적용되는 속성입니다. 이 값이 true이면 포스트백요청시 전체브라우저가 아닌 변경된 부분만을 다시 생성하도록 합니다.

 maintainScrollPositionOnPostback

 포스트백이후 페이지가 표시될때 이전의 스크롤지점으로 위치시킬지 여부를 지정합니다.

 masterPageFile

 해당 페이지의 마스터페이지경로를 설정합니다.

 theme

 페이지의 테마를 설정합니다.

 styleSheetTheme

 CSS를 통한 테마를 설정합니다.

 maxPageStateFieldLength

 페이지의 ViewState를 몇개의 조각으로 분리할지를 지정합니다. 기본값은 -1인데 ViewState가 1개임을 의미합니다.

 pageBaseType

 페이지의 기본 클래스를 지정합니다. 보통 페이지의 cs파일에 있는 클래스가 지정됩니다.

 userControlBaseType

 사용자 컨트롤사용시 기본 클래스를 지정합니다.

 validateRequest

 페이지의 유효성여부를 점검할지 여부를 설정합니다. 스크립트 공격과 같은 잠재적 위협을 차단합니다.

 namespaces

 컴파일된 어셈블리를 참조하기 위한 설정입니다.

 compilationMode

 컴파일방법을 설정합니다.

 viewStateEncryptionMode

 ViewState의 암호화여부를 설정합니다.

 asyncTimeout

 비동기 작업 수행시 해당 작업이 끝날때 까지 대시하는 시간을 설정합니다.

 clientIDMode

 페이지에 존재하는 컨트롤의 ClientID지정방식을 설정합니다.

 controlRenderingCompatibilityVersion

 페이지렌더링시 사용할 ASP.NET버전을 지정합니다.

 

(9) httpRuntime

 

http요청 동작에 관한 설정입니다.

 

<httpRuntime enable="true" />

 

해당 설정에 적용할 수 있는 속성은 아래와 같습니다.

 

 useFullyQualifiedRedirectUrl

 FQN URL여부를 지정합니다.

 enable

 프로그램의 동작여부 자체를 지정합니다.

 executionTimeout

 기본값은 110초이며 요청이 발생하면 프로그램이 동작할 수 있는 시간을 의미합니다.

 maxRequestLength

 업로드 가능한 파일의 최대크기를 지정합니다. 기본값은 4096이며 kb단위입니다.

 requestLengthDiskThreshold

 파일 업로드시 디스크에 파일이 저장되는 파일버퍼링기능사용여부를 지정합니다. 이 값은 maxRequestLength보다 클 수 없습니다.

 

파일이 디스크에 버퍼링되도록 설정되면 파일은 codegen폴더안에 별도의 하위폴더 이름으로 저장되며 이 위치는 <compilation>요소의 tmpDirectory속성으로 변경될 수 있습니다.

 appRequestQueueLimit

 ASP.NET 큐의 최대요청수를 지정합니다.

 minFreeThreads

 ASP.NET이 요청을 처리하는데 사용할 최소 스레드수를 지정합니다. 기본값은 8입니다. 

 minLocalRequestFreeThreads

 서버 내부의 요청을 처리하는데 필요한 최소스레드수를 지정합니다. 기본값은 4입니다.

 enableKernelOutputCache

 IIS의 커널(http.sys)에서의 출력캐싱 사용여부를 설정합니다.

 

(10) processModel

 

IIS에서 ASP.NET에 대한 클라이언트의 요청이 발생하면 그 요청을 w3wp.exe라는 작업자 프로세스에 전달하여 처리합니다. processModel은 이 처리에 대한 설정입니다.

 

<processModel enable="true" />

 

사용할 수 있는 속성은 아래와 같습니다.

 

 enable

 프로세스모델 사용여부를 지정합니다.

 timeout

 새 작업자 프로세스를 시작할때까지의 시간을 설정합니다. 시간단위는 '분'이며 해당 시간이 지나면 ASP.NET작업프로세스가 재시작됩니다.

 idelTimeout

 기존 작업자 프로세스가 종료되는 시간을 'HH:MM:SS'형식으로 지정합니다.

 shutdownTimeout

 작업자 프로세스가 스스로 중지될 수 있는 시간을 설정합니다. 기본값이 5이며 단위는 '초'인데 이 시간이 지나도 프로세스가 죽지 않으면 kill명령을 통해 강제로 죽이게 됩니다.

 requestLimit

 작업자 프로세스가 받을 수 있는 허용요청수를 지정합니다.

 requestQueueLimit

 큐에 들어갈 수 있는 요청수를 지정합니다. 만일 이 값이 초과하게 되면 작업자 프로세스는 재시작됩니다. 기본값은 5000입니다.

 memoryLimit

 작업자 프로세스가 사용할 수 있는 최대메모리를 지정합니다. 기본값은 실메모리 대비 60%입니다.

 username / password

 ASP.NET 프로그램은 ASP.NET 계정으로 실행되는데 만일 다른 계정으로 실행되어야 한다면 해당 계정의 ID와 비밀번호를 지정합니다.

 logLevel

 작업자 프로세스에서 발생하는 이벤트의 기록방식을 설정합니다. 이 이벤트기록은 윈도우의 이벤트 로그에 기록됩니다. 기본값은 오류만 기록하는 Errors 입니다.

 clientConnectedCheck

 클라이언트가 일정시간 연결될 시간을 설정합니다. 기본값은 5초입니다.

 responseDeadlockInterval

 작업자 프로세스가 응답하는데 걸리는 시간을 설정합니다. 큐에 요청이 있는데 이 시간동안 프로세스에서 응답이 없으면 프로세스는 재시작됩니다. 기본값은 3분입니다.

 responseRestartDeadlockInterval

 프로세스가 동작중 데드락이 발생했을때 프로세스 재시작까지 대기하는 시간을 설정합니다. 기본값은 9분입니다.

 comImpersonationLevel

 COM보안 인증수준을 설정합니다.

 webGarden

 웹가든 사용여부를 설정합니다. 웹가든은 한서버에 여러개의 작업자프로세스가 동작하도록 하는 것입니다. 참고로 여러개의 프로세서가 동작하는 서버만가능합니다.

 cpuMask

 웹가든이 사용중일때 작업자 프로세스가 실행되어야 하는 특정 프로세서를 지정합니다. 기본값은 0xFFFFFFF이며 모든 프로세서를 의미합니다.

 maxWorkerThreads

 작업자 프로세스의 스레드풀 내부에 존재하는 최대 스레드수를 지정합니다. 기본값은 20입니다.

 maxIoThreads

 작업자 프로세스 내부에 존재하는 최대 I/O스레드 수를 지정합니다.

 autoConfig

 ASP.NET 애플리케이션의 성능설정구성 여부를 지정합니다.

 minWorkerThreads

 작업자 프로세스의 스레드풀 내부에 존재하는 최소 스레드수를 지정합니다. 기본값은 1입니다.

 minIoThreads

 작업자 프로세스 내부에 존재하는 최소 I/O스레드 수를 지정합니다.

 serverErrirNessageFile

 'Server Unavailable' 오류 메세지 대신 보여줄 오류메세지 파일을 지정합니다.

 pingFrequency

 ISAPI extenstion이 작업자 프로세스가 동작하는지 확인하기 위해 ping을 하는 시간간격을 설정합니다.

 pingTimeout

 ping후 작업자 프로세스가 응답하지 않으면 얼마후에 작업자 프로세스를 재시작할지에 대한 시간을 설정합니다.

 maxAppDomains

 하나의 프로세스에 대한 애플리케이션 도메인 최대수를 지정합니다.

 

(11) appSettings

 

프로그램에 필요한 설정을 저장하기 위한 용도입니다.

 

<appSettings>
  <add key="site_name" value="cliel.com" />
</appSettings>

 

key에는 키값을 value에는 해당 키에대한 값을 지정합니다.

'Programming > .NET' 카테고리의 다른 글

[Visual Studio] SuperCharger - 확장기능  (2) 2016.10.11
[C#] 이니셜라이저(initializer)  (0) 2016.10.11
[ASP.NET] 설정파일 - 1  (0) 2016.10.04
[ASP.NET] 웹서비스(Web Service)  (0) 2016.09.27
[ASP.NET] URL 매핑 (URL 라우팅)  (0) 2016.09.21
[ASP.NET] TreeView  (0) 2016.09.13
0 0