수십 년의 지식과 경험으로 교육된 서비스
CodeGuru의 기계 학습 모델은 수십만 개의 내부 프로젝트와 10,000개 이상의 GitHub 오픈소스 프로젝트로 구성되는 Amazon 코드베이스로 교육됩니다. 수만 명의 Amazon 개발자가 CodeGuru의 교육에 참여하여 코드 검토 및 애플리케이션 프로파일링에 대한 수십 년의 경험을 제공했습니다. 예를 들어 CodeGuru 리뷰어는 로지스틱 회귀와 신경망 조합을 사용하는 규칙 마이닝 및 지도형 기계 학습 모델을 사용하여 교육됩니다. 리뷰어는 모범 사례와의 차이를 감지하는 교육 중에 Amazon 코드베이스에서 AWS API 호출을 포함하는 풀 요청을 마이닝합니다. 그런 다음 코드 변경을 살펴보고 병렬로 마이닝하는 설명서 데이터를 코드 변경에 대한 교차 참조로 사용합니다. 여기서 리뷰어가 코드를 검토하여 권장 사항을 제공하는 모범 사례에 대한 새로운 모델이 만들어집니다. CodeGuru 프로파일러도 Amazon 성능 엔지니어의 교육을 받으며 Amazon 내부에서 사용되는 수만 개 서비스를 프로파일링하는 데 사용됩니다. 사용자는 CodeGuru가 제공하는 각 권장 사항을 수락할지 여부를 결정할 수 있습니다. 피드백을 많이 제공할수록 권장 사항의 품질이 개선됩니다.
가장 비경제적인 코드 줄 찾기
CodeGuru 프로파일러는 항상 애플리케이션 성능 최적화를 검색하고, 가장 “비경제적인” 코드 줄을 식별하며, 이러한 코드를 수정하여 CPU 사용률을 줄이고 컴퓨팅 비용을 절감하고 애플리케이션 성능을 개선할 방법을 권장합니다. CodeGuru 프로파일러는 비경제적인 객체의 과도한 재생성, 비경제적인 역직렬화, 비효율적인 라이브러리 사용 및 과도한 로깅 같은 문제에 대한 조치를 즉시 취할 수 있도록 구체적인 권장 사항을 제공합니다. CodeGuru 프로파일러는 최소한의 CPU 용량을 소모하면서 프로덕션에서 지속적으로 실행되므로 애플리케이션 성능에 큰 영향을 미치지 않습니다. CodeGuru가 제공하는 코드를 사용하여 소규모 에이전트를 설치하고 CodeGuru 콘솔에서 에이전트를 구성하여 애플리케이션 프로파일링을 시작할 수 있습니다.
애플리케이션 성능을 최적화할 기회를 발견하는 경우 Amazon CodeGuru 프로파일러는 변경을 권장하는 이유, 문제의 원인, 해결 방법 및 이 문제가 애플리케이션에 영향을 미치는 코드의 영역을 설명합니다.
Amazon CodeGuru 리뷰어는 풀 요청을 스캔하고 Github 또는 AWS CodeCommit의 소스 코드를 기준으로 문제의 원인 및 해결 방법에 대한 설명과 함께 권장 사항을 제공합니다.
호출이 올 때까지 기다리지 말고 지금 바로 코드 문제 식별
CodeGuru 리뷰어는 야간 작업의 원인이 되는 문제를 찾고 해결하는 방법을 권장합니다. AWS API 및 SDK 사용에 대한 모범 사례와 다른 부분을 감지하여 프로덕션 문제(예: 페이지 매김 누락 또는 배치 작업 처리 중 발생하는 오류 감지)로 연결될 수 있는 일반적인 문제에 플래그를 지정합니다. 원자성 위반 및 스레드 안전성을 제공하지 않는 클래스 사용과 같이 노련한 프로그래머도 찾기 어려운 동시성 문제를 감지합니다. 잘못 종료된 리소스, 지연 시간 문제 및 중단을 감지합니다. 또한 올바른 입력 검증을 식별하여 삭제되지 않은 입력이 주입 공격 또는 서비스 거부 공격 같은 문제를 야기할 수 있는 상황을 방지합니다. GitHub 또는 AWS CodeCommit의 기존 코드 리포지토리를 CodeGuru에 연결하여 코드 검토를 시작할 수 있습니다.
모든 코드 검토 및 애플리케이션에 사용할 수 있는 저렴한 요금
CodeGuru는 모든 코드 검토와 실행하는 애플리케이션에 사용할 수 있을 정도로 요금이 저렴합니다. 검토한 코드 줄의 수와 애플리케이션 프로필당 샘플링 시간을 기준으로 하는 단순한 종량과금제 월 요금제를 제공합니다. 예를 들어 일반적인 풀 요청이 코드 500줄인 경우 단 3.75 USD의 요금으로 CodeGuru 리뷰어를 실행할 수 있습니다. 처음 90일간은 무료로 사용할 수 있습니다. 그 이후에는 각 애플리케이션 프로필에 대한 샘플링 시간당 0.0005 USD와 매월 코드 100줄당 075 USD의 요금이 부과됩니다. 요금 보기 »
수천만 USD
Amazon CodeGuru에 대한 개발자들의 평가
Chris Butterfield, Amazon.in 판매자를 위한 예약 서비스 팀의 소프트웨어 개발 엔지니어:
“CodeGuru 프로파일러를 실행하고 권장 사항을 확인한 후 CPU 잠금과 관련된 버그를 수정하려면 서비스를 업데이트해야 한다는 것을 알았습니다. 권장된 수정 사항은 완벽하게 효과가 있었고 CPU 시간의 55.97%를 사용했던 스레드 경합 경고가 사라졌습니다. 이 수정 이후 로드 테스트를 완료했고 이제 단일 호스트로 700TPS를 처리하여 이전보다 약 7.5배 더 많은 트래픽을 처리할 수 있다는 것을 알았습니다. 로드 테스트 후 여전히 동일한 트래픽을 처리하면서 인스턴스 수를 약 75%까지 줄일 수 있었습니다.”
Rajesh Konatham, Amazon.com 카탈로그 관리 서비스 팀의 수석 소프트웨어 개발 엔지니어:
“서버 시작 시간을 개선하고 프로필 클러터를 줄이기 위해 소프트웨어 관련 구성을 비활성화한 후 이 변경의 영향을 파악하기 위해 CodeGuru 프로파일러를 사용했는데 워크플로 시스템이 분기를 실행할 때마다 문서를 복사하고 있다는 것을 알았습니다. 필요가 없었는데도 말입니다. 이것 때문에 불필요하게 값을 복제하는 데 CPU 용량의 15%가 사용되고 있었습니다. CodeGuru 프로파일러의 권장 사항에 따라 이러한 복제된 값을 제거한 후 CPU 사용률이 크게 감소했습니다. 동기식 플릿에서 40%가 줄었고 비동기식 플릿에서는 67%가 줄었습니다. CPU 사용률의 경우 예상했던 15%보다 더 많이 줄었는데 복제에 힙 메모리가 더 이상 사용되지 않으면서 가비지 수집 활동이 줄었기 때문이었습니다.
Neeraj Kumar, Amazon CloudWatch 팀의 수석 소프트웨어 개발 엔지니어:
“CodeGuru 프로파일러를 실행한 후 대부분의 CPU 용량이 SHA-2를 사용하여 Amazon S3 요청을 서명하는 데 사용되고 있다는 것을 알았습니다. JDK가 제공하는 SHA-2 구현을 사용하고 있었는데 CodeGuru 프로파일러는 Amazon Corretto Crypto Provider를 대신 사용할 것을 권장했습니다. 이 권장 사항을 따른 후 일부 암호화 알고리즘의 구현 속도가 빨라졌습니다. Corretto Crypto Provider는 JDK의 동작과 일치하기 때문에 온보딩이 간편했습니다. 배포 후 다수의 AWS 리전에서 약 30%의 CPU가 절감되었습니다."
Mike Thompson, AWS 빌더 도구 팀의 수석 소프트웨어 개발 엔지니어:
"CodeGuru 리뷰어를 사용한 후 중요한 코드 조각에 숨어 있는 오래된 경합 조건을 찾아낼 수 있었습니다. 이 조건은 변경된 코드 영역의 외부에 있었기 때문에 인간 리뷰어라면 찾지 못했을 것입니다. CodeGuru 리뷰어는 버그에 대한 충분한 컨텍스트, 잘못된 이유에 대한 명확한 설명과 수정 방법에 대한 예제를 제공했습니다. 필요한 변경을 수행하는 방법은 아주 쉬웠고 몇 분 밖에 걸리지 않았습니다. 설정이나 장애물 없이 코드 품질을 개선할 수 있는 방법이 있다는 것이 정말 좋았습니다."
Danish Bashar, AWS DynamoDB 팀의 소프트웨어 개발 엔지니어:
“Amazon S3에서 파일을 다운로드하던 중이었는데 스트림에서 리소스 유출이 발생한 것을 몰랐습니다. 단위 테스트는 정상적으로 실행되었기 때문에 이 문제를 발견하지 못했습니다. 객체 유형을 명시적으로 쓰지 않았기 때문에 해당 유형을 알 수 없었는데 누가 코드를 검토했더라도 알지 못했을 것입니다. CodeGuru 리뷰어는 단 몇 분 안에 코드의 의미 체계를 검토하고 비교적 빨리 리소스 유출을 찾아냈습니다. CodeGuru 리뷰어는 try-with-resources를 사용하여 리소스를 종료할 것을 권장했고 저는 즉시 +1을 구현했습니다.”
Geetika Vasudeo, AWS DynamoDB 팀의 소프트웨어 개발 엔지니어:
“일반적이지 않은 방법으로 Amazon DynamoDB 테이블을 사용하던 중에 코드 검토에서 이 테이블을 놓쳤습니다. CodeGuru 리뷰어는 작업에서 모든 결과가 아닌 페이지가 매겨진 결과가 반환되고 있다는 것을 식별했습니다. 스캔 작업에서는 첫 번째 페이지의 결과만 가져왔는데 지금은 문제가 아니지만 시간이 지나면서 테이블이 커지면 첫 번째 페이지만 표시되고 나머지 결과는 누락될 수 있습니다. 올바르게 처리되지 않는 것은 물론이고 코드에서 엄청난 버그가 될 소지가 있습니다. 문제를 찾아내고 권장 사항을 제안하는 기능이 아주 탁월합니다.”