소개
안녕하세요! 배코블린입니다!!
인하대학교에서 컴퓨터 공학을 전공! (자랑하면 학점 4.45)
서울대학교에서 석사와 박사과정을 거쳤어요!! (박사과정은 스카웃 제의로.. 중간에 그만뒀지만..요..)
그 후 탑티어 스타트업 두 곳에서 백엔드 개발과 인공 지능 연구를 동시에 했어요!
강화학습과 Chatgpt를 활용한 인공 지능 개발을 하였고!
Python과 Go언어를 사용한 백엔드 개발을 하였습니다!
인공지능 백엔드 개발이라는 다소 특별한 커리어를 갖고 있어요!
강의
전체2수강평
게시글
질문&답변
2024.05.12
async, await 질문
안녕하세요! 다시 뵈서 반갑습니다 🙂 비동기 처리와 async / await 키워드에 대한 질문 잘 읽어보았습니다. 비동기 처리와 async/await에 대한 상세 설명 혼란스러운 부분을 해결해 드리고, Python의 asyncio 와 JavaScript의 비동기 처리 방식의 차이점까지 짚어 드리겠습니다. 핵심 개념 정리 비동기 처리: 시간이 오래 걸리는 작업(예: 네트워크 요청, 파일 읽기/쓰기)을 기다리는 동안 다른 작업을 수행하여 전체 프로그램의 응답성을 높이는 방식입니다. async 키워드: 함수를 코루틴(coroutine)으로 만들어줍니다. 코루틴은 await 키워드를 사용하여 비동기 작업을 일시 중지하고 재개할 수 있는 특별한 함수입니다. await 키워드: 코루틴 내에서 사용되며, 비동기 작업이 완료될 때까지 코루틴의 실행을 일시 중지합니다. 작업이 완료되면 결과를 반환하고 코루틴의 실행을 재개합니다. 모든 걸 동시에 한다 보다는 현재 함수가 오래 걸리는 일을 할 때 다른 작업을 먼저 한다고 생각하시는 게 더 편하실 거에요! 용어 명확화 "해당 함수": await 키워드 바로 뒤에 오는 비동기 작업을 수행하는 함수를 의미합니다. 예를 들어 await asyncio.sleep(1) 에서 "해당 함수"는 asyncio.sleep(1) 입니다. "현재 함수": await 키워드를 포함하고 있는 코루틴 함수를 의미합니다. await 동작 방식 상세 설명 코루틴 함수 내에서 await 키워드를 만나면, await 뒤의 비동기 작업이 실행됩니다. 비동기 작업이 진행되는 동안, 현재 코루틴 함수는 일시 중지 되고 제어권이 이벤트 루프(event loop)로 넘어갑니다. 이벤트 루프는 다른 코루틴이나 작업을 실행하면서 비동기 작업의 완료를 기다립니다. 비동기 작업이 완료되면, 결과 값을 가지고 일시 중지되었던 코루틴 함수로 돌아와 실행을 재개 합니다. 예시 코드 Python import asyncio async def my_coroutine(): print("코루틴 시작") await asyncio.sleep(1) # 1초 동안 일시 중지 print("코루틴 재개") async def main(): await asyncio.gather(my_coroutine(), my_coroutine()) # 두 코루틴 동시 실행 asyncio.run(main()) FastAPI와 비동기 처리 FastAPI는 비동기 프레임워크이므로, async / await 를 사용하여 I/O 작업을 효율적으로 처리할 수 있습니다. await 를 사용하더라도 I/O 작업 중에는 다른 요청을 처리할 수 있으므로 전체적인 성능이 향상됩니다. JavaScript와의 차이점 JavaScript에서도 async / await 를 사용하지만, Python과는 미묘한 차이가 있습니다. JavaScript의 await 는 Promise 객체를 반환하는 함수에 사용되며, Promise가 처리될 때까지 해당 async 함수의 실행을 일시 중지합니다. 결론 await 키워드는 비동기 작업을 기다리는 동안 다른 작업을 수행할 수 있도록 해주는 핵심적인 역할을 합니다. FastAPI와 같은 비동기 프레임워크에서는 await 를 적절히 활용하여 I/O 병목 현상을 줄이고 성능을 극대화할 수 있습니다. 궁금한 점이 있다면 언제든지 다시 질문해주세요.
- 1
- 1
- 49
질문&답변
2024.05.11
파라미터 문의
아울러 보내주신 피드백이 많은 도움이 되었습니다. 편하게 말씀주시면 제게 더 많은 도움이 될 것 같습니다 🙂
- 1
- 4
- 77
질문&답변
2024.05.11
파라미터 문의
사진에 대해 설명해드리면, 쿼리파라미터 + app.get 경로 파라미터 + app.get 바디 파라미터 + app.post 에 대한 각각의 코드입니다 🙂
- 1
- 4
- 77
질문&답변
2024.05.11
파라미터 문의
질문에 대해 조금 상세히 답변드리겠습니다! 현재 올려주신 코드는 쿼리 파라미터 혹은 경로 파라미터를 테스트해보시고 싶은 것으로 생각되는 데 맞을까요? 일반적으로 경로파라미터는 리스트는 받지 않는 것이 일반적 사용입니다! 혼동이 많이 온다고 알려져있기 떄문입니다! 보통 쿼리 파라미터를 통해 리스트 데이터를 많이 수신해요! 현재 HTTP GET method를 통해 호출하고 계신데, GET method의 경우에는 body parameter를 포함할 수 없기 때문에 app.post 로 바꿔주시면 swagger UI에서 편하게 테스트하실 수 있습니다! 오타가 하나 있어서 수정해드렸습니다 🙂 강의를 처음 찍어보다 보니 다소간 부족한 부분이 많네요! 보내주신 소중한 피드백 반영해서 최대한 빠른 시일 내에 조금 더 개선해보도록 하겠습니다! 항상 노력하겠습니다. 감사합니다! from typing import List from fastapi import FastAPI, Query app = FastAPI() @app.post("/read_items1/") async def read_items(q : List[str] = None): query_items = {"q" : q} return query_items @app.get("/read_items2/{item_id}") async def read_item2(item_id: int): return {"item_id": item_id} @app.get("/read_items3/") async def read_items(q: List[str] = Query(None)): return {"q": q} (사진) (사진) (사진)
- 1
- 4
- 77
질문&답변
2024.05.11
파라미터 문의
안녕하세요 🙂 강사 배코블린입니다! 가장 먼저 수강해주셔서 감사하다는 말씀과 피드백에 감사인사드립니다! Python에 대한 기초지식을 배경으로 하기 때문에 타입 힌트 등에 설명을 다소간 많이 생략했는데, 피드백 주신 내용을 바탕으로 생각해보니 추가해드리는 게 좋을 듯 하군요 🙂 조금 더 기초까지 다루는 내용을 최대한 빨리 녹화해서 추가해드리도록 하겠습니다. 다시 한번 피드백 감사드립니다.
- 1
- 4
- 77