[.net Core] 닷넷으로 웹개발 - MVC 패턴에 따라 코드 이해하기 + REST API 사용

RedPanda·2022년 12월 29일
0

서비스를 만들어보려면 코드를 이해해야 한다. 이번 포스팅은 기본 프로젝트를 이해하고 API를 간단하게 사용해보려 한다.

프로젝트 구조 및 Program.cs

주의깊게 볼 구조는 다음과 같다.

├── Controllers
│   ├── HomeController.cs
├── Models
│   ├── ErrorViewModel.cs
├── Program.cs
├── Properties
│   └── launchSettings.json
├── Views
│   ├── Home
│   │   ├── Index.cshtml
│   │   └── Privacy.cshtml
│   ├── Login
│   │   └── index.cshtml
│   ├── Shared
│   │   ├── Error.cshtml
│   │   ├── _Layout.cshtml
└──-------- _Layout.cshtml.css

우선 Program.cs를 확인해보자.

var app = builder.buld(): builder라는 object에 의해 빌드된다.
app.UseRouting(): 후에 라우팅하는 방법을 설정하는 것 같다.
app.UseAuthorization(): 인증 및 접근에 대한 보안 설정인 것 같다.
app.MapControllerRoute(): 이것으로 웹의 URL 주소를 설정해주는 것 같다.
app.Run(): 서버 실행일 것이다.

MVC의 소통 방식

앞서 Route에서 URL을 매핑한 방식대로 확인해보니 각각 이런 방법으로 진행되는 것 같았다.

  • HomeController.cs 의 Index(GET)에 접근한다면
    이런 방식으로 설정된다. -> ip:port/Home/Index
  • 해당 Index function에서 return View를 한다면 같은 함수명의 cshtml 파일을 View 디렉토리의 Home 디렉토리 아래에 만들어놓아야 한다. -> src/views/Home/Index.html

Controllers

View 디렉토리는 html과 같기도 하고 js도 사용이 가능하기에 굳이 설명하지 않겠다.(기존 html과 큰차이 X)

URL에 접근을 하면 처음으로 접근하는 곳이 /Home/Index 이다. 이는 Program.cs에서 default값을 해당 URL로 잡아놓았기 때문이다.

app.MapControllerRoute(
    name: "default",
    pattern: "{controller=Home}/{action=Index}/{id?}");

어찌됐든 우리는 REST API를 기반으로 Controller에 접근하고자 한다.

using System.Diagnostics;
using Microsoft.AspNetCore.Mvc;
using dotnet_test.Models;

namespace dotnet_test.Controllers;

public class HomeController : Controller
{
    private readonly ILogger<HomeController> _logger;

    public HomeController(ILogger<HomeController> logger)
    {
        _logger = logger;
    }
    
    // METHOD : GET
    [HttpGet]
    public IActionResult Index()
    {
        return View();
    }
    // GET - PARAMETER
    public IActionResult Index(string id)
    {
    	Console.WriteLine(id);
        return View();
    }
    
    // METHOD : POST
    // BODY : { "id": "psg", "pass" : "123", "nick" : "moka", "email" : "test@test.com"}
    [HttpPost]
    public IActionResult Login([FromBody]Member member)
    {
        member.print();
        return Ok();
    }

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

해당 코드를 보면 [HttpGet] 또는 [HttpPost] 방식으로 REST API의 Method를 세팅해준다.

GET에서 화면을 보여주려면 return View(); 를 해주면 된다. parameter를 담으려면 function의 파라미터에 변수를 넣어주기만 하면 된다.

POST방식에서 BODY에 담으려면 함수의 파라미터에 [FromBody]를 넣어주면 된다.
여기서 보내주는 값이 Object(JSON)이라면 Models에서 따로 class로 정해주어야 한다. Models에서 이렇게 정의해주자.

public class Member
{
    public string? id { get; set; } // string?: null값에 대한 예외처리
    public string? pass { get; set; }
    public string? nick { get; set; }
    public string? email { get; set; }

    public void Print(){
        Console.WriteLine($"id: {this.id}/pass: {nick}/email: {email} asdfasd");
    }
}

Print를 사용하여 필드들을 하나씩 불러온 것을 활용하여 Dao를 사용하면 좋을 것 같다.

참고자료

profile
끄적끄적 코딩일기

0개의 댓글