ASP.NET Core API 성능 최적화 가이드
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
웹 개발
대상자
ASP.NET Core API 개발자, 성능 최적화에 관심 있는 개발자
(중급~고급 수준, 특정 프레임워크 기술 이해 필요)
핵심 요약
- 압축 활성화 : Gzip으로 JSON 응답 압축 (
GzipCompressionProvider
사용) - 캐싱 전략 :
ResponseCache
및IMemoryCache
를 통한 반복 작업 최소화 - 메모리 최적화 :
ArrayPool
재사용,readonly struct
사용, 불필요한 LINQ 제거 - 스트리밍 처리 :
IAsyncEnumerable
을 통한 대량 데이터 효율적 전송 - 의존성 주입 :
Singleton
/Scoped
범위 올바른 설정,Lazy
활용
섹션별 세부 요약
1. 응답 압축 설정
- Gzip 압축을 통해 JSON 응답 크기 45KB → 8KB로 줄이기 가능
AddResponseCompression
설정 예시:
```csharp
builder.Services.AddResponseCompression(options =>
{
options.EnableForHttps = true;
options.Providers.Add
});
```
- MIME 타입 확장:
application/json
추가
2. 캐싱 구현
ResponseCache
어트리뷰트로 캐시 지정:
```csharp
[ResponseCache(Duration = 60)]
public IActionResult GetCachedData() { ... }
```
IMemoryCache
활용:
```csharp
_cache.GetOrCreateAsync("data-key", entry => FetchFromDatabaseAsync());
```
3. JSON 직렬화 최적화
System.Text.Json
설정:
```csharp
options.SerializerOptions.DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull;
```
JsonSerializable
어트리뷰트로 성능 향상:
```csharp
[JsonSerializable(typeof(MyResponseModel))]
internal partial class MyJsonContext : JsonSerializerContext { }
```
4. 메모리 압박 완화
ArrayPool
사용 예시:
```csharp
var buffer = ArrayPool
ArrayPool
```
- 불필요한
.ToList()
제거,IEnumerable
반환 금지
5. 대량 데이터 스트리밍
IAsyncEnumerable
사용 예시:
```csharp
public async IAsyncEnumerable
{
await foreach (var item in _repository.GetItemsAsync())
yield return item;
}
```
- HTTP/2에서 효율적 전송, 메모리 사용 감소
6. 의존성 주입 범위 설정
Singleton
: 무상태/스레드 안전 서비스Scoped
: 요청 단위 생명주기Lazy
또는 팩토리 메서드로 조건부 주입 최적화
결론
- 성능 프로파일링 도구 (
BenchmarkDotNet
,dotTrace
,OpenTelemetry
) 반드시 사용 - 압축, 캐싱, 스트리밍, 의존성 주입 설정 점검 체크리스트 활용
System.Text.Json
설정, 메모리 할당 최소화, 의존성 주입 범위 올바른 설정이 핵심 성능 개선 요소