본문 바로가기
Programming/C#

[C#] ASP.NET에서 MVC 사용하여 프로젝트 구축하기

by 코딩의성지 2022. 3. 10.

이직을 하면서 사용하는 기술 스택이 바꼈다.

 

DB는 오라클에서 MSSQL 로

언어는 Java에서 C#으로...!

 

기본적으로 ASP.NET MVC에 대한 학습이 필요하여 오늘부터 조금씩 정리해 두려고 한다.

 

이미 mvc패턴에 대해서는 대부분 아실 것이라 생각한다.

ASP.NET 에서도 여느 프레임워크 처럼 MVC를 공식적으로 지원하는데, 간단하게 MVC에 대해 설명을 드리면

MVC는 어플리케이션 구조를 모델, 컨트롤러, 뷰 라는 3가지 컴포넌트로 분리하여 호율적인 개발을 가능하게 하는 개발 패턴이다.

이 패턴을 통해 각 컴포넌트 간의 종속성을 줄이고, 각 모듈의 역할을 정확하게 분리하여 TDD나 병행적인 개발을 할 수가 있다.

 

MVC 동작 원리

 

MVC 패턴은 아시는 것처럼 위의 그림처럼 동작한다.

Client가 Controller에 특정 url로 요청을 하면,

Controller는 Model에게 해당 요청에 대한 데이터 처리 요청을 한다.

Model은 데이터를 비지니스 로직에 맞게 처리한 후 다시 Controller로 결과값을 리턴하고,

해당 결과값을 Controller가 View에 전달하고, View에서는 해당 결과값을 사용자에게 응답하여 보여준다.

 

Client가 요청을 할때 아래와 같은 방식으로 요청을 한다.

~~~~~.com/Member/Find/3

위의 url에서 Member는 Controller인데, MemberController를 의미하고, 

Find는 Action인데, Controller 내의 Find라는 메서드를 의미하고

맨 뒤의 3은 Id 인데, Find 메서드의 파라미터 값으로 들어오는 값을 의미한다.

 

~~~~~.com/Member

만약 특정 Action과 Id 값없이 Controller 까지만 호출을 하면,

자동으로 Index() 메서드를 찾아서 호출한다.

 

~~~~~.com

그리고 Controller 부도 호출을 하지 않으면, 자동으로 어플리케이션 내에 디폴트로 설정되어 있는 HomeController의 Index() 메서드를 호출한다.

 

잘 이해되는가?

 

지금부터는 아주 간단하게 MVC의 컴포넌트 요소인 Controller, View, Model에 대해 간단하게 정리하고 예제 코드를 작성해 보겠다.

 

Controller

 

ASP.NET MVC의 Controller를 제대로 이해하기 위해서는 

 

Controller, 

Controller Action,

Action Result 

 

이렇게 3가지 개념에 대해서 잘 알아야하고, 3가지 개념의 상관관계를 이해해야한다.

 

오늘은 위의 내용에 대해 깊게는 들어가지 않을 것이고, 간단하게 Controller의 역할에 대해서만 정리해두도록 하겠다.

깊은 내용은 미래의 내가 언젠가는 작성할 것 같다..

 

Controller는 기본적으로 클라이언트로 부터 요청을 수신하는 역할을 한다.

그리고 Model한테 "데이터를 처리해!" 라거나, View한테 "사용자에게 응답해" 등의 지시를 내린다.

그 이외에도 Controller는 사용자의 권한 체크나, 잘못된 정보를 요청했는지 등을 점검도 하고, 잘못됐을 경우에 에러를 리턴하는 역할도 한다.

Controller는 MVC에서 컨트롤 타워 역할을 하는 녀석이다.

 

아래 코드를 보자.

namespace MvcApplication.Controllers
{
    public class MemberController : Controller
    {
        public ActionResult Index()
        {
            return View();
        }

        public ActionResult Find(int? Id) 
        {
            if(Id == null)
            {
                return Content("Error Message : Id is Null.");
            }

            MemberActs memberActs = new MemberActs();
            var members = memberActs.GetMembers();

            return View(members);
        }
    }
}

위의 MemberController는 Index() 메서드와 Find() 메서드가 존재한다.

 

Find 메서드는 파라미터로 Id 값을 가지고 있고, null을 허용하도록 설정되어 있다.

그리고 MemberActs라는 Class의 내부가 궁금하겠지만 지금은 모델에게 DB로 부터 데이터를 찾아오는 비지니스로직을 수행하게 하는 녀석이라는 정도로만 이해하자.

그리고 가져온 데이터를 View에 파라미터로 태워서 리턴하는 구조로 되어 있다.

 

Model

 

다음은 Model을 좀 설명하고 예시를 보여드리도록 하겠다.

Model은 데이터의 속성을 정의하는 역할을 한다.

C#에서는 프로퍼티로 Model을 표현한다.

Model은 데이터를 처리하는 역할을 한다. 즉 비지니스 로직을 처리한다.

주로 데이터베이스와 연관되어 데이터를 읽고 쓰고 수정하고 삭제하는 CRUD 기능이 대부분이다.

 

아래 Model 예시를 보자.

namespace MvcApplication.Models
{
    public class Member
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public int Age { get; set; }
        public string Address { get; set; }

    }
}

위의 Member 모델 객체를 가지고 특정 Service 클래스에서 비지니스 로직을 처리하여 값을 컨트롤러로 다시 리턴하는 방식이 일반적인 방식이라 생각하면 된다.

 

지금 내가 작성중인 예제에서는 MemberActs라는 Class가 서비스 Service의 역할을 하고 있다고 보면된다.

 

View

 

마지막으로 View에 대해 말씀드리도록 하겠다.

View는 사용자에게 최종 결과를 출력하는 역할을 한다.

확장자는 aspx, ascx, vbhtml 등이 올 수 있지만 보통은 cshtml로 작성한다.

cshtml에서는 Razor 문법을 통해 c#과 동일한 문법을 사용할 수가 있다.

아래 Find.cshtml 예시를 보자.

@using MvcApplication.Models
@model List<Member>
@{
    ViewBag.Title = "Find";
}

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Member</title>
</head>
<body>
    <div>
        <table>
            <thead>
                <tr>
                    <th>이름</th>
                    <th>나이</th>
                    <th>주소</th>
                </tr>
            </thead>
            <tbody>

               @foreach(var item in Model)
            {
                <tr>
                    <td>@item.Name</td>
                    <td>@item.Age</td>
                    <td>@item.Address</td>
                </tr>
            }
                </tbody>
        </table>
    </div>
</body>
</html>

Model 값을 가져와서 C#의 문법인 foreach 문을 통해 데이터를 뿌려주고 있는것을 확인할 수 있다.

 

실행을 시켜보면

이런 식으로 원하는대로 View가 잘 표현된 것을 볼 수 있다.

 

오늘 아주 아주 아주~~ 기초적인 내용을 작성을 했는데, 사실 ASP.NET MVC 의 핵심적인 기능과 개념은 이게 다다.

 

앞으로 조금더 실무적인 내용으로 포스팅하겠지만, 이 기본을 우선 잘 아는 것이 중요하다고 생각한다.

 

오늘 포스팅은 여기서 마치도록 하겠다.

 

끝.

반응형

댓글