이 글은 기계 번역의 미러 문서이며, 원본 기사로 바로 이동하려면 여기를 클릭해 주세요.

보기: 16098|회답: 0

[ASP.NET] ASP.NET 웹 API의 성능을 향상시키는 8가지 방법

[링크 복사]
게시됨 2016. 1. 11. 오후 2:37:43 | | | |
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를 반환하세요.
  1. var response = Request.CreateResponse(HttpStatusCode.OK);
  2. response.Content = new StringContent(jsonResult, Encoding.UTF8, "application/json");
  3. return response;
코드 복사

이 작업을 하는 더 많은 방법은 릭 스트랄의 블로그에서 확인할 수 있습니다
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로 바꾸면 됩니다.
  1. [HttpGet]  
  2. public async Task OperationAsync()  
  3. {   
  4.     await Task.Delay(2000);  
  5. }
코드 복사

8) 여러 결과 집합과 집합 조합을 반환합니다
전송 횟수를 줄이는 것은 여러 데이터베이스뿐만 아니라 결과 집합의 힘을 활용할 수 있는 웹 API에도 유리합니다.
즉, DataReader에서 여러 결과 세트를 추출할 수 있으며, 다음 데모 코드를 참고하세요:
  1. // read the first resultset
  2. var reader = command.ExecuteReader();
  3. // read the data from that resultset
  4. while (reader.Read())
  5. {
  6.     suppliers.Add(PopulateSupplierFromIDataReader( reader ));
  7. }
  8. // read the next resultset
  9. reader.NextResult();
  10. // read the data from that second resultset
  11. while (reader.Read())
  12. {
  13.     products.Add(PopulateProductFromIDataReader( reader ));
  14. }
코드 복사

웹 API에서 한 번의 응답으로 여러 객체를 반환할 수 있습니다. 반환된 객체들을 합쳐서 다음 객체들을 반환해 보세요:
  1. public class AggregateResult
  2. {
  3.      public long MaxId { get; set; }
  4.      public List<Folder> Folders{ get; set; }
  5.      public List<User>  Users{ get; set; }
  6. }
코드 복사

이렇게 하면 WEB API로 보내는 HTTP 요청을 줄일 수 있습니다.
이 글을 읽어주셔서 감사합니다.




이전의:SyntaxError: Missing parentheses in call to print
다음:VSFTPD는 새로운 사용자를 추가하기 위해
면책 조항:
Code Farmer Network에서 발행하는 모든 소프트웨어, 프로그래밍 자료 또는 기사는 학습 및 연구 목적으로만 사용됩니다; 위 내용은 상업적 또는 불법적인 목적으로 사용되지 않으며, 그렇지 않으면 모든 책임이 사용자에게 부담됩니다. 이 사이트의 정보는 인터넷에서 가져온 것이며, 저작권 분쟁은 이 사이트와는 관련이 없습니다. 위 내용은 다운로드 후 24시간 이내에 컴퓨터에서 완전히 삭제해야 합니다. 프로그램이 마음에 드신다면, 진짜 소프트웨어를 지원하고, 등록을 구매하며, 더 나은 진짜 서비스를 받아주세요. 침해가 있을 경우 이메일로 연락해 주시기 바랍니다.

Mail To:help@itsvse.com