import BookItem from "@/app/components/book-item"; import BookListSkeleton from "@/app/components/skeleton/book-list-skeleton"; import { fetchSearchBooks } from "@/app/lib/fetch-search-books"; import { Suspense } from "react"; // export const dynamic = "force-dynamic"; // 특정 페이지 유형을 강제로 설정하는 dynamic 세그먼트 옵션 // 1. auto - 아무것도 강제하지 않는 옵션, 기본형 // 2. force-dynamic - dynamic 페이지를 강제하는 옵션 // 3. force-static - static 페이지를 강제하는 옵션 // 4. error - static 페이지를 강제하지만 이로 인해 오류가 발생할 것으로 예상되면 빌드과정에서 오류를 발생하는 옵션 async function SearchResult({ q }: { q: string }) { const searchBooks = await fetchSearchBooks(q); return ( <> {searchBooks.map((book) => { return <BookItem key={book.id} {...book} />; })} </> ); } export default async function Page({ searchParams, }: { searchParams: { q?: string }; }) { return ( <Suspense fallback={<BookListSkeleton count={3} />}> <SearchResult q={searchParams.q || ""} /> </Suspense> ); } 스켈레톤 UI를 적용하고 있는데 속도를 3g로 하고 새로고침을 해도 Suspence가 작동하지 않고 페이지가 랜더링 됩니다. 그리고 터미널에서 이런 에러가 발생하고 있습니다. Error: Route "/search" used `searchParams.q`. `searchParams` should be awaited before using its properties. Learn more: https://nextjs.org/docs/messages/sync-dynamic-apis at Page (src/app/(with-searchbar)/search/page.tsx:31:37) 29 | return ( 30 | <Suspense fallback={<BookListSkeleton count={3} />}> > 31 | <SearchResult q={searchParams.q || ""} /> | ^ 32 | </Suspense> 33 | ); 34 | } GET /search?q=%ED%95%9C 200 in 47ms SearchResult가 서버 컴포넌트로 만들어져 있어서 서버에서 이미 만들어 가져오기 때문에 fallback이 적용되지 않는건가요? SearchResult를 클라이언트 컴포넌트로 바꿔야지 해결되는 문제인가요?
안녕하세요. <라우팅 편집> 에서 경로 설명해주시는 부분에서 궁금한 점이 있습니다. 10.0.0.0/16 -> local vpc 내부에서 10.0.0.0/16 으로 보내는 트래픽은 local 로 보낸다. (private ip 를 활용해서 내부에서만 통신해라) -> 위의 말이 이해가 잘 안됩니다. 예시를 들어주실 수 있나요? 10.0.0.0/16 가 어차피 vpc 전체를 의미하는건데 "보낸다"는 의미를 잘 모르겠습니다. 그냥 말 그대로 내부에서 서로 보내는 것들은 내부 ip 안에서 놀아라~ 이런 의미라고 이해하면 될까요? 감사합니다.
안녕하세요. 우선 강의 잘 듣고 있습니다. Next.js 에서 Zustand를 사용할때는 create대신 createStore로 개별 생성하여 RQ와 같이 Provider로 사용하는 것을 공식문서에서도 권장하고 있는 것으로 이해하고 있습니다만 provider없이 create()를 통해 사용하신 이유가 궁금합니다. 1. SSR없이 완전한 client component로 분리하여 이슈가 없을 것이라 판단하신것인지 2. client component에서만 사용하게되면 모듈 레벨에서 캐싱되기때문에 (next에서 SSR/hydrating이 필요한 store를 생성하는 것이 아니라면) 매번 store를 생성하지 않는것인지 답변주시면 감사하겠습니다!
궁금한 내용 "NextJS에서 클라이언트 컴포넌트도 SSR을 수행하는데, 상호작용이 불가능한 정도의 SSR을 수행하여 리액트 트리를 구성하여 HTML을 만들고, HTML과 함께 클라이언트에 자바스크립트 번들 형태(하이드레이션 용도)로 전달된다." 라고 알고 있는데 맞는 말일까요? 그렇다면, '첫 페이지 로드 시'에만 1번과 같이 동작하고 첫 페이지가 아닌 '다른 페이지'에 들어갈 땐 CSR처럼(JS번들을 클라이언트에게 전달하여 브라우저 단에서 리액트 생명주기 시작) 동작한다면, 강의 중 나온 SearchBar 컴포넌트는 빌드 단계에 렌더링되는 컴포넌트 안에 있다하더라도 CSR될 것인데 Suspense로 래핑하여 클라이언트 단에서 렌더링이 되게끔 강제할 필요가 없지 않나요? 클라이언트 컴포넌트로 선언된 페이지 컴포넌트(create 페이지)가 next/link를 통해 프리패칭된 것을 네트워크 탭을 통해 확인했습니다. 다만, 클라이언트 페이지 컴포넌트 임에도 RSC Playload로 가져온 것을 확인했는데, 이것은 왜 그런 걸까요? 첫 페이지 로드 이후 페이지 이동 시에 CSR로 동작한다하더라도 진입하는 페이지의 RSC Payload와 JS번들은 주기적으로 서버로부터 가져와야하지 않나요? 아래의 그림에는 JS 실행 전에 서버로부터 가져오는 단계가 보이지 않는데 프리 패칭 과정이 생략된 걸까요?
혼자 드디어 처음으로 외워서 작성해본 2유형코드입니다~ 평가점수가 저정도 나오는데 아무래도 수치형을 스케일링하지않아서 일까요? 아니면 원핫인코딩이 더 적절한거였을까요? 아니면 저정도 점수여도 안전한 구역일까요? import pandas as pd train=pd.read_csv("train.csv") test=pd.read_csv("test.csv") print(train.shape) print(test.shape) train.info() cols=train.select_dtypes(include="O").columns cols from sklearn.preprocessing import LabelEncoder le = LabelEncoder() for col in cols: train[col] = le.fit_transform(train[col]) test[col] = le.transform(test[col]) target=train.pop("TravelInsurance") #데이터분할하기 from sklearn.model_selection import train_test_split X_tr, X_val, y_tr, y_val = train_test_split(train, target, test_size=0.2, random_state=2022) from sklearn.ensemble import RandomForestClassifier model = RandomForestClassifier() model.fit(X_tr,y_tr) pred=model.predict_proba(X_val) from sklearn.metrics import roc_auc_score print(roc_auc_score(y_val,pred[:,1])) #0.7486363636363635
Pod를 두개로 늘리려면 PV만 수동으로 하나더 만들면되긴 하는데 그렇게 하면 두 Prometheus가 결국 한볼륨을 바라보게 된다. 그럼 문제가 된다.? prometheus는 단일 서버용으로 만들어진 시스템이다. 이부분에서 StatefulSet인 파드를 두개로 만들었으면 그리고 PV를 수동으로 하나더 만들엇으면 어차피 storageclass라서 동적으로 pvc도 하나더 만들어지고 각각의 파드가 pod -pvc -pv구조로 연결되는거 아닌가요? 왜 결국 한 한볼륨을 결국 바라보게된다는게 이해가 안갑니다. statefuleset pod마다 각각의 고유 pvc를 사용하는거 아닌가요?
Broken DAG: [/opt/airflow/dags/dags_bash_ operator.py ] Traceback (most recent call last): File "<frozen importlib._bootstrap_external>", line 1063, in source_to_code File "<frozen importlib._bootstrap>", line 488, in call with_frames_removed File "/opt/airflow/dags/dags_bash_ operator.py ", line 24 bash_t1 >> bash_t2 ^ IndentationError: unindent does not match any outer indentation level 이런 에러가 났는데요 소스에서 확인해보니 from airflow.operators.bash import BashOperator ㅇ airflow.operators.bash 에 ~~~~~~ 이렇게 되어 있네요. 강사님 따라 그대로 했는데 에러가 왜 난걸까요?
안녕하세요. 좋은 강의 감사합니다. rds 를 수정해서 다중AZ 를 설정하면 가용영역의 모든 곳에 다 복제가 되는건가요? 물론 눈으로 볼 수 없다고 하지만, 저 rds 를 바라보고 있는 다른 서브넷(ex. instagram-server-b) 의 인스턴스가 속한 가용영역의 서브넷에 자동으로 rds 인스턴스가 다 생기는건가요. 즉 instagram-server-c, instagram-server-d .. 여러대에서 다 instagram-server-a 의 서브넷에 있는 rds 인스턴스를 바라보고 있다면 c, d 쪽에도 다 생기는지 궁금합니다. 그리고 만약 4곳 (a, b, c, d) 이 있다면 그 중에서 a, b, c만 생성되도록 설정할 수도 있는 건가요? 감사합니다.
먼저 강의 질문 드리고 그 외 질문드려보겠습니다. 강의에서 파드를 사전에 1,2개를 삭제해서 다른 worker노드로 보낸건 트래픽이 안끊게 하기위해 실습을 위해 보여주기위함인거죠? 만약 실운영에서 woker노드가 3개이상이면 그럴 필요없는지..실무에서 그렇게 원래하는건지 궁금합니다. 두번째는 실제 업그레이드 할때 강사님이 말씀해주신 부분외에...가령 리소스의 특정 annotation이나 버전값 등등 뭔가 버전업되면서 바뀌어야 하는정보들에 대한 실 가이드 문서를 별도로 보질 않아서 그런것들에 대해 파악하는법을 좀 알고싶습니다. 쿠버 공식문서에 버전업 할때 필요한 모든 정보가 하나의 가이드에 다 들어있지 않을것 같긴한데요... 가령 changelog라든가 이렇게 있던데.. 실제보면 양이 상당하고 모두 영어인데다가 ㅠㅠ 그래서 실제 뭐뭐 바뀌는지...실무에서 정말 하나하나 다보고 파악하고 정리해야하나요?실무에서 놓치지 않고 업그레이드를 위해 빠지지 않고 다 업그레이드에 변경사항들 다 녹일려면 뭐뭐 봐야하는지...그리고 changelog보는법도 좀 알려주십시오.이것도 상당히 중요한부분같다는 생각이 들거등요 이건 강의에 없는내용이고 평소궁금한부분이라 남겨봤습니다. 감사합니다.
강의 정말 잘 듣고있습니다. DFS 너무 어려웠는데 저에게 한 줄기 빛 같은 존재십니다..! 원본 문제가 바뀐것같기도 한데, 13565번 백준 원본을 보면 M, N 순서대로 입력을 받는 것 같습니다. M이 행에 해당되고, N이 열에 해당이 되어서 전반적으로 반대가 되어야하고, 강의에서 말씀 주신 이 부분도 def dfs (y, x): global visited, map_, answer, N if y == N: answer = True return y == M 으로 바뀌어야할 것 같은데 맞을까요?
다른 문제들에서는 train과 test데이터 두개만 주어진채로 계속 들은거같은데 이 문제는 주어진 데이터가 3개인건지.. 제가 앞서 이해했던 문제들의 데이터는 train데이터를 가지고 분할하고 모델링을 한후 validation한 데이터로 pred값을 구하고 실제값과 비교해서 지표로 매겨본후에 최종 test데이터를 넣어서 csv파일로 만드는 순서인데.. 지금 이 문제처럼 데이터가 3개인것은 어떤 차이가있는 것일까요 ㅠㅠ
안녕하세요 같은 vpc 내에서는 서로 같은 네트워크로 인식되는 것은 이해가 되었습니다. 그런데 단순하게 db 툴 설정에서, ssh 터널로 bastion 호스트에 대한 정보를 입력하는 것만으로 rds 에 어떻게 접속이 되는지 잘 이해가 안되네요. 즉 같은 vpc 내라고 하더라도, 특정한 private 서브넷에 접속하려면 그것과 동일한 vpc 에 존재하는 외부에 열려있는 아무 서버(ex. web-server With pem키) 를 그냥 입력하기만 하면 되는건가요? 내부에서 어떻게 web-server(public) <-> rds(private) 서로 연결되는지 궁금해서요! 좋은 강의 감사합니다
안녕하세요 좋은 강의 감사합니다. private 서브넷에 있는 ec2 들을 보호하기 위해서 밖에서 접근을 안되도록 NAT 게이트웨이를 두고, 대신에 접근할 수 있는 ec2 인스턴스(bastion-host)를 뒀잖아요!? 그러면 결국 밖에서 어떻게든 bastion 으로 접근을 할 수도 있고, 그렇다면 결국 동일한 vpc 의 private 서브넷에 있는 ec2 들에도 접근을 할 수 있다면 보안적으로 뚫려있는 것은 동일한 것 아닌가요? 감사합니다.