안녕하세요 강사님 좋은 강의 잘 듣고 있습니다! useSuspenseQuery를 사용 중에 고민이 생겨서 질문 드립니다. 제가 구현하고 있는 프로젝트의 대부분 API는 인증이 필요합니다. refresh token 은 http only 쿠키로 관리하고, access token 은 쿠키에 저장하고, 요청 헤더에 넣어 인증을 하고 있습니다. useSuspenseQuery 를 사용하는 페이지에서 SSR 단계에 401 에러가 발생합니다. 이후 CSR 전환 시에는 정상적으로 데이터를 불러와 화면은 최종적으로 렌더링됩니다. 해당 페이지를 dynamic import 로 CSR 강제하면 401이 발생하지 않습니다. 제가 추정한 원인은 클라이언트 컴포넌트 내부라도 초기 렌더링 시 SSR 패스에서 useSuspenseQuery 가 실행되어 서버에서 API 요청이 발생. 이때 공통 axios 인스턴스가 클라이언트 전용 방식으로 쿠키를 읽어 헤더에 토큰을 주입하도록 구현되어 있어, 서버 환경에서는 토큰을 읽지 못해 401이 발생하는 것으로 판단했습니다. 해결을 위해 시도한 방법 prefetchQuery + useSuspenseQuery 조합으로, prefetchQuery 단계에서 next/headers 를 통해 서버 환경에서 토큰을 읽어 주입하면 401이 사라졌습니다. 다만, 모든 useSuspenseQuery 호출 지점마다 prefetchQuery 를 추가하는 것은 과도하다고 느껴 대안을 모색 중입니다. 질문 사항 왜 SSR에서 실행되나요? 클라이언트 컴포넌트 내부에서 호출하는데도 useSuspenseQuery 가 SSR 렌더링 단계에서 동작하는 메커니즘을 정확히 이해하고 싶습니다. useSuspenseQuery 의 단점/주의점 강의에서는 주 사용을 권장해 주셨는데, 모든 데이터 관리에 useQuery 대신 useSuspenseQuery 사용하는게 좋은건지 실제 서비스에서 고려해야 할 단점이나 주의사항이 궁금합니다. 401을 피하는 권장 패턴 제 환경처럼 서버에서 토큰을 읽지 못해 401이 나는 경우, 제가 시도한 방법 인 prefetchQuery 적용 외에 권장되는 표준 패턴이 있을까요? prefetchQuery 를 여러 곳에서 사용할 때의 리스크 여러 페이지/쿼리에서 prefetchQuery 를 널리 적용하면 TTFB 지연, 직렬화된 캐시의 HTML 페이로드 증가, 중복 호출 등의 문제가 커질 수 있을까요? 그렇다면 적절한 적용 기준이나 완화 전략이 궁금합니다. 그리고 어떤 기준으로 prefetchQuery 를 적용하면 좋을지도 궁금합니다. 문서와 블로그, GPT 등을 찾아봤지만 명확히 정리하기 어렵고, 제가 질문을 드릴 수 있는 최고 전문가라고 생각하여 의견을 여쭙니다. 긴글 읽어주셔서 감사합니다! 아래 에러가 발생하는 예시 코드 첨부 드립니다. (APage를 CSR로 강제하면 에러 미발생) import Spinner from "@/components/common/spinner/Spinner"; import A from "@/components/pages/A"; import { Suspense } from "react"; import { ErrorBoundary } from "react-error-boundary"; interface APageProps { params: { id: string; }; } export default async function APage({ params, }: APageProps) { const { id } = params; const parsedId = parseInt(id); return ( <ErrorBoundary fallback={<div>에러가 발생했습니다</div>}> <Suspense fallback={<Spinner fullscreen />}> <A id={parsedId} /> </Suspense> </ErrorBoundary> ); } "use client"; import { useGetAList } from "@/api/A/queries/useGetAList"; interface AProps { id: number; } export default function A ({ id }: AProps) { const { data: probiomeList } = useGetAList(id); // 생략 import { queryKeys } from "@/constants/queryKeys"; import { UseSuspenseQueryCustomOptions } from "@/types"; import { useSuspenseQuery } from "@tanstack/react-query"; import { getAList } from "../A"; import { AList } from "@/types/A"; export function useGetAList( id: number, queryOptions?: UseSuspenseQueryCustomOptions<AList> ) { return useSuspenseQuery({ queryFn: () => getAList(id), queryKey: [ queryKeys.A.BASE, queryKeys.A.GET_A_LIST, id, ], ...queryOptions, }); }
안녕하세요 선생님, 혹시 전체 강의를 수강하진 않았지만 이 부분이 가능할것으로 생각들어 강의 결제하였는데, 궁금해서 문의드려요 lovable이나 replit으로 만든 웹을 안드로이드 앱으로 만들려면 어떻게 해야되는건가요? 이거에 대한 강의나 관련내용이 있을까요??저 그 방법이 있는거 같아서 결제했는데, 알려주실수 있나요?강의에 포함안되어 있다면 통상적으로 어떤식으로 만드는 궁금합니다.
안녕하세요! langraph를 업무에 사용예정이여서 강의 수강중입니다. 윈도우 환경셋팅이 필요해서 다음 에러를 해결해서 개발환경 셋팅을 완료했습니다. 앞으로 강의를 수강하는데 다음 uvloop 패키지가 없어도 괜찮을까요? chroma-hnswlib 도 무시하고 설치로 해도 괜찮은지 궁금합니다. 가능하다면 윈도우 환경에서의 패키지 모듈 관리도 되면 좋을 것 같습니다 🙂 uvloop window 환경에서는 무시하고 설치하도록 변경 'uvloop; sys_platform != "win32"', # ⬅ Windows에서는 설치 안 함 chroma-hnswlib Visual C++ Build Tools 설치
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] (05:30부터) publicValue와 protectedValue에는 어떻게 접근한건가요? : publicValue, protectedValue는 타 클래스인 Parent의 멤버변수이고, 그것에 접근하려면 Parent의 인스턴스를 생성한 다음(인스턴스 변수는 'p'라 하겠습니다) 'p.'을 앞에 적어야 접근이 가능한 것 아닌가요? 즉 저는 p.publicValue같은 식으로 불러야 하는 것으로 알고있는데, 여기서는 어떻게 'p.'없이 접근을 한건지 궁금합니다 ㅠ
from langchain_core.prompts import ChatPromptTemplate from pydantic import BaseModel, Field from typing import Literal class Route(BaseModel): target: Literal["income_tax", "llm", "real_estate_tax"] = Field( description="The target for the query to answer" ) router_system_prompt = """ You are an expert at routing a user's question to 'income_tax', 'llm', or 'real_estate_tax'. 'income_tax' contains information about income tax up to December 2024. 'real_estate_tax' contains information about real estate tax up to December 2024. if you think the question is not related to either 'income_tax' or 'real_estate_tax'; you can route it to 'llm'.""" router_prompt = ChatPromptTemplate.from_messages( [("system", router_system_prompt), ("user", "{query}")] ) structured_router_llm = small_llm.with_structured_output(Route) def router(state: AgentState) -> Literal["income_tax", "real_estate_tax", "llm"]: """ 주어진 state에서 쿼리를 기반으로 적절한 경로를 결정합니다. Args: state (AgentState): 현재 에이전트의 state를 나타내는 객체입니다. Returns: Literal['income_tax', 'real_estate_tax', 'llm']: 쿼리에 따라 선택된 경로를 반환합니다. """ query = state["query"] router_chain = router_prompt | structured_router_llm route = router_chain.invoke({"query": query}) return route.target 안녕하세요 강병진 강사님:) 혹시 위 코드에서 router_prompt없이 Route class의 Field에만 프롬프트 지침을 넣어도 문제가 없을까요? 테스트 결과는 잘 나왔습니다. 아래는 수정 코드입니다. class Route(BaseModel): target: Literal["real_estate_tax", "llm", "income_tax"] = Field(description = """ 당신은 사용자의 질문을 보고 적절한 라우터를 연결해주는 전문가입니다. 부동산에 관련된 질문은 real_estate_tax라우터를, 소득세에 관한 질문은 income_tax라우터를, 그 외의 질문은 llm라우터로 연결해주세요. """) def router(state: AgentState): query = "역삼역 떡볶이 맛집을 알려주세요 " router_llm = llm.with_structured_output(Route) response = router_llm.invoke(query) return response.target print(router({})) >> 'llm'
MCP Server 나 langgraph 나 모두 tool 입니다. 만약 tool 에서 결과 값이 너무 많이 나오는 경우 어떻게 처리 해야 할까요? 예1) MCP Server의 "우리 회사 고객 정보중 매출 얼마 이상 되는 정보를 보여줘?" 라고 고객이 입력 했는데, 그 고객 정보가 10만명이 나와서 tool 의 결과가 너무 커 버리는 예) DB의 Limit 등으로 어떻게 하더라도 다음 호출을 LLM이 잘 못해주는 경우가 있음. 예2) 슬랙의 채널을 보여줘 했을 때, 슬랙의 채널이 너무 많은 경우 ... 결국 전부다 예3) 소스코드를 분석해 줘 소스코드가 1만 - 2만 라인 되었을 경우 Tool 의 결과라도 양이 많으면 Summary를 하면서 계속 돌려야 하는게 효과 적일까요? 아니면 페이지 1, 2 등을 호출할 수 있게 어떻게 하던 LLM 에게 권한을 주는게 효과 적일까요? 더 괜찮은 방법이나 좋은 prompt 등이 있으시면 답변 부탁 드립니다. 감사합니다.
🚨 필독) 질문하시기 전에 꼭 읽어주세요 (10초 소요) 제목을 구체적으로 작성해 주세요 ✅ 좋은 예 : 감정일기장 Home 구현중 xx 이슈가 발생합니다. ⛔ ️ 나쁜 예 : 이거 왜 안되나요?, 오류나요 도와주세요 등 비슷한 궁금함을 갖고 계신 분들께 도움이 될 수 있어요! 코드의 이슈는 전체 프로젝트를 "링크 형태"로 올려주셔야 원인을 파악할 수 있습니다. 깃허브, 구글드라이브 등의 수단을 통해 링크 형태로 전달해주세요 직접 실행해보며 원인을 파악해야 하기 때문에 텍스트 형태로 붙여넣는건 삼가해주세요 🥲 답변이 도움이 되셨다면 답글 or 해결완료 버튼을 클릭해주세요 비슷한 궁금함을 갖고 계신 분들께 도움이 될 수 있어요! 제 답변이 여러분께 도움이 되었는지 저도 알고 싶어요 🥲 강의 내용에 궁금한 점이 있다면 몇 챕터의 몇 분 몇 초인지 알려주시면 더 좋아요 더 빠른 답변이 가능합니다!
안녕하세요 좋은 수업제공해주셔서 많은 도움을 받고있습니다. langChain에 public 모델을 사용할때 개인정보 관련해서 질문이 있는데요 예를 들어 챗봇이나 자동 상담 기능에 적용을 한다고하면 입력이 매우 자유로울거같은데 개인정보에대해서는 어떻게 처리를 해야할까요? 기본적으로는 정규식으로 전처리를 하는데 100%보장된 작업은 아니라 현업에서는 어떻게 처리하는지 궁금합니다. 만약 개인정보 처리가 매우 중요하다면 public 모델(ex. chatGPT, gemini)은 사용 못하고 private 한 환경에 오픈소스로 운영할수밖에는 없을까요?
안녕하세요 파이썬 활용한 데이터 전처리 부분에서 14.1 파이썬을 활용한 데이터 전처리.ipynb 위 코드를 가져와서 진행하는 과정에서 아래와 같은 에러가 발생했습니다. UnicodeEncodeError : 'cp949' codec can't encode character '\u2219' in position 1119: illegal multibyte sequence 이것저것 파이썬 기본 인코디을 utf-8로 바꾸라고 해서 set PYTHONUTF8=1 해당 코드도 사용해 봤는데 결국에는 아래와 같은 에러가 발생해서 질문드리게 되었습니다. TypeError : 'NoneType' object is not iterable 혹시 어떻게 해야할까요? (윈도우 사용중입니다)
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문 전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 질문은 아니고.. 생산자 소비자 문제 파트 공부하다가 정말 감사해서 글 남깁니다. 이해를 위한 그림이 지금 세기도 힘들 정도로 많이 들어가있는데.. 학습자를 배려해주시는 마음이 느껴져서 정말 감사하네요.. 얼마나 많은 시간과 노력이 들어가있는지 가늠도 안됩니다. 정말 덕분에 편하게 공부하고 있습니다. 항상 감사드립니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문 전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 이전의 프린트 예제에서는 큐를 생성할 때 ConcurreentLinkedQueue를 사용했고, 생산자 소비자 문제에서는 ArrayDeque를 사용했는데, ConcurreentLinkedQueue를 쓰지 않아도 괜찮은건가요? 이 예제는 lock을 획득한 스레드만 접근 가능해서 동시성문제를 해결한 상황이라서 그런건가요?