대용랑 채팅 TPS에 대한 stateful 서비스 구축하기

(4.8) 수강평 4

수강생 163

Thumbnail

초급자를 위해 준비한
[백엔드, Kafka] 강의입니다.

치지직, 아프리카TV 등 stateful 서비스에 대해서 어떻게 서버를 구축하고, 무중단 배포가 진행이 되는지 모든것을 알려드립니다.

이런 걸
배워요!

  • Kafka를 통한 발행/구독 패턴

  • MySQL을 통한 데이터 관리

  • WSS 통신을 통한 대용랑 채팅 TPS처리

  • 이벤트 스트리밍을 통한 서버 관리

네이버(치지직)에서 Kafka, MySQL을 활용하여 Stateful한 서비스 만들기 😘


본 강의에서는 스트리밍 플랫폼 (치지직, 아프리카TV, Discord, Twitch)에서 사용되는 채팅 TPS에 대해 Stateful한 서비스가 어떻게 관리가 되고 개발이 되는지에 대해 배울 수 있습니다.


이 강의는 두가지 언어를 사용하고 있습니다.

Golang을 우선적으로 사용하여 모두 구현을 하는 방법에 대해서 알아보고

이후 수강하시는 분들을 위해 조금 더 익숙하신 Node.JS에서의 Kafka 활용하는 방법 등 다양한 언어를 통해서 강의를 구성하였습니다.


추가로 Kafka를 통한 발행/구독 패턴, MySQL을 통한 데이터 관리등 다양하고 기존에 경험해보지 못한 주제로 강의를 구성하였습니다.


강의를 수강하시고 나면, 여러분들은 Kafka, MySQL에 대한 깊은 이해Stateful한 서비스에 대한 Zero-downtime Deployment를 학습하실 수 있습니다.

Stateful vs Stateless의 차이는 무엇인가요?? 🫣

여러분!! 혹시 단순히 MVC, Service-Repository 같은 서버의 구조가 아닌 서버의 기본 형태에 대해서 고민해 보신적이 있으신가요?


실무에서는 서버의 형태에 따라서 Zero-downtime Deployment를 수행할지, 아니면 어느정도의 retry를 허용할지가 정해집니다.

여러분들이 개발하시는 서버는 이 두 개념 중 하나가 반드시 적용이 되면서 개발이 시작됩니다..

일반적인 HTTP서버를 생각하시면 됩니다.

상태를 유지하지 않기 때문에, 확장에 굉장히 용이하며, 여러분들이 일반적으로 서버를 개발하신다면

기본적으로 Stateless한 서버로 구성이 됩니다.


가장 대표적인 서버의 형태라고 보시면 됩니다.

쉽게 접하지 못하는 서버의 형태입니다.


이러한 서버의 구조에서는 ws protocol을 활용하여 개발이 진행이 되며

상태를 유지하기 떄문에, 확장에 굉장히 불리하지만 connection을 유지하기 떄문에, 리소스 절감에 도움이 됩니다.


이 강의에서 주로 다루어 볼 서버의 형태입니다.

이 강의에서는 Stateful과 Stateless한 두 경우에 대해 모두 다루게 됩니다. 💁

이 강의는 쉽게 접하지 못하는 강의라고 장담 할 수 있습니다.


두가지 형태의 서버 개발을 통해서 여러분들은 MySQL, Socket을 활용한 대용량 채팅 TPS에 대한 처리와, Kafka를 활용한 Zero-downtime Deployment가 어떻게 동작 될 수 있는지에 대해서 학습하실 수 있습니다.

Zero-downtime Deployment는 무엇인가요?? 🙋‍♂

앞서 소개글에서 저는 자주 해당 용어를 사용했습니다.

직역을 하자면, 무중단 배포를 의미합니다.


여러분들은 스트리밍 플랫폼에서 갑자기 사이트가 먹통이되거나, 중단이 된 경우를 경험해 보신적이 있으신가요??

사용자 측면에서는 배포가 진행이 되는지, 안되는지도 모르게 사이트에 영향을 주지 않고 배포가 진행이 되는것을 Zero-downtime Deployment라고 합니다.

해당 방식은 Stateless한 서비스에서는 굉장히 쉽게 구현할 수 있습니다.

하지만 서버의 상태를 유지하는 Stateful한 서비스에서는 매우 어렵고 많은 자원을 소모하는 작업입니다.


이 강의에서는 Stateful한 서비스에 대해서 Kafka를 활용하여, Zero-downtime Deployment를 구현하는 방법에 대해서 다루게 됩니다.

Why Kafka 😯

Kafka는 이벤트 기반 Stream 툴로써 발행/구독 패턴을 사용하는데에 있어서 매우 빈번하게 사용이 되는 서비스 입니다.


실제로 LinkedIn에서 개발하고, 도입한 서비스이며 다양한 회사에서 Kafka를 도입해 이벤트에 대한 메시지 유실 없이 데이터를 처리하고 있습니다.

  • 수강생 분들이 가장 중요하게 보셔야 하는 부분은 네카라쿠배, 다수의 대기업에서는 Kafka를 필수로 사용하고 있으니 많은 도움이 되실 겁니다.


이 강의에서는 스스로 local환경에 Kafka 환경 설정 및 구축하는 방법에 대해서 알려드리고, 실제로 사용하는 방법까지 알려드리고 있습니다.

  • Kafka에 대한 내용은 실제 LinkedIn의 개발자인 Gwen ShapiraKafka: The Definitive Guide의 내용을 기반으로 커리큘럼이 구성되었습니다.

이런 내용을 배워요. 🤔

1⃣ Kafka를 활용한 Pub/Sub Modeling

kafka의 config 환경 설정 및 Broker, zookeeper의 구동까지 다룹니다. 이를 통해서 여러분들은 실제 Kafka를 활용한 서비스를 개발하는 방법과 주의점에 대해서 배울 수 있습니다.

2⃣ MySQL Schema 설계를 통한 서비스 데이터 관리

socket통신에 대한 데이터 관리 및 채팅방에 대한 데이터 관리를 서비스 구축에 용이한 MySQL을 활용하여 관리하는 방법에 대해 학습하시게 되며, ORDER BY, Paging 등 쿼리를 직접 작성하시며, 서버를 구축하는 방법을 알아가실 수 있습니다.

3⃣ 4개의 서버를 구축하여 이루어지는 서버간 통신

단순히 한개의 서버를 구축하는 것이 아니라, 다양한 서버를 구성하고, 해당 서버들을 관리하는 Controller서버를 구축하는 등 많은 서버 작업을 통해 Load Balancer를 간접적으로 경험하실 수 있고, Kafka의 Pub/Sub Modeling을 활용하여 서버간의 통신 방법에 대해 경험해 보실 수 있습니다.

이런걸 구현해 볼게요. 🤔

Local환경에서의 Kafka 구동 방법

MySQL을 통한 채팅방 및 채팅 데이터 관리

websockets통신을 통한 DB 데이터 다루기

Node.js, Go를 활용한 Kafka 활용 및 서버 관리

수강 전 참고 사항

실습 환경

  • 운영 체제 및 버전(OS): Windows, macOS, Linux 등 모든 OS가 가능합니다.


  • PC 사양: 인터넷 접속이 가능한 기본 사양의 PC

반드시 무료로 공개되는 영상을 확인해주세요!! 여러분들이 이 강의에서 배우실 수 있고, 실제로 구현하실 서비스에 대한 정보가 담겨있습니다.

이 부분은 매우 중요해요! 😯

이 강의는 이전 1탄 강의에 이어서, 추가적인 서비스 구축 및 데이터 관리와 배포에 대해서 다루는 강의입니다.

그러니 이전 강의를 기반으로 강의가 이어서 진행이 됩니다.

간단하게 이전 강의에서 다루었던 소스코드의 설명이 이루어지지만, 처음 듣는분들은 매우 당황하실 수도 있습니다.


그러니 만약 wss통신이나, 채팅 서버에 대한 지식이 없으시다면, 이 강의를 선행해주시면 강의를 수강하시는데에 있어서 많은 어려움이 없으실꺼 같아요.

이 강의의 목표는 FE개발이 아니라, ws protocol에 대한 Zero-downtime Deployment아키텍처 및 서버 개발을 중점으로 하고 있습니다.


왜냐하면, 저는 FE를 전문적으로 하는 개발자가 아니고, BE를 전문적으로 하는 개발자이기 떄문입니다. 그래서 FE 개발에 잘못된 지식이 전달 될 우려가 있어서 FE개발은 단일 서버에 대한 API처리만 진행을 하고 있어요.


그러니 추가적인 Zero-downtime Deployment를 위한 React State관리는 강의에서 진행을 하지 않습니다. 이 부분은 강의에서도 지속적으로 언급을 하고 있으니 참고해주시면 감사하겠습니다.

이런 분들께
추천드려요!

학습 대상은
누구일까요?

  • 발행/구독 패턴에 관심이 있으신 분

  • 스트리밍 플랫폼 구축에 궁금하신 분

  • 채팅 데이터 관리에 대해 궁금하신 분

  • 무난한 개발방식이 아닌, 새롭고 재미있는 개발을 해보고 싶으신 분

  • MySQL, Kafka를 실무자에게 배우고 싶으신 분

선수 지식,
필요할까요?

  • Golang [ 강의의 기본 언어입니다. 모르셔도 무방합니다. ]

  • Node.Js [ 수강생들을 위한 언어 입니다. 모르셔도 무방합니다.]

안녕하세요
July입니다.

자기 소개

주로 데이터를 다루는 서버나 모듈을 개발하고 있으며 쿼리 튜닝과 성능개선에 관심이 많습니다.

 

사람들과 소통하는것을 좋아하여, 제가 알고 있는 지식을 나누며 여러분들은 조금 더 쉬운길을 걸어가실 수 있게 강의를 촬영하고 있습니다.

 

경력

[前] 샌드박스 블록체인 개발자

[前] 넥슨 자회사 백엔드 개발자

[] 판교 대기업 플랫폼 서버 개발자

커리큘럼

전체

31 ∙ 3시간 46분

강의 게시일: 2024년 05월 16일
마지막 업데이트일: 2024년 05월 16일

수강평

아직 충분한 평가를 받지 못한 강의입니다.
모두에게 도움이 되는 수강평의 주인공이 되어주세요!