[신규 강좌 개설] 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 계정을 통해서 (별도의 구매없이) 다운로드 받아 사용 가능합니다.

Cisco WebEx 사용 방법

원격 수업을 Cisco사의 WebEx로 사용할 경우에 참조할 수 있도록 동영상을 제공합니다.

[주의사항!! 학생 여러분!!!] 학생의 경우, 반드시 수업에 참여할 때, 이름과 이메일을 학교 인포21에 등록한 것을 사용하여야 한다고 합니다. 그렇게 해서 출석을 점검한다고 하니 참조하세요.

[참조사항!! 강사 여러분!!!] 화상 회의 중 동영상 Play를 원하시는 경우는, 콘텐츠 공유 화면 상단 옵션에서 “Optimize for motion and video” (한글 메뉴의 경우 ‘동작 및 비디오에 대해 최적화’)를 선택 합니다. 추가로 오디오 드라이버 등을 설치해야 하니, 수업 전 미리 시험해 보세요.

[ 동영상 시청 하기 ]

Cisco WebEx는 Google Meet 대비 할 일과 알아야 할 사항이 많아서, 동영상의 분량이 57분 정도로 큽니다.
부득이 다음과 같이 목차를 세분화해서 동영상을 작성 했으니, 미리 시청해 두시면 도움이 될 것으로 보입니다 .

교강사 분들은 전체 시청을 권장하며, 학생은 9/10장을 보면 되겠습니다.

1. 초청장 받아서 암호 생성 하기 (시작시점: 00:14)
2. 로그인 및 환경 설정 하기 (02:26)
3. WebEx 프로그램 설치 및 로그인 (08:57)
4. 필요시 바로 회의 시작 하기 (11:55)
5. 회의/수업에서 발표 자료 보여 하기 (17:45)
6. [주의! 필수시청] 내 발표를 학생/참석자 입장에서 이해 하기 (21:32)
7. 회의/수업 예약 하기 (26:28)
8. 회의/수업 녹화 하기 (38:24)
9. 웹으로 회의/수업 만들고 진행 하기 및 학생/참석자의 회의/수업 참석 하기 (웹 & WebEx 프로그램) (44:11)
10. 학생/참석자의 회의/수업 참석 하기 (태블릿/스마트폰) (53:56) 

학생 입장에서는 1) PC 웹브라우저, 2) PC WebEx 프로그램, 3) 스마트폰/태블릿의 접속이 가능합니다.
이에 대해서 이해하고자 하시면, 위의 동영상에서 9/10장을 시청 바랍니다.
참고로 학교에서는 학생과 교수에 모두 WebEx 프로그램 설치를 권장하는 것으로 자료들이 배포되고 있습니다.
교강사도 PC 웹브라우저 혹은 WebEx 프로그램으로 수업/회의 진행이 가능합니다.

학교 가이드라인에 맞춰서 동영상의 전체적인 동작은 WebEx 프로그램으로 교강사가 진행하는 경우로 만들어 졌으며,
교강사가 웹으로 수업/회의를 만들고 진행하는 부분은 위의 동영상에서 9장을 시청하시면 됩니다.

모든 일엔 장단점이 있듯이, 이번 신종 코로나19로 부득이 온라인 문화에 강제 진입하지만,
이후 이를 통하여 좀 더 진보하고 발전하는 분위기가 나타나기를 바랍니다.

[참조사항] 동영상 중 Cisco WebEx가 상용 시스템이라고 언급을 했는데, 이번 Cisco WebEx 사용은 신종 코로나로 인하여 Cisco사의 지원으로 진행하며, 학교에서 구매하여 진행하는 부분은 아니라고 합니다.

컴퓨터 화면 동영상 녹화

자신이 개발한 프로그램의 데모 동영상을 만들거나, 온라인 발표 혹은 온라인 강의 동영상을 만드는 가장 간단한 방법 중의 하나는, 본인의 컴퓨터에서 강의노트를 설명하면서, 이 화면과 설명하는 음성을 하나의 동영상으로 만드는 방법입니다.

대부분의 최신 컴퓨터들은 이런 기능을 내장하고 있습니다. Mac의 경우는 내장된 Quicktime 프로그램으로 손쉽게 만들수 있습니다. MS Windows는 반디캠이라는 소프트웨어와 같이 전용 프로그램을 주로 사용해 왔지만, MS Windows 10부터 Xbox Game Bar라는 내장기능을 탑재하고 있습니다. 사용법이 그렇게 어렵지 않기에, 다음의 사이트를 참조하여 직접 시도해 보기 바랍니다.

MacOS Quicktime

MS Windows 10

Google Meet 사용방법

온라인 미팅/면담/수업을 위한 경희대 그룹웨어 기능을 동영상으로 설명합니다.
경희대학교는 구글의 서비스를 학교 그룹웨어(이메일 등)로 사용하기에,
경희대학교에 소속한 교직원 및 학생 모두 Google Meet 서비스를 사용할 수 있습니다.

본 동영상에서는 회의나 미팅을 시작하고 싶은 시점에서 바로 미팅을 시작하는 방법,
수업 등을 위하여 사전에 미리 날자와 시간을 예약하고 진행하는 방법,
위의 두가지 경우에 대해서 자료나 발표자 컴퓨터의 화면을 발표하는 방법 등을 설명합니다.
회의를 만드는 방법외에 참여 방법도 같이 설명되어 있으니, 학생이나 참석자도 도움이 됩니다.
참고로,, 신종 코로나로 급조한 영상으로 퀄리티가 높진 않으니 양해 바랍니다.

[ 영상 바로 보기 ] [ 영상 화일 다운 로드 ]

준비물로서, 컴퓨터에서는 웹브라우저만 있으면 되어 별도의 프로그램 설치가 없으나, 크롬 브라우저를 사용하기 바랍니다.
스마트폰과 태블릿에서는 Google Hangout Meet 앱을 설치하도록 권장합니다.

아울러, 전자정보대학 조민형 교수님께서, Google Meet로 수업에 참여하는 학생을 위한
매뉴얼을 아래와 같이 만들어 주셨습니다. 교수님의 허락을 구하여 게시하며,
수업에서 학생들에게 교수님이 배포 하시거나, 필요한 사람은 누구든 참조하면 됩니다.

[ Google Meet 학생 매뉴얼 ]

참고로 학교의 Google Meet는 라이센스상 동시에 150명 수용이 가능하고 (이론상),
일반 무료 계정의 Google Hangout은 최대 10명 수용이 가능한 것으로 알고 있습니다.
Google Meet는 우리 학교 라이센스 기준으로 회의 저장 기능은 없습니다.