AI Store에서 AI코딩으로 만들어진 앱을 만나보세요!
지금 바로 방문하기

ASP.NET Core API 성능 최적화 가이드

카테고리

프로그래밍/소프트웨어 개발

서브카테고리

웹 개발

대상자

ASP.NET Core API 개발자, 성능 최적화에 관심 있는 개발자

(중급~고급 수준, 특정 프레임워크 기술 이해 필요)

핵심 요약

  • 압축 활성화 : Gzip으로 JSON 응답 압축 (GzipCompressionProvider 사용)
  • 캐싱 전략 : ResponseCacheIMemoryCache를 통한 반복 작업 최소화
  • 메모리 최적화 : 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.Shared.Rent(1024);

ArrayPool.Shared.Return(buffer);

```

  • 불필요한 .ToList() 제거, IEnumerable 반환 금지

5. 대량 데이터 스트리밍

  • IAsyncEnumerable 사용 예시:

```csharp

public async IAsyncEnumerable StreamItems()

{

await foreach (var item in _repository.GetItemsAsync())

yield return item;

}

```

  • HTTP/2에서 효율적 전송, 메모리 사용 감소

6. 의존성 주입 범위 설정

  • Singleton: 무상태/스레드 안전 서비스
  • Scoped: 요청 단위 생명주기
  • Lazy 또는 팩토리 메서드로 조건부 주입 최적화

결론

  • 성능 프로파일링 도구 (BenchmarkDotNet, dotTrace, OpenTelemetry) 반드시 사용
  • 압축, 캐싱, 스트리밍, 의존성 주입 설정 점검 체크리스트 활용
  • System.Text.Json 설정, 메모리 할당 최소화, 의존성 주입 범위 올바른 설정이 핵심 성능 개선 요소