연습 - 데이터 저장소 추가

완료됨

피자용 웹 API 구현을 시작하기 전에 작업을 수행할 수 있는 데이터 저장소가 있어야 합니다.

재고에서 피자를 나타내려면 model 클래스가 필요합니다. 모델에는 피자의 특징을 나타내는 속성을 포함합니다. 모델은 웹 API에 데이터를 전달하고 데이터 저장소에 피자 옵션을 유지하는 데 사용됩니다.

이 단원에서 해당 데이터 저장소는 간단한 로컬 메모리 내 캐싱 서비스입니다. 실제 애플리케이션에서는 Entity Framework Core와 함께 SQL Server와 같은 데이터베이스를 사용하는 것이 좋습니다.

피자 모델 만들기

  1. 다음 명령을 실행하여 Models 폴더를 만듭니다.

    mkdir Models
    

    Visual Studio Code에서 Models 폴더를 선택하고 Pizza.cs라는 새 파일을 추가합니다.

    Visual Studio Code의 Models 폴더에 새 파일을 추가하는 스크린샷.

    이제 프로젝트 루트에 빈 Pizza.cs 파일이 있는 Models 디렉터리가 포함됩니다. 디렉터리 이름인 Models은 규칙입니다. 디렉터리 이름은 웹 API가 사용하는 model-view-controller 아키텍처에서 가져온 것입니다.

  2. 다음 코드를 Models/Pizza.cs에 추가하고 변경 내용을 저장합니다. 이 클래스는 피자를 정의합니다.

    namespace ContosoPizza.Models;
    
    public class Pizza
    {
        public int Id { get; set; }
        public string? Name { get; set; }
        public bool IsGlutenFree { get; set; }
    }
    

데이터 서비스 추가

  1. 다음 명령을 실행하여 Services 폴더를 만듭니다.

    mkdir Services
    

    Visual Studio Code에서 폴더를 선택하고 PizzaService.cs라는 새 파일을 추가합니다.

    Services 폴더에 새 파일을 추가하는 방법을 보여주는 Visual Studio Code의 스크린샷.

  2. 다음 코드를 Services/PizzaService.cs에 추가하고 변경 내용을 저장합니다. 이 코드는 메모리 내 피자 데이터 서비스를 만듭니다.

    using ContosoPizza.Models;
    
    namespace ContosoPizza.Services;
    
    public static class PizzaService
    {
        static List<Pizza> Pizzas { get; }
        static int nextId = 3;
        static PizzaService()
        {
            Pizzas = new List<Pizza>
            {
                new Pizza { Id = 1, Name = "Classic Italian", IsGlutenFree = false },
                new Pizza { Id = 2, Name = "Veggie", IsGlutenFree = true }
            };
        }
    
        public static List<Pizza> GetAll() => Pizzas;
    
        public static Pizza? Get(int id) => Pizzas.FirstOrDefault(p => p.Id == id);
    
        public static void Add(Pizza pizza)
        {
            pizza.Id = nextId++;
            Pizzas.Add(pizza);
        }
    
        public static void Delete(int id)
        {
            var pizza = Get(id);
            if(pizza is null)
                return;
    
            Pizzas.Remove(pizza);
        }
    
        public static void Update(Pizza pizza)
        {
            var index = Pizzas.FindIndex(p => p.Id == pizza.Id);
            if(index == -1)
                return;
    
            Pizzas[index] = pizza;
        }
    }
    

    이 서비스는 기본적으로 두 개의 피자가 있는 간단한 메모리 내 데이터 캐싱 서비스를 제공합니다. Microsoft의 웹 API는 데모용으로 해당 서비스를 사용합니다. 웹 API를 중지하고 시작하면 메모리 내 데이터 캐시가 PizzaService의 생성자에서 두 개의 기본 피자로 다시 설정됩니다.

웹 API 프로젝트 빌드하기

다음 명령을 실행하여 앱을 빌드합니다.

dotnet build

빌드는 경고 없이 성공합니다. 빌드가 실패하면 출력에서 문제 해결 정보를 확인하세요.

다음 단원에서는 Pizza 모델과 PizzaService 클래스를 사용할 컨트롤러를 만듭니다.