강의에서는 비동기적으로 engine을 만들때, 아래 처럼 engine = create_async_engine( DATABASE_URL, echo=True, future=True, # SQLAlchemy 2.0 # encoding="utf-8" ) 했는데.... poolclass=QueuePool를 사용하여, DB 연결을 풀링하여 재사용하는 것이 도움이 될 듯한데... 강의에서는 언급이 없으셔서, AI에게 물어봤더니... " FastAPI에서 create_async_engine 과 함께 QueuePool 을 사용하는 것은 비동기 데이터베이스 연결을 효율적으로 관리하기 위함 입니다. QueuePool 은 데이터베이스 연결을 풀링하여 재사용함으로써, 매번 새로운 연결을 생성하고 종료하는 오버헤드를 줄여줍니다. 특히 FastAPI와 같이 비동기 요청을 처리하는 환경에서는 여러 연결을 동시에 관리해야 하므로, 풀링은 성능 향상에 큰 도움이 됩니다." 이렇게 답을 주고... from sqlalchemy.ext.asyncio import create_async_engine from sqlalchemy.pool import QueuePool DATABASE_URL = "your_database_url" # 예: postgresql+asyncpg://user:password@host:port/database engine = create_async_engine( DATABASE_URL, poolclass=QueuePool, pool_size=10, # 풀에 유지할 연결 수 max_overflow=20, # 풀 크기가 초과될 때 허용할 추가 연결 수 pool_recycle=3600, # 초 단위로 연결을 재활용할 시간 (초과 시 재연결) echo=True # SQL 실행 로그 출력 (디버깅용) ) # 이후 엔진을 사용하여 데이터베이스 작업 수행 예시코드로 이렇게 주던데... 실제로, 비동기적으로 engine을 만들때에 AI의 답변처럼 도움이 되나요? 저희 강의의 코드는 아래와 같은 흐름을 타고 있던데... from sqlalchemy.ext.asyncio import create_async_engine, AsyncSession from sqlalchemy.orm import sessionmaker, declarative_base from typing import AsyncGenerator from sqlalchemy.orm import configure_mappers configure_mappers() DATABASE_URL = "sqlite+aiosqlite:///./sql_app.db?charset=utf8" engine = create_async_engine( DATABASE_URL, echo=True, future=True, # SQLAlchemy 2.0 # encoding="utf-8" ) from sqlalchemy.ext.asyncio import async_sessionmaker AsyncSessionLocal = async_sessionmaker( engine, class_=AsyncSession, # add expire_on_commit=False, autocommit=False, autoflush=False ) Base = declarative_base() async def get_db() -> AsyncGenerator[AsyncSession, None]: session: AsyncSession = AsyncSessionLocal() print(f"async def get_db(): Session created: {session}") try: yield session except Exception as e: print(f"Session rollback triggered due to exception: {e}") await session.rollback() raise finally: print(f"async def get_db(): Closing session: {session}") await session.close()
mysql-connector-python=9.4.0으로 2025.8.17일 현재의 최신 버전을 설치했더니, engine.connect() 부터 적용이 안되던데... 이유가 궁금합니다. 왠만해서는 안될 이유가 없을 것 같은데... 희한하게 안되더라구요... 궁금해서 질문 남깁니다. 감사합니다.
1. 현재 학습 진도 몇 챕터/몇 강을 수강 중이신가요? 1-10 어떤 알고리즘을 학습하고 계신가요? 1-10 2. 어려움을 겪는 부분 실제로 코테볼때 collections을 import 하지 말라는 제약조건이 있는 경우도 있는지 궁금합니다. (예전에 js로 코테볼때 fetch 말고 xhr 써야된다는 제약조건을 본적이 있어서...ㅋ) 아래 경우는 Counter에서 순회한번 해서 O(N) , for c in s 반복문 O(N) , 조건문은 딕셔너리가 해시테이블이라 O(1) O(N) + O(N) = O(N) 으로 계산했는데 맞나요? 3. 시도해보신 내용 from collections import Counter def solution(s): count = Counter(s) return next((c for c in s if count[c] == 1), "_")
아래 코드는 강사님의 git에서 가져온 코드입니다. auto // [Next.js 프로젝트] // pages/blog/index.js import { useEffect, useState } from "react"; export async function getServerSideProps(context) { // http://localhost:3000 에서의 쿠키를 API 요청에 활용 const headers = { Cookie: context.req.headers.cookie, }; console.log("headers: ", headers); const url = "http://localhost:8000/blog/whoami/"; const response = await fetch(url, { headers }); const responseText = `상태코드: ${response.status} ${await response.text()}`; // props로 전달한 값이 컴포넌트의 속성값으로 주입 return { props: { message: responseText } }; } // 웹브라우저에 코드가 다운로드된 후에 수행. function WhoamiPage({ message: messageSSR }) { const [messageCSR, setMessageCSR] = useState("no message"); // 컴포넌트 초기화 시에 1회만 실행. useEffect(() => { fetch("http://localhost:8000/blog/whoami/") .then((response) => response.text()) .then((responseText) => { setMessageCSR(responseText); }); }, []); return ( <div> <h2>whoami</h2> <pre>CSR: {messageCSR}</pre> <pre>SSR: {messageSSR}</pre> <hr /> <small>by Next.js</small> </div> ); } export default WhoamiPage; 강의에선 "fetch api 에서 config 설정도 없이 protocol host 포트 번호를 제거하고 호출합니다..."라고 말씀하셨습니다. 그런데 위 코드는 protocol + host + port 번호까지 전부 적혀 있는 상태이지 않나요? 그런 이유로 해당 코드는 localhost:3000/blog에서 CORS 오류가 발생합니다. 저 코드를 사용하신 이유를 잘 모르겠어요.
1. 현재 학습 진도 몇 챕터/몇 강을 수강 중이신가요? 03_06_stack.py 어떤 알고리즘을 학습하고 계신가요? 스택 여기까지 이해하신 내용은 무엇인가요? 스택이 기존 링크드 리스트 자료구조에 기반한 알고리즘. 2. 어려움을 겪는 부분 어느 부분에서 막히셨나요? pop함수에서 self.head = self.head.next로 원래 head를 다음노드로 옮기는 부분. 코드의 어떤 로직이 이해가 안 되시나요? head가 옮겨 졌다 라는 걸로 pop 라는 개념을 표현하신 거 같은데 원래 self.head는 메모리에서 안사라진거 아닌가요? 메모리는 계속 점유하고 있을거고, 그저 head의 위치만 바꿔준 거니 표면적으로 보이기에만 pop인것 같은데 편의상 이렇게 하신건지 정말 pop이라는 개념 자체가 제거가 아닌 head를 옮기는 개념인건지 잘 모르겠습니다. 이렇게 구체적으로 알려주시면, 더 정확하고 도움이 되는 답변을 드릴 수 있습니다! 😊
안녕하세요 강의 듣던 중 질문 있습니다. access token 을 넣어서 fetch 함수를 사용하고 싶은데 클라이언트 레이어에서는 정상적으로 주입한 access token이 보이는데 서버 레이어에서는 구워진 access token이 없더라고요. 혹시 짐작 가는게 있으실까요?? 감사합니다.
4.15 강의에서 run.py을 처음 실행하면 supabase Table Editor에 economic_and_stock_data 컬럼에 데이터가 비어 있을 때 주가 데이터가 잘 저장되다가 2019-09-08 데이터까지 잘 저장되다가 아래와 같이 오류가 나고 주가 데이터 저장이 멈춥니다 컨트롤 + c를 눌러서 프로그램을 종료 시키고 다시 실행시키면 이어서 남은 날짜까지 잘 저장되긴 하네요 경제 데이터 업데이트 중 오류 발생: <ConnectionTerminated error_code:0, last_stream_id:19999, additional_data:None> raise Exception(f"경제 데이터 업데이트 중 오류: {str(e)}") Exception: 경제 데이터 업데이트 중 오류: <ConnectionTerminated error_code:0, last_stream_id:19999, additional_data:None> ERROR: Application startup failed. Exiting.
cursor-talk-to-figma-mcp plugin 의 sonnylab.com이 저의 경우 나오지 않고 , use localhost 버튼도 나오지 않는데 왜 그럴까요? 그래서 figma에 그려지는 것은 안되었습니다. 소스위치: https://github.com/grab/cursor-talk-to-figma-mcp 플러그인은 교재에서 연결
오늘 날짜 25-08-16에 python run.py로 실행 해서 주가 데이터를 supabase에 저장 시키는 부분은 오류 없이 잘 작동 했는데 Table Editor에 economic_and_stock_data 컬럼에 저장된 주가 데이터들을 보니깐 주가 데이터가 전혀 맞지도 않고 중복된 값이 여러개 들어가 있습니다 예로 몇개만 예시를 들면 2025-06-15 ~ 2025-08-14 애플 주가 데이터 저장된 것을 보면 232.77999877929688 중복으로 저장이 되있어요 당연 실제 주가 데이터랑 비교 해봐도 다르구요 다른 주식들도 마찬가지에요 중복으로 안맞는 주가 데이터가 저장되 있는게 많아요 주가를 가져오는 yfinance 라이브러리에 문제가 있는 것 같은데 확인좀 부탁드려요 4.15 강의를 보면 주가 데이터가 맞게 저장 되는 것 같은데 현재 날짜로 따라 해보면 주가 데이터가 이상해요