Docker를 사용한 React 및 .NET Core 6.0 샘플 프로젝트 - 1부

9163 단어 dockerreactcapi
이 기사에서는 Entity Framework Core Code First 접근 방식을 사용하는 ASP.NET Core 6.0 WEP API의 CRUD(만들기, 읽기, 업데이트 및 삭제) 작업에 대해 설명합니다.

이 게시물의 섹션은 다음과 같습니다.

웹 API 프로젝트 만들기
모델 추가
데이터베이스 컨텍스트 추가
마이그레이션으로 데이터베이스 생성
API 컨트롤러 및 메서드 만들기

컴퓨터에 다음 도구가 설치되어 있어야 합니다.

비주얼 스튜디오 2022
.NET 6.0 SDK
마이크로소프트 SQL 서버 익스프레스
우편 집배원

준비가 되었다면 시작하겠습니다.

ASP.NET Core 웹 API 프로젝트 만들기
Visual Studio -> 새 프로젝트 -> ASP.NET Core 웹 API를 엽니다.







아래 NuGet 패키지 설치



모델 추가

이제 데이터 모델 클래스를 구현할 것입니다.

솔루션 탐색기에서 프로젝트를 마우스 오른쪽 단추로 클릭합니다. 추가 -> 새 폴더를 선택하고 폴더 이름을 Models로 지정합니다.

그런 다음 Models 폴더를 마우스 오른쪽 버튼으로 클릭하고 추가->클래스를 선택합니다. 클래스 이름을 Movie.cs로 지정하고 추가를 클릭합니다.

다음으로 클래스에 다음 속성을 추가합니다.

namespace MoviesAPI.Models
{
    public class Movie
    {
        public int Id { get; set; }

        public string? Title { get; set; }

        public string? MovieLanguage { get; set; }

        public int ReleaseYear { get; set; }

        public string? OTT { get; set; }

    }
}


데이터베이스 컨텍스트 추가

이제 Models 폴더를 마우스 오른쪽 버튼으로 클릭하고 추가 -> 클래스를 선택합니다. 클래스 이름을 MovieContext로 지정하고 추가를 클릭합니다. 그런 다음 클래스에 다음 코드를 추가합니다.

using Microsoft.EntityFrameworkCore;

namespace MoviesAPI.Models
{
    public class MovieContext:DbContext
    {
        public MovieContext(DbContextOptions<MovieContext> options):base(options)
        {

        }

        public DbSet<Movie> MoviesList { get; set; } = null!;
    }
}


이제 appsetting.json을 업데이트하여 연결 문자열을 구성합니다.

"ConnectionStrings": {
    "MovieConnection": "Data Source=ServerName;Initial Catalog=Movies;Integrated Security=true"
  }


이제 내장 IOC 컨테이너에 데이터베이스 컨텍스트를 등록합니다. Program.cs에 다음 코드를 추가합니다.



마이그레이션으로 데이터베이스 생성

이제 EF Core 마이그레이션 기능을 사용하여 데이터베이스를 생성합니다.

도구 -> NuGet 패키지 관리자 > 패키지 관리자 콘솔을 열고 PMC에서 다음 명령을 실행합니다.
Add-Migration Initial
명령을 실행하면 마이그레이션 폴더 아래에 마이그레이션 파일이 생성됩니다.



다음 단계로 PMC에서 다음 명령을 실행합니다.
Update-Database
아래와 같이 새로 생성된 데이터베이스가 표시됩니다.



API 컨트롤러 및 메서드 만들기

영화 API 컨트롤러를 추가하고 CRUD 메서드를 테스트해 보겠습니다.

Controller 폴더를 마우스 오른쪽 버튼으로 클릭하고 Add -> Controller..를 선택한 다음 아래와 같이 API Controller - Empty를 선택합니다.

이름 : MoviesController.cs



MoviesContoller 파일에 다음 코드를 추가합니다. 그러면 컨트롤러 생성자를 통해 데이터베이스 컨텍스트가 주입됩니다.

private readonly MovieContext _movieContext;
        public MoviesController(MovieContext movieContext)
        {
            _movieContext = movieContext;
        }


이제 컨트롤러에 CRUD(생성, 읽기, 업데이트 및 삭제) 작업 메서드를 추가합니다. POST 메서드부터 시작하겠습니다.

POST 방법:

MoviesController.cs에 다음 코드를 추가합니다.

[HttpPost]
        public async Task<ActionResult<Movie>> AddMovie(Movie movie)
        {
            if (_movieContext == null)
            {
                return NotFound();
            }

            _movieContext.MoviesList.Add(movie);

            await _movieContext.SaveChangesAsync();

            return movie;
        }


개발자 PowerShell 또는 명령 프롬프트로 이동하여 아래 명령을 실행하여 POST 메서드를 테스트합니다.
dotnet build
dotnet run

Postman으로 이동하여 새 Http 요청 생성 및 POST 메서드를 실행합니다.
http://localhost:<portnumber>/api/movies


이제 SSMS로 이동하여 아래를 실행하여 추가된 동영상을 확인합니다.



마찬가지로 POST 메서드를 실행하여 데이터베이스에 영화를 몇 개 더 추가합니다.

GET 방법:

MoviesController.cs에 다음 코드를 추가합니다.

//GET : api/movies
        [HttpGet]
        public async Task<ActionResult<IEnumerable<Movie>>> GetMovies()
        {
            if(_movieContext == null)
            {
                return NotFound();
            }
            return await _movieContext.MoviesList.ToListAsync();
        }

        //GET : api/movies/id
        [HttpGet("{id}")]
        public async Task<ActionResult<Movie>> GetMovies(int id)
        {
            if (_movieContext == null)
            {
                return NotFound();
            }

            var movie = await _movieContext.MoviesList.FindAsync(id);
            if (movie == null)
            {
                return NotFound();
            }
            return movie;
        }


다음과 같이 Postman에서 두 엔드포인트를 호출하여 애플리케이션을 테스트할 수 있습니다.

https://localhost:{port}/api/movies

https://localhost:{port}/api/movies/{id}


업데이트 방법:

MoviesController에 다음 코드를 추가합니다.

 [HttpPut("{id}")]
        public async Task<ActionResult<Movie>> UpdateMovie(int id, Movie movie)
        {
            if (movie.Id != id)
            {
                return BadRequest();
            }

            _movieContext.Entry(movie).State = EntityState.Modified;

            await _movieContext.SaveChangesAsync();

            var updatedMovie = _movieContext.MoviesList.FirstOrDefaultAsync(x => x.Id == id);

            return movie;
        }


Postman을 사용하여 Update 메서드를 테스트하여 값을 업데이트합니다.



삭제 방법:

MoviesController.cs에 다음 코드를 추가합니다.

    [HttpDelete("{id}")]
        public async Task<IActionResult> DeleteMovie(int id)
        {
            var movie = await _movieContext.MoviesList.FindAsync(id);

            if (movie == null) return NotFound();

            _movieContext.MoviesList.Remove(movie);

            await _movieContext.SaveChangesAsync();

            return NoContent();

        }


Postman에서 다음 명령을 실행하여 Delete 메서드를 테스트합니다.



다음 부분에서 docker 파일을 사용하여 이 애플리케이션을 계속 실행할 것입니다. 여기에서 전체 프로젝트를 찾을 수 있습니다GitHub repository.

좋은 웹페이지 즐겨찾기