Final Project

최종 결과물 설명 / 시나리오 흐름도

Featured image

최종 결과물 설명 / 시나리오 흐름도

이 프로그램은 다수의 인원이 한 작업에 대해 역할을 나누어 프로젝트를 진행해야 할 때 이용할 수 있습니다. 사용자는 어떠한 내용의 Task를 생성할 수 있고, 특정 작업에 대한 담당자(가입되어 있는 사용자)를 지정합니다. 담당자는 그 작업을 진행하고, 담당자는 진행 상황이 바뀔 시 Task의 진행도를 바꿀 수 있고 진행도 혹은 Task 의 내용이 수정될 때마다 사용자에게 메일로 특정 로그 내용을 전송하여 보다 쉽게 수정된 내용을 확인할 수 있도록 합니다.


1. 코드 수정 및 Image Push


구현한 CRUD 이미지는 코드를 수정할 때마다 Git Action이 빌드를 트리거하고 자동으로 만들어둔 ECR(Elastic Container Registry)에 이미지가 Push됩니다. 또한, Push된 이미지를 지정한 ECS의 서비스 내에 작업을 생성합니다.


2. S3를 사용한 정적 호스팅


Route 53을 통해 기록된 도메인은 S3의 정적 호스팅 사이트에 연결되고, 이 도메인에 액세스하면 정적 사이트와 상호 작용합니다. S3 버킷 내부에는 객체로 Login 페이지와 Task 페이지가 있고, 도메인에 액세스를 하면 Login 페이지와 연결되어 로그인 시 Task 페이지로 넘어갑니다. 로그인 된 사용자가 사이트의 주소로 특정 CRUD 요청을 보내면 DB 서버에서 데이터를 가져와서 HTML 테이블에 동적으로 데이터를 추가합니다.


3. 사용자 인증 과정


API Gateway를 Lambda의 트리거로 연결하여 API 요청을 수신하고 이러한 요청에 대한 정보를 처리를 위해 해당 Lambda 함수에 전달합니다. Lambda + DynamoDB는 인증 계층 역할을 하며, 사용자가 로그인에 성공 시 로그인 요청을 수신하고 자격 증명을 확인하며 해당 데이터를 DynamoDB에 저장하여 성공적인 로그인을 나타냅니다. 잘못된 자격 증명 또는 기타 인증 문제로 인해 사용자가 로그인에 실패하면 Lambda 함수가 요청을 처리하고 인증 실패를 기록합니다. 이 경우 로그인 시도 실패를 나타내므로 데이터가 DynamoDB에 누적되지 않습니다.


4. ASB 및 ASG


사용자 요청은 특정 Virtual Private Cloud(VPC) 내의 ALB(Application Load Balancer)를 통해 ASG(Auto Scaling Group)에 들어갑니다. ASG는 Public Subnet 내에 위치해 있으며, ASG가 관리하는 EC2 인스턴스 내부에서 배포한 이미지가 실행된다. 인스턴스는 들어오는 요청을 처리하고 CRUD 작업을 실행하며, RDS에 그 내용을 저장합니다.

Fargate가 아닌 EC2를 사용한 이유


5. DynamoDB Log


사용자의 요청에 따른 결과 및 로그를 모두 Log DynamoDB에 저장하게 되고, DynamoDB에 로그가 쌓일 때마다 EventBridge에서 로그를 설정해둔 Rule에 따라 필터링되어 Lambda를 통해 로그가 사용자에게 SES로 전송됩니다.

로그 저장소로 DynamoDB를 사용한 이유