연습 - 데이터 저장소 추가
피자용 웹 API 구현을 시작하기 전에 작업을 수행할 수 있는 데이터 저장소가 있어야 합니다.
재고에서 피자를 나타내려면 model
클래스가 필요합니다. 모델에는 피자의 특징을 나타내는 속성을 포함합니다. 모델은 웹 API에 데이터를 전달하고 데이터 저장소에 피자 옵션을 유지하는 데 사용됩니다.
이 단원에서 해당 데이터 저장소는 간단한 로컬 메모리 내 캐싱 서비스입니다. 실제 애플리케이션에서는 Entity Framework Core와 함께 SQL Server와 같은 데이터베이스를 사용하는 것이 좋습니다.
피자 모델 만들기
다음 명령을 실행하여 Models 폴더를 만듭니다.
mkdir Models
Visual Studio Code에서 Models 폴더를 선택하고 Pizza.cs라는 새 파일을 추가합니다.
이제 프로젝트 루트에 빈 Pizza.cs 파일이 있는 Models 디렉터리가 포함됩니다. 디렉터리 이름인 Models은 규칙입니다. 디렉터리 이름은 웹 API가 사용하는 model-view-controller 아키텍처에서 가져온 것입니다.
다음 코드를 Models/Pizza.cs에 추가하고 변경 내용을 저장합니다. 이 클래스는 피자를 정의합니다.
namespace ContosoPizza.Models; public class Pizza { public int Id { get; set; } public string? Name { get; set; } public bool IsGlutenFree { get; set; } }
데이터 서비스 추가
다음 명령을 실행하여 Services 폴더를 만듭니다.
mkdir Services
Visual Studio Code에서 폴더를 선택하고 PizzaService.cs라는 새 파일을 추가합니다.
다음 코드를 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
클래스를 사용할 컨트롤러를 만듭니다.