사이드프로젝트

    VPC Endpoint 를 사용하여 private하게 Infra 개선하기

    개요 VPC는 한 개만 생성하여 4개의 서비스를 모두 넣어도 충분했을 수도 있었습니다.하지만 Service 별로 VPC를 생성함으로써 보안적으로 리소스 간 허용을 최소화하고 네트워크를 간편하게 구성하기 위해서 서비스별로 별도로 생성을 해주었습니다. pivate 하게 vpc를 구성하여서 보안적으로 이점이 있습니다. 외부 네트워크가 아닌 Amazon내부의 네트워크를 통해서만 접근이 가능합니다. 외부 접근에 대해 private Link의 요금을 따라가기 때문에 업데이트가 많거나 외부 접근 트래픽이 많을 시에 비용적으로 이득을 볼수 있습니다. api gateway를 제외하고는 외부 접근이 불가능해집니다. 작업 private와 isolate Type의 subnet만 생성 [public 생성 제외] nat gate..

    CDK 사용중 테스트 및 AWS 환경에서 properties 문제

    문제 docker와 ecs를 통해서 배포된 Service에서 AWS SQS나 각종 AWS를 서비스 등을 사용하기 위해서 해당 서비스 프로퍼티에 access-key와 secret-key를 설정해줘야 했습니다. access-key 뿐만 아니라 db에서 사용하는 password들도 소스에 포함되지 않고 외부 설정으로 넘겨줄 방법이 필요하게 되었습니다. 해결 .properties에서는 환경 변수로 설정 active profile을 적용하여 properties의 local과 production을 구분 환경변수는 Aws Secrets Manger와 CDK설정을 통해서 외부에서 주입 문제를 해결하기 위해서 위의 3가지를 목표로 하고 작업을 시작했습니다. secrets manger를 사용하게 되면 키를 보관함에 따른 ..

    [infra] MSA구성에 따른 인증 / 인가 로직 구현

    구조 두 명이서 하나의 프로젝트를 4개의 서비스로 나누어서 작업하다 보니 인증 및 인가에 대해서 비슷한 로직을 전체 서비스에 추가해야 될지 고민하다. 인증 / 인가를 3rd party solution인 Aws cognito에 위임하고 서비스에서는 인증된 user 식별 값을 API Gateway에서 주입하여 식별키를 사용한다면 개별 서비스에서는 인증에 관하여 크게 신경 쓰지 않고 개발을 진행할 수 있게 됩니다. 코드

    [service]여러 서비스 사용에 따른 Integration Test

    문제 두 명이서 하나의 프로젝트를 4개의 서비스로 나누어서 작업하고 AWS의 여러 서비스를 참조하고 사용하다 보니 Test code를 자세하게 작성하지 않게 되고 테스트 진행을 aws 서비스로 access key를 통해서 직접 호출을 하다 보니 서로 설정이 변경되거나 잘못 전달하였을 경우에 서로 개발한 서비스가 동작하지 않기 시작했습니다. Local에서 되던 게 server에 올리니 안되고 내 pc에서 되는 게 팀원의 PC에서는 동작하지 않았습니다. 그러다 보니 test code를 지우고 돌리거나 잘 작성하지 않게 되었습니다. 해결 아래와 같은 조건을 계획하고 TestContainers와 LocalStack을 사용하기로 결심하였습니다. TestContainers는 코드상에서 도커 컨테이너를 올리고 테스트..

    [service] 라이더 할당시 동시에 할당되는 문제 해결

    문제 물류 매칭쪽에서 아래와 같은 구조로 개발 진행시에 4번 로직에서 라이더 정보 요청시에 문제가 발생 할수 있다가 판단되었습니다. 물류 서비스와 마찬가지로 동일한 instance가 여러 개 생성된 상태에서 동시에 여러 요청시 동일한 Rider매칭될거라 생각됩니다. 해결 Redis를 사용하게 되면 레디스의 빠른 응답성과 싱글스레드 와 이벤트 루프 기반의 방식으로 인하여 위같은 문제를 해결할수 있을거라고 판단하였습니다. 아무리 여러 요청이 들어와도 한번에 하나의 요청을 처리한다면 동시처리시에 문제가 발생할 여지가 없기때문입니다. 배송기사 출근 등록과 함께 Redis List에 지역 코드 및 배솔 날짜 별로 저장 물류 서비스에서 라이더 정보 요청시에 Redis List에서 라이더 정보 순차적으로 반환 @Tr..

    [service] 물류서비스 매칭 진행시 동시성 문제 해결

    문제 현재 진행 중인 프로젝트에서 ECS와 Autoscaling을 사용하여 서버를 확장하게 된다면 기존 계획과 다르게 문제가 될 거라고 판단했습니다. 아래 그림처럼 동일한 instance가 여러 개 생성된 상태에서 spring batch가 동작하여 matching 작업을 진행하게 되면 주문이 여러 번 매칭 되거나 누락되는 문제가 발생할 수 있다 생각이 들었습니다. 방법 1 Logistics API Server와 Logistics mathcing Server 애플리케이션을 분리 매칭 서버를 EC2 1개로 구성 ( Spring Batch 사용) -> 성능 향상 시 Scale Up을 통해 해결 Logistics API서버는 ECS로 생성 방법 2 AWS queue service, Lambda와 Cron을 지원..

    [Infra] AWS CDK(Type Script)를 이용하여 인프라 구성하기

    목차 1. 구조 2. VPC 3. ECS + NLB + EC2 4. API Gateway 5. CI / CD (Aws Code Build & Code Pipeline) 전체 Source GitHub 링크 1. 구조 2. VPC VPC는 한 개만 생성하여 모든 서비스를 넣어도 충분했을 수도 있었습니다. 하지만 Service 별로 VPC를 생성함으로써 보안적으로 리소스 간 허용을 최소화하고 네트워크를 간편하게 구성하기 위해서 서비스별로 별도로 생성을 해주었습니다. Nat Gateway를 사용안함(natGateways: 0)으로 설정한 이유 Nat Gateway는 private로 선언된 인스턴스가 외부로 접근할 때 사용되지만 VPC Endpoint를 사용하게 되면 여러가지 이점이 있었습니다. pivate 하게..