DTO는 데이터 계층과 다른 계층(주로 프레젠테이션 계층) 간에 데이터를 전송하기 위한 단순한 객체입니다. DTO는 주로 다음과 같은 상황에서 사용됩니다:
- 데이터를 캡슐화하고 네트워크를 통해 전송하기 위해
- 데이터 계층의 복잡성을 숨기고 클라이언트에 필요한 최소한의 데이터만 노출하기 위해
- 계층 간의 의존성을 줄이기 위해
DTO의 주요 특징
- 단순성: DTO는 주로 데이터를 담기 위한 단순한 객체입니다. 일반적으로 getter와 setter 메서드만 포함합니다.
- 직렬화 가능: DTO는 종종 네트워크를 통해 전송되거나 파일로 저장될 수 있기 때문에 직렬화 가능합니다.
- 재사용성: 같은 DTO를 여러 계층이나 여러 서비스 간에 재사용할 수 있습니다.
EF Core에서 DTO 사용하기
DTO 클래스 정의: 전송하고자 하는 데이터를 담을 DTO 클래스를 정의합니다.
public class ProductDto
{
public int Id { get; set; }
public string Name { get; set; }
public decimal Price { get; set; }
}
데이터 변환: 엔터티 모델과 DTO 간의 데이터를 변환합니다. 이는 보통 LINQ 쿼리를 사용하여 수행됩니다.
var productDtos = _context.Products
.Select(p => new ProductDto
{
Id = p.Id,
Name = p.Name,
Price = p.Price
}).ToList();
데이터 반환: 컨트롤러나 서비스에서 DTO를 반환합니다.
[HttpGet]
public async Task<ActionResult<IEnumerable<ProductDto>>> GetProducts()
{
var productDtos = await _context.Products
.Select(p => new ProductDto
{
Id = p.Id,
Name = p.Name,
Price = p.Price
}).ToListAsync();
return Ok(productDtos);
}
이점
- 보안: DTO를 사용하면 필요한 데이터만 클라이언트에 전달하여 민감한 정보를 보호할 수 있습니다.
- 성능 최적화: 불필요한 데이터를 전송하지 않으므로 네트워크 대역폭을 절약할 수 있습니다.
- 유연성: 데이터 계층의 변경에 영향을 최소화하여 시스템의 유연성을 증가시킵니다.
DTO는 EF Core와 같은 ORM을 사용할 때 데이터 전송을 간편하고 안전하게 만드는 중요한 패턴입니다. 이를 통해 데이터 계층과 프레젠테이션 계층 간의 결합도를 줄이고, 성능 및 보안상의 이점을 얻을 수 있습니다.
'공부 > C#' 카테고리의 다른 글
EF Core 데이터 주석 규칙 (0) | 2024.07.19 |
---|---|
EFCore에서 State(상태)에 대해서 (0) | 2024.07.16 |
EFCore란? (0) | 2024.07.15 |
람다 표현식 이란? (0) | 2024.07.14 |
Ation, func란? (1) | 2024.07.14 |