Back to top

Aspnet Core에서 EntityFramwork를 활용해 MySql연결하기

작성날짜 2024/07/08

SqlServer는 Arm을 지원하지 않아요.


마이크로소프트 생태계에서 데이터베이스를 쓴다고 하면 SqlServer가 국룰이다. 물론 aspnet core에서도 이를 매우 사용하기 편하게 지원하고 있다.

하지만 내 서버는 Arm 아키텍처 기기에서 돌아가고 있어서 차선책인 MySql을 사용하게 되었다. MySql을 지원하는 패키지가 있긴 했지만 마이크로소프트의 공식 지원이 아니어서 그런지 여러 시행착오 끝에 연결에 성공했다.

그래서 또 까먹지 않기 위해 이렇게 기록을 남겨둔다.


아래와 같은 순서대로 진행을 하였다.

  1. 프로젝트 생성
  2. 패키지 설치
  3. Model 작성 및 DbContext 작성
  4. 연결 설정
  5. 데이터베이스 업데이트
  6. 작동 테스트


프로젝트 생성


우선 Visual Studio에서 Web API 템플릿을 선택해준다.

rte_image_0.png


프로젝트 이름은 적당히 적어넣고

rte_image_2.png


OpenAPI는 필요 없으니 선택 해제하고 나머지는 건드리지 않고 프로젝트를 생성

rte_image_4.png


프로젝트를 실행해보면 기본 WeatherForecast Api의 응답이 출력되는 것을 확인할 수 있다.

rte_image_6.png


패키지 설치


패키지 관리자를 열어주고(Project>Manage NuGet Packages)

rte_image_19.png


첫번째로 설치할 것은 mysql 연결과 관련된 패키지이다. mysql을 검색해주자.

Pomelo.EntityFrameworkCore.Mysql을 설치해주자.

rte_image_21.png


그 다음엔 EntityFramework Core 관련 패키지이다.

EntityFramworkCore와 EntityFrameworkCore.Tools를 설치해주자.

rte_image_45.png

rte_image_47.png


Model 작성 및 DbContext 작성


프로젝트에 Model 파일을 담을 Models 폴더를 만들고, 서점 정보를 담을 BookStore.cs 파일을 만들자.

그리고 아래 사진과 같이 책 정보를 정의한다.

rte_image_84.png

Book 클래스가  aspnet core에서는 책의 정보를 담은 객체가 되고, EntityFramework에서는 테이블의 속성이 된다.

이름이나 타입뿐만 아니라 DataAnnotation을 통해 각 속성의 제약조건을 설정할 수 있다.

위 사진에 쓰인 DataAnnotation은 이렇다.

[Table("books")]
public class Book() {}

클래스의 이름은 Book이지만 Db에서 테이블의 이름은 books가 된다.


[Key]

이 속성을 PrimaryKey로 지정한다.


[Required]

null을 허용하지 않는다.


그 후 Data 폴더를 만들고 아래 사진처럼 파일을 만들어 준다.

rte_image_134.png

이로써 DbContext에 books 테이블이 추가 되었다.


연결 설정


appsetting.json에 들어가 다음 내용을 추가한다.

  "ConnectionStrings": {
    "DefaultConnection": "Server=[서버 위치];Port=[포트 번호];Database=[데이터베이스 이름];User=[유저 이름];Password=[비밀번호];Pooling=true;"
  }


스크린샷 2024-07-08 221839.png

그 후 Programs.cs 파일에서 mysql 서비스 등록을 해준다.

스크린샷 2024-07-08 213153.png

appsettings.json의 DefaultConnection의 정보로 연결을 시도한다.


데이터베이스 업데이트


terminal에 다음 명령어를 입력하여 EntityFramework migration을 생성해준다.

dotnet ef migrations add init

스크린샷 2024-07-08 213322.png

이렇게 성공으로 뜨면 프로젝트에 migration 폴더와 파일이 생성되어 있을 것이다.

스크린샷 2024-07-08 213332.png

우리가 작성한 DbContext의 내용을 토대로 sql 쿼리를 자동으로 생성해준다.

그 후 다음 명령어를 사용하면 Mysql database의 정보가 자동으로 갱신된다.

dotnet ef database update

스크린샷 2024-07-08 213755.png


작동 테스트


Visual Studio를 사용하고 있으므로 클릭 몇번으로 간단하게 컨트롤러를 만들 수 있다. 솔루션 탐색기에서 원하는 곳에 우클릭>추가>컨트롤러

스크린샷 2024-07-08 213904.png

Book 모델을 선택하면 자동으로 Book모델 CRUD API 컨트롤러가 생성된다.


임시로 데이터를 넣어놓고 테스트 해보면 잘 작동되는 것을 확인 할 수 있다.

스크린샷 2024-07-08 214234.png


결론


예전에 잘 몰랐을 때는 이렇게 모델 클래스를 만들고 DbContext를 상속해서 서비스 등록하는 등의 절차가 귀찮기만 하고 불필요 하다고 생각했었다. 하지만 다른 프레임워크를 써보니 EntityFramework의 장점을 알 수 있었다.

DB에서 불러온 데이터를 마치 객체처럼 바로 다루거나, sql 쿼리가 아닌 c#코드로 DB를 조작하는 등 다른 곳에서 당해보니까 알 수 있는 편한 기능이었다.


An unhandled error has occurred. Reload 🗙