개요
Scenario
•
CTO는 스트랭글러 패턴을 사용하여 마이크로서비스 기반 아키텍처로의 전환을 모색하고자 한다.
•
기존 아키텍처는 모놀로틱 → 이걸 마이크로서비스 기반으로 변경해야함.
Task
•
우리의 모놀리식 애플리케이션은 이미 배포되었으며, 이제 기능을 분리하여 별도의 마이크로서비스로 배포하는 방법을 고려할 준비가 되어있다.
•
기본 컨트롤러
◦
BasketController: 장바구니 관리
◦
UnicornController: 재고 관리
◦
UserController: 사용자 관리, 등록, 로그인
◦
HealthController: 기본 상태 검사를 수행
•
데이터베이스(self-managed MySQL on Amazon EC2)는 3개의 테이블이 있는 도메인을 반영한다.
◦
unicorns: holds the inventory of Unicorns
◦
unicorn_basket: 유니콘과 사용자 선택 사이의 연관 테이블
◦
unicorn_user: 시스템의 사용자
Migration Strategies
사용할 수 있는 마이그레이션 전략 7가지
•
그들은 Amazon S3를 사용하여 웹사이트 정적 콘텐츠를 호스팅하고 데이터베이스를 RDS로 이동하여 어느 정도 Replatform을 진행했다 .
•
팀은 AWS App Runner를 사용하여 백엔드 애플리케이션을 컨테이너화하여 이러한 노력을 계속할 수 있다.
•
그런 다음 nginx 웹 서버와 Tomcat 애플리케이션 서버를 실행하는 Amazon EC2 인스턴스의 필요성을 제거한다.
•
이 워크샵에서는 솔루션을 독립적인 마이크로서비스로 실행하기 위해 리코딩하여 리팩터링 방식을 선택한다.
•
새로운 Generative AI 툴링인 Amazon CodeWhisperer 와 Amazon Q , 그리고 AWS Migration Hub Refactor Spaces를 사용하여 이 방식을 도울 것이다.
소프트웨어 개발 라이프 사이클에서 생성 AI의 이점
•
Amazon Q Developer는 연구부터 배포, 업그레이드까지 개발 프로세스의 각 단계에서 개발자와 빌더를 지원하는 AI 어시스턴트를 제공한다.
•
기존 IDE와의 통합은 개발 워크플로를 가속화하는 데 도움이 됩니다.
AWS 콘솔 및 IDE와 같은 도구 내에서 대화형 Q&A를 통해 답변과 아이디어에 빠르게 액세스
•
다양한 AWS 서비스에 대한 오류와 문제를 콘솔 내에서 직접 해결하고 분석과 제안된 솔루션을 제공한다. 이를 통해 문제를 더 빨리 해결할 수 있다.
•
IDE 내에서 코드의 보안 취약성을 식별하여자동 해결 옵션을 제공한다. 이를 통해 애플리케이션의 보안을 개선하는 데 도움이 된다.
•
IDE 내에서 단계별 지침으로 새로운 기능 개발을 대화형으로 안내합니다. 이를 통해 새로운 기능을 더 빨리 빌드할 수 있다.
•
변환 계획을 생성하여 코드를 업그레이드한다 . 이를 통해 애플리케이션 유지 관리 및 업그레이드가 간소화된다.
QnA
Amazon Q는 안전하고 개인 정보 보호되도록 구축되었으며, 기존 거버넌스 ID, 역할 및 권한을 이해하고 존중할 수 있습니다. 또한 이 정보를 사용하여 상호 작용을 개인화할 수도 있습니다. 사용자가 Amazon Q 없이 특정 데이터에 액세스할 수 있는 권한이 없는 경우 Amazon Q를 사용하여 액세스할 수도 없습니다. Amazon Q는 첫날부터 엄격한 엔터프라이즈 요구 사항을 충족하도록 설계되었습니다.
Professional 라이선스를 사용하여 Amazon Q에 액세스하는 사용자의 경우, 귀하의 콘텐츠는 어떠한 모델도 학습하는 데 사용되지 않습니다. Builder ID를 사용하여 Amazon Q에 액세스하는 사용자의 경우, AWS는 서비스 개선 목적으로 귀하의 사용 및 콘텐츠에 대한 데이터를 저장할 수 있습니다. 설명서에 설명된 옵트아웃 메커니즘을 사용하는 경우 귀하의 콘텐츠는 사용되지 않습니다. 자세한 내용은 Amazon Q 사용자 가이드의 AWS와 데이터 공유를 참조하세요.
IDE와 마찬가지로 개발자는 Q에서 제공하는 모든 코드 제안을 포함하여 자신이 작성한 코드를 소유합니다. 개발자는 수락한 Q 제안을 포함하여 자신의 코드에 대한 책임이 있습니다. 개발자는 수락하기 전에 항상 코드 제안을 검토해야 하며 코드가 의도한 대로 정확히 수행되도록 편집해야 할 수도 있습니다.
네. Q 참조 추적기는 코드 제안이 특정 Q 오픈 소스 교육 데이터와 유사할 수 있는지 감지합니다. 참조 추적기는 이러한 제안을 저장소 URL 및 프로젝트 라이선스 정보로 플래그 지정하거나 선택적으로 필터링할 수 있습니다.
Q의 구성 설정에서 Include Suggestions With Code References 옵션을 선택 해제할 수 있습니다. 이렇게 하면 Q가 알려진 라이선스 오픈 소스 코드에 대한 참조를 포함하는 제안을 하지 못하게 됩니다.
Q는 보안 취약성이 있는 코드를 제안하지 않도록 설계되었으며, 가능한 한 많은 보안 취약성이 걸러집니다. 그러나 Q의 생성적 특성을 감안할 때 보안 문제가 있는 코드 제안이 있을 가능성이 적습니다. Q에는 Q의 코드 제안과 사용자가 작성한 코드를 포함하여 Python, Java 및 JavaScript 프로젝트 내의 보안 취약성을 감지하는 내장 코드 스캐닝 기능이 함께 제공됩니다.
Amazon Q는 악성 구문이 포함된 코드 제안과 편견을 나타내는 일반적으로 알려진 코드 구조가 포함된 제안을 걸러냅니다.
비용
간단히 말해, 무료 티어 액세스는 BuilderId를 사용하여 부여되고 , Professional(유료) 티어는 IAM Identity Center를 사용하여 AWS의 청구 계정/조직에 연결합니다. 이 워크숍에서는 CodeCatalyst와 Q Developer의 무료 티어를 사용합니다.
1부 VSCode를 Q Developer에 연결
Q Developer에 로그인
•
VSCode에서는 Amazon Q 확장 프로그램이 미리 설치되어 있는 것을 볼 수 있다.
•
왼쪽에 있는 Amazon Q 로고를 찾아라.
•
확장 프로그램을 선택하고 '무료로 사용'을 선택한 다음 '계속'을 선택
•
기존 빌더 ID가 있는 경우 여기에서 사용할 수 있다.
•
그렇지 않은 경우 빌더 ID 에 가입해야 한다 .
•
이메일 주소를 입력
•
다음을 선택
•
브라우저로 진행을 선택한 다음 열기 , 확인 및 계속을 선택
•
'액세스 허용'을 선택
•
다음 메시지가 표시되어야 한다.
•
VSCode로 돌아가서 Amazon Q가 로그인되었는지 확인.
2부 Amazon CodeCatalyst 설정
Amazon CodeCatalyst: AWS에서 호스팅하는 서비스, AWS 계정 및 서비스와 별도로 존재
Configure Code Catalyst
•
Code Catalyst를 구성하려면 오리건 지역(us-west-2) 에 있어야 한다.
•
'가입'을 클릭 하고 지시에 따라 BuilderId를 만들기(BuilderId가 있는 경우 제외)
Create Space
•
'공간 만들기'를 선택하고 이름을 지정한 다음 'Oregon' 리전을 선택하고 이 워크숍의 일부로 제공된 AWS 계정 ID를 붙여넣는다 .
•
AWS 계정 ID는 AWS 콘솔의 오른쪽 상단에서 찾을 수 있다.
•
'계정 확인 토큰 '이 생성되고 상자가 녹색으로 바뀐다.
•
'AWS에서 확인'을 선택한 다음 '공간 확인'을 선택
이는 AWS에 로그인했다고 가정한 상태이다.
Code Catalyst로 돌아와서 공간 만들기를 선택
•
새로 만든 공간에서 '설정'을 선택한 다음 'AWS 계정'을 선택 하고 계정을 선택한 다음 AWS Management Console에서 역할 관리를 선택
•
기본 역할을 수락
•
이는 CodeCatalyst가 AWS 계정에서 작업하는 데 사용하는 역할이다.
생성 AI 활성화(미리보기) 기능
•
Code Catalyst 공간( 콘솔에서 Amazon CodeCatalyst로 이동을 선택하여 액세스)에서 '설정'을 선택한 다음 '생성 AI'를 선택하고 '이 공간의 프로젝트는 생성 AI 기능에 액세스할 수 있음'을 선택
프로젝트 설정
프로젝트 만들기
•
프로젝트 는 공간 내에 있다.
•
여기서 팀은 작업의 일부에 대해 함께 작업할 수 있다.
•
여기에는 작업할 이슈 백로그, 코드 저장소, CICD 파이프라인 등이 있다.
•
CodeCatalyst로 돌아와서 로그인 포털을 통해 '프로젝트 만들기'를 선택
•
'처음부터 시작'을 선택한 다음, 프로젝트 이름을 지정(예: 'unistore') . 그런 다음 프로젝트 만들기를 선택.
Blueprints
예제 코드를 제공하는 강력한 액셀러레이터입니다. 예를 들면 다음과 같습니다: AWS Amplify 호스팅에 배포된 단일 페이지 애플리케이션. 또는 데이터에 맞게 사용자 정의할 수 있는 안전한 Bedrock 보호 LLM 플레이그라운드…
리포 생성
•
왼쪽 탐색 모음에서 '코드'를 선택
•
'소스 저장소'를 선택한 다음 '저장소 추가' , '저장소 만들기'를 선택
•
저장소의 이름을 지정
•
.gitignore 파일 섹션에서 Java를 선택
•
'만들기' 선택
코드 복제
터미널을 열고 git 명령을 실행
•
VSCode에서 왼쪽 상단의 줄임표를 클릭하고 터미널을 선택한 다음 새 터미널을 선택
•
먼저 CodeCatalyst에서 마지막 단계에서 만든 repo에 대한 정보를 가져와야 한다.
•
CodeCatalyst에서 Code, Source repositories로 이동하고 목록에서 repo를 선택한 다음 Clone repository를 선택
•
'토큰 만들기'를 선택
•
이제 setup.sh 도우미 스크립트 나 linux 명령어를 사용할 수 있다.
복제된 리포지토리로 작업 공간 전환
•
이제 리포지토리를 설정했으므로 VSCode 작업 공간을 전환해야 한다.
•
파일 , 폴더 열기... 메뉴에서 이 작업을 수행할 수 있다 . Workshop(폴더)를 선택한 다음 UnicornsRepo를 선택
•
또는 제공된 VSCode를 사용하는 경우 URL 끝에 리포지토리 이름을 추가할 수 있다: of:::code{showLineNumbers=false}
3부 - AWS Migration Hub
현재 배치
•
모든 것이 하나의 EC2 인스턴스에 배포된다.
→ 아까 설명한 모놀로틱 아키텍처
공간 리팩토링
•
Refactor Spaces 환경
Refactor Spaces: API 트래픽에 대한 프록시를 생성하기 위한 관리형 서비스
◦
일부 트래픽을 API의 새로운 구현으로 라우팅하기 쉽게 만들어서.
◦
이 워크샵에서는 AWS Lambda에서 세 개의 새로운 사용자 API를 구현하고 EC2 대신 이 API로 라우팅하고 다른 API는 그대로 뒀다.
•
모놀리식 애플리케이션이 노출하는 엔드포인트 경로 목록
Create user: POST: [baseUrl]/user
Login user: POST: [baseUrl]/user/login
Search user: GET: [baseUrl]/user/{email}
Get unicorns: GET: [baseUrl]/unicorns
Add unicorn to basket: POST: [baseUrl]/unicorns/basket
Remove unicorn from basket: DELETE: [baseUrl]/unicorns/basket
Get basket: GET: [baseUrl]/unicorns/basket/{userUuid}
JSON
복사
◦
우리는 [baseUrl]/user 경로 에 있는 새로운 마이크로서비스로 모놀리스의 사용자 기능 구현을 대체해야 한다.
오픈 리팩터링 공간
•
•
unistore-dev라는 환경 이름을 클릭하면 AWS Transit Gateway (선택 사항) 및 Amazon API Gateway 와 같은 기본 인프라와 함께 Refactor Spaces 애플리케이션이 미리 생성되어 있는 것을 확인할 수 있다.
웹사이트 트래픽 리디렉션
•
이제 애플리케이션 프록시를 사용할 수 있으므로 프론트엔드가 Amazon API Gateway에서 제공하는 새 URL을 사용하도록 지정해 보자.
•
config.json 파일을 Amazon API Gateway 배포 URL로 업데이트하고 Amazon S3 정적 웹사이트에 업로드합니다.
•
unistore 애플리케이션 페이지로 이동하여 환경 이름 unistore-dev를 클릭 하고 Amazon API Gateway 프록시 URL을 복사한다.
•
리눅스환경에서만 허용
◦
VSCode의 config.json 파일에 복사
jq -n --arg appname "**UniShopApiGatewayProxyUrl**" '{host: $appname}' > config.json
Bash
복사
◦
터미널을 열고 다음 명령을 사용하여 S3의 파일을 업데이트
aws s3 cp config.json s3://**UIBucket**
Bash
복사
•
아래 다이어그램은 우리가 업데이트한 내용을 보여준다.
4부 - 코드 작업
Amazon Q Developer 및 Amazon CodeCatalyst 사용
•
Q Developer와 상호 작용하는 방법
◦
아마존 코드카탈리스트
▪
Q 개발자에게 작업을 할당
▪
풀 리퀘스트 요약을 생성
▪
개발자로부터 풀 리퀘스트가 있으면 Q Developer를 사용하여 요약을 만들 수 있다.
◦
IDE
▪
인라인 코드 완성:
입력하는 동안 인라인 코드 제안으로 더 빠르게 코드를 작성Java, Python, TypeScript, Terraform, AWS CloudFormation, CDK 등 15개 이상의 언어 지원
▪
채팅:
코드를 생성하고, 기존 코드를 리팩토링하고, 코드를 설명하고, 소프트웨어 개발에 대한 질문에 대한 답변을 얻을 수 있다.
▪
코드 분석:
코드의 보안 취약점을 분석하고 수정(자동 스캔 및 프로젝트 스캔 추가 필요)
Java, Python, TypeScript, C# 등 10개 이상의 언어 지원
▪
코드 참조 로그:
코드 참조 로그를 사용하는 훈련 데이터와 유사한 Amazon Q의 속성 코드
▪
소프트웨어 개발 에이전트:"/"를/dev
Amazon Q가 작업 공간의 여러 파일에 새로운 기능을 계획하고 구현 가능. Amazon Q 채팅에 입력하여 빠른 작업 메뉴를 열고 작업 선택 가능
▪
코드 변환 에이전트:"/"를/transform
•
몇 분 만에 Java 애플리케이션을 업그레이드
•
현재 Java 8 또는 11 Maven 프로젝트에서 Java 17로 지원
•
Amazon Q 채팅에 입력하여 빠른 작업 메뉴를 열고 작업을 선택