-
ASP.NET MVC에서 ASP.NET CORE MVC + WEBAPI의 여정 - 파트1프로그래밍 2024. 2. 15. 15:02
이제 과거의 유산을 걷어내고 새로 스택을 쌓을 시간 입니다.
ASP.NET MVC와 ASP.NET CORE MVC는 상당한 간극이 있다.
대표적으로 HttpContext를 사용하는 방법에 있다.
ASP.NET MVC의 HttpContext는 Application에서 전역 객체에 속한다.
아래와 같이 설명할 수 있다.
Request (Browser) ----> IIS - Create Application Thread (at ThreadPool) ---> ASP.NET MVC Pipeline ----> Find route to Controller
또한 ASP.NET MVC에서는 별도의 의존성 주입이 기본으로 없으므로 대부분의 코드가 HttpContext를 직접적으로 사용하고 있다.
코드로는 아래와 같다.
public bool IsMobile() {
return HttpContext.Current.Request.Browser.IsMobileDevice;
}물론 훌륭한 개발자라면 이미 HttpContext를 파라메터로 받아서 처리하고 있으리라.
하지만, 대개의 경우 위와 같다.
여기서 문제는 이러한 코드는 ASP.NET CORE MVC + API로 넘어가지 못한다.
이 이야기는 아래와 같다.
Request(Browser) ----> IIS(proxy) ---> Host Application(console application) ----> Create Thread ----> ASP.NET CORE MVC Middleware ----> Find route to Controller
따라서 ASP.NET CORE의 HttpContext 객체는 이제부터 전역 객체가 아니다.
또한 ASP.NET CORE에서는 Request에 대한 HttpContext처리가 Request당으로 묶인다.
또한 생성되는 시점도 다르고 근본적으로 기본 의존성 주입을 지원하므로 HttpContext가 전역 객체라는 것은 존재하지 않는다.
(HttpContext는 기본적으로 Scoped이며 Controller로 Scoped이다.)
코드로는 아래와 같다.
public bool IsMobile(IHttpContextAsseor accessor) {
return accessor.HttpContext.Request.Browser.IsMobileDevice;
}물론 위 코드는 가상의 코드이다.
하지만 전역 객체가 없으므로 이제부터 모든 HttpContext에 대한 처리는 accessor를 이용한 처리로 변경된다.
다시 말하지만, ASP.NET CORE에서는 HttpContext가 전역 객체가 아니다.
또한 명칭을 보자.
ASP.NET MVC에서는 Current라는 속성이 붙는다.
ASP.NET CORE에서는 Current라는 속성이 없다.
동작 및 구조에 대한 처리부터 상이함에 유의하자.
그리고 Spring 개발자라면 이미 처음부터 하고 있는 일이 되겠다.
항상 강조하지만 ASP.NET 및 C#의 하위 의존성으로 .net framwork에서 파생된 문제가 .net core + 에서는 모두 없어지는 경우가 되겠다.
그리고 항상 강조하지만 항상 최선을 다하는 개발자는 .net framework 시절에도 HttpContext의 전역 객체를 함부로 사용하지 않을 것이다.
'프로그래밍' 카테고리의 다른 글
예매, 예약 시스템에 대한 고찰 - 1 (1) 2024.03.03 ASP.NET MVC에서 ASP.NET CORE MVC + WEBAPI의 여정 - 파트2 (1) 2024.02.16 로그인을 구현하시나요? 당장 Session사용을 멈추세요. (0) 2024.02.15 ASP.NET 개발에서 DataTable은 만악의 근원입니다. (0) 2024.02.15 Why asp.net is too slow? compared to Java Spring. (0) 2024.01.09