서론 Local에서 개발할 때 Secret을 관리하려고 .env 파일을 사용하곤 한다. 해당 파일을 .gitignore에서 지정해두면 github의 공개 저장소에 올라가지 않기 때문이다. 하지만 개발을 완료한 서비스를 배포할 때는 .env 파일이 배포 서버에 존재하지 않기 때문에 해당 서비스가 정상적으로 작동하지 않는다. 물론 .env 파일을 함께 배포 서버(AWS EC2 등)에 업로드할 수도 있겠으나 그다지 좋은 방법은 아니다. 누군가가 EC2 인스턴스의 접근할 수 있게 되었다면 .env 내용이 탈취되어 보안 상의 문제가 발생하기 때문이다. 보안 상의 문제를 방지하기 위해 secret을 관리하는 방법에는 여러가지가 있다. 대표적으로 AWS Secrets manager를 사용하는 방법과 Docker Se..
서론 지난 편에서 Spring boot에서 Docker image를 만들고 Docker image를 Docker Hub에 등록하는 것까지 해봤다. 이번에는 등록한 이미지를 끌어와 ECS에서 구동하는 법을 실습해본다. 해당 실습은 AWS 계정이 있고 해당 계정이 IAM에서 VPC 접근 권한과 ECS 접근 권한이 허용되어있어야 한다. 주의사항 프리티어를 제공하는 EC2와는 다르게 ECS는 프리티어가 제공되지 않는다. 컴퓨팅 서비스를 띄우는 시간에 비례하여 요금이 청구되기 때문에 이에 유념하며 사용하자. 사용하지 않는 Task는 중지시켜 요금을 절약할 수 있다. ECS 구성 요소 ECS를 생성하여 컨테이너를 구동하기 전에 ECS가 어떻게 구성되어있는지 살펴본다. ECS는 다음과 같이 구성되어있다. 클러스터 컨..
서론 메시지 큐를 사용하는 용도는 다양하다. 외부 서비스에 특정 정보나 상태 변경을 알리기 위해 비동기적으로 알림을 보내야 할 때 또는 MSA에서 각각의 서비스 정보 교환이 이뤄질 때 각 서비스의 의존성을 낮추는 느슨한 결합을 구현하기 위해 종종 사용한다. 수많은 Kafka, RabbitMQ 등 많은 메시지 큐 서비스가 있지만, 여기선 AWS의 SQS를 사용하여 비동기 메시징을 구현했다. SQS 역시 메시지 큐의 일종으로 어플리케이션 코드를 통해 해당 큐에 메세지를 보내거나 메세지를 받아올 수 있다. 아래 본문에서는 SQS를 Spring으로 사용하는 법을 설명한다. AWS 콘솔에서 SQS 사용 준비하기 IAM 액세스키 발급 IAM을 통해 SQS를 사용할 사용자 계정을 생성하고 해당 계정의 보안 자격 증명..
서론 지난 글에서 API gateway에 권한 부여한 후 Cognito 인증하여 백엔드 리소스인 Lambda에 접근하는 것을 실습해봤다. 하지만 실제 어플리케이션이 사용자를 인식하여 동적으로 정보를 보여주기 위해서는 이것만으로는 충분하지 않을 것이다. 유저 맞춤형으로 정보를 제공해주기 위해서는 각 API 요청에서 헤더에 담겨있는 유저 정보를 꺼낼 수 있어야 한다. 이번 글에서는 Cognito로 생성한 JWT를 API gateway 뒤에 있는 백엔드 리소스 단에서 추출하여 사용자 정보를 인식하고 사용자 맞춤형 정보를 제공하는 실습을 진행한다. 시스템 구조 및 가정 현재 프로젝트의 시스템의 구조는 아래 그림과 같다. 본 글에서는 이와 같은 연결 설정이 모두 완료되었다고 가정하고 글을 진행할 것이다. 만약 그..
서론 Cognito의 역할 Cognito는 아래 그림과 같이 동작한다. - 클라이언트 측에서 특정 경로로 접속하려고하는데, 그 경로가 권한이 부여되어있다면 접근이 제한된다. - 클라이언트는 Cognito의 앱 클라이언트로 들어가서 로그인을 실행한다. - 로그인에 성공하면 Cognito에서 인증 토큰을 발급하여 클라이언트 측으로 전송한다. 그리고 Cognito에 의해 Callback URL로 redirect되어 API gateway에 다시 접근하게 된다. - HTTP API gateway는 JWT 권한 부여자를 통해 헤더의 JWT를 인식하고 이를 Cognito에 보내서 알맞은 토큰인지 검증 요청한다. - 토큰이 알맞은 토큰일 경우 라우팅으로 접속하여 어플리케이션을 실행시켜 응답을 클라이언트에게 돌려준다. ..
서론 지난 포스팅에서 AWS ECR까지 생성하는 것을 진행해보았다. 이번 글에서는 내용을 이어서 VPC Endpoint를 생성하여 AWS ECR과 AWS ECS를 연결하고, 컨테이너 인스턴스를 구동하여 동작이 되는 것까지 확인해보도록 하겠다. VPC Endpoint 생성 VPC Endpoint를 통해 Private subnet 상에 있는 ECS와 ECR을 서로 연결해주면 ECR에 있는 이미지를 ECS가 가져와 쓸 수 있다. 인터페이스 엔드포인트 생성 앞서 VPC 엔드포인트는 크게 인터페이스 엔드포인트와 게이트웨이 엔드포인트가 있다고 하였다. 우리는 Private link를 사용하여 AWS ECR 과 ECS를 연결해야 하므로 인터페이스 엔드포인트를 생성하겠다. 이름은 임의로 입력한다. ECR은 AWS의 서..