본문 바로가기
-----ETC2-----/고급 프로그래밍 기술

[고급 프로그래밍] Week 9: 비동기 I/O의 개념과 필요성

by cogito21_python 2024. 6. 2.
반응형

Day 1: 비동기 I/O 개요

  • 강의 내용:
    • 비동기 I/O의 개념
      • 비동기 I/O란 무엇인가?
      • 동기 I/O와 비동기 I/O의 차이점
    • 비동기 I/O의 필요성
      • 비동기 I/O의 장점
      • 비동기 I/O가 사용되는 사례
    • 비동기 I/O의 주요 개념
      • 이벤트 루프 (Event Loop)
      • 코루틴 (Coroutines)
      • 퓨처 (Futures)
  • 실습:
    • 동기 I/O와 비동기 I/O의 성능 비교
import time
import asyncio

# 동기 I/O 예제
def sync_io():
    time.sleep(1)
    return "Sync I/O"

start_time = time.time()
results = [sync_io() for _ in range(5)]
end_time = time.time()
print(f"동기 I/O 시간: {end_time - start_time}초")

# 비동기 I/O 예제
async def async_io():
    await asyncio.sleep(1)
    return "Async I/O"

async def main():
    start_time = time.time()
    results = await asyncio.gather(*[async_io() for _ in range(5)])
    end_time = time.time()
    print(f"비동기 I/O 시간: {end_time - start_time}초")

asyncio.run(main())

 

Day 2: 비동기 I/O의 필요성

  • 강의 내용:
    • 비동기 I/O의 장점
      • 높은 동시성 (Concurrency)
      • 리소스 효율성
      • 응답 시간 단축
    • 비동기 I/O의 사용 사례
      • 웹 서버 및 클라이언트
      • 데이터베이스 연결
      • 파일 입출력
    • 비동기 I/O의 한계
      • 코드 복잡성 증가
      • 디버깅의 어려움
  • 실습:
    • 비동기 I/O를 사용한 웹 서버 예제
import asyncio
from aiohttp import web

async def handle(request):
    await asyncio.sleep(1)
    return web.Response(text="Hello, Async World!")

app = web.Application()
app.add_routes([web.get('/', handle)])

web.run_app(app, port=8080)

 

Day 3: 이벤트 루프와 코루틴

  • 강의 내용:
    • 이벤트 루프의 개념
      • 이벤트 루프란 무엇인가?
      • 이벤트 루프의 역할
    • 코루틴의 개념
      • 코루틴이란 무엇인가?
      • 코루틴의 생성 및 실행
    • 코루틴과 함수의 차이점
      • 코루틴의 특징
      • 코루틴을 사용하는 이유
  • 실습:
    • 이벤트 루프와 코루틴 예제
import asyncio

async def my_coroutine():
    print("코루틴 시작")
    await asyncio.sleep(1)
    print("코루틴 종료")

async def main():
    await my_coroutine()

asyncio.run(main())

 

Day 4: 퓨처와 태스크

  • 강의 내용:
    • 퓨처의 개념
      • 퓨처란 무엇인가?
      • 퓨처의 상태와 결과
    • 태스크의 개념
      • 태스크란 무엇인가?
      • 태스크의 생성 및 실행
    • 퓨처와 태스크의 차이점
      • 퓨처와 태스크의 특징
      • 퓨처와 태스크의 사용 사례
  • 실습:
    • 퓨처와 태스크 예제
import asyncio

async def my_coroutine():
    await asyncio.sleep(1)
    return "결과"

async def main():
    task = asyncio.create_task(my_coroutine())
    result = await task
    print(f"태스크 결과: {result}")

asyncio.run(main())

 

Day 5: 비동기 I/O의 성능 최적화

  • 강의 내용:
    • 비동기 I/O의 성능 최적화 기법
      • 적절한 코루틴 사용
      • 이벤트 루프 최적화
      • 효율적인 리소스 관리
    • 비동기 I/O와 동시성
      • 동시성의 이해
      • 동시성 제어 기법
    • 비동기 I/O와 병렬성
      • 병렬성의 이해
      • 비동기 I/O와 병렬성의 조합
  • 실습:
    • 비동기 I/O의 성능 최적화 예제
import asyncio
import aiohttp

async def fetch(session, url):
    async with session.get(url) as response:
        return await response.text()

async def main():
    async with aiohttp.ClientSession() as session:
        tasks = [fetch(session, f"https://httpbin.org/get?i={i}") for i in range(10)]
        results = await asyncio.gather(*tasks)
        print(results)

asyncio.run(main())

 

Day 6: 프로젝트 준비

  • 강의 내용:
    • 프로젝트 주제 선정 및 요구사항 분석
      • 프로젝트 주제 및 요구사항 확정
      • 프로젝트 설계 및 계획 수립
    • 프로젝트 구현 준비
      • 데이터 구조 및 알고리즘 설계
      • 비동기 작업 관리 및 최적화 계획
  • 실습:
    • 프로젝트 주제 및 요구사항 분석
    • 프로젝트 설계 및 계획 수립
### 프로젝트 주제 예시
1. 비동기 웹 크롤러 개발
2. 실시간 비동기 데이터 처리 시스템 구축

### 프로젝트 요구사항 예시
1. 비동기 웹 크롤러:
   - 여러 웹페이지를 동시에 크롤링
   - 비동기 I/O를 사용한 데이터 수집
   - 수집한 데이터 저장 및 분석

2. 실시간 비동기 데이터 처리 시스템:
   - 실시간 데이터 스트리밍 수집 및 처리
   - 비동기 I/O를 사용한 데이터 변환 및 분석
   - 처리 결과 저장 및 시각화

### 프로젝트 설계 및 계획 예시
1. 데이터 입력 모듈 구현
2. 비동기 알고리즘 구현
3. 데이터 출력 및 성능 분석 모듈 구현

 

 

 

반응형