제퍼넷 로고

Amazon Bedrock을 사용하는 생성 AI로 코드 검토 및 승인 효율성 향상 | 아마존 웹 서비스

시간

소프트웨어 개발 세계에서 코드 검토 및 승인은 개발 중인 소프트웨어의 품질, 보안 및 기능을 보장하는 중요한 프로세스입니다. 그러나 이러한 중요한 프로세스를 감독하는 임무를 맡은 관리자는 종종 다음과 같은 수많은 과제에 직면합니다.

  • 기술 전문성 부족 – 관리자는 사용되는 프로그래밍 언어에 대한 심층적인 기술적 이해가 없거나 장기간 소프트웨어 엔지니어링에 참여하지 않았을 수 있습니다. 이로 인해 제안된 코드 변경의 영향과 건전성을 정확하게 평가하기 어렵게 만드는 지식 격차가 발생합니다.
  • 시간 제약 – 코드 검토 및 승인은 특히 규모가 크고 복잡한 프로젝트에서 시간이 많이 걸리는 프로세스일 수 있습니다. 관리자는 철저한 검토와 프로젝트 일정을 준수해야 하는 압박 사이에서 균형을 유지해야 합니다.
  • 변경 요청의 양 – 대량의 변경 요청을 처리하는 것은 관리자에게 일반적인 과제이며, 특히 여러 팀과 프로젝트를 감독하는 경우 더욱 그렇습니다. 시간 제약 문제와 마찬가지로 관리자는 프로젝트 진행을 방해하지 않도록 이러한 요청을 효율적으로 처리할 수 있어야 합니다.
  • 수동적 노력 – 코드 검토에는 관리자의 수동 작업이 필요하며 자동화가 부족하면 프로세스 확장이 어려울 수 있습니다.
  • 문서 – 코드 검토 및 승인 프로세스에 대한 적절한 문서화는 투명성과 책임성을 위해 중요합니다.

의 증가와 함께 생성 인공 지능 (AI)를 통해 관리자는 이제 이 혁신적인 기술을 활용하고 이를 AWS 배포 도구 및 서비스 제품군과 통합하여 이전에는 불가능했던 방식으로 검토 및 승인 프로세스를 간소화할 수 있습니다. 이 게시물에서는 승인 워크플로 기능과 함께 자동화된 변경 분석 및 요약을 통합하는 통합 엔드투엔드 배포 워크플로를 제공하는 솔루션을 살펴봅니다. 우리는 사용 아마존 기반암는 API를 통해 선도적인 AI 스타트업과 Amazon의 기초 모델(FM)을 제공하는 완전 관리형 서비스입니다. 따라서 다양한 FM 중에서 선택하여 사용 사례에 가장 적합한 모델을 찾을 수 있습니다. Amazon Bedrock 서버리스 환경을 사용하면 인프라를 관리할 필요 없이 빠르게 시작하고, 자신의 데이터로 FM을 비공개로 사용자 정의하고, AWS 도구를 사용하여 애플리케이션에 통합 및 배포할 수 있습니다.

솔루션 개요

다음 다이어그램은 솔루션 아키텍처를 보여줍니다.

아키텍처 다이어그램

워크플로는 다음 단계로 구성됩니다.

  1. 개발자는 새로운 코드 변경 사항을 코드 저장소(예: AWS 코드 커밋), 자동으로 시작을 트리거합니다. AWS 코드 파이프라인 전개.
  2. 애플리케이션 코드는 코드 작성 프로세스를 거쳐 취약점 검색을 수행하고 선호하는 도구를 사용하여 단위 테스트를 수행합니다.
  3. AWS 코드빌드 저장소를 검색하고 git show 명령을 수행하여 현재 커밋 버전과 이전 커밋 버전 간의 코드 차이점을 추출합니다. 그러면 이번 릴리스에서 변경된 코드를 나타내는 한 줄씩 출력이 생성됩니다.
  4. CodeBuild는 출력을 아마존 DynamoDB 추가 참조 정보가 포함된 표:
    1. CodePipeline 실행 ID
    2. AWS 리전
    3. 코드파이프라인 이름
    4. CodeBuild 빌드 번호
    5. 날짜와 시간
    6. Status
  5. Amazon DynamoDB 스트림 데이터 수정 사항을 캡처합니다. 테이블로 만들어졌습니다.
  6. An AWS 람다 함수는 캡처된 레코드를 처리하기 위해 DynamoDB 스트림에 의해 트리거됩니다.
  7. 이 함수는 Amazon Bedrock을 통해 Amazon Bedrock의 Anthropic Claude v2 모델을 호출합니다. 호출모델 API 부르다. 프롬프트와 함께 코드 차이점은 분석을 위해 모델에 대한 입력으로 제공되며, 코드 변경 요약이 출력으로 반환됩니다.
  8. 모델의 출력은 동일한 DynamoDB 테이블에 다시 저장됩니다.
  9. 관리자에게 다음을 통해 통보됩니다. 아마존 심플 이메일 서비스 (Amazon SES)의 코드 변경 요약 및 배포에 대한 승인이 필요함을 알려드립니다.
  10. 관리자는 이메일을 검토하고 CodePipeline 콘솔을 통해 검토 의견과 함께 결정(승인 또는 거부)을 제공합니다.
  11. 승인 결정 및 검토 의견은 다음에 의해 캡처됩니다. 아마존 이벤트 브리지, 이는 Lambda 함수를 트리거하여 DynamoDB에 다시 저장합니다.
  12. 승인되면 파이프라인은 선호하는 도구를 사용하여 애플리케이션 코드를 배포합니다. 거부되면 워크플로가 종료되고 배포가 더 이상 진행되지 않습니다.

다음 섹션에서는 솔루션을 배포하고 엔드투엔드 워크플로를 확인합니다.

사전 조건

이 솔루션의 지침을 따르려면 다음 전제 조건이 필요합니다.

기반암 모델 액세스

솔루션 배포

솔루션을 배치하려면 다음 단계를 완료하십시오.

  1. 왼쪽 메뉴에서 발사 스택 CloudFormation 스택을 시작하려면 us-east-1:
    발사 스택
  2. 럭셔리 이메일 주소에서 액세스할 수 있는 이메일 주소를 입력하세요. 코드 변경 요약이 이 이메일 주소로 전송됩니다.
  3. 럭셔리 모델 ID, Anthropic Claude v2 모델인 기본 anthropic.claude-v2를 그대로 둡니다.

모델 ID 매개변수

템플릿을 배포하는 데 약 4분이 소요됩니다.

  1. Amazon SES로부터 이메일 주소를 확인하라는 이메일을 받으면 제공된 링크를 선택하여 이메일 주소를 인증하세요.
  2. CodeCommit에 대한 샘플 리포지토리의 초기 커밋에 대해 "변경 사항 요약"이라는 제목의 이메일을 받게 됩니다.
  3. AWS CloudFormation 콘솔에서 출력 배포된 스택의 탭입니다.
  4. RepoCloneURL 값을 복사합니다. 샘플 코드 저장소에 액세스하려면 이 정보가 필요합니다.

솔루션 테스트

개발자의 역할을 맡아 일부 코드 변경 사항을 푸시하여 워크플로를 처음부터 끝까지 테스트할 수 있습니다. CodeCommit에는 샘플 코드 세트가 준비되어 있습니다. 에게 CodeCommit 리포지토리에 액세스, IDE에 다음 명령을 입력합니다.

git clone <replace_with_value_of_RepoCloneURL>
cd my-sample-project
ls

다음 디렉토리 구조를 찾을 수 있습니다. AWS 클라우드 개발 키트 (AWS CDK) 정수 문자열에 대해 버블 정렬을 수행하는 Lambda 함수를 생성하는 애플리케이션입니다. Lambda 함수는 공개적으로 사용 가능한 URL을 통해 액세스할 수 있습니다.

.
├── README.md
├── app.py
├── cdk.json
├── lambda
│ └── index.py
├── my_sample_project
│ ├── __init__.py
│ └── my_sample_project_stack.py
├── requirements-dev.txt
├── requirements.txt
└── source.bat

애플리케이션 코드를 세 가지 변경합니다.

  1. 빠른 정렬과 버블 정렬 알고리즘을 모두 지원하도록 기능을 향상하려면 사용할 알고리즘을 선택할 수 있도록 매개변수를 취하고, 사용된 알고리즘과 정렬된 배열을 모두 출력에 반환하고, lambda/index.py 다음 코드로 :
# function to perform bubble sort on an array of integers
def bubble_sort(arr):
    for i in range(len(arr)):
        for j in range(len(arr)-1):
            if arr[j] > arr[j+1]:
                arr[j], arr[j+1] = arr[j+1], arr[j]
    return arr

# function to perform quick sort on an array of integers
def quick_sort(arr):
    if len(arr) <= 1:
        return arr
    else:
        pivot = arr[0]
        less = [i for i in arr[1:] if i <= pivot]
        greater = [i for i in arr[1:] if i > pivot]
        return quick_sort(less) + [pivot] + quick_sort(greater)

# lambda handler
def lambda_handler(event, context):
    try:
        algorithm = event['queryStringParameters']['algorithm']
        numbers = event['queryStringParameters']['numbers']
        arr = [int(x) for x in numbers.split(',')]
        if ( algorithm == 'bubble'):
            arr = bubble_sort(arr)
        elif ( algorithm == 'quick'):
            arr = quick_sort(arr)
        else:
            arr = bubble_sort(arr)

        return {
            'statusCode': 200,
            'body': {
                'algorithm': algorithm,
                'numbers': arr
            }
        }
    except:
        return {
            'statusCode': 200,
            'body': {
                'algorithm': 'bubble or quick',
                'numbers': 'integer separated by commas'
            }
        }

  1. 함수의 시간 제한 설정을 10분에서 5초로 줄이려면(함수가 몇 초 이상 실행될 것으로 예상하지 않기 때문입니다) my_sample_project/my_sample_project_stack.py 다음과 같이 :
timeout=Duration.seconds(5),

  1. 보안 강화를 위해 IAM을 사용하는 함수 호출을 제한하려면 다음에서 라인 56을 업데이트하세요. my_sample_project/my_sample_project_stack.py 다음과 같이 :
auth_type=_lambda.FunctionUrlAuthType.AWS_IAM

  1. 다음 명령을 입력하여 코드 변경 사항을 푸시합니다.
git commit -am 'added new changes for release v1.1'
git push

그러면 솔루션 개요에 설명된 대로 1~9단계의 CodePipeline 배포 워크플로가 시작됩니다. Amazon Bedrock 모델을 호출할 때 다음 프롬프트를 제공했습니다.

Human: Review the following "git show" output enclosed within <gitshow> tags detailing code changes, and analyze their implications.
Assess the code changes made and provide a concise summary of the modifications as well as the potential consequences they might have on the code's functionality.
<gitshow>
{code_change}
</gitshow>

Assistant:

몇 분 내에 승인 대기 중인 배포 파이프라인, 코드 변경 사항 목록, 모델에서 생성된 변경 사항 요약에 대한 분석이 있음을 알리는 이메일을 받게 됩니다. 다음은 출력의 예입니다.

Based on the diff, the following main changes were made:

1. Two sorting algorithms were added - bubble sort and quick sort.
2. The lambda handler was updated to take an 'algorithm' query parameter to determine which sorting algorithm to use. By default it uses bubble sort if no algorithm is specified. 
3. The lambda handler now returns the sorting algorithm used along with the sorted numbers in the response body.
4. The lambda timeout was reduced from 10 mins to 5 seconds. 
5. The function URL authentication was changed from none to AWS IAM, so only authenticated users can invoke the URL.

Overall, this adds support for different sorting algorithms, returns more metadata in the response, reduces timeout duration, and tightens security around URL access. The main functional change is the addition of the sorting algorithms, which provides more flexibility in how the numbers are sorted. The other changes improve various non-functional attributes of the lambda function.

마지막으로 배포를 검토하고 승인(또는 거부)하는 승인자 역할을 맡습니다. 이메일에는 검토 의견을 입력하고 배포를 승인할 수 있는 CodePipeline 콘솔로 연결되는 하이퍼링크가 있습니다.

파이프라인 승인

승인되면 파이프라인은 애플리케이션을 배포하는 다음 단계로 진행됩니다. 그렇지 않으면 파이프라인이 종료됩니다. 이 테스트의 목적에 따라 파이프라인에 정의된 배포 단계가 없기 때문에 Lambda 함수는 실제로 배포되지 않습니다.

추가 고려 사항

다음은 이 솔루션을 구현할 때 몇 가지 추가 고려 사항입니다.

  • 다양한 모델은 다양한 결과를 생성하므로 원하는 결과를 얻으려면 다양한 기반 모델과 사용 사례에 대한 다양한 프롬프트로 실험을 수행해야 합니다.
  • 제공된 분석은 인간의 판단을 대체하기 위한 것이 아닙니다. 생성 AI로 작업할 때 잠재적인 환각을 염두에 두어야 하며 분석은 코드 검토를 지원하고 속도를 높이는 도구로만 사용해야 합니다.

정리

생성된 리소스를 정리하려면 AWS CloudFormation 콘솔로 이동하여 CloudFormation 스택을 삭제하십시오.

결론

이 게시물에서는 코드 검토 프로세스에서 관리자가 직면한 과제를 살펴보고 승인 프로세스를 가속화하기 위한 증강 도구로 생성 AI를 사용하는 방법을 소개합니다. 제안된 솔루션은 일반적인 배포 워크플로에서 Amazon Bedrock의 사용을 통합하고 사용자 환경에 솔루션을 배포하는 데 대한 지침을 제공합니다. 이 구현을 통해 관리자는 이제 생성 AI의 보조 기능을 활용하고 이러한 문제를 쉽고 효율적으로 해결할 수 있습니다.

이 구현을 시도해보고 의견을 통해 여러분의 생각을 알려주세요.


저자에 관하여

프로필 Pic황 산 AWS의 수석 솔루션 아키텍트이며 싱가포르에 거주하고 있습니다. 그는 주요 금융 기관과 협력하여 클라우드에서 안전하고 확장 가능하며 가용성이 높은 솔루션을 설계하고 구축합니다. 업무 외에 Xan은 대부분의 여가 시간을 가족과 함께 보내고 3살짜리 딸의 상사가 됩니다. Xan은 다음에서 찾을 수 있습니다. 링크드인.

spot_img

최신 인텔리전스

spot_img