목차
📁 네트워크 프로그래밍
• IPC: inter-process communication • 클라이언트 <-> 서버 서비스를 위한 필수 프로그래밍 • Socket programming을 학습한다는 것은? • C/C++ 언어 • Socket 구조체, socket(), bind(), listen(), accept() 함수이용 • 소켓을 만들어서 클라이언트와 서버 통신 프로그래밍 • 윈도우, 리눅스, 유닉스 응용 SW 개발 • 운영체제 Network-layer 프로그래밍 • 서버 또는 통신 전용 프로그램: C/C++ • 응용(웹/앱/서버) 개발시 프레임워크 사용 • Java Spring, Netty • Python Django, FastAPI • JavaScript Nodejs, Express
📁 Socket Programming 발전 트렌드
• 백엔드/서버 • Unix network programming: C/ C++ • Application: Java/Spring Framework (JavaScript, Go) + DB • 프론트엔드/클라이언트 • Windows network programming: C++/C# • Web: JavaScript, Java • Web framework: 백엔드, 풀스택 • Java Spring, Python Flask/FastAPI/Django • Node.js: async, single thread • 프론트엔드/모바일 • Java.net.Socket class : https://do cs.oracle.com/javase/7/docs/api/ java/net/Socket.html • Android: https://developer.andr oid.com/reference/java/net/Sock et • Swift
• 네트워크 응용 SW 개발 • 웹 서버, 채팅 응용, 게임 • 분산시스템, 운영체제, 네트워크 작동 방식 이해 • 고급 통신 프로그램 개발 • 게임 서버 • 대규모 시스템 이해 • AI, 클라우드
을 위해 소켓 프로그래밍을 학습한다.
📁 Socket
socket이란, 응용 프로세스(app/web)와 전송계층(TCP/UDP) 사이의 API를 말한다.
소켓의 종류에는 UDP, TCP가 있다.
1. UDP
• 비신뢰성: 패킷 손실, 순서 바뀜 가능 • 연결 없음 • IP 주소와 port 번호 이용하여 송수신
2. TCP
• 신뢰성: 패킷 손실 복구, 순서 맞춤 제공 • 연결 설정 필요 • 바이트 단위의 스트림 전송
🌱 여러개의 클라이언트를 처리하는 서버 IO 구조
• blocking vs. non-blocking • Blocking : 프로세스가 시스템을 호출 하고나서 결 과가 반환되기까지 다음 처리로 넘어가지 않음 • Non-blocking : 시스템을 호출한 직후에 프로그램 으로 제어가 다시 돌아와서 시스템 호출의 종료를 기다리지 않고 다음 처리로 넘어갈 수 있음 • synchronous vs. asynchronous • Synchronous : 작업을 요청한 후 작업의 결과가 나 올 때까지 기다린 후 처리 • Asynchronous : 직전 시스템 호출의 종료가 발생하 면 그에 따른 처리를 진행 (Android App)
📁 여러 개의 클라이언트를 연결하는 소켓 프로그래밍
1. multiprocess
• fork, multi-process 관리, IPC 통신
2. multithread
• Single process, 메모리 사용 증가, 쓰레드 관리
IO 연산이 있을 때 효과 • Join(): 새로 생성한 스레드 종료를 기다림
3. Select
여러 Socket I/O 모니터링, single thread, event 처리, 대규모 동시접속 서버, CPU 증가, 대기
4. Async
• 확장성, 빠름, 자원 효율성, 복잡한 코드, 어려운 디버깅/테스트
📁 WebSocket, Socket.io
• L4 vs. L7 • Socket programming • TCP, UDP, IP api를 이용한 응용 개발 • WebSocket: RFC6455 • HTTP는 서버와 클라이언트 사이의 연결 X • HTTP는 실시간 양방향 통신 구현에 어려움: HTTP polling, Stream • HTML5 표준, HTTP 위에서 • Socket.io • 추상화: WebSocket, FlashSocket, AJAX Long Polling, Ajax Multi Part Streaming, Ifra me, JSONP Polling • Node.js 모듈 • http://woowabros.github.io/woowabros/2017/09/12/realtime-service.ht ml
🌱 Node.js 에서 socket.IO를 이용한 실시간 응 용
• https://poiemaweb.com/nodejs-socketio • 사례 • PayPal, Netflix, Linkedin, Groupon, Naver, ... • Node.js • Chrome V8 JavaScript 엔진으로 만든 JavaScript 런타임 • 이벤트 기반, single thread • Node.js 인기이유 • 풀스택: 서버, 클라이언트를 JavaScript기반으로 개발 가능 • JSON 지원: 데이터변환 부담 줄어듬 • 쉬운 비동기 프로그래밍: 고성능 서비스를 코딩하기 쉽게: async/await • 성능: Naver (초당 5천건 24코어 서버 4대)