센로그

3. MVC 철학 본문

게임/ASP.NET Core

3. MVC 철학

seeyoun 2024. 4. 15. 22:23

◆ MVC 철학

모델, 뷰, 컨트롤러로 구분하여 코드를 관리하는 패턴

 
ASP.NET Core에서 MVC는 다음과 같이 사용된다.

  • Model : 데이터 모델. (데이터를 표현하는 구조) 
    • 요리 재료
    • 메모리, 파일, DB 등에서 데이터 모델의 형태로 정보를 추출 (DTO 등)
  • Controller : 데이터 가공, 필터링, 유효성 체크, 서비스 호출
    • 재료 손질 및 요리
    • 각종 Service를 통해 요리함 (DI로 서비스 추가)
  • View : 최종 결과물을 어떤 형태로 보여줄지
    • 최종 서빙

이런식으로 역할을 분담하면 유동적으로 기능을 확장 및 변경할 수 있고, 재사용이 쉽다는 장점이 있다.
 


ASP.NET Core에서의 MVC

좀 더 구체적으로 살펴보자.
 
ASP.NET Core에서 MVC에는 Controller/Action이라는 요소가 있다.

  • Action: 요청에 대한 실제 처리 함수 (Handler)
  • Controller는 액션들을 포함하고 있는 그룹을 의미한다.

 

기본 MVC 프로젝트에는 HomeController라는 '컨트롤러'가 있고, 이 안에 IActionResult 형태를 반환하는 '액션'들이 존재한다.

액션 함수들이 유저의 요청에 대한 실제 처리를 담당한다.

 
예시를 보자.
Program.cs의 미들웨어 파이프라인에 보면 이런 코드가 있었다.

app.MapControllerRoute(
    name: "default",
    pattern: "{controller=Home}/{action=Index}/{id?}");
  • 어떤 요청을 받으면 해당 요청은 특정 '컨트롤러'와 그 안의 특정 '액션'으로 연결되어 처리된다.
    • 위 코드에서, 요청은
      • HomeController라는 컨트롤러로 연결되고
      • Index에 해당하는 (HomeController의) 액션을 실행하여 처리된다.

 


HomeController에 있는 액션들을 보면, 기본적으로 다음과 같이 IActionResult 타입을 반환한다. (MVC)

public IActionResult Index()
{
    return View();
}
  • 위 코드는 HTML View를 생성하여 반환하는 코드이다. (Index.cshtml 파일)

 
ASP.NET Core MVC 플젝에서 자주 사용되는 IActionResult는 다음과 같다.

  • ViewResult : HTML View 생성
  • RedirectResult : 요청을 다른 곳으로 토스. (ex) 결제페이지로 연결)
  • FileResult : 파일을 반환
  • ContentResult : 특정 string을 반환
  • StatusCodeResult : HTTP status code 반환
  • NotFoundResult : 404 HTTP status code 반환

 
※ 참고: 위 코드에서는 뷰 생성시에 왜 return new ViewResult()라고 안하고 return View()라고 했을까? 차이점이 뭘까?
=> 뷰를 보여주기 위해 new ViewResult()로 새로 만들어서 반환해도 된다.
그런데 매번 new로 새로 만들기는 싫으니까, Controller라는 헬퍼 클래스에서 미리 만들어놓은 View() 메서드를 쓰는 거임.

  • 얘도 내부적으로 ViewResult() 반환하도록 되어있음.
  • 이렇듯 보통 각 IActionResult 이름에서 'Result'만 지운 이름의 헬퍼 메서드들이 정의되어있으니 잘 사용하면 된다.
    • 예를들어 RedirectResult()에 대한 헬퍼 메서드는 Redirect()

 

'게임 > ASP.NET Core' 카테고리의 다른 글

6. View  (0) 2024.04.15
5. Model Binding (+Validation)  (0) 2024.04.15
4. Routing  (0) 2024.04.15
2. Middleware 기초  (0) 2024.04.15
1. MVC 프로젝트 소개 (Program.cs)  (0) 2024.04.15
Comments