반응형
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와 비동기 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의 장점
- 실습:
- 비동기 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의 성능 최적화 기법
- 실습:
- 비동기 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. 데이터 출력 및 성능 분석 모듈 구현
반응형
'-----ETC2----- > 고급 프로그래밍 기술' 카테고리의 다른 글
[고급 프로그래밍] Week 11: RPC 개념과 동작 원리 (0) | 2024.06.02 |
---|---|
[고급 프로그래밍] Week 10: 파이썬 AsyncIO 모듈 활용, 비동기 프로그래밍 예제 (0) | 2024.06.02 |
[고급 프로그래밍] Week 8: Spark에서의 데이터 처리 및 분석 (0) | 2024.06.02 |
[고급 프로그래밍] Week 7: Apache Spark 개요 및 설치, RDD와 DataFrame 기본 개념 (0) | 2024.06.02 |
[고급 프로그래밍] Week 6: Hadoop의 MapReduce 구현과 Python을 이용한 예제 (0) | 2024.06.02 |