.NET 5.0 - (5)

SeungHyuk Shin·2021년 4월 24일
0

Dotnet

목록 보기
5/5
post-thumbnail

Model in MVC

이번 섹션에는 MVC패턴에서 MODEL은 어떻게 나타나는지에 대해 공부해보자. 우선 모델을 만들때 고려해야될 점과 직접 데이터베이스를 보고 어떻게 데이터베이스를 설정 해야하는지 어떻게 데이터베이스를 저장해야되는지 어떻게 테이블을 만들고 업데이트 하는지 알아보자

모델은 무엇인가?

  • 모델은 데이터의 모양이다.
  • 모델은 도메인별 데이터와 MVC 아키텍쳐의 비즈니스 로직을 나타낸다
  • 어플리케이션의 데이터를 관리한다.
  • 모델 객체는 모델의 상태를 데이터베이스에 저장하거나 꺼내오는 역할을 한다.
  • 모델 클래스는 데이터를 퍼블릭하게 관리하고 모든 모델 클래스는 모델 폴더에 존재한다.

이제 실제로 모델을 만들어보자.

모델 우클릭 -> add -> class로 생성할 모델 템플릿을 가져오자.

namespace InAndOut.Models
{
    public class Item
    {
        [Key] //ASP.NET에서는 ID를 자동적으로 프라이머리 키로 설정하므로 실제로는 작성하지 않아도 된다.
        public int Id { get; set; }

        public string Borrower { get; set; }

    }
}

Code First Approach with EF(Entity Framwork)

  • Code First는 매우 인기있는 접근 방법이고 데이터베이스 활동보다는 코드가 완전한 통제를 가지고 있다.
  • 이 방법은 어플리케이션에 이미 존재하는 데이터베이스가 있어서는 안된다.
  • Code First 접근 방법은 entitiy들과 context 클래스를 먼저 적고 그 이후 migration 명령을 이용해 데이터베이스를 만드는것이다.
  • Domain-Driven Desin(DDD) 원칙을 따르는 개발자들은 도메인 클래스를 먼저 코딩 한 후 데이터베이스를 생성하는것을 선호한다.

DDD(Domain-Driven Design)는 실세계에서 사건이 발생하는 집합인 Domain(도메인)을 중심으로 설계하는 방법이다. 옷 쇼핑몰을 예로 들면 손님들이 주문하는 도메인, 점주들이 관리하는 도메인 등이 있을 수 있다. 이러한 도메인들이 서로 상호작용하며 설계하는 것이 도메인 주도 설계아다. 도메인 주도 설계에서 도메인은 각각 분리되어 있는데, 이러한 관점에서 MSA(MicroService Architecture)를 적용하면 용이한 설계를 할 수 있다. DDD에서는 같은 객체들이 존재할 수 있는데, 예를 들어 옷 구매자의 입장에서는 (name, price)와 같은 객체 정보를 담지만, 판매자의 입장에서는(madeTie, size, madeCountry) 등이 있을 수 있다. 즉, 문맥에 따라 객체의 역할이 바뀔 수 있는 것이 DDD이다.

마이그레이션은 무엇인가?

  • 어플리케이션을 개발할때 모델은 새 요구사항에 따라 바뀌기 쉽다. 이런것을 쉽게 도와주는것이 마이그레이션이다.
  • 데이터베이스는 모델과 동기화 되있어야 한다.
  • 마이그레이션의 특징은 모델을 수정함으로써 데이터베이스 스키마에게 새 컬럼 등 바뀐 항목을 알려줄수 있다.
  • 마이그레이션은 EF Core model와 함께 데이터베이스와 계속 동기화되고 데이터를 보존 할 수 있게한다.
  • 마이그레이션 EF Core에 의해 자동적으로 실행된다.
  • EF Core 마이그레이션은 Nuget 패키지 매니저 콘솔에서 실행되거나 Dotnet Command Line Interface(CLI)에서 실행 될 수 있다.

EF(Entity Framework) Core는 널리 사용되는 Entity Framework 데이터 액세스 기술의 가볍고 확장 가능한 오픈 소스 플랫폼 교차 버전이다.
EF Core는 다음과 같은 O/RM(개체 관계형 매퍼)으로 사용될 수 있다.
.NET 개발자가 .NET 개체를 사용하여 데이터베이스로 작업할 수 있도록 한다.
개발자가 일반적으로 작성해야 하는 대부분의 데이터 액세스 코드가 필요하지 않다.

이제 우리가 간단하게 만든 모델을 통해 테이블을 생성해보도록 하자. 우선 SQL 2019SSMS(SQL Server Management Studio)를 마이크로소프트 홈페이지에서 다운 받은 후 설치를 해준다.

이후 데이터베이스와 연결하기 위해선 연결 문자열을 사용해야 하는데 프로젝트에 appsetiings.jsoN 파일에서 설정해 줄수있다.

 "ConnectionStrings": {
    "DefaultConnection" : "Server=DESKTOP-6VH0EB7; Database=InAndOutDB; Truted_Connection = True; MultipleActiveResultSets = True"
  },

/// Server = 서버이름
/// Database = 데이터베이스 이름
// Trusted connection은  Windows 인증을 의미한다.SQL Server에는 혼합 및 윈도우즈 인증 모드의 두 가지 인증 모드가 있다.
// 혼합 인증은 SQL 서버 로그인(사용자 이름 및 암호)이다.
// MARS(Multiple Active Result Sets)는 단일 연결에서 여러 배치를 실행할 수 있도록 하는 SQL Server의 기능이다. 
// SQL Server에 MARS가 활성화되어 있으면 명령 개체를 사용할 때마다 연결에 세션이 추가된다.

MARS 추가설명
링크

MARS(Multiple Active Result Sets)를 사용하여 단일 SQL 서버 연결에서 보류 중인 여러 요청을 유지할 수 있다. 따라서 단일 연결에 대해 여러 SQL 문 또는 배치 문을 실행할 수 있으므로 각 연결에 대한 연결 열기 및 닫기의 오버헤드가 제거된다.

예를 들어, 데이터베이스의 각 고객에 대한 레코드를 업데이트해야 한다고 가정해보자. MARS 이전에 흐름은 다음과 같다.

For each customer
Open Connection
Update Record
Close connection
Loop

각 명령에 대해 서버에 대한 연결을 다시 열고 명령을 실행한 다음 연결을 닫아야 한다. 최신 프로그래밍 언어에는 이러한 단계 중 일부를 캡슐화하는 객체가 포함되지만 모든 단계가 수행되어야 한다. MARS를 사용하면 다음과 같은 흐름이 나타난다.

Open Connection
For each customer
Update Record
Loop
Close connection

연결은 한 번만 열리고 닫힌다. MARS는 동기화 인터리빙 방식으로 실행된다는 점에 유의해야한다. 병렬 실행의 느낌을 주기는 하지만, 실제 병렬 구현은 아니다. 병렬 실행이 필요한 경우 어플리케이션에서 직접 구현해야 한다.

연결 문자열의 설정이 끝났다면 이제 Nuget 패키지를 통해 필요한 모듈을 설치한다.

사진상에서는 SQL SERVER만 표시했지만 SQL SERVER와 CORE 둘다 설치해야한다.

이후 프로젝트에서 Data라는 폴더를 만든 후 InAndOutDbContext로 파일을 생성한다. 이 파일이 우리 데이터베이스와 어플리케이션을 이어줄 것이다.

지금 생성자에 어떻게 적혀있는지 완전히 이해가 안간다 하더라도 나중에 다시 설명할 예정이다. 일단 지금 중요한 것은 Dbcontext를 사용하기 위해 이 설정이 필요하다는 점이다.

다음 글에서는 실제로 Dbcontext를 설정하도록 하겠다.

0개의 댓글