[VisualStudio] ASP.NET 으로 서버 만들기

류재성's avatar
Nov 30, 2024
[VisualStudio] ASP.NET 으로 서버 만들기
 

1. 프로젝트 만들기

 
notion image
 
새 프로젝트 만들기 선택
 
notion image
 
프로젝트 중 ASP .NET Core 웹 API를 선택한다.
 
notion image
 
프로젝트 명을 넣는다.
 
notion image
 
추가 정보를 선택 후 만들기를 선택한다.
 
notion image
 
프로그램을 실행하면 WetherForecastController.cs 파일이 자동 생성된다.
 
notion image
 
화살표를 눌러 프로그램을 빌드한다.
 
notion image
 
실행 시 API 문서를 확인할 수 있다. 문서에 있는 API 주소를 호출한다.
 
notion image
 
API 주소를 입력하면 JSON 형태의 데이터를 확인할 수 있다.
 

2. API 테스트

 
notion image
 
도구 > NuGet 패키지 관리자 > 솔루션용 NuGet 패키지 관리를 선택한다.
 
notion image
notion image
 
찾아보기에서 Microsoft.Entity.FrameworkCore.SqlServer 와 Microsoft.EntityFrameworkCore.InMemory 를 설치한다.
 
💡
Microsoft.Entity.FrameworkCore.SqlServer 와 Microsoft.EntityFrameworkCore.InMemory는 Entity Framework Core (EF Core)에서 제공하는 데이터베이스 제공자(DB Provider)이다. 이 패키지들은 EF Core를 사용해 특정 데이터베이스와 연결하고 상호작용할 수 있도록 지원한다. Microsoft.Entity.FrameworkCore.SqlServer : Microsoft SQL Server와 연결하기 위한 EF Core 데이터베이스 제공자이다. SQL Server 전용 기능(트랜잭션, 스토어드 프로시저, 데이터 타입 매핑) 등을 지원하며, 데이터베이스 생성 및 마이그레이션을 지원한다. Microsoft.EntityFrameworkCore.InMemory : 인메모리(In-Memory) 데이터베이스를 지원하는 EF Core 제공자이다. 데이터를 메모리에 저장하므로 테스트 및 개발용으로 주로 사용된다.
 
notion image
 
프로젝트 마우스 우클릭 > 추가 > 새 항목을 선택 후 TodoItem.cs 를 생성한다.
 
TodoItem.cs
using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; namespace WebServerTest { public class TodoItem { public int id { get; set; } public string Name { get; set; } public string isComplete { get; set; } } }
 
TodoItem.cs 를 다음과 같이 작성한다.
 
TodoContext.cs
using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; namespace WebServerTest { public class TodoContext : DbContext { public TodoContext(DbContextOptions<TodoContext> options) : base(options) { } public DbSet<TodoItem> TodoItems { get; set; } } }
 
그리고 TodoContext.cs 를 생성한다.
 
💡
TodoContext 는 DbContext를 상속하도록 만든다. DbContext는 데이터베이스와 상호작용을 관리하는 EF Core의 기본 클래스이다. 이는 데이터를 저장, 수정, 삭제, 조회할 수 있는 기능을 제공한다.
 
그리고 TodoItem모델을 DbSet으로 받을수 있게 TodoItems멤버변수를 만든다.
 
using Microsoft.EntityFrameworkCore; using WebServerTest; var builder = WebApplication.CreateBuilder(args); // Add services to the container. builder.Services.AddControllers(); builder.Services.AddDbContext<TodoContext>(opt => opt.UseInMemoryDatabase("TodoList")); // In-Memory 데이터베이스 설정 builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen(); var app = builder.Build(); // Configure the HTTP request pipeline. if (app.Environment.IsDevelopment()) { app.UseSwagger(); app.UseSwaggerUI(); } app.UseHttpsRedirection(); app.UseAuthorization(); app.MapControllers(); app.Run();
 
program.cs 클래스를 통해 InMemory 데이터베이스를 사용할 수 있도록 하며, 컨트롤러를 애플리케이션에 추가한다.
 

3. 컨트롤러 추가

 
notion image
 
솔루션 탐색기 > Controllers 마우스 우클릭 > 추가 > 컨트롤러를 선택한다.
 
notion image
 
새 스캐폴트 항목 추가 > 컨트롤러 > Entity Framework를 사용하여 뷰가 포함된 MVC 컨트롤러를 선택한다.
 
notion image
 
사진처럼 모델 클래스와 DbContext 클래스를 TodoItem 와 TodoContext 를 선택 후 추가를 누른다.
 
notion image
 
컨트롤러가 생성된다.
 
using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; using WebServerTest; namespace WebServerTest.Controllers { [Route("api/[controller]")] // API 주소 설정 [ApiController] public class TodoItemsController : ControllerBase { private readonly TodoContext _context; public TodoItemsController(TodoContext context) { _context = context; } // GET: api/TodoItems [HttpGet] public async Task<ActionResult<IEnumerable<TodoItem>>> GetTodoItems() { return await _context.TodoItems.ToListAsync(); } // GET: api/TodoItems/5 [HttpGet("{Id}")] public async Task<ActionResult<TodoItem>> GetTodoItem(int id) { var todoItem = await _context.TodoItems.FindAsync(id); if (todoItem == null) { return NotFound(); } return todoItem!; } // PUT: api/TodoItems/5 // To protect from overposting attacks, enable the specific properties you want to bind to, for // more details, see https://go.microsoft.com/fwlink/?linkid=2123754. [HttpPut("{Id}")] public async Task<IActionResult> PutTodoItem(int Id, TodoItem todoItem) { if (Id != todoItem.Id) { return BadRequest(); } _context.Entry(todoItem).State = EntityState.Modified; try { await _context.SaveChangesAsync(); } catch (DbUpdateConcurrencyException) { if (!TodoItemExists(Id)) { return NotFound(); } else { throw; } } return NoContent(); } // POST: api/TodoItems // To protect from overposting attacks, enable the specific properties you want to bind to, for // more details, see https://go.microsoft.com/fwlink/?linkid=2123754. [HttpPost] public async Task<ActionResult<TodoItem>> PostTodoItem(TodoItem todoItem) { _context.TodoItems.Add(todoItem); await _context.SaveChangesAsync(); return CreatedAtAction("GetTodoItem", new { Id = todoItem.Id }, todoItem); } // DELETE: api/TodoItems/5 [HttpDelete("{id}")] public async Task<ActionResult<TodoItem>> DeleteTodoItem(int id) { var todoItem = await _context.TodoItems.FindAsync(id); if (todoItem == null) { return NotFound(); } _context.TodoItems.Remove(todoItem); await _context.SaveChangesAsync(); return todoItem!; } private bool TodoItemExists(int id) { return _context.TodoItems.Any(e => e.Id == id); } } }
 
💡
[Route("api/[controller]")] // API 경로: /api/TodoItems [ApiController]
컨트롤러에 Route 를 추가해 API 주소를 넣는다. 빌드 시 자동으로 API 주소가 생성된다.
 
 

4. PostMan 테스트

 
notion image
 
프로그램을 빌드한다.
 
notion image
 
API 문서를 확인할 수 있다.
 
notion image
 
Postman 을 통해 body 데이터를 입력 후 post 요청을 한다.
 
 
notion image
 
그 후 브라우저 혹은 포스트맨으로 GET 요청을 하면 JSON 데이터로 된 값을 확인할 수 있다.
 
notion image
 
이번엔 DELETE API 를 호출해 데이터를 삭제한다.
 
notion image
 
다시 GET 요청을 하면 데이터가 삭제된 것을 확인할 수 있다.
 
이렇게 ASP.NET 으로 간단한 API 서버를 만들어보았다.
Share article

{CODE-RYU};