개요최근 Node.js 환경에서 Kafka Client의 소스코드를 분석하는 시간을 가지고있다. 여러 Kafka Client를 확인하던 중, @nestjs/microservices 라이브러리를 알게 되었는데 Kafka, RabbitMQ, Redis와 같은 여러 서비스를 손쉽게 통합할 수 있다는 것을 알게 되었다. 특히, 해당 라이브러리의 소스 코드를 확인하던 중 특이한 점을 발견했는데, 관련된 의존성을 필수적으로 모두 설치해야 하는 타 라이브러리와 달리 어플리케이션에서 필요한 의존성만 설치하면 되는 구조로 되어 있었다. Kafka를 사용해야 한다면 kafkajs, Redis를 사용해야 한다면 ioredis 의존성이 필요한 것과 같이 말이다. 그렇다면 어떻게 원하는 의존성을 필요할 때만 추가하고 사용할 수..
2024년은 많은 성장을 한 해였다. 기술적인 성장과 “나”라는 사람을 좀 더 견고하게 만들어 준 시간이었는데, 1년간 느꼈던 경험과 나의 감정을 회고하고 새로운 2025년의 방향성을 수립하여 좀 더 후회 없는 시간을 보내고자 한다. 2024Kubernetes와 만남2024년은 Kubernetes와의 첫 만남으로 시작하게 되었다. 막연히 공부하고 싶다고 생각하고 있어 개인적으로 공부를 하고 있긴 했었으나 실제 업무에서 필요성이 발생하게 되었고, 본격적으로 Kubernetes를 도입하는 상황에 맞닥뜨리게 되었다. 하고 싶은 일과 실제 담당하게 되는 업무 간의 괴리는 언제든지 발생한다고 생각한다. 하지만, 이번에는 그 두 가지가 일치하는 상황이었다. 좋은 기회가 나에게 다가온 것 같아 개인적인 시간과 모든 ..
개요사내 아키텍처에서는 어플리케이션의 역할을 명확히 구분하기 위해 MSA(MicroService Architecture) 를 도입하고 있다. 여기서, RabbitMQ와 Kafka를 활용해 EDA(Event Driven Architecture)를 구성하고 있으며, 각각의 메시지 큐는 어플리케이션의 역할에 따라 선택하였다. 예를 들어, RabbitMQ는 순서 보장과 Queue 단위로 이벤트를 처리하기 수월한 도메인과 Kafka는 확장성과 처리량이 중요한 도메인에 적용하고 있다. 현재 메시지 큐는 AmazonMQ-RabbitMQ와 Amazon MSK-Kafka를 사용하고 있는데, 운영 환경에 MSK를 사용하는 신규 어플리케이션을 배포한 이후, 갑작스럽게 MSK 커넥션이 종료되는 문제가 발생하게 되었다. 이에 ..
🧩 개요Kubernetes를 클라우드 환경에서 구성할 때, 일반적으로 AWS EKS, Google GKE, Azure AKS와 같은 Cloud Service Provider(CSP)의 관리형 Kubernetes를 사용할 것이다. 우리는 이러한 서비스를 통해 Kubernetes Cluster의 Control Plane 및 Worker Node에 대한 고민 없이 관리를 자동화할 수 있게 된다. 만약, Cluster를 업그레이드하거나, 네트워크 설정을 온프레미스의 환경에서 작업하게 된다면, 엄청나게 머리 아픈일이 아닐 수 없다. 클라우드 환경에서 Kubernetes로 구성한 서비스들은 각 어플리케이션에 필요한 네트워크 설정, 권한 관리 필수적인 것이다. 특히, 권한 관리에서는 최소 권한 원칙(Zero Tru..
개요이번 게시글은 OpenSearch에서 Snapshot Repository를 설정하여 로그를 백업하는 방법을 작성하려 했었다. 그러나 해당 작업을 구현하던 중 Terraform으로 생성한 IAM Role에서 이상이 있는 것을 확인하게 되었고, 이를 인지하기까지 많은 시간이 소요되었다. 이번 게시글에서는 Terraform Assume Role 문제를 해결하기 위해 겪은 과정을 공유하고자 한다. Assume Role Assume Role은 AWS STS를 이용해 특정 역할(Role)을 임시로 부여 받아 엑세스 권한을 획득하는 방식을 뜻한다. 각각의 개념을 먼저 알아보고, Assume Role이 어떤 역할을 하는지 살펴보도록 하자. AWS STSAWS STS(Security Token Service)는 특정..