들어가며대규모 트래픽을 고려하며 가용성과 보안성을 준수하는 올리브영 Public Cloud(AWS) 인프라 아키텍처 구축이라는 프로젝트를 진행하며 고가용성을 목적으로 운영 환경에서 모든 이중화를 마치고 리전에 대한 이중화도 필요하다고 생각했다. 아무래도 최근 CSP(Cloud Service Provider) 외부 원인일지라도 특정 클라우드 업체에 장애가 나는 경우가 있기에 멀티 클라우드로 해결하면 좋겠지만 우리는 정해진 CSP인 AWS를 기반으로 멀티 리전을 통해 해결하려고 했다. 또한 재해 복구 대상을 분석하고 전략 별 RPO 및 RTO에 따른 적절한 재해 복구 전략을 선택했다. 재해 복구 대상 분석클라이언트 요청 흐름Client REST API→ ALB→ EKS(Node Cluster) → Pod(C..
들어가며전체 아키텍처를 설계하는 과정에서 요소 하나를 배치하는 위치는 정말 중요하다.특히 네트워크 설계 등 상세 설계가 이루어진 후라면 더욱 더 변경이 어려울 수 있다. 문제 인식팀 프로젝트에서 아키텍처를 구성하며 실제로 구축까지 완료해야 했는데 우리의 아키텍처에서 붉은 박스 영역을 보면 ElastiCache를 배치할 Private Subnet 중 Application Subent, DB Subnet 어디에 배치해야할지 감이 잡히지 않았다. 문제 원인누구나 Application과 DB 사이에서 중간 역할을 한다는 것을 알 수 있을텐데 이 부분에 대한 명확한 기준이 있지 않으면 언젠가 또 다른 서비스에서 같은 고민을 할 것 같았다. 문제 해결해당 서비스의 책임에 대해 깊게 생각하면서 ElastiCache는..
들어가며디자인학과 전시 웹 사이트를 구축하면서 이미지 서버로 S3를 사용하기로 했다. Spring Boot 3.3.3 환경에서 S3와 연동하려고 공식 문서와 여러 기술 블로그를 보다보니 주로 AWS SDK for Java, Spring Cloud for Amazon Web Services를 이용하는 두 가지 방법이 있었는데 어떤 차이가 있는지 확실히 알고 도입하고 싶었다. 공식 문서 분석AWS SDK for JavaAWS SDK for Java https://docs.aws.amazon.com/sdk-for-java/ docs.aws.amazon.com우선 AWS SDK는 우리가 이용하려는 Amazon S3를 제공하는 AWS가 공식적으로 제공하는 SDK이므로 신뢰도가 아주 높았고 선택하고 싶었다. AWS..
들어가며대규모 분산 시스템을 구축하려는 팀원들과 Terraform을 이용한 IaC를 구축하기 전에 페어 프로그래밍으로 직접 웹 콘솔에서 쿠버네티스 환경을 구성해보기로 했다. AWS의 어떤 서비스라도 Console에서 구성하게 될 때 상세 옵션을 선택해야하는 경우가 많은데 자세히 읽어보지 않고 선택한 후 넘어가게 된다면 추후에 여러 서비스를 결합하고 고도화하는 과정에서 문제가 생기더라도 찾기 어려운 경우가 많다. 따라서 기본적인 구성은 넘어가고 중요하게 생각했던 구성을 볼 것인데 여기만 집중한다면 클러스터에서 문제는 생기지 않을 것이라고 생각한다. EKS 클러스터 아키텍처는 전체 내용의 기반이니사용자 VPC가 아닌 AWS 관리 VPC 내 EKS Control Plane이 존재하고 ENI만 사용자 VPC에 ..
들어가며크레딧이 부여된 하나의 계정에서 각 팀원마다 IAM 사용자를 생성하여 구성된 EKS 클러스터에 로컬에서 액세스하려고 했다. 1. aws configure 명령으로 각 IAM 사용자의 액세스 키로 AWS 자격 증명도 등록했다.2. aws eks --region [Region name] update-kubeconfig --name [EKS name]을 통해 Kubeconfig 파일 내 클러스터의 접속 정보도 업데이트했다. 문제 인식kubectl get no 명령으로 팀원 모두가 워커 노드를 조회했지만You must be logged in to the server (the server has asked for the client to provide credentials) 에러가 발생했다. 모두가 공통적..