본문 바로가기
네트워크 프로그래밍

[네트워크 프로그래밍] Week 7: 고급 네트워크 프로토콜 (HTTP/2 및 웹소켓)

by cogito21_python 2024. 6. 4.
반응형

고급 네트워크 프로토콜 (HTTP/2 및 웹소켓)

 

Day 1: HTTP/2의 개념과 특징

 

강의 내용:

  1. HTTP/2의 개념
    • HTTP/2의 정의와 역사
    • HTTP/1.x와의 차이점
  2. HTTP/2의 주요 특징
    • 바이너리 프로토콜
    • 멀티플렉싱
    • 서버 푸시
    • 헤더 압축
  3. HTTP/2의 동작 원리
    • 프레임과 스트림
    • 흐름 제어와 우선순위

실습:

  • HTTP/2 요청 및 응답 예제
import hyper
from hyper import HTTP20Connection

def http2_client():
    conn = HTTP20Connection('www.example.com')
    conn.request('GET', '/')
    response = conn.get_response()
    print(f"상태 코드: {response.status}")
    print(f"헤더: {response.headers}")
    print(f"본문: {response.read().decode()}")

if __name__ == "__main__":
    http2_client()

 

Day 2: HTTP/2 서버 구현

강의 내용:

  1. HTTP/2 서버 설정
    • 서버 인증서 생성
    • HTTP/2 서버 설정
  2. Python을 이용한 HTTP/2 서버 구현
    • hyper 라이브러리 사용
    • 기본 HTTP/2 서버 구현
  3. HTTP/2 서버 최적화
    • 서버 푸시 활용
    • 헤더 압축 설정

실습:

  • HTTP/2 서버 구현
import ssl
from http.server import HTTPServer, SimpleHTTPRequestHandler
from hyper import HTTP20Adapter
import hyper

class HTTP2Handler(SimpleHTTPRequestHandler):
    protocol_version = 'HTTP/2.0'

def run_http2_server():
    server_address = ('localhost', 4443)
    httpd = HTTPServer(server_address, HTTP2Handler)
    httpd.socket = ssl.wrap_socket(httpd.socket, certfile='path/to/certfile', keyfile='path/to/keyfile', server_side=True)
    httpd.serve_forever()

if __name__ == "__main__":
    run_http2_server()

 

Day 3: 웹소켓의 개념과 사용법

강의 내용:

  1. 웹소켓의 개념
    • 웹소켓의 정의와 역사
    • HTTP와의 차이점
  2. 웹소켓의 주요 특징
    • 전이중 통신 (Full-duplex communication)
    • 실시간 데이터 전송
  3. 웹소켓의 동작 원리
    • 핸드셰이크 과정
    • 메시지 프레임 구조

실습:

  • 웹소켓 기본 통신 예제
import asyncio
import websockets

async def echo(websocket, path):
    async for message in websocket:
        await websocket.send(message)

start_server = websockets.serve(echo, "localhost", 8765)

asyncio.get_event_loop().run_until_complete(start_server)
asyncio.get_event_loop().run_forever()
import asyncio
import websockets

async def hello():
    uri = "ws://localhost:8765"
    async with websockets.connect(uri) as websocket:
        await websocket.send("Hello, WebSocket!")
        greeting = await websocket.recv()
        print(f"서버로부터 받은 데이터: {greeting}")

asyncio.get_event_loop().run_until_complete(hello())

 

Day 4: HTTP/2와 웹소켓 통합

강의 내용:

  1. HTTP/2와 웹소켓의 통합
    • HTTP/2와 웹소켓의 조합
    • 실시간 애플리케이션에서의 활용
  2. HTTP/2와 웹소켓의 비교
    • 용도와 성능 비교
    • 장단점 분석
  3. 통합 애플리케이션 구현
    • HTTP/2와 웹소켓을 활용한 실시간 애플리케이션 설계

실습:

  • HTTP/2와 웹소켓 통합 애플리케이션 구현
# HTTP/2 서버와 웹소켓 서버 통합 예제
import ssl
import asyncio
import websockets
from http.server import HTTPServer, SimpleHTTPRequestHandler

class HTTP2Handler(SimpleHTTPRequestHandler):
    protocol_version = 'HTTP/2.0'

async def websocket_handler(websocket, path):
    async for message in websocket:
        await websocket.send(message)

def run_servers():
    # HTTP/2 서버 설정
    http2_server_address = ('localhost', 4443)
    httpd = HTTPServer(http2_server_address, HTTP2Handler)
    httpd.socket = ssl.wrap_socket(httpd.socket, certfile='path/to/certfile', keyfile='path/to/keyfile', server_side=True)

    # 웹소켓 서버 설정
    start_server = websockets.serve(websocket_handler, "localhost", 8765)

    loop = asyncio.get_event_loop()
    loop.run_until_complete(start_server)

    # 서버 동작
    http2_thread = threading.Thread(target=httpd.serve_forever)
    http2_thread.start()

    try:
        loop.run_forever()
    except KeyboardInterrupt:
        pass

if __name__ == "__main__":
    run_servers()

 

Day 5: 프로젝트 준비

강의 내용:

  1. 프로젝트 주제 선정 및 요구사항 분석
    • HTTP/2와 웹소켓을 활용한 프로젝트 주제 논의
    • 팀 구성 및 역할 분담
  2. 프로젝트 계획 수립
    • 프로젝트 목표 및 요구사항 정의
    • 프로젝트 타임라인 설정
    • 프로젝트 도구 및 환경 설정

실습:

  • 프로젝트 계획서 작성 및 공유
### 실습: 프로젝트 계획서 작성
1. 프로젝트 목표 정의
2. 기능 명세서 작성
3. 개발 일정 및 마일스톤 설정
4. 역할 분담 및 작업 계획 수립
5. GitHub 저장소 생성 및 초기화

 

이 강의는 HTTP/2와 웹소켓의 개념과 활용 방법을 다루며, 실습을 통해 이론을 실제로 적용해보고 고급 네트워크 프로토콜의 동작 원리와 통합 방법을 이해하는 것을 목표로 합니다. 각 주제별로 실습 예제를 통해 개념을 명확히 이해하고 실제 코드를 작성해보는 기회를 제공합니다.

반응형