.NET 5.0 - (2)

SeungHyuk Shin·2021년 4월 18일
1

Dotnet

목록 보기
2/5
post-thumbnail

1. 설정파일과 폴더들


{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft": "Warning",
      "Microsoft.Hosting.Lifetime": "Information"
    }
  },
  "AllowedHosts": "*"
}

이번에는 Appsetting 파일과 wwwroot 파일을 살펴보도록 하겠다. Appsetting은 json으로 작성되어있다. 이름에서 알 수 있다싶이 app에 관련된 설정을 하는것인데 나중에 이곳에다가 연결과 관련된 부분을 설정할 것이다. 이곳에다가 설정하면 내 어플리케이션 모든곳에서 사용할 수 있게 된다.

그리고 Properties 폴더로 들어가면 Launchsetting.json이 있다. 앱을 실행할때 어떤 설정으로 실행할지 정의해두는 곳인데 이미 자동으로 설정이 되어있다. JSON을 직접 수정할 필요없이 프로젝트 레벨에서 수정할 수 있는데 프로젝트를 우클릭후 properties를 누르면 환경을 설정할 수 있는 GUI가 나타난다. 프로필을 보면 IIS와 Project 이름으로 된 두가지가 보인다. 이제 wwwroot 폴더를 살펴보자. 안에는 여러가지의 서브 폴더들이 있는데 CSS,JS, 써드-파티 라이브러리를 설치할 수 있는 라이브러리 등이 들어있는 static파일들이 있다. wwwroot에 있는 파일들은 startup.cs 파일에 있는 app.UseStaticFiles()를 통해 사용할 수 있다.

1-1. IIS는 무엇인가?

IIS (Internet Information Services)는 ASP.NET 웹 응용 프로그램을 호스팅하는 데 사용되는 Microsoft의 가장 강력한 웹 서버 중 하나이다. IIS에는 ASP.NET 요청을 처리하는 자체 ASP.NET Process Engine이 있다. 따라서 요청이있을 때 IIS는 클라이언트에서 서버로 전달되며 IIS는 해당 요청을 받아 처리 한 다음 클라이언트로 응답을 보낸다.

1-2. 어떻게 작동하는가?

어떻게 작동하는지 알기전에 두 가지 중요한 개념에 대해 짚고 넘어가야한다.

1.Worker Process

Worker Process (w3wp.exe)는 IIS에서 ASP.Net 응용 프로그램을 실행한다.이 프로세스는 클라이언트 시스템에서 들어오는 모든 요청과 응답을 관리한다. 모든 ASP.Net 기능은 Worker Process의 범위에서 실행된다. 클라이언트에서 서버로 요청이 들어 오면 작업자 프로세스가 요청과 응답을 생성하는 역할을하며 한마디로 작업자 프로세스가 IIS express에서 실행되는 ASP.NET 웹 응용 프로그램의 심장이라고 말할 수 있다.

2.Application Pool

Application Pool은 Worker Process의 컨테이너이다. Application Pool은 동일한 구성을 공유하는 IIS Worker Process 집합을 분리하는 데 사용된다. Application Pool을 사용하면 모든 웹 응용 프로그램의 보안, 안정성 및 가용성이 향상된다. Worker Process는 프로세스의 경계 역할을 하기 때문에 하나의 작업자 프로세스 또는 응용 프로그램에 문제가 있거나 재활용 될 때 다른 Application Pool이나 Worker Process가 영향을받지 않도록 각 Application Pool을 분리할 수 있도록 사용된다.

이렇게하면 특정 웹 어플리케이션이 다른 응용 프로그램 풀에 구성되어 있으므로 다른 웹 어플리케이션에 영향을주지 않는다.

그렇다면 실제로 IIS가 어떤식으로 요청을 받아 처리하는지 두 레이어로 설명하겠다.

1. Kernel Level

커널모드는 HTTP.SYS와 함께 IIS 6.0에 처음 도입 되었다고 한다. 따라서 클라이언트에서 서버로 요청이 올 때마다 HTTP.SYS를 처음 만나게 된다. HTTP.SYS는 요청을 특정 Application Pool로 전달하는 역할을 한다.그렇다면 한가지 의문이 들 수 있다.

HTTP.SYS는 요청을 보낼 위치를 어떻게 알 수 있나?

새 Application Pool이 생성 될 때마다 Application Pool의 ID가 생성되고 HTTP.SYS에 등록된다. 따라서 HTTP.SYS가 웹 어플리케이션에서 요청을 받을 때마다 Application Pool을 기반으로 요청을 보낸다.
이것이 IIS 요청 처리의 첫 번째 단계이다.
지금까지 Client에서 요구한 정보와 요청이 IIS의 Kernel 레벨에서 HTTP.SYS로 들어 온다. HTTP.SYS는 요청을 보낼 Application Pool을 ID로 식별한다. 이제 이 요청이 HTTP.SYS에서 Application으로 이동하는 방법을 살펴 보자.

2. User Level

IIS의 사용자 레벨에는 HTTP.SYS에서 요청을 받아 해당 Application Pool로 전달하는 WAS (Web Admin Services)가 있다.

Application Pool은 요청을 받으면 해당 요청을 Worker Process (w3wp.exe)로 전달한다. Worker Process "w3wp.exe"는 올바른 ISAPI extension을 로드하기 위해 요청의 URL을 조회합니다. ISAPI extension은 다른 리소스에 대한 요청을 처리하는 IIS이다. ASP.NET를 설치하면 기본적으로 ISAPI extension(aspnet_isapi.dll)을 설치한다.

Worker Process가 aspnet_isapi.dll을 로드하면 어플리케이션의 진입점인 HTTPRuntime을 시작한다. HTTPRuntime은 ProcessRequest 메서드를 호출하여 처리를 시작하는 클래스이다.

이후 앱에 설정된 Pipeline(미들웨어)를 지나간 후 엔드포인트에 도달하게 된다.
(참고한 글이 2013년도 글이라 실제 앱 설정부분은 차이가 좀 있지만 개념에 대해 숙지하고 넘어가면 될 것 같다.)

2. MVC란 정확히 무엇인가?


이제 프로젝트에서 볼 남은 폴더는 Model, View, Controller만 남았다. 우리가 대부분의 작업을 진행하게될 폴더이다. 그렇다면 기본적으로 설정된 MVC를 통해 서로 어떻게 연결되어 있고 MVC들이 하는 작업이 무엇인지 알아보자.

  • Model : 모델은 어플리케이션의 데이타를 처리하는 부분이다. 비즈니스 로직은 하나도 들어가 있지 않는다. 데이터베이스의 테이블들의 엔티티를 대변한다. 즉 모델을 어떻게 정의하냐에 따라 데이터베이스에 저장되는 데이터도 달라질 것이다.

  • View : View는 MarkUp(Razor Syntax)을 포함한 유저 인터페이스이다. Razor 엔진을 사용해 View를 렌더링하고 View는 모든 Controller를 통해 전달된 모델 데이터를 렌더링한다.

  • Controller : Controller는 말 그대로 어떻게 서버와 통신할지 모든것을 통제한다. Controller는 라우트를 기반으로 작업을 호출하고 뷰에서 렌더링할 데이터를 모델로부터 가져온다.

한 눈에 정리하자면 다음과 같다. 브라우저(클라이언트)가 서버로 요청을 보낸다. 이후 서버가 URL을 통해 어떤 컨트롤러한테 맡길지 라우팅한다. 이후 컨트롤러가 모델에게 데이터를 받아오고 받아온 데이터를 뷰에게 넘겨준다. 뷰는 받은 데이터를 채우고 다시 컨트롤러에게 넘겨준다. 그 이후 컨트롤러는 모든것을 서버로 보내고 서버는 브라우저로 응답을 보낸다.

0개의 댓글