grep

DevOps

AWS MSK PART1 — MSK 도입 여정

Fang여기어때

2022년 8월 25일

원문에서 보기 ↗

안녕하세요. 여기어때 서비스개발팀에서 백엔드 개발을 담당하고 있는 팡입니다😀

서비스개발팀은 여기어때 앱의 전시 데이터와 상품 데이터를 노출하고, 노출을 위한 각 도메인의 데이터를 동기화하는 서비스를 개발하고 운영하며, 여기어때 서비스 제일 앞단에서의 트래픽을 분산처리 하는 업무를 담당하고 있습니다. “2년차 개발자와 함께하는 서비스개발팀 탐방기”에 상세한 설명이 있으니 많은 관심 부탁드립니다.

저를 포함한 많은 분들이 참여하여 최근까지 개발한 해외숙소 서비스 오픈했습니다. 이 또한 많은 관심 부탁드립니다.

이번 포스팅에서는 여기어때 해외숙소 서비스에서 AWS MSK를 구축하면서 고민했던 부분에 관한 이야기를 나누어보고자 합니다. MSK에 대해 관심이 있으시거나 구축하려고 하시는 분들에게 조금이라도 도움이 되었으면 좋겠습니다.

총 4편의 글을 시리즈로 구성했으며 구성은 아래와 같습니다.

AWS MSK PART 1 — MSK 도입 여정 👈

AWS MSK PART 2 — 클러스터를 구축해볼까요?

AWS MSK PART 3 — 모니터링을 구축해볼까요?

AWS MSK PART 4 — 운영은 어떻게 하고 있나요?

왜 MSK를 도입했나요?

해외숙소 서비스는 많은 개발팀의 협업이 필요한 프로젝트였습니다. 저희는 이벤트를 기반으로 상품, 쿠폰, 리뷰 등의 데이터를 송수신 할 수 있는 시스템이 필요하였고 그 후보군으로 AWS SQS, Apache Kafka, AWS MSK, AWS Kinesis 등의 서비스를 고려하였습니다. AWS SQS는 성능이 낮아서 검토 대상에서 가장 먼저 제외하였고, AWS Kinesis는 관리가 편하고 사용하기 쉬운 장점은 있지만 기존 개발자들이 경험이 많아서 익숙한 Kafka를 도입하기로 하였습니다.

Amazon MSK란 무엇인가요?

Amazon Managed Streaming for Apache Kafka(Amazon MSK)는 Apache Kafka를 사용하여 스트리밍 데이터를 처리하는 애플리케이션의 구축 및 실행을 위해 사용할 수 있는 완전관리형 서비스입니다. Amazon MSK는 Apache Kafka 커뮤니티의 기존 애플리케이션, 도구 및 플러그인이 지원되므로 애플리케이션 코드를 변경할 필요가 없습니다.

아래 그림은 Amazon MSK의 구성요소입니다.

MSK 구성요소

Broker

ZooKeeper

Producers, Consumers, and Topic Creators

MSK 구축 시작

해외숙소 서비스를 위해서 공통으로 사용할 이벤트 메시지 플랫폼으로 해외숙소 전용 Kafka를 사용하기로 하였습니다.

제가 속한 서비스개발팀에서 Kafka를 활용하여 구축하기로 논의하며 제가 담당자로 결정되었습니다. 이전에 서버 개발자, 데브옵스 엔지니어, 데이터 엔지니어로 다양한 경력을 쌓으면서 다양한 오픈소스와 클러스터를 구축한 경험은 있지만 kafka를 사용해본 경험은 없어서 사실 두려움이 있었습니다.

Kafka 경험이 있는 지인한테 물어봤더니 Kafka 대충 구축하는 건 쉬운데 잘 구축하고 운영하려면 꽤 어려워!! Kafka 담당자는 별도로 채용할 만큼 많은 경험과 노하우도 필요해!!!라고 말해주시네요. 팀장님이 데일리 미팅 때 카프카 구축하려면 대략 얼마나 시간이 걸릴까요? 라고 물어볼텐데 뭐라고 말할지 걱정은 더욱 커져만 갑니다.

경력이 쌓여도 일정 산출은 너무나 힘들지만 어떤 업무를 해야 하는지 생각해보고 업무 리스트를 작성해 보았습니다.

저의 일정 산정법 노하우 대로 일정을 산출해 봅니다.

(3주 + 4주 + 6주) / 3 = 4.33주

공휴일도 끼어 있지만 깔끔하게 1개월 기간이 필요하다고 말해야겠습니다.

다음날 데일리 미팅 시간이 되었습니다.

포프(팀장): 팡~ 현재 시점에서 일정 산정하는 것이 어렵겠지만 Kafka를 활용하여 구축하는 일정을 대략적으로라도 알려주세요.

팡: (자신 없는 목소리) 음…. Kafka 잘 몰라서 학습도 해야하고, 클러스터 구축, 모니터링 시스템 구축, 연동 가이드 문서 작성 등등 할 게 꽤 많아 보여서요. 1개월 정도 걸릴 거 같아요.

포프(팀장): (그 순간 AWS 전문가 포프의 표정을 보니 MSK는완전관리형 서비스인데 구축이 1개월이나 걸린다고?? 1주일이면 충분한 거 아닌가?? 흠칫 놀라신 표정이었지만 쿨하게) 네 알겠어요~ 잘 부탁해요!!

이렇게 1개월 동안의 MSK 구축 업무가 시작되었고, MSK를 검토 및 구축하면서 컨플루언스에 작성한 문서입니다.

MSK 비용 검토

AWS 서울 리전 기준으로 EC2 기반 Apache Kafka 클러스터 구축 시 비용과 Amazon MSK의 대략적인 비용을 검토해보겠습니다.

비용은 AWS pricing calculator를 사용하여 산정하였습니다.

EC2에 직접 구축 시 비용입니다.

테스트를 위한 예시입니다. 어떠한 서비스를 운영할 지에 따라 고려할 내용은 달라집니다.

MSK 구축 시 비용입니다.

테스트를 위한 예시입니다. 어떠한 서비스를 운영할 지에 따라 고려할 내용은 달라집니다.

EC2에 직접 구축하는 것보다 완전관리형인 MSK를 사용하면 비용이 많이 듭니다. 인스턴스 타입 m5.large 기준으로 보면 EC2 3대로 구축하는 경우보다 MSK로 구축 시 약 2배 정도 비용이 많이 든 걸 알 수 있습니다. MSK 브로커 인스턴스가 비싸게 책정되어 있고 현재는 예약 인스턴스 요금까지 제공하지 않고 있어서 비용이 더 비싸게 느껴지는 것 같습니다.

Q: Amazon MSK에서 예약 인스턴스 요금을 제공하나요?

A: 아니요. 현재는 아닙니다.

https://aws.amazon.com/ko/msk/faqs/

예를 들면 AWS EMR 서비스의 경우는 인스턴스 타입마다 다르지만, 예약 인스턴스를 사용하는 경우 약 20~30% 정도의 비용을 저렴하게 사용할 수 있는 것과 비교하면 MSK의 경우 비용면에서는 아쉬운 부분이 있습니다.

하지만 비용을 비교할 때는 고려해야 할 사항이 많이 있습니다.

EC2에 직접 구축하면 시간도 많이 소요되고, 숙련된 엔지니어가 필요하므로 인건비도 고려해야 합니다. 또한 이슈가 발생했을 때 분석에 필요한 시간, 서비스 장애 시 매출 하락 등의 많은 요소도 고려가 필요하다고 생각합니다. MSK를 활용하면 빠르게 클러스터를 구축 할 수 있으며, 확장성(디스크/브로커)이 좋고, 업그레이드도 쉬워서 운영 및 관리가 쉽습니다. 종합적으로 검토 후 최적화해서 사용한다면 저렴하게 사용할 수 있을 것으로 판단되어 MSK를 도입하기로 내부적으로 의사결정하였습니다.

실제로 개발 환경의 경우는 최소 인스턴스 타입(t3.small)으로 broker의 개수도 최소인 2개를 사용하여 구축하였습니다. 트래픽 규모가 크지 않다면 개발 환경에서 전혀 무리 없고, 성능도 꽤 잘 나옵니다. 이 부분은 PART 2 성능 테스트 부분에서 좀 더 다루어보도록 하겠습니다.

AWS 공식 문서에는 EC2 기반 Apache Kafka 클러스터와 Amazon MSK의 비용에 관한 추정치를 제공하고 있습니다. 클러스터 성능, 크기 및 비용은 사용 사례에 따라 다르며 실제 테스트를 통해 확인해야 한다고 언급하고 있습니다. MSK_Sinzing_Pricing 문서를 보면 Replication, Zookeeper, 엔지니어 비용을 포함하면 MSK가 오히려 비용이 저렴하다는 내용인데 참고하시면 도움이 될것 같습니다.

마치며

이번 글에서는 MSK를 선정한 이유, MSK 구축 시 필요한 작업, EC2에 직접 구축 시 비용과 MSK 구축 시 비용에 대해 알아보았습니다. PART2 — MSK 클러스터를 구축해볼까요? 에서는 MSK 클러스터 생성 및 성능 테스트 관련된 내용에 대해 알아보도록 하겠습니다.

여기어때 서비스를 발전시키고 함께 성장하고 싶으신 개발자분들 많은 지원 부탁드릴게요!

끝까지 읽어주셔서 감사합니다.