본문 바로가기

ASP.NET&C#/ASP.NET MVC

[ASP.NET CORE/MVC] #3 프로젝트 기본 흐름

[ASP.NET CORE/MVC] #3 프로젝트 기본 흐름

안녕하세요 미나라이입니다.

 

이번에는 ASP.NET CORE MVC Web의 기본 흐름에 대해서 기술해보겠습니다.

공식 사이트에서는 Fundamentals라는 단어를 사용하네요

 

프로젝트 환경

OS : Windows 10

IDE : Visual Studio Code 1.62.2

.Net SDK : 5.0.403

.Net Runtime : .NetCore.App 5.0.10 / 5.0.12

 

추가적인 내용은 공식 사이트를 참고 해 주시면 될 것 같습니다.

근데 버전이 더 올라갔는지 문서를 갱신 하지 않은건지 공식사이트랑도 내용이 미묘하게 다른 부분도 있습니다.

 

ASP.NET Core fundamentals

Learn the foundational concepts for building ASP.NET Core apps.

docs.microsoft.com

MVC패턴에 대해서는 타 블로그 등에서도 기술 된 것이 많으니 검색 해보시면 많이 나올 것입니다.

 

그럼 간단하게 프로젝트 흐름에 대해서 알아봅시다.

 

1. 메인 함수

모든 프로젝트가 시작되면 시작지점이 있어야 하죠

그게 바로 메인 함수 입니다.

아무것도 없는 프로젝트라면 메인함수에서 파생되어야 할 기능들을 기술해야 하지만

ASP.NET CORE MVC프로젝트는 이러한 기본 기능들을 같이 작성 해 주어야 하기 때문에 이 부분은 안건들여도

프로그램(웹사이트)가 돌아가는데 지장이 없습니다.

Program.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;

namespace TestProject
{
    public class Program
    {
        public static void Main(string[] args)
        {
            CreateHostBuilder(args).Build().Run();
        }

        public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartup<Startup>();
                });
    }
}

 

2. 기본 설정

메인 함수를 타고 Startup.cs 파일을 통과합니다.

여기에는 각종 기본 설정들이 들어갑니다.

이 부분에서 기본 설정의 json파일들을 읽어들입니다.

Startup.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.HttpsPolicy;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;

namespace TestProject
{
    public class Startup
    {
        public Startup(IConfiguration configuration)
        {
            Configuration = configuration;
        }

        public IConfiguration Configuration { get; }

        // This method gets called by the runtime. Use this method to add services to the container.
        // 이곳에는 ASP.NET CORE에서 제공하는 기본 DI를 기술하는 부분 입니다.
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddControllersWithViews();
        }

        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        // 이곳은 외부에서 받은 패키지나 라이브러리의 설정을 기술하는 곳입니다.
        // 전역으로 설정한 프로퍼티 파일 등을 실행하는 경우에도 사용 됩니다.
        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            else
            {
                app.UseExceptionHandler("/Home/Error");
                // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
                app.UseHsts();
            }
            app.UseHttpsRedirection();
            app.UseStaticFiles();

            app.UseRouting();

            app.UseAuthorization();
			
            // 이곳에 컨트롤러 경로를 맵핑합니다.
            app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllerRoute(
                    name: "default",
                    pattern: "{controller=Home}/{action=Index}/{id?}");
                    // 추가 예시
                    name: "addMap",
                    pattern: "{controller=Add}/{action=Index}");
            });
        }
    }
}

 

3. 컨트롤러

기본 설정 파일을 다 읽고 나면 컨트롤러로 넘어옵니다.

Startup.cs파일에 디폴트로 기술된 경로에는 

컨트롤러 = Home / Action = Index로 정의되어있네요

컨트롤러 파일을 봅시다.

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using TestProject.Models;

namespace TestProject.Controllers
{
    // 컨트롤러 정의가 Home인 경우 Controller를 제외한 문자열에 맵핑하게 됩니다.
    // 그러므로 Home컨트롤러로 들어오게 됩니다.
    public class HomeController : Controller
    {
        private readonly ILogger<HomeController> _logger;

        public HomeController(ILogger<HomeController> logger)
        {
            _logger = logger;
        }
		
        // Home컨트롤러의 Action정의가 Index였기 때문에 해당 메소드를 통과합니다.
        public IActionResult Index()
        {
            // 이 부분에서 일련의 처리를 합니다
            
            // 처리를 다 끝내면 View페이지로 이동을 합니다.
            // 이 때 Controller이름/Action이름에 맞는 View페이지를 찾아서 이동합니다.
            return View();
        }

        public IActionResult Privacy()
        {
            return View();
        }

        [ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
        public IActionResult Error()
        {
            return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });
        }
    }
}

 

4. 뷰 스타트 페이지

뷰 페이지를 호출하기 전에 공통으로 호출되는 부분입니다.

이 부분에 웹페이지의 메뉴 부분 같이 공동으로 들어가는 레이아웃 파일을 지정 할 수 있습니다.

디폴트는 _Layout.cshtml파일입니다.

만약 Layout을 안 쓰고 싶다고 하면 저 부분을 null로 고치시면 됩니다.

_ViewStart.cshtml

@{
    Layout = "_Layout";
}

 

5. 뷰 페이지

컨트롤러에서 뷰 페이지로 리턴을 하면 해당 뷰 페이지로 이동을 합니다.

뷰 페이지가 무사히 통과가 되어야 우리가 볼 수 있는 웹 페이지가 정상적으로 표시가 됩니다.

View는 메인 프로젝트의 Views페이지를 바라보고 있습니다.

컨트롤러에서 뷰 페이지로 이동할때 중요한게

1. 컨트롤러의 이름 (Controller를 뺀 것)

   예) HomeController면 Home

2. 해당 컨트롤러 안에 Action의 이름

   예) Index

3번의 컨트롤러 경로를 탔을 경우 View의 경로는

/Views/Home/Index.cshtml이 됩니다.

 

※ 그리고 로그인 페이지처럼 메뉴가 있으면 안 될 경우

중간에 Layout = null;로 선언 해 주면 됩니다.

Index.cshtml

@{
    ViewData["Title"] = "Home Page";
    // Layout메뉴를 표시하고 싶지 않을 경우 이곳에 다시 재 정의를 해 주면 됩니다.
    Layout = null;
}

<div class="text-center">
    <h1 class="display-4">Welcome</h1>
    <p>Learn about <a href="https://docs.microsoft.com/aspnet/core">building Web apps with ASP.NET Core</a>.</p>
</div>

 

 

다음 포스팅에서는 Layout페이지에 대해서 간단하게 기술 해 보도록 하겠습니다.

 

 

 

728x90
반응형