1. 강의 내용과 관련된 질문인가요? 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예 [질문 내용] 포스트맨을 통해서 요청을 보낼 때 url파라미터를 통해 page와size를 설정하였는데요, 이는 MemberSearchCondition 말고 Pageable 또한 앞에 @ModelAttribute가 생략된 형태로 동작한다고 생각하면 될까요? 실제 웹 사이트에서 페이징 처리된 부분의 버튼 같은 걸 누를 때 해당 파라미터들을 넣어주는 방식으로 동작할 것 같은데 맞을까요?
안녕하세요! 덕분에 남이 짠 쿼리의 의미는 파악이 가능한 수준이 될 것 같다는 자신감이 든 수강생입니다! 감사합니다. 2-6 5번 문제를 직면했을 때 동명이인 = 이름 이외 다른 값이 다 다른 경우로 정의했고, 다행히 강사님의 파일에는 해당하지 않지만, 이름이 같고 다른 값도 다 같은 "중복 데이터"가 있을 수 있다는 가능성도 생각을 했습니다. 그래서 혼자 골똘히 고민했는데, (조건이 2개인가? "이름이 같다" and "다른 컬럼이 다르다" 등) 답이 나오지 않아 재생해보니 생각보다 단순한 쿼리여서 놀랐어요. 동명이인이 있는 이름은 무엇일까요? + 전체 파일의 중복 데이터는 제거(ex. 엑셀의 중복 값 제거 )는 아래와 같이 하면 될까요? SELECT DISTINCT name, COUNT (name) AS CNT FROM basic.trainer GROUP BY name HAVING CNT>=2
너무 어렵네요...ㅠㅠ 무슨 docker-compose.yml 이거 실행하는것도 못하고 있어요... 파일위치 : C:\Users\orm64\Documents\Scanned Documents PS C:\WINDOWS\system32> docker compose up -d no configuration file provided: not found PS C:\WINDOWS\system32> C:\Users\orm64\Documents\Scanned Documents C:\Users\orm64\Documents\Scanned : 'C:\Users\orm64\Documents\Scanned' 용어가 cmdlet, 함수, 스크립트 파일 또는 실행할 수 있는 프로그램 이름으로 인식되지 않습니다. 이름이 정확 한지 확인하고 경로가 포함된 경우 경로가 올바른지 검증한 다음 다시 시도하십시오. 위치 줄:1 문자:1 + C:\Users\orm64\Documents\Scanned Documents + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : ObjectNotFound: (C:\Users\orm64\Documents\Scanned:String) [], CommandNotFoundException + FullyQualifiedErrorId : CommandNotFoundException PS C:\WINDOWS\system32> C:\Users\orm64\Documents\Scanned C:\Users\orm64\Documents\Scanned : 'C:\Users\orm64\Documents\Scanned' 용어가 cmdlet, 함수, 스크립트 파일 또는 실행할 수 있는 프로그램 이름으로 인식되지 않습니다. 이름이 정확 한지 확인하고 경로가 포함된 경우 경로가 올바른지 검증한 다음 다시 시도하십시오. 위치 줄:1 문자:1 + C:\Users\orm64\Documents\Scanned + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : ObjectNotFound: (C:\Users\orm64\Documents\Scanned:String) [], CommandNotFoundException + FullyQualifiedErrorId : CommandNotFoundException PS C:\WINDOWS\system32> pwd Path ---- C:\WINDOWS\system32 PS C:\WINDOWS\system32> C:\Users\orm64\Documents\Scanned Documents C:\Users\orm64\Documents\Scanned : 'C:\Users\orm64\Documents\Scanned' 용어가 cmdlet, 함수, 스크립트 파일 또는 실행할 수 있는 프로그램 이름으로 인식되지 않습니다. 이름이 정확 한지 확인하고 경로가 포함된 경우 경로가 올바른지 검증한 다음 다시 시도하십시오. 위치 줄:1 문자:2 + C:\Users\orm64\Documents\Scanned Documents + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : ObjectNotFound: (C:\Users\orm64\Documents\Scanned:String) [], CommandNotFoundException + FullyQualifiedErrorId : CommandNotFoundException PS C:\WINDOWS\system32> docker compose up -d no configuration file provided: not found PS C:\WINDOWS\system32> docker run hello-world Hello from Docker! This message shows that your installation appears to be working correctly. To generate this message, Docker took the following steps: 1. The Docker client contacted the Docker daemon. 2. The Docker daemon pulled the "hello-world" image from the Docker Hub. (amd64) 3. The Docker daemon created a new container from that image which runs the executable that produces the output you are currently reading. 4. The Docker daemon streamed that output to the Docker client, which sent it to your terminal. To try something more ambitious, you can run an Ubuntu container with: $ docker run -it ubuntu bash Share images, automate workflows, and more with a free Docker ID: https://hub.docker.com/ For more examples and ideas, visit: https://docs.docker.com/get-started/ PS C:\WINDOWS\system32> wsl --update 업데이트 확인 중입니다. Linux용 Windows 하위 시스템 최신 버전이 이미 설치되어 있습니다. PS C:\WINDOWS\system32> docker run hello-world
리텐션 연습 문제 푸는 중에 어려운 점이 있어 질문 남깁니다! click_payment 이벤트 기준으로 cohort 리텐션 분석 쿼리 올바르게 작성했을까요? 유저수의 합계가 0주차일때 안 맞는 거 같습니다... 코호트 분석 시각화 했을 때 저렇게 비어 보이는 경우에는 어떻게 해석하면 좋을까? WITH base AS ( SELECT DISTINCT user_id, event_name, TIMESTAMP_MICROS(event_timestamp) AS event_datetime, DATE(TIMESTAMP_MICROS(event_timestamp)) AS event_date, user_pseudo_id FROM `advanced.app_logs` WHERE event_date > '2022-08-01' AND event_name = 'click_payment' ) ,first_week_data AS ( SELECT DISTINCT user_pseudo_id, DATE_TRUNC(MIN(event_date) OVER(PARTITION BY user_pseudo_id),WEEK(MONDAY)) AS first_week, DATE_TRUNC(event_date,WEEK(MONDAY)) AS event_week FROM base ) ,weeks_after_first_week_data AS ( SELECT *, DATE_DIFF(event_week,first_week,WEEK) AS weeks_after_first_week FROM first_week_data ) ,active_user_count AS ( SELECT first_week, weeks_after_first_week, COUNT(DISTINCT user_pseudo_id) AS active_users FROM weeks_after_first_week_data GROUP BY ALL ) ,cohort_user_count AS ( SELECT *, FIRST_VALUE(active_users) OVER(PARTITION BY first_week ORDER BY weeks_after_first_week) AS cohort_users FROM active_user_count ) SELECT *, ROUND(SAFE_DIVIDE(active_users,cohort_users),2) AS rentention_rate FROM cohort_user_count
안녕하세요 주말 코딩님 강의 잘 듣고 있습니다! 목, 금, 토 이렇게 공부할 수 있는 시간이 3일정도밖에 남지 않은 상황입니다! 혹시 이론 파트 중에 여긴 꼭 확인하고 가라 하는 영역 있으실까요? 프로토콜 종류 결합도/응집도 디자인패턴 보안용어(암호화) 이 정도만 보고 가면 될까요? 선택과 집중이 필요할 것 같아서요!
안녕하세요 강의를 듣는중 추가적으로 tanstack-query를 공부하다가 혼자서 도저히 이해를 할수 없는 부분이 있어서 이 부분에 대해 혹시 조언을 받을수 있을까 싶어 문의드립니다. prefetchQuery가 개인적으로 잘 이해가 안되어서 별도로 프로젝트를 생성하여 기본적인 것부터 다시 공부하고 있었습니다만, tanstack-query 공식사이트에서 권장하던 방법대로 임의적으로 코드를 생성하였더니 router.push()로 다른 페이지에 갔다가(->홈으로[/]) 다시 돌아오는것(->Post페이지(/post))을 반복하다보면 가끔 서버 컴포넌트에 있는 prefetchQuery안의 fetch와 클라이언트 컴포넌트에 있는 useQuery의 fetch가 동시에 실행이 되는 일이 가끔 발생을 해서요. fetch가 이중으로 실행이 되고 있는것 같은데 아무리 코드를 살펴봐도 제가 잘못한 부분을 찾을수가 없어서 조언을 구합니다ㅠ page.tsx import { dehydrate, HydrationBoundary, QueryClient } from '@tanstack/react-query'; import Post from './_component/Post'; import getPostRecommends from './_hook/fetch'; export default async function tanstackQuery() { const queryClient = new QueryClient(); await queryClient.prefetchQuery({ queryKey: ['movies'], queryFn: getPostRecommends, }); const dehydratedState = dehydrate(queryClient); return ( <HydrationBoundary state={dehydratedState}> <Post /> </HydrationBoundary> ); } post.tsx 'use client'; import { useQuery } from '@tanstack/react-query'; import getPostRecommends from '../_hook/fetch'; import { useRouter } from 'next/navigation'; export default function TanstackQuery() { const { data } = useQuery({ queryKey: ['movies'], queryFn: getPostRecommends, }); const router = useRouter(); type PostItem = { id: number; title: string; }; return ( <div> <button onClick={() => router.push('/')}>홈으로</button> {data?.map((item: PostItem) => { return ( <div key={item.id}> <h2>{item.title}</h2> </div> ); })} {data?.message} </div> ); } getPostRecommends export default async function getPostRecommends() { if (typeof window === 'undefined') { console.log('서버에서 fetch 실행' + new Date()); } else { console.log('클라이언트에서 fetch 실행' + new Date()); } const response = await fetch('https://jsonplaceholder.typicode.com/posts?_page=1&_limit=10', { cache: 'no-store', }); if (!response.ok) { throw new Error('Failed to fetch data'); } const res = await response.json(); return res; } 기본 provider 설정 'use client'; import { isServer, QueryClient, QueryClientProvider } from '@tanstack/react-query'; import { ReactNode } from 'react'; import { ReactQueryDevtools } from '@tanstack/react-query-devtools'; function makeQueryClient() { return new QueryClient({ defaultOptions: { queries: { staleTime: 6 * 1000, }, }, }); } type Props = { children: ReactNode }; let browserQueryClient: QueryClient | undefined = undefined; function getQueryClient() { if (isServer) { return makeQueryClient(); } else { if (!browserQueryClient) browserQueryClient = makeQueryClient(); return browserQueryClient; } } export default function Providers({ children }: Props) { const queryClient = getQueryClient(); return ( <QueryClientProvider client={queryClient}> {children} <ReactQueryDevtools /> </QueryClientProvider> ); } 서버 콘솔 브라우저 콘솔 위에 캡쳐화면 같이 fetch가 거의 동시간에 발생을 하고 있는 모습입니다. next.js router cache 때문에 30초마다 서버 컴포넌트쪽이 리랜더링 되어서 페이지를 새로고침을 하지 않고 router.push로 다시 페이지에 들어가도 서버 컴포넌트쪽이 다시 실행된다는건 이해를 했는데, 그렇다면 초기 랜더링할때와 똑같이 데이터가 prefetch되어서 클라이언트쪽 useQuery가 실행이 되지 않아야하지 않나요? 왜 두번이나 fetch가 도는건지 아무리 자료를 찾아봐도 잘 모르겠어서 결국 문의드리게 되었습니다ㅠ
안녕하세요, 영한님 뒤에 있을 채팅 프로그램을 직접 만들어보려다가 난관에 봉착해 질문드립니다. ClientV6 코드 내의 while문을 Thread에 넣는 작업을 진행하였습니다. 아직 클라이언트에서 입력 값을 넣기 전임에도 불구하고 서버에서 EOFException이 나는데 그 이유를 모르겠습니다. 혹시 제가 코드를 잘못 짠 것인지 아님 놓치는 부분이 있는 것인지 한 번 봐주실 수 있나요? public class ClientV6_1 { private static final int PORT = 12345; public static void main(String[] args) throws IOException { log("클라이언트 시작"); try ( Socket socket = new Socket("localhost", PORT); DataInputStream input = new DataInputStream(socket.getInputStream()); DataOutputStream output = new DataOutputStream(socket.getOutputStream()); ) { log("소켓 연결: " + socket); new Thread(new ClientHandler(socket), "ClientHandler").start(); } catch (IOException e) { log(e); } } } public class ClientHandler implements Runnable { private final Socket socket; private final DataInputStream input; private final DataOutputStream output; public ClientHandler(Socket socket) throws IOException { this.socket = socket; this.input = new DataInputStream(socket.getInputStream()); this.output = new DataOutputStream(socket.getOutputStream()); } @Override public void run() { Scanner scanner = new Scanner(System.in); try { while (true) { System.out.print("전송문자: "); String toSend = scanner.nextLine(); // send output.writeUTF(toSend); log("client -> server: " + toSend); if (toSend.equals("exit")) break; // receive String received = input.readUTF(); log("client <- server: " + received); } } catch (IOException e) { e.printStackTrace(); } finally { close(socket); } } }
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. 안녕하세요! 문제와 풀이를 해보다 문득 궁금해졌는데, 혹시 ArrayList 생성할때 List<Integer> list = new ArrayList<>(); ArrayList<Integer> list = new ArrayList<>(); 두개의 차이가 있을까요 ..?
public class ImmutableMain1 { public static void main(String[] args) { ImmutableObj obj1 = new ImmutableObj(10); ImmutableObj obj2 = obj1.add(20); //계산 이후에도 기존값과 신규값 모두 확인 가능 System.out.println("obj1 = " + obj1.getValue()); System.out.println("obj2 = " + obj2.getValue()); } } public class ImmutableMain2 { public static void main(String[] args) { ImmutableObj obj1 = new ImmutableObj(10); obj1.add(20); //계산 이후에도 기존값과 신규값 모두 확인 가능 System.out.println("obj1 = " + obj1.getValue()); // System.out.println("obj2 = " + obj1.add(20).getValue()); //Q.이렇게 하면 안되는지?? } } Main1에서 했던것처럼 obj2를 하나 새로 만들지 않고 2에서 obj1.add(20).getValue() 이렇게 해도 원하는 결과값이 나오는데 새로 obj2를 만드는것과 어떤 차이가 있나요?? Main2에서 저렇게 코드를 쳤을때 인스턴스값을 확인해보니 1과 2가 각각 다른 값이 나오더라고요 ImmutableObj에서 이미 return new ImmutableObj(result);을 사용하고 있어서 이때 인스턴스가 이미 생성되어서 그렇다고 생각하는데 맞을까요?? 그러면 이미 생성되었는데 또 obj2를 다시 만드는 이유는 무엇인가요??
Child obj = new Child();를 해주면 Child생성자가 호출되고 this(7000)를 명시 해주었기 때문에 부모의 기본 생성자가 호출안되고 인자를 받는 Child(int x)가 호출되고 Child(int x)에서는 super같은 키워드가 없으니 이때 부모의 Parent()기본 생성자가 호출되어서 x가 600으로 채워 지는것 아닌가요? 강사님은 new Obj하면 바로 Parent의 기본 생성자를 호출하는 식으로 흐름을 설명하셔서 질문드립니다.