ASP.NET 웹 API는 훌륭한 기술입니다. 웹 API를 작성하는 것은 너무 쉬워서 많은 개발자들이 좋은 실행 성능을 위해 애플리케이션을 구조화하는 데 시간을 들이지 않습니다. 이 글에서는 ASP.NET 웹 API의 성능을 향상시키기 위한 8가지 기법을 다룰 것입니다. 1) 가장 빠른 JSON 직렬화 도구 사용 JSON의 직렬화는 전체 ASP.NET 웹 API 성능에 중요한 영향을 미칩니다. 제 프로젝트 중 하나에서는 JSON.NET 시리얼라이저에서 ServiceStack.Text로 1년 반 동안 전환했습니다. 웹 API의 성능이 약 20% 향상된 것으로 측정했습니다. 이 직렬화 도구를 꼭 사용해 보시길 강력히 추천합니다. 다음은 인기 있는 직렬화 도구들의 성능에 대한 최근 비교 데이터입니다.
SerializerPerformanceGraf 출처: theburningmonk 업데이트: StackOverflow가 지금까지 주장하는 JSON 직렬화 도구를 사용하는 것으로 보입니다. 테스트 데이터는 그들의 GitHub 페이지인 Jil serializer에서 확인할 수 있습니다. 2) DataReader에서 JSON을 수동으로 직렬화하기 저는 이 방식을 제 프로젝트에서 사용해 왔고 성능 향상을 받았습니다. DataReader에서 JSON 문자열을 수동으로 생성할 수 있어 불필요한 객체 생성을 피할 수 있어, DataReader에서 값을 가져와 객체에 쓰고, 그 객체에서 값을 가져와 JSON Serializer를 사용해 JSON을 생성할 필요가 없습니다. StringBuilder를 사용해 JSON을 생성하고, WebAPI에서 응답 내용으로 StringContent를 반환하세요.
이 작업을 하는 더 많은 방법은 릭 스트랄의 블로그에서 확인할 수 있습니다 3) 가능한 한 다른 프로토콜 형식(프로토콜 버퍼, 메시지 팩)을 사용하세요 프로젝트 내에서 JSON 대신 프로토콜 버퍼(Protocol Buffers)나 메시지팩(MessagePacks) 같은 다른 메시지 형식을 사용할 수 있다면, 프로토콜 버퍼가 직렬화가 매우 빠르기 때문만이 아니라, 반환되는 결과에서 JSON보다 빠르게 포맷되기 때문에 엄청난 성능 이점을 얻을 수 있습니다. 4) 압축 구현 ASP.NET 웹 API에서 GZIP이나 Deflate를 사용하세요. 압축은 응답 패킷의 크기와 반응성을 줄이는 간단하고 효과적인 방법입니다. 이 기능은 매우 필수적이며, 제 ASP.NET 블로그 'GZip 압축 ActionFilter' 8줄짜리 코드에서 더 많은 글을 참고하실 수 있습니다. 5) 캐싱 사용 웹 API 메서드에서 출력 캐싱을 사용하는 것은 매우 중요합니다. 예를 들어, 많은 사용자가 하루에 한 번만 변경되는 응답 콘텐츠에 접속한다면, 사용자 비밀번호를 메모리에 캐싱하는 등 수동 캐싱을 구현하고 싶다면, 제 블로그 글 '웹 API에서 캐싱을 구현하는 간단한 방법'ASP.NET 참고하세요. 6) 가능한 한 일반적인 ADO.NET 을 사용하세요 수동으로 작성한 ADO.NET 이 여전히 데이터베이스에서 값을 빠르게 얻는 가장 빠른 방법입니다. 웹 API의 성능이 정말 중요하다면 ORM을 사용하지 마세요. 가장 인기 있는 ORM 간의 성능 비교를 확인할 수 있습니다. ORMMapper
세련되고 손으로 작성한 페치 코드는 빠르고, 모든 ORM이 세 가지 것보다 느립니다. 결과셋 캐시가 있는 LLBLGen은 빠르지만, 결과 집합을 다시 반복하고 객체를 메모리에 인스턴스화해야 합니다. 7) 웹 API에서 비동기식 접근법을 구현하기 비동기식 웹 API 서비스를 사용하면 웹 API가 처리하는 HTTP 요청 수가 크게 증가합니다. 구현은 간단합니다. 비동기 키워드를 사용하고 메서드의 반환 값을 Task로 바꾸면 됩니다.
8) 여러 결과 집합과 집합 조합을 반환합니다 전송 횟수를 줄이는 것은 여러 데이터베이스뿐만 아니라 결과 집합의 힘을 활용할 수 있는 웹 API에도 유리합니다. 즉, DataReader에서 여러 결과 세트를 추출할 수 있으며, 다음 데모 코드를 참고하세요:
웹 API에서 한 번의 응답으로 여러 객체를 반환할 수 있습니다. 반환된 객체들을 합쳐서 다음 객체들을 반환해 보세요:
이렇게 하면 WEB API로 보내는 HTTP 요청을 줄일 수 있습니다. 이 글을 읽어주셔서 감사합니다.
|