강의

멘토링

로드맵

Inflearn brand logo image
개발 · 프로그래밍

/

백엔드

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

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

(4.3) 수강평 15개

수강생 404명

  • July
카프카
대용량트래픽
tps
웹소켓
GoKafkaNode.jsMySQLwebsockets

먼저 경험한 수강생들의 후기

이런 걸 배울 수 있어요

  • 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 [ 수강생들을 위한 언어 입니다. 모르셔도 무방합니다.]

안녕하세요
입니다.

3,520

수강생

162

수강평

87

답변

4.5

강의 평점

15

강의

자기 소개

비전공자 출신으로 판교에서 플랫폼 서버 개발을 담당하여 진행하고 있습니다.

서버 최적화와 다양한 쿼리 튜닝을 좋아합니다.

 

경력

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

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

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

[] 판교 모회사 서버 개발자

커리큘럼

전체

31개 ∙ (3시간 46분)

해당 강의에서 제공:

수업자료
강의 게시일: 
마지막 업데이트일: 

수강평

전체

15개

4.3

15개의 수강평

  • ssez13님의 프로필 이미지
    ssez13

    수강평 7

    평균 평점 5.0

    5

    29% 수강 후 작성

    When you mentioned the disadvantages of using ORM, I felt a little stung. I had a bad experience logging while tuning a query recently.. haha I'm enjoying this episode as well. I'm not familiar with Go, so the progress is a bit slower than the first episode, but it's fun to see how it's used! There are only two people working at my company, including me (I'm a full-stack, and one of them is the CEO, and he does all the devops. 😅) Since we're running a small service, I started taking the course because I had a lot of doubts about my skills and was upset for various reasons, but I'm excited again like when I first started studying. I've been thinking a lot about the future lately, but I think it's best to empty your head and study rather than worrying. If I can do it, I'll go watch another lecture :)

    • july
      지식공유자

      2-person development must be really hard. I'm rooting for you!! I wanted to broaden your perspective by providing various concepts that are not easily accessible. That's why I prepared a lot of lectures like this, and I'm very happy that it was helpful. I think it's a good thing to always have doubts about your skills. I think it's right to approach it with a humble attitude rather than being proud. I'm like that too. ㅎㅎ If you have any concerns or questions outside of the lecture content, feel free to ask. I'm a more humane person than you think. ㅎㅎ I think it's good to talk about various things and solve them together.!! Thank you for listening to the lecture!!

  • kimdh86274님의 프로필 이미지
    kimdh86274

    수강평 5

    평균 평점 4.6

    5

    100% 수강 후 작성

    It was nice to be able to see a server written in go lang

    • koosco님의 프로필 이미지
      koosco

      수강평 11

      평균 평점 5.0

      5

      100% 수강 후 작성

      Thank you for the great lecture.

      • dkskhy327884님의 프로필 이미지
        dkskhy327884

        수강평 3

        평균 평점 5.0

        5

        77% 수강 후 작성

        I watched both parts 1 and 2. I was able to understand the chat server configuration to some extent, and I think it is a good lecture that covers topics that are not commonly covered.

        • july
          지식공유자

          I don't know what to do with myself... I will repay you with better lectures in the future. Thank you!!

      • hojikas1237295님의 프로필 이미지
        hojikas1237295

        수강평 4

        평균 평점 5.0

        5

        61% 수강 후 작성

        I found this lecture to be very informative and helpful, following the first one.

        • july
          지식공유자

          Part 2 covered more of the architectural aspects, so I'm not sure if you found it helpful. Thank you for the good review!!

      ₩47,300

      July님의 다른 강의

      지식공유자님의 다른 강의를 만나보세요!

      비슷한 강의

      같은 분야의 다른 강의를 만나보세요!