웹소켓 켜고 커넥트 해서 채널 받았는데요. called join_channel 부터 안 되는데 왜 그럴까요? 계속 하다 보니 연결은 됐는데요. New client connected Received message from client: {"type":"join","channel":"kvisl10k"} Sending message to client: undefined New client connected New client connected 원래는 계속 Received message from client: {"type":"join","channel":"kvisl10k"} Sending message to client: undefined 여기까지만 나오고 안 된것 같은데 여러가지 확인하고 삭제하고 원복하고 하다보니 New client connected New client connected 이게 두번뜨고 연결이 되는데 왜 계속 sending ~ 여기까지만 나온걸까요?
강의에서는 비동기적으로 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 문의하기를 이용해주세요. 안녕하십니까 선생님, PDF P282 단원정리문제 28번 정답이 1번이라고 되있던데 랩탑, 모니터, 키보드 전부 포함된게 정답이 아닐지 여쭤봅니다.\\ 문제 30번도 다 합치면 15,500인데 이상한거같습니다
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예 [질문 내용] 안녕하세요 영한님! 데이터베이스 입문/기본편 강의에서 GROUP BY, 집계함수, CASE 문 등을 배우고 공부하면서, DBMS에서 레코드를 읽고 표현식을 처리하는 내부 과정에 대해 관심을 갖게 되었습니다. 이번 강의에 조건부 집계 같은 나름 복잡한? 쿼리를 이해하려고 노력하면서 몇 가지 궁금증이 떠올랐습니다. 질문1) 배치 처리 방식 vs 파이프라인 처리 방식 영한님의 자바 고급편 강의에서, 데이터 요소들의 처리하는 방식에는 파이프라인 방식과, 배치 처리 방식이 있다고 하셨던 부분이 떠올랐습니다. 데이터베이스 쿼리의 논리적 순서는 FROM -> WHERE -> (GROUP BY -> HAVING -> ) SELECT -> .... 과정으로 이뤄지는데, 실제 DBMS에서는 FROM 절 -> WHERE 절 배치처리 -> SELECT 절 배치처리 이런 과정으로 이뤄지는지, 아니면 레코드 하나를 단위로 FROM -> WHERE -> SELECT 파이프라인을 거쳐 처리가 되는 것인지 궁금합니다. 질문 2) GROUP BY와 집계 함수 처리 시점 COUNT()나 SUM()과 같은 집계함수는 select 절에 존재하고, 쿼리의 논리적 순서에 따르면 GROUP BY 다음 SELECT 절이 실행되는데요. (HAVING 제외) 실제로는 GROUP BY를 실행하면서 SELECT 절에서 필요한 집계 값을 누적시키는지, 아니면 특별한 자료구조에 그룹별로 레코드를 모아두고 SELECT절 수행 시점에 집계함수 값을 얻어내는건지 궁금합니다.
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. 강의 내용과 관련된 질문인가요? 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예 [질문 내용] users 말고, orders 기준으로 쿼리를 작성 중인데요 여기서 봉착한 난관이... 주문 기록이 없다면, null로 표현되는 부분을 어떻게 풀어나가야 할지 모르겠어서 문의드립니다ㅠㅠ SELECT u.name as user_name, p.name as product_name FROM orders AS o LEFT JOIN users AS u ON o.user_id=u.user_id LEFT JOIN products AS p ON o.product_id=p.product_id ORDER BY u.name , p.name ;