【한글자막】 백엔드 엔지니어링 (Backend Engineering) 마스터하기! (중/고급자 과정)

백엔드 통신 디자인 패턴, 프로토콜, 실행 및 프록시에 대해 학습합니다. 이 강의 수강을 위해서는 백엔드 애플리케이션을 구축한 경험과 1~2년 정도의 중급 프로그래밍 기술이 필요합니다.

Ratings: 4.76 / 5.00




Description

백엔드 엔지니어링 은 예술입니다.

저는 18년의 경력 동안 백엔드 애플리케이션을 다루고 구축하면서 특정 통신 디자인 패턴이 계속 나타나는 것을 발견했습니다. 클라이언트가 백엔드 애플리케이션과 통신하는 방법은 많지 않습니다. 더 있을 수도 있겠지만 이 강의에서 다루는 패턴들이 가장 많이 쓰이는 방법들입니다. 이러한 패턴의 예시로는 요청-응답, 게시-구독, 단기 및 장기, 그리고 푸시가 있습니다.


이러한 통신 디자인 패턴을 기반으로, 엔지니어들은 구체적인 통신을 위해 여러 프로토콜을 사용할 수 있습니다.

핵심 전송 수단은 TCP 또는 UDP 중 하나로 제한되지만, 이 둘을 기반으로 한 수많은 산업별 프로토콜이 특정 문제들과 사용 사례들을 해결하기 위해 개발되었습니다. 이러한 고수준 프로토콜의 예로는 HTTP/1.1 , HTTP/2 , HTTP/3 , gRPC, WebRTC 등이 있습니다. QUIC 와 같은 다른 전송 프로토콜은 HTTP/2 스트리밍을 전송 수준에서 구현하기 위해 UDP 위에 구축되었습니다. 각 프로토콜은 장단점이 있어서 각각 적합한 사용 사례들이 있습니다. 이 강의에서는 가장 많이 쓰이는 프로토콜들을 배우고 가능하다면 예시와 데모를 제공할 것입니다.


클라이언트가 요청을 보내기 전에, 백엔드로의 연결을 구축해야 합니다.

이 연결이 어떻게 구축되는지, 연결 구축의 어떤 부분이 커널에서 이루어지고 어떤 부분이 백엔드 애플리케이션 프로세스에서 이루어지는지를 이해하는 것이 중요합니다. 그런 다음 연결이 백엔드 애플리케이션에 의해 어떻게 수락되며, 어떻게 백엔드 애플리케이션이 최대한 빠르게 연결을 수락하여 커널 대기열이 가득 차지 않도록 하는지에 대한 이해도가 필요합니다. 그렇지 않으면 클라이언트들은 더 이상 연결할 수 없게 됩니다.


연결이 구축되면 클라이언트가 요청을 보냅니다.

그러나 백엔드 애플리케이션에서는 그 요청을 읽기 위해 정확히 어떤 일이 일어나는 걸까요? 요청이란 정확히 무엇일까요? 프로토콜에 기반한 요청을 파싱하는 비용을 이해하는 것은 엔지니어가 수행된 작업을 제대로 인식할 수 있게 하고 성능 문제나 버그를 해결하는 데 더 나은 도구를 제공합니다.


요청이 백엔드에 도달하면 애플리케이션은 해당 요청을 실행해야 합니다.

백엔드는 실행 방식을 선택할 때 다양한 디자인 선택지들이 있습니다. 올바른 실행 패턴을 선택하기 위해서는 프로세스와 스레드의 차이, 다중 프로세스 및 다중 스레드, 그리고 CPU 코어 또는 하드웨어 스레드 수와의 관련성을 이해하는 것이 매우 중요합니다. 이런 패턴들에 종속될 필요는 없고 자신의 필요에 맞는 새로운 패턴을 만들어 쓰면 됩니다.


이 강의는 백엔드 애플리케이션을 구축해 본 엔지니어들을 대상으로 설계되었습니다.

중급에서 고급 수준의 강의이라서 프로그래밍 및 네트워크에 관련된 특정한 지식들이 필요합니다. 네트워크 관련 기술이 없으시다면 이 강의를 보기 이전에 네트워크 엔지니어링 에 대한 강의를 수강하여 기초를 다지시기를 권장합니다.


이 강의를 듣기로 결정해주셔서 감사드리고, 즐거운 학습 되시기를 희망합니다.

What You Will Learn!

  • 백엔드 엔지니어링의 기초
  • 백엔드 통신 디자인 패턴
  • 백엔드 통신 프로토콜의 작동에 대한 이해
  • 운영 체제 커널과 백엔드 응용 프로그램의 통신에 대한 이해
  • 운영 체제 기본 개념 (스레드, 프로세스, 리눅스에서의 비동기 입출력)
  • HTTP/1.1, HTTP/2, HTTP/3 학습
  • gRPC, WebRTC, WebSockets 학습
  • TLS 1.2, TLS 1.3, QUIC 0RTT 학습

Who Should Attend!

  • 백엔드 엔지니어
  • 풀스택 엔지니어
  • 백엔드에 관심 있는 프론트엔드 엔지니어들 (백엔드 애플리케이션을 구축한 경험 필수)
  • 백엔드 디자인을 개선하고 싶은 네트워크 엔지니어들
  • 사이트 신뢰성 엔지니어