[신규 강좌 개설] Full-Stack Service Networking

2021년 2학기 Full-Stack Service Networking (FSSN) 교과목을 신규 개설 합니다. (구)소프트웨어융합네트워킹 교과목의 이름을 교과 내용과 취지에 맞춰서 변경하였습니다. 네트워크 기반의 소프트웨어를 개발하고자 하는 학생들의 많은 수강 바라며, 수업 관련 설명을 질의 응답 형태로 마련 하였습니다.

아래의 질의 응답 외에, 수업에 대해서 추가적으로 궁금한 사항은 이성원 교수( drsungwon@khu.ac.kr )에게 이메일로 편안하게 문의하여 주기 바랍니다.

Q. FSSN은 어떤 과목인가요?

최근 Full-Stack Programmer가 자주 언급 됩니다. 이는 서비스를 구현하는 경우, Client와 Server를 모두 구현할 수 있는 개발자를 통상 의미합니다. 전통적으로, 프로그래머를 구분하는 경우, System Programmer나 Application Programmer 처럼, (어떻게 보면) 컴퓨터 내부에서의 계층적인 입장에서 프로그래머를 구분하였는데, 이와 다르게, Full-Stack Programmer는, 서비스를 요청하는 기능과 서비스를 제공하는 기능 등, Service를 강조한 입장에서의 구분이라고 볼 수 있습니다. 

유사한 입장에서, 2010년 후반부터, Full-Stack Networking (혹은 Full-Stack Network, Full-Stack Networker) 라는 단어가 새롭게 대두되고 있습니다. 이는 과거의 컴퓨터 네트워크가 “기계들 사이에 0과 1의 정보를 전달하는 기술”에 중점을 두었다면, 단지 0과 1의 정보를 넘어서서 응용 서비스를 이해하고, 서비스에 가장 최적의 네트워킹 기술을 개발하는 것으로 이해되고 있습니다. 특히 컴퓨터 네트워크가 대부분 1950~70년대에 만들어진 기술들에 뿌리를 둔다면, Full-Stack Networking은 빠르게 발전하는 소프트웨어 기술을 통해서, 본인이 만들어낸 서비스에 적합한 네트워킹 기술을, 직접 만들거나 혹은 오픈소스 소프트웨어로 기반으로 하여 실현하는 것으로 발전하고 있습니다.

따라서 본 교과목에서는, 소프트웨어를 전공하는 학생들이, 다양한 형태의 네트워크 기반 서비스를 구현하고자 할 때, 서비스 요구사항(QoS : Quality of Service)와 네트워크 구성(Topology)에 맞는 네트워킹 기술을 선택할 수 있고, 선택한 기술을 통해서 Front-End/Back-End의 서비스를 구현할 수 있는, 개발 관점에서의 방법론을 제시합니다.

교과목 이름이 Full-Stack Networking이 아닌 Full-Stack Service Networking으로 Service가 들어간 이유는, 컴퓨터 네트워크 교과목이 별도로 개설되어 있기에, Full-Stack Networking에서 cover 해야할 전통적인 네트워킹 기술에 대한 이해는 컴퓨터 네트워크에서 얻도록 하고, 본 강좌에서는 소프트웨어 기반의 서비스 실현에 중점을 두기 위함 입니다.

Q. 컴퓨터네트워크 와의 차이점은 무엇인가요?

전통적인 (아울러 제가 현재 직접 강의하는) 컴퓨터 네트워크 교과목과 새롭게 개설할 FSSN의 커리큘럼을 비교하면 다음과 같습니다.

컴퓨터 네트워크 교과목은 통상 다음과 같은 내용을 가르치는 ‘매우’ 전통적인 교과목 입니다.

  • OSI 7 계층 이해
  • Physical 계층 (1계층)
  • Data-Link 및 MAC 계층 (2계층)
  • Network 계층 및 IP 프로토콜 (3계층)
  • Transport 계층 및 UDP/TCP 프로토콜 (4계층)
  • Session 계층 (5계층)
  • Presentation 계층 (6계층)
  • Application 계층 (7계층)

저 같은 경우, 실무에 도움이 되라는 의미에서 오픈소스 소프트웨어/하드웨어, 클라우드컴퓨팅, 이동통신(3G/4G/5G) 등을 추가로 컴퓨터 네트워크 수업에서 가르치고 있습니다.

FSSN 교과목은 다음의 내용을 이해하고 직접 실현할 수 있는 것을 목표로 개설할 예정입니다.

  • Client/Server 서비스
  • P2P (Peer-to-Peer 혹은 Mesh) 서비스
  • Secure 서비스
  • Reliable 서비스
  • Realtime 서비스

이를 위하여, FSSN 수업에서 다룰 기술적인 내용들은 다음과 같습니다.

  • OSI 7계층 개요
  • Socket 기반 1:1, 1:N 통신
  • ZMQ (ZeroMQ, Zero Message Queue) 분산 통신 미들웨어
  • HTTP/1.1 프로토콜
  • HTTP/2 프로토콜
  • QUIC & HTTP/3 프로토콜
  • gRPC 원격 기능 호출 시스템
  • WebRTC 분산 통신 API
  • 네트워크 서비스 성능 측정 및 분석 방법

따라서 본 교과목은, 컴퓨터 네트워크가 컴퓨터 간에 0과 1의 정보를 전달하되, 그 정보의 의미에 대해서는 크게 신경을 쓰지 않은 것과 달리, 서비스를 실현하는 소프트웨어들이 어떻게 하면 서비스를 보다 제대로 (안정적으로, 빠르게, 보안을 보장받고 등) 이루어 지도록 하는 부분에 대해서 공부합니다.

사실 시기적으로 구분하면 컴퓨터 네트워크의 내용은 1950년대부터 1970년대, 특히 인터넷이 발전한 1970년~1980년 사이의 기술을 중심으로 다룬다면, FSSN 수업은 WWW의 급속한 발전과 스마트폰/이동통신의 발전에 따라, 이를 기반으로 하는 소프트웨어 기반 네트워크 서비스가 급성장한 2010년대 중후반의 기술들이 주 대상입니다. 그리고 전자의 경우가 특허와 표준이 중요하고 Ericsson, Nokia, Samsung, Cisco 같은 일부 대기업이 주도하던 시절이였다면, 후자는 오픈소스 소프트웨어가 중심이 되며, Google, Amazon, 네이버 등의 소프트웨어 업체가 기술을 리드하는 환경입니다.

특히, 최근의 네트워킹 기술 발전에서의 가장 큰 흐름으로써, 운영체제의 Kernel 안에 통신 소프트웨어가 반드시 포함되어, 통신 소프트웨어의 기술을 수정/발전 하기 어려웠던 과거와 다르게, Application 소프트웨어 처럼 통신 소프트웨어가 구현되며, 오픈소스 소프트웨어 형태로 배포/발전하는 기술 트렌드에 대해서도 배우게 됩니다.

Q. 선수 과목이 있나요?

컴퓨터 네트워크 교과목에서 다루는 기술을 배경으로 동작하는 기술들 이기에, 컴퓨터 네트워크 교과목을 선수강하고 들어오면 도움이 될 겁니다. 하지만, 컴퓨터 네트워크를 듣지 않은 학생들을 위해서, 컴퓨터 네트워크 수업에 대한 핵심 요점 정리가 있습니다. 이는 이미 컴퓨터 네트워크를 들었지만, 본 수업에서 다루는 내용에 대해서 다시 한번 복습하는 차원에서, 수업의 전반부에 컴퓨터 네트워크의 핵심을 요약하는 시간을 갖는 목적도 병행합니다. 따라서 컴퓨터 네트워크를 선수강 하지 않아도 수업을 수강하는데 큰 문제는 없으리라 봅니다.

프로젝트를 하나 수행하는 것으로 고려중입니다. 자유 주제이며, 본인이 편한 프로그래밍 언어를 사용해서, 만들어 보고 싶은 서비스의 네트워킹 구조를 스스로 정한 후, 수업 내용 기반으로 간단하게 만들어 보는 것 입니다. 따라서 소프트웨어 개발 역량이 필요할 것 같은데, 소융대학 학생으로 웹파이선프로그래밍/객체지향프로그래밍을 통해서 Python과 C++을 학습한 수준이면 문제 없습니다. 그외 학생들 이라면, 기초 프로그래밍이 가능한 수준인지 스스로 판단해 보기 바랍니다. 연관해서, 네트워크를 만들어 봐야 하니, 두개 이상의 실행 프로그램을 하나의 컴퓨터 혹은 복수의 컴퓨터에서 돌릴수 있어야 합니다. 소프트웨어 융합학과 학생이라면 소프트웨어개발방법및도구 등의 교과를 통해서, 가상머신 혹은 리눅스를 다루는데 문제가 없으니, 상관 없을 겁니다. 그외 학생이라면, 하나의 컴퓨터에서 그냥 두개 이상의 실행 프로그램을 동작시키거나, 동일 컴퓨터에서 가상머신을 띄우거나, 혹은 서로 다른 컴퓨터에서 프로그램을 돌릴수 있는 환경을 갖추면 도움이 될 겁니다. 데이터센터프로그래밍 교과목을 이수한 학생이라면, 이미 해당 환경에 익숙할 테니 문제가 없습니다.

따라서 반드시 들어야 하는 선택 교과목은 없고, 앞서의 사항에 대해서 미리 확인만 하고 신청하기 바랍니다.

Q. 이론과 실습 과목 중 어떤 과목인가요?

본 수업은 이론 수업입니다. 한글로 진행하며, 강의노트도 한글로 작성할 예정입니다. 실습은 없으며, 다만 강의노트 안에서 각각의 기술들을 어떻게 구현하는 지에 대한 코드들이 있고, 이를 설명할 예정입니다. 

Q. 소프트웨어 개발을 할 줄 알아야 하나요?

앞서 선수 과목 부분에서 이야기 한 것 처럼, (확정은 아니지만) 프로젝트를 하나 내고자 합니다. 본인이 만들어 보고자 하는 네트워크 기반 서비스를 하나 생각해 보고, 이를 구현하는 입장에서 가장 효율적인 방법을 수업 내용 기준으로 선택합니다. 그리고 실현해 보는 것 입니다. 프로그래밍 언어는 본인이 다루기 용이한 언어로 하면 되며, 참고로 수업에서 다루는 모든 내용에 대해서 Python과 C++이 지원 됩니다. 

강의자료의 코드 예제는 Python, C/C++ 혹은 Dart 언어를 섞어서 설명할 예정입니다. 웹파이선프로그래밍 혹은 객체지향프로그래밍을 수강한 학생이라면 무리가 되지 않을 겁니다.

참고로, 필요시 Dart를 쓰는 경우는 많지는 않습니다. 그러나 가끔 사용하려는 이유로서, Full-Stack Programmer 환경이 JavaScript 기반으로 활성화 되었다가, 최근 Google이 Dart 언어와, 이 언어 기반의 Platform-Independent 및 Cross-Platform한 GUI Framework인 Flutter를 출시한 후, Dart 언어의 인기가 Full-Stack Programmer 환경에서 급성장 하기 때문입니다. 하지만, 상응하는 예제들의 Python/C/C++ 버전을 인터넷에서 쉽게 찾을수 있기에, 굳이 Dart를 할수 있어야 할 필요는 없습니다. 다만, Full-Stack Programmer를 꿈꾸는 학생이 있다면, 이번 기회에 도전적으로 Dart/Flutter 개발 환경에 입문하는 것도 조심스럽게 권해 봅니다.

Dart/Flutter에 대한 국내 자료가 많은 편은 아니지만, 제 개인 사이트에 Tutorial을 만들어 두었으니, 관심있는 학생은 참조하기 바랍니다.

Q. 우리학과의 트랙과의 연관성이 무엇인가요?

두개 이상의 소프트웨어가 네트워크를 통해서 연결될 필요가 있는 모든 학생에게 도움이 될 것이니, 모든 트랙에 도움이 된다고 볼 수 있습니다.

게임콘텐츠 트랙의 경우는 MMORPG와 같이 Client/Server (혹은 Front-End/Back-End) 구조로 동작하는 네트워크 기반 게임이나, PC방 혹은 특정 공간에 함께 위치한 사용자간의 P2P 게임을 실현하는 근간이 됩니다. 

데이터사이언스 트랙의 경우는 트랙 필수인 데이터센터프로그래밍 과목의 연장선 상에서, 다양한 서버 프로그램들, 그리고 이들과 소통하는 Client 프로그램을 네트워킹 하는 근간이 됩니다.

미래자동차로봇 트랙의 경우는 다양한 센서/IoT/Actuator들을 제어/관리하거나, 실시간 Computer Vision 기반 서비스 제작과 같이 지역적으로 분산된 소프트웨어 들이 실시간으로 협업하도록 만드는 기술의 근간이 됩니다.

Q. 수업 교과서가 있나요?

아쉽지만, 수업에서 다루는 내용의 상당량은 소프트웨어 개발자들 사이에서도 가장 Hot한 내용들 입니다. 따라서, 한권의 책으로 다루는 경우는 없으며, 심지어 이런 교과목을 다른 곳에서 찾아보기도 어려울 겁니다.

수업은, 각각의 기술이 대부분 오픈소스 소프트웨어 이기에, 해당 오픈소스 소프트웨어의 공식 문서를 중심으로 진행될 예정입니다.

하지만, 각각의 기술별로는 최근 (많지는 않지만) 몇권의 전문 도서들이 등장하고 있기에, 기술별로 다음의 책들을 참고도서로 할 수 있습니다.

  • (1) Learning HTTP/2 – Practical Guide for Beginners
  • (2) HTTP/2 in Action
  • (3) ZeroMQ – Messaging for Many Applications
  • (4) Learning WebRTC
  • (5) Real-Time Communication with WebRTC
  • (6) gRPC : Up and Running

 참고로, 모든 도서는 우리 대학이 가입한 O’reilly Media 계정을 통해서 (별도의 구매없이) 다운로드 받아 사용 가능합니다.