본문 바로가기

백엔드/닷넷

포스트그레스 사용하기 - 코드 우선 방식

반응형

.NET은 데이터베이스를 생성할 때 작성된 코드를 통해 데이터베이스를 생성하는 Code first (코드우선) 방식과 데이터베이스의 데이터를 바탕으로 코드를 작성하는 data first (데이터 우선) 방식을 제공합니다. 오늘은 코드우선방식으로 포스트그레스를 연결해 보겠습니다.

목차

애플리케이션 생성

 

.NET web-API 생성하기

개발도구 설치하기 .NET을 이용하여 웹애플리케이션을 만들기 위해서는 .NET에서 제공하는 개발도구가 필요합니다. 개발도구 다운로드는 아래 링크에서 가능합니다. .NET | Free. Cross-platform. Open Sour

jin-co.tistory.com

포스트그레스 설치

포스트그레스 데이터베이스를 구동할 서버가 필요한데 닥커를 통해 설치하겠습니다

닥커설치

 

닥커?

애플리케이션이 글로벌 환경에서 작동하기 위해서는 버전, 설정 등 기본적인 구성이 일치해야 하는데요 닥터는 애플리케이션 작동에 필요한 구성요소를 패키지로 묶어 추가 설정 없이 작동하

jin-co.tistory.com

포스트그레스 생성

설치한 닥커에 데이터베이스를 생성하기 위해 설정이 필요한데 아래 설정파일을 다운로드하여 프로젝트 루트에 저장

docker-compose.yml
0.00MB

※ 파이썬처럼 들여 쓰기 내어 쓰기로 범위가 지정되므로 주의

services:
  db: 
    image: postgres
    environment:
      POSTGRES_PASSWORD: secret
      POSTGRES_USER: root
    ports:
      - 5432:5432
    volumes:
      - postgres-data:/data
    
volumes:  
  postgres-data:

닥커 데스크톱을 열고

편집기로 돌아와 아래명령어를 실행

docker-compose up

연결 테스트

닥커 데스크톱에 생성된 데이터베이스 구동 (재생버튼)

테스트를 위해 아래 익스텐션을 설치

익스텐션설치가 완료되면 생성된 코끼리 아이콘을 누르고 플러스 아이콘 선택

열린 창에 호스트 명을 입력

docker-compose파일에 입력한 값을 유저,

비밀번호,

포트 순으로로 입력

원하는 커넥션 선택 (보기에선 스탠더드 선택)

표시를 원하는 데이터베이스 선택

연결완료

애플리케이션과 연결하기

1. 개체(Entity)를 만들기

개체는 클래스 파일로 모델과 같은 개념입니다. 생성된 개체는 데이터베이스의 테이블에 해당하여 필드를 규정합니다.

먼저, 프로젝트 폴더를 열고 개체를 저장할 폴더를 생성(필수는 아니지만 폴더정리를 위해 만들겠습니다).

생성된 폴더에 열고 C# 클래스 파일을 생성합니다. 

저장할 데이터의 속성으로 지정합니다.

2. 패키지 설치

데이터베이스와 연결을 위한 설정을 해 줄 패키지가 필요한데요. 검색창에 누겟갤러리를 검색하여 엽니다.

NuGet: Open NuGet Gallery

▶ 설치할 패키지

패키지를 설치할 때 주의할 점은 패키지 버전이 반드시 .NET의 버전과 같아야 한다는 점입니다. 예를 들어 .NET 7의 경우 7.으로 시작하는 패키지를 다운로드하여야 합니다.

Npgsql.EntityFrameworkCore.PostgreSQL

포스트그레스 데이터베이스 패키지로 포스트그레스 사용을 가능하게 해 줍니다. 우측 체크박스를 체크하고 'Install'을 누릅니다.

Microsoft.EntityFrameworkCore.Design

코드 우선 데이터베이스 방식을 사용하기 위해서 필요한 패키지로, 우측 체크박스를 체크하고 'Install'을 누릅니다.

마이그레이션에 필요한 패키지를 설치합니다.

dotnet-ef

3. Db Context 클래스 생성

먼저, 디비콘텍스트 클래스를 담을 폴더를 생성합니다.

생성된 폴더를 우클릭하여 C# 클래스를 생성합니다.

생성된 클래스 명에 아래와 같이 'DbContext'를 상속받습니다.

using Microsoft.EntityFrameworkCore;

아래와 같이 Contructor를 추가하고 각각의 데이터가 저장될 속성을 생성합니다.

using API.Entities;
using Microsoft.EntityFrameworkCore;

namespace API.Data
{
  public class ShopContext : DbContext
  {
    public ShopContext(DbContextOptions options) : base(options)
    {
    }

    public DbSet<Item> Items { get; set; }
  }
}

데이터베이스와 연결을 위해 연결문을 작성해야 하는데요. appsettings.Development.json과 appsettings.json 파일을 활용하여 환경변수로 사용이 가능합니다.

해당 파일에 포스트그레스 연결문을 추가합니다. 값으로 들어가는 부분은 docker-compose파일에 입력한 값과 일치해야 합니다

"Server=localhost; Port=5432; User Id=root; Password=secret; Database=commerce"
{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
    }
  },
  "ConnectionStrings": {
    "Default": "Server=localhost; Port=5432; User Id=root; Password=secret; Database=commerce"
  }
}

4. Db Context 서비스 설정

모든 서비스의 설정은 Program.cs파일에서 가능합니다. 파일을 열고 아래와 같이 디비콘텍스트 서비스를 추가합니다.

builder.Services.AddDbContext<ShopContext>(opt =>
{
  opt.UseNpgsql(builder.Configuration.GetConnectionString("Default"));
});

5. 마이그레이션


※ 아래 커맨드를 통해 사용 사용가능한 ef 명령어 확인이 가능합니다.

dotnet ef migrations

API 폴더로 이동하여 아래 명령어를 실행합니다 (앱이 구동 중이라면 중지 후 실행). 

dotnet ef migrations add <MigrationName> -o <path>

 

성공 시 아래와 같은 메시지가 표시되며

지정한 경로에 아래와 같이 세 가지 파일이 생성됩니다.


※ 생성된 세 파일 중 Designer.cs 와 Snapshot.cs는 생성된 데이터베이스의 백업기능을 하며, 테이블의 생성과 삭제 등 주요 코드는 <지정한 마이그레이션이름>.cs 파일에 있습니다. 

 

※ 한 가지 주의할 점은 마이그레이션 폴더 생성 시 Migration이라고 짓게 되면 마이그레이션이 상속받는 부모 클래스 'MIgration'과 중복되어 에러가 발생합니다.

 여러 프로젝트를 가지는 경우 솔루션 단위에서 실행하는 것이 더 효율적인데요 명령어는 아래와 같습니다.

dotnet ef migrations add <MigrationName> -p Infrastructure/ -s API/ -o <Path>


6. 데이터베이스 생성하기

마이그레이션이 완료되면 아래 명령어로 데이터베이스를 생성합니다. 데이터베이스 명령어는 drop과 update 두 가지가 있습니다.

dotnet ef database update


※ 아래와 같은 에러가 발생한다면 연결문을 찾지 못하는 것이 원인으로 오타가 없는지 살펴봅니다.

 여러 프로젝트를 가지는 경우 솔루션 단위에서 실행하는 것이 더 효율적인데요 명령어는 아래와 같습니다.

dotnet ef database update -p Infrastructure/ -s API/

※ 데이터베이스 자동생성하기

 

자동 마이그레이션

데이터베이스를 생성에 필요한 마이그레이션 명령어를 매번 실행하지 않고 프로그램 작동 시 자동으로 동작하도록 설정하는 방법을 보겠습니다. 애플리케이션 생성 먼저 .NET 애플리케이션을

jin-co.tistory.com


7. 생성된 데이터 확인

포스트그레스 익스텐션을 열고 연결된 호스트 리프레쉬

아래와 같이 데이터베이스가 확인되면 완성

이상으로 코드우선 방식으로 .NET과 포스트그레스를 연결하는 방법을 살펴보았습니다.

 

728x90
반응형