일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 코딩국비지원
- 프레임워크vs라이브러리
- 이미지처리프로젝트
- tempfile
- 코딩배우기
- 프로젝트마무리
- aws_s3
- 인공지능모델학습
- 코딩부트캠프
- 웹개발프로젝트
- 블로그와 친해지기
- 와탭랩스
- FLASK
- pymupdf
- devmode
- 엘리스
- 엘리스 AI 트랙
- 개발자 채용설명회
- after_this_request
- 엘리스AI트랙
- 팀프로젝트
- REACT
- 코딩교육
- reactStrictMode
- Python
- 부트캠프프로젝트발표
- 엘리스AI트랙데모데이
- 웹개발포트폴리오
- fabricjs
- 코딩 국비지원
- Today
- Total
자몽이 조아
[python]자바스크립트와 파이썬의 비동기 처리 방식 비교 본문
비동기 프로그래밍은 프로그램이 블로킹 없이 여러 작업을 동시에 실행할 수 있도록 하는 중요한 개념입니다. 자바스크립트와 파이썬 모두 비동기 처리를 지원하지만, 방식이 다릅니다. 이번 글에서는 자바스크립트와 파이썬의 비동기 처리 방식의 차이점을 비교해보겠습니다.
1. 자바스크립트의 비동기 처리
자바스크립트는 싱글 스레드 이벤트 루프(Event Loop) 기반의 비동기 모델을 사용합니다. 이는 비동기적으로 실행되는 코드가 별도의 스레드에서 실행되지 않고, 이벤트 루프를 통해 관리된다는 것을 의미합니다.
1.1 콜백 함수 (Callback)
가장 기본적인 비동기 처리 방식은 콜백 함수입니다.
console.log("Start");
setTimeout(() => {
console.log("Async Task Done");
}, 1000);
console.log("End");
실행 결과:
Start
End
(1초 후) Async Task Done
1.2 Promise
콜백 지옥(Callback Hell)을 방지하기 위해 Promise 객체가 도입되었습니다.
function asyncTask() {
return new Promise(resolve => {
setTimeout(() => {
resolve("Task Completed");
}, 1000);
});
}
asyncTask().then(result => console.log(result));
1.3 async/await
async/await을 사용하면 비동기 코드를 동기 코드처럼 작성할 수 있습니다.
async function runTask() {
console.log("Start");
let result = await asyncTask();
console.log(result);
console.log("End");
}
runTask();
2. 파이썬의 비동기 처리
파이썬은 기본적으로 동기(Synchronous) 언어이지만, asyncio 모듈을 통해 비동기 처리를 지원합니다. 파이썬은 이벤트 루프 기반의 비동기 프로그래밍을 사용하며, async와 await을 이용합니다.
2.1 asyncio와 await
import asyncio
async def async_task():
print("Async Task Started")
await asyncio.sleep(1)
print("Async Task Done")
async def main():
print("Start")
await async_task()
print("End")
asyncio.run(main())
실행 결과:
Start
Async Task Started
(1초 후) Async Task Done
End
2.2 비동기 I/O 처리
비동기 I/O는 네트워크 요청, 파일 읽기 등의 작업에 사용됩니다.
import aiohttp
import asyncio
async def fetch_data():
async with aiohttp.ClientSession() as session:
async with session.get("https://jsonplaceholder.typicode.com/todos/1") as response:
return await response.json()
async def main():
data = await fetch_data()
print(data)
asyncio.run(main())
2.3 내가 asyncio를 직접 사용하지 않아도 비동기적으로 처리되는 경우
어떤 라이브러리는 내부적으로 asyncio를 사용하여 실행될 수도 있습니다. 예를 들어 aiohttp나 httpx 같은 라이브러리는 내부적으로 asyncio 이벤트 루프를 활용하여 비동기적으로 네트워크 요청을 처리합니다. 이를 명시적으로 사용하지 않더라도, 해당 라이브러리를 사용할 경우 비동기 방식으로 동작할 수 있습니다.
예제:
import httpx
def fetch_data():
response = httpx.get("https://jsonplaceholder.typicode.com/todos/1")
return response.json()
print(fetch_data())
위의 예제에서는 httpx.get()이 내부적으로 비동기 요청을 처리하지만, sync 모드에서 실행되기 때문에 동기적으로 동작합니다. 그러나 httpx.AsyncClient()를 사용하면 자동으로 asyncio를 활용하여 비동기 실행이 가능합니다.
import httpx
import asyncio
async def fetch_data():
async with httpx.AsyncClient() as client:
response = await client.get("https://jsonplaceholder.typicode.com/todos/1")
return response.json()
async def main():
data = await fetch_data()
print(data)
asyncio.run(main())
따라서, 내가 asyncio를 직접 사용하지 않더라도 라이브러리에 따라 내부적으로 비동기 코드가 실행될 수 있습니다.
3. 자바스크립트 vs 파이썬 비교
특징 자바스크립트 파이썬
비동기 모델 | 이벤트 루프 기반 | 이벤트 루프 기반 (asyncio) |
멀티스레드 지원 | 웹 브라우저에서는 싱글 스레드, Worker 사용 가능 | 기본적으로 싱글 스레드, asyncio는 협력적 멀티태스킹 |
I/O 처리 | 비동기 I/O(Non-blocking) 기본 내장 | asyncio를 사용해야 비동기 I/O 가능 |
병렬 처리 | Web Worker, setTimeout, Promise 등 활용 | asyncio, ThreadPoolExecutor, multiprocessing 지원 |
4. 결론
- 자바스크립트는 이벤트 루프 기반의 비동기 처리 모델을 기본적으로 제공하며, Promise와 async/await을 활용하여 쉽게 비동기 작업을 수행할 수 있습니다.
- 파이썬은 asyncio를 사용하여 비동기 프로그래밍을 수행하며, await을 통해 논블로킹 방식으로 I/O 작업을 수행할 수 있습니다.
- 자바스크립트와 파이썬 모두 비동기 처리를 지원하지만, 자바스크립트는 기본적으로 비동기 실행에 최적화되어 있고, 파이썬은 asyncio를 사용해야 효과적인 비동기 실행이 가능합니다.
- 또한, 내가 직접 asyncio를 사용하지 않더라도 일부 라이브러리가 내부적으로 asyncio를 활용하여 비동기적으로 동작할 수 있습니다.
따라서 웹 개발에서는 자바스크립트의 비동기 모델이 적합하며, 서버 측에서 I/O 중심의 작업이 많다면 파이썬의 asyncio를 고려하는 것이 좋습니다. 🚀
'개발공부' 카테고리의 다른 글
[python].pyc 파일이 왜 생기는가? (0) | 2025.02.10 |
---|---|
[python,Flask]Flask의 @after_this_request 데코레이터 사용법 (0) | 2025.02.10 |
[개발 고민]프레임워크를 사용할 것인가, 라이브러리를 조합할 것인가? (1) | 2025.02.10 |
host, host 환경의 의미 (0) | 2022.05.21 |
dependencies 와 devDependencies 차이 (0) | 2022.05.21 |