ASP.NET Core의 요청 기능

등록일시: 2017-10-30 08:00,  수정일시: 2017-10-30 08:00
조회수: 4,711
이 문서는 ASP.NET Core 기술을 널리 알리고자 하는 개인적인 취지로 제공되는 번역문서입니다. 이 문서에 대한 모든 저작권은 마이크로소프트에 있으며 요청이 있을 경우 언제라도 게시가 중단될 수 있습니다. 번역 내용에 오역이 존재할 수 있고 주석은 번역자 개인의 의견일 뿐이며 마이크로소프트는 이에 관한 어떠한 보장도 하지 않습니다. 번역이 완료된 이후에도 대상 제품 및 기술이 개선되거나 변경됨에 따라 원문의 내용도 변경되거나 보완되었을 수 있으므로 주의하시기 바랍니다.
본문에서는 ASP.NET Core의 요청 기능(Request Features)에 관해서 살펴봅니다.

HTTP 요청 및 응답과 관련된 웹 서버의 세부 구현 정보는 인터페이스를 통해서 정의됩니다. 이 인터페이스들은 응용 프로그램의 호스팅 파이프라인을 만들거나 수정하기 위해 서버 구현 및 미들웨어에 의해서 사용됩니다.

기능 인터페이스

ASP.NET Core는 서버가 지원하는 기능을 식별하기 위해 사용되는 HTTP 기능 인터페이스를 Microsoft.AspNetCore.Http.Features 네임스페이스에 다수 정의하고 있습니다. 다음 기능 인터페이스들은 요청을 처리하고 응답을 반환합니다:

IHttpRequestFeature 인터페이스는 프로토콜, 경로, 쿼리 문자열, 헤더 및 본문을 비롯한 HTTP 요청 구조를 정의합니다.

IHttpResponseFeature 인터페이스는 상태 코드, 헤더 및 응답 본문을 비롯한 HTTP 응답 구조를 정의합니다.

IHttpAuthenticationFeature 인터페이스는 ClaimsPrincipal에 기반한 사용자 식별 및 인증 처리기 지정을 위한 지원을 정의합니다.

IHttpUpgradeFeature 인터페이스는 서버가 프로토콜을 전환하고자 할 때, 클라이언트가 사용할 추가 프로토콜을 지정할 수 있는 HTTP 업그레이드 지원을 정의합니다.

IHttpBufferingFeature 인터페이스는 요청 또는 응답, 혹은 둘 모두의 버퍼링을 비활성화시키는 메서드들을 정의합니다.

IHttpConnectionFeature 인터페이스는 로컬 및 원격의 주소와 포트 속성을 정의합니다.

IHttpRequestLifetimeFeature 인터페이스는 연결 중단 및 요청이 중간에 종료되었는지 (클라이언트가 연결을 끊은 경우 등) 감지하기 위한 지원을 정의합니다.

IHttpSendFileFeature 인터페이스는 비동기적으로 파일을 전송하는 메서드를 정의합니다.

IHttpWebSocketFeature 인터페이스는 웹 소켓을 지원하기 위한 API를 정의합니다.

IHttpRequestIdentifierFeature 인터페이스는 요청을 고유하게 식별하고자 할 때 구현할 수 있는 속성을 추가합니다.

ISessionFeature 인터페이스는 사용자 세션을 지원하기 위한 ISessionFactoryISession 추상화를 정의합니다.

ITlsConnectionFeature 인터페이스는 클라이언트 인증서를 조회하기 위한 API를 정의합니다.

ITlsTokenBindingFeature TLS 토큰 바인딩 매개 변수를 이용해서 작업하기 위한 메서드를 정의합니다.

노트

ISessionFeature 인터페이스는 서버 기능은 아니지만 SessionMiddleware로 구현됩니다 (ASP.NET Core의 세션 및 응용 프로그램 상태 문서 참고).

기능 컬렉션

HttpContextFeatures 속성은 현재 요청에서 사용 가능한 HTTP 기능을 가져오거나 설정할 수 있는 인터페이스를 제공합니다. 기능 컬렉션은 요청 컨텍스트 내에서도 변경이 가능하기 때문에, 미들웨어를 통해서 컬렉션을 수정하거나 추가 기능에 대한 지원을 추가할 수 있습니다.

미들웨어 및 요청 기능

미들웨어는 서버가 기능 컬렉션을 생성하는 동안 컬렉션에 기능을 추가할 수도 있고 반대로 컬렉션의 기능을 사용할 수도 있습니다. 예를 들어서, StaticFileMiddlewareIHttpSendFileFeature 기능에 접근합니다. 만약 이 기능이 컬렉션에 존재하면 이를 이용해서 요청된 정적 파일을 파일의 물리적 경로로부터 전송합니다. 그러나 기능이 존재하지 않으면, 보다 느린 대안을 사용해서 파일을 전송합니다. IHttpSendFileFeature를 사용하면 운영 체제가 파일을 열고 직접 네트워크 카드에 커널 모드 복사를 수행할 수 있습니다.

또한 미들웨어는 서버가 설정한 기능 컬렉션에 기능을 추가할 수도 있습니다. 이때 기존 기능을 미들웨어로 대체할 수도 있기 때문에, 미들웨어로 서버의 기능을 향상시킬 수도 있습니다. 컬렉션에 추가된 기능은 요청 파이프라인의 이후 다른 미들웨어나 기반 응용 프로그램 자체에서 그 즉시 사용 가능합니다.

사용자 지정 서버 구현과 특정 미들웨어 확장을 결합해서 응용 프로그램이 요구하는 정확한 기능 모음을 구성할 수 있습니다. 이 기능을 활용하면 서버를 변경하지 않고도 누락된 기능을 추가할 수 있으며, 최소한의 기능만 노출되도록 구성함으로써 공격 영역을 제한하고 성능을 향상시킬 수 있습니다.

요약

기능 인터페이스는 특정 요청이 지원 가능한 특정 HTTP 기능을 정의합니다. 서버는 기능 컬렉션 및 해당 서버가 지원하는 초기 기능 모음을 정의하지만, 미들웨어를 사용해서 해당 기능을 향상시킬 수 있습니다.

추가 자료