학습
C# REST API 설계 및 구현
C# REST API 설계 및 구현 — 고급
REST API 설계 및 구현
1. 도입 (왜 배워야 하는가)
REST API(Representational State Transfer Application Programming Interface)는 현대 소프트웨어 개발에서 필수적인 요소로 자리 잡았습니다. 다양한 시스템 간의 통신과 데이터 교환을 가능하게 하여, 클라이언트와 서버 간의 상호작용을 원활하게 합니다. 특히, 웹 애플리케이션, 모바일 앱, IoT 기기 등에서 데이터 송수신을 처리하는 데 없어서는 안 될 기술입니다.
이 개념을 모르면 클라이언트와 서버 간의 데이터 전송 방식에 대한 이해가 부족해지고, 결과적으로 비효율적인 시스템 설계나 구현이 발생할 수 있습니다. 예를 들어, 데이터 전송 방식을 잘못 설계하면 성능 저하, 보안 취약점, 그리고 유지보수 어려움 등의 문제가 발생할 수 있습니다.
2. 핵심 개념 설명
REST API의 핵심 구성 요소는 다음과 같습니다:
| 용어 | 정의 |
|---|---|
| 리소스 | API가 다루는 데이터의 단위 (예: 사용자, 상품 등) |
| URI | 리소스를 식별하기 위한 고유한 주소 |
| HTTP 메서드 | 리소스에 대한 작업을 정의하는 방법 (GET, POST, PUT, DELETE) |
| 상태 코드 | 요청 처리 결과를 나타내는 3자리 숫자 코드 |
비유로 이해하기
리소스를 도서관의 책으로 비유할 수 있습니다. 각 책은 고유한 ISBN(URI)을 가지고 있으며, 책을 대출하거나 반납하는 행위가 HTTP 메서드에 해당합니다. 상태 코드는 도서관 직원이 대출 요청을 처리한 결과(예: 대출 가능, 이미 대출된 책 등)를 나타냅니다.
3. 기본 코드 예제
다음은 C#을 사용하여 간단한 REST API를 구현하는 기본 코드입니다.
using Microsoft.AspNetCore.Mvc;
[ApiController]
[Route("api/[controller]")]
public class ProductsController : ControllerBase
{
private static List<string> products = new List<string> { "Apple", "Banana", "Orange" };
[HttpGet]
public ActionResult<List<string>> GetProducts()
{
return Ok(products); // 200 OK 응답과 함께 제품 목록 반환
}
}
실행 결과
["Apple", "Banana", "Orange"]
코드 한 줄씩 동작 설명
using Microsoft.AspNetCore.Mvc;: ASP.NET Core MVC를 사용하기 위해 필요한 네임스페이스를 포함합니다.[ApiController]: 이 클래스가 API 컨트롤러임을 나타내는 특성입니다.[Route("api/[controller]")]: API의 URL 경로를 정의합니다.[controller]는 클래스 이름에서 "Controller"를 제거한 부분으로 대체됩니다.private static List<string> products = new List<string> { "Apple", "Banana", "Orange" };: 제품 목록을 저장하는 정적 리스트를 선언합니다.[HttpGet]: 이 메서드가 GET 요청을 처리함을 나타냅니다.public ActionResult<List<string>> GetProducts(): 제품 목록을 반환하는 메서드입니다.return Ok(products);: HTTP 200 OK 상태 코드를 반환하며, 제품 목록을 응답으로 전송합니다.
4. 실전 활용 예제
예제 1: 장바구니 구현
쇼핑몰에서 장바구니를 구현할 때, 사용자가 추가한 상품을 관리하는 REST API를 설계할 수 있습니다.
[HttpPost]
public ActionResult AddToCart(string product)
{
// 장바구니에 상품 추가 로직
return CreatedAtAction(nameof(GetCart), new { product }, product);
}
예제 2: 사용자 정보 업데이트
사용자의 정보를 업데이트하는 API도 필요합니다. 이때 PUT 메서드를 사용할 수 있습니다.
[HttpPut("{id}")]
public ActionResult UpdateUser(int id, User user)
{
// 사용자 정보 수정 로직
return NoContent(); // 204 No Content 상태 반환
}
5. 흔한 실수와 주의사항
실수 1: 잘못된 HTTP 메서드 사용
[HttpGet]
public ActionResult UpdateProduct(string product)
{
// 수정 로직
return Ok();
}
[HttpPut]
public ActionResult UpdateProduct(string product)
{
// 수정 로직
return Ok();
}
실수 2: 상태 코드 의미 오해
[HttpDelete("{id}")]
public ActionResult DeleteProduct(int id)
{
// 삭제 로직
return Ok(); // 잘못된 상태 코드
}
[HttpDelete("{id}")]
public ActionResult DeleteProduct(int id)
{
// 삭제 로직
return NoContent(); // 올바른 상태 코드
}