<리스트> <레코드1/> <레코드2/> </리스트> 일 경우… 리스트단에서 use client로 한 후 zustand에서 리스트 자체를 통으로 관리해야하는가? 각각의 레코드에 use client를 한 후 데이터를 받으면 zustand에 리스트를 만들어 레코드별로 hash(Map)으로 등록해 관리해야하는가? 레코드에는 좋아요, 조회수 등이 표시됨. 제 생각은 1번은 SEO가 중요한건 각각 레코드 (상세페이지) 이므로 zustand에서 통으로 넣어 관리하면 되니 구현 및 데이터 신뢰도에서는 나아보이는데 하나바뀌면 전부 렌더링되니까 애매한거같고 2번은 서버에서 모두 다 가져와서 초기속도는 빠르고 seo에 좋으나 zustand에 통으로 못넣고 데이터 자체를 내가 직접관리하는 구조라 구현 및 데이터 신뢰 측면에서는 골치아플거같은데… 무엇이 일반적인 구현방식인지 모르겠습니다. 도와주세요 ㅠㅠ
<리스트> <레코드1/> <레코드2/> </리스트> 일 경우… 리스트단에서 use client로 한 후 zustand에서 리스트 자체를 통으로 관리해야하는가? 각각의 레코드에 use client를 한 후 데이터를 받으면 zustand에 리스트를 만들어 레코드별로 hash(Map)으로 등록해 관리해야하는가? 레코드에는 좋아요, 조회수 등이 표시됨. 제 생각은 1번은 SEO가 중요한건 각각 레코드 (상세페이지) 이므로 zustand에서 통으로 넣어 관리하면 되니 구현 및 데이터 신뢰도에서는 나아보이는데 하나바뀌면 전부 렌더링되니까 애매한거같고 2번은 서버에서 모두 다 가져와서 초기속도는 빠르고 seo에 좋으나 zustand에 통으로 못넣고 데이터 자체를 내가 직접관리하는 구조라 구현 및 데이터 신뢰 측면에서는 골치아플거같은데… 무엇이 일반적인 구현방식인지 모르겠습니다. 도와주세요 ㅠㅠ
<리스트> <레코드1/> <레코드2/> </리스트> 일 경우… 리스트단에서 use client로 한 후 zustand에서 리스트 자체를 통으로 관리해야하는가? 각각의 레코드에 use client를 한 후 데이터를 받으면 zustand에 리스트를 만들어 레코드별로 hash(Map)으로 등록해 관리해야하는가? 레코드에는 좋아요, 조회수 등이 표시됨. 제 생각은 1번은 SEO가 중요한건 각각 레코드 (상세페이지) 이므로 zustand에서 통으로 넣어 관리하면 되니 구현 및 데이터 신뢰도에서는 나아보이는데 하나바뀌면 전부 렌더링되니까 애매한거같고 2번은 서버에서 모두 다 가져와서 초기속도는 빠르고 seo에 좋으나 zustand에 통으로 못넣고 데이터 자체를 내가 직접관리하는 구조라 구현 및 데이터 신뢰 측면에서는 골치아플거같은데… 무엇이 일반적인 구현방식인지 모르겠습니다. 도와주세요 ㅠㅠ
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] Order <-> Member 는 N:1 Order <-> Delivery 는 1:1 관계이며, proxy 객체로 들고오는 것이 목적이 아니기 때문에 fetch join 을 이용하여 바로 데이터를 DB에서 들고 온 거고 OrderItems 는 조회문에서 뺀 다음 Order <-> OrderItmes 1:N Lazy 를 이용하여 proxy 상태로 들고 온 상태에서 .get() 과 같은 함수를 이용해서 그때 데이터를 채워놓은거라고 이해하면 될까요? OrderItems에 데이터가 DB데이터가 채워질 때 N+1 과 같은 문제가 발생하지 않은 건 hibernate.default_batch_fetch_size 또는 @BatchSize 이용하기에 그런 거구요. 그럼 만약에 Order 주문 조회 후 Controller 에서 해당 OrderItems 의 Class 를 확인하면 proxy로 나오게 되고, order.getOrderItems() 와 같이 호출을 하게 되면 OrderItems는 proxy 객체가 아닌 실제 DB조회데이터가 나오게 되는 걸까요??
안녕하세요 제로초님 강의 잘 보고 있습니다. 카카오 로그인을 구현하는 중에 문제가 생겨 어찌해서 해결했는데 해결된 이유가 궁금해서 질문드립니다! 1. 에러로그 TypeError: queryString.stringify is not a function 이라는 에러가 나서 찾아보니 query-string 버전 충돌이 있는 것 같아 query-string을 @7.1.3 버전으로 설치하니 해결이 되었습니다. pnpm-locl.yml을 보니 query-string을 아래와 같이 두 버전을 같이 쓰고 있었습니다. query-string@7.1.3: dependencies: decode-uri-component: 0.2.2 filter-obj: 1.1.0 split-on-first: 1.1.0 strict-uri-encode: 2.0.0 query-string@9.2.0: dependencies: decode-uri-component: 0.4.1 filter-obj: 5.1.0 split-on-first: 3.0.0 2. 사용하고 있는 패키지들 1) @react-native-kakao/core @react-native-kakao/core@2.4.0(expo@53.0.10(@babel/core@7.27.4)(@expo/metro-runtime@5.0.4(react-native@0.79.2(@babel/core@7.27.4)(@types/react@19.0.14)(react@19.0.0)))(react-native-webview@13.13.5(react-native@0.79.2(@babel/core@7.27.4)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0))(react-native@0.79.2(@babel/core@7.27.4)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0))(react-native@0.79.2(@babel/core@7.27.4)(@types/react@19.0.14)(react@19.0.0))(react@19.0.0)': dependencies: crypto-js: 4.2.0 query-string: 9.2.0 react: 19.0.0 2) @react-navigation '@react-navigation/core@7.10.0(react@19.0.0)': dependencies: '@react-navigation/routers': 7.4.0 escape-string-regexp: 4.0.0 nanoid: 3.3.11 query-string: 7.1.3 위의 에러로그에서와 같이 tab layout에 접근하려 할 때 react-navigation의 getPathFromState.js에서 query-string의 import에서 문제가 발생하는 것 같았는데 정확히 어떤 문제인지 잘 모르겠네요.. lockfile과 node_modules를 삭제해도 동일하게 query-string은 두가지 버전으로 설치되었고 만약 package.json에 query-string을 7버전으로 명시적으로 설치하지 않으면 탭 레이아웃의 모든 페이지들에서 저 오류가 납니다. 일단 query-string 패키지 설치를 해서 오류를 해결하긴 했지만 정확한 이유를 모르겠어서 질문드립니다 ! 아래는 GPT에게 질문시 답변한 내용입니다. GPT 답변 내용 query-string@9.x 는 ESM-only라서 CommonJS 방식의 import ( import * as queryString ) 시 undefined 가 반환됨 React Navigation 내부의 getPathFromState.ts 에서 queryString.stringify(...) 호출 시 에러 발생 의존성 충돌로 인해 런타임 크래시가 발생하는 것으로 보임 ❓ 질문드리고 싶은 점 이러한 충돌을 예방하기 위한 공식적인 방법은 무엇인가요? (예: pnpm.overrides 로 강제 버전 고정) 혹시 다른 라이브러리에서도 이와 같은 ESM-CJS 충돌을 방지하기 위한 일반적인 best practice가 있을까요? // package.json "dependencies": { "@expo/vector-icons": "^14.1.0", "@react-native-async-storage/async-storage": "2.1.2", "@react-native-kakao/core": "^2.4.0", "@react-native-kakao/user": "^2.4.0", "@react-navigation/bottom-tabs": "^7.3.10", "@react-navigation/elements": "^2.3.8", "@react-navigation/native": "^7.1.6", "@rneui/themed": "4.0.0-rc.8", "@supabase/supabase-js": "^2.49.9", "expo": "~53.0.9", "expo-blur": "~14.1.4", "expo-build-properties": "~0.14.6", "expo-constants": "~17.1.6", "expo-dev-client": "~5.1.8", "expo-font": "~13.3.1", "expo-haptics": "~14.1.4", "expo-image": "~2.1.7", "expo-linking": "~7.1.5", "expo-router": "~5.0.6", "expo-splash-screen": "~0.30.8", "expo-status-bar": "~2.2.3", "expo-symbols": "~0.4.4", "expo-system-ui": "~5.0.7", "expo-web-browser": "~14.1.6", "query-string": "^7.1.3", "react": "19.0.0", "react-dom": "19.0.0", "react-native": "0.79.2", "react-native-gesture-handler": "~2.24.0", "react-native-reanimated": "~3.17.4", "react-native-safe-area-context": "5.4.0", "react-native-screens": "~4.11.1", "react-native-url-polyfill": "^2.0.0", "react-native-web": "~0.20.0", "react-native-webview": "13.13.5", "zustand": "^5.0.5" },
안녕하세요! JVM 파트를 복습하다가 궁금한 점이 생겨 질문드립니다. Young Generation(Eden → S0 ↔ S1) → Old Generation → Permanent 영역으로 객체가 이동하는 과정에서 객체의 age가 세대 간 이동(Eden → S0 ↔ S1 포함)을 거치며 증가한다고 설명해주셨습니다. 그런데 제가 알고 있기로 age는 Young Generation 내의 Survivor 영역(S0 ↔ S1)을 이동할 때에만 증가하는 것으로 알고 있습니다. age는 객체가 Minor GC를 거쳐 살아남은 횟수로 일반적으로 약 15회 생존하면 Old Generation으로 승격될 수 있는 조건이 되고, Old Generation으로 승격된 이후에는 더 이상 age가 증가하지 않는다고 알고 있습니다. 혹시 이 동작 방식이 JVM 구현체에 따라 달라질 수 있는 부분인지 아니면 제가 알고 있는 age는 다른 age인 것인지 궁금해서 질문드립니다:)
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문 전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 드디어 자바 완강을 했는데 중급 1~2 와 고급 1은 두번씩 들었고 고급2도 혼자서 채팅프로그램,네트워크 이런거 다 만들어보긴 했는데 이거 공부하는동안 또 기억이 잘 안나더라구요 ㅎㅎ.. 람다도 이제 어느정도 다 읽고 쓸줄은 아는데 자세한 메서드는 기억이 안나는 것도 많고, 다운 스트림 같은 경우에도 기억이 가물가물하고요.. 일주일에 한번씩 강의 마다 요약노트 작성한거 읽고 있긴한데 이대로 한번 쭉 읽고 스프링으로 넘어가는게 나을까요 아니면 자바를 좀 더 봐야할까요??
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문 전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] package io.member.impl; import io.member.Member; import io.member.MemberRepository; import java.io .*; import java.util.ArrayList; import java.util.List; public class ObjectMemberRepository implements MemberRepository { private static final String FILE_PATH = "temp/members-obj.dat"; @Override public void add(Member member) { List<Member> members = findAll(); members.add(member); try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(FILE_PATH))){ oos.writeObject(members); } catch (IOException e) { throw new RuntimeException(e); } } @Override public List<Member> findAll() { try(ObjectInputStream ois = new ObjectInputStream(new FileInputStream(FILE_PATH))){ Object findObject = ois.readObject(); return (List<Member>) findObject; } catch (FileNotFoundException e) { return new ArrayList<>(); } catch (IOException | ClassNotFoundException e) { throw new RuntimeException(e); } } } 코드 동일하게 작성했는데 콘솔 메인에서 마지막 나이를 작성하니 Exception in thread "main" java.lang.RuntimeException: java.io .NotSerializableException: io.member.Member at io.member.impl.ObjectMemberRepository.add(ObjectMemberRepository.java:22) at io.member.MemberConsoleMain.registerMember(MemberConsoleMain.java:52) at io.member.MemberConsoleMain.main(MemberConsoleMain.java:26) Caused by: java.io .NotSerializableException: io.member.Member at java.base/ java.io .ObjectOutputStream.writeObject0(ObjectOutputStream.java:1121) at java.base/ java.io .ObjectOutputStream.writeObject(ObjectOutputStream.java:336) at java.base/java.util.ArrayList.writeObject(ArrayList.java:949) at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104) at java.base/java.lang.reflect.Method.invoke(Method.java:565) at java.base/ java.io .ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:946) at java.base/ java.io .ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1431) at java.base/ java.io .ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1353) at java.base/ java.io .ObjectOutputStream.writeObject0(ObjectOutputStream.java:1115) at java.base/ java.io .ObjectOutputStream.writeObject(ObjectOutputStream.java:336) at io.member.impl.ObjectMemberRepository.add(ObjectMemberRepository.java:20) ... 2 more 이런 예외가 발생합니다
Next.js 완벽 마스터 (v15): 노션 기반 개발자 블로그 만들기 (with 커서AI)
안녕하세요. 강의 내용과 다르게 author 데이터가 안나와서 콘솔로그 찍어서 확인해보니, properties.Author.people 항목에 name이 없네요. 다른 데이터는 조회되고 있는데 왜 안나오는지 도저히 답을 찾을 수 없네요. 공식문서 봐도 응답형식 같은게 바뀐건 아닌것 같아보입니다. AI Assistant에 여러번 질문해봐도 명확한 해결책을 찾지 못했습니다. 이 부분때문에 진도를 나가기 쉽지 않은 상황인데 빠른 답변 부탁드립니다.
yarn serve로 production 빌드시에 Cannot find module /lecture-1/node_modules/serve/bin/serve.js' 에러가 발생합니다. https://github.com/performance-lecture/lecture-1 여기서 해당 패키지 clone 하고 yarn으로 serve 실행시에 이같은 에러가 발생하는 것 같은데요. 이거 해결 방법이 있을까요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문 전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 섹션 12 - HTTP 서버 만들기 강의자료 26페이지 HttpResponse코드에 setStatus() 메서드 이름이 setStatusCode()인 것 같은데 "Code"가 빠져있어요. 그래서 강의자료 30페이지에 있는 HttpRequestHandlerV4코드 notFound()메서드에서도 setStatusCode가 아닌 setStatus로 작성되어 있습니다!
(OrderSpecifier)관련 내용 어디있을가요 섹션7에서 스프링 데이터 JPA는 자신의 정렬(Sort)을 Querydsl의 정렬(OrderSpecifier)로 편리하게 변경하는 기능을 제공한 다. 이 부분은 뒤에 스프링 데이터 JPA가 제공하는 Querydsl 기능에서 살펴보겠다. 37. 스프링 데이터 페이징 활용3 - 컨트롤러 개발 -> 여기 챕터에서 뒤에 강의에서 설명하겠다하셨는데 어디 강의일까요.. 섹션8에 OrderSpecifier관련 내용은 없는거같은데요,,?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문 전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. 메인에서 IOException 을 던지는 이유는 ServerSocket 때문인거 같은데 예외를 발생시키는 항목들을 try문에 넣고 throws IOException을 삭제하면 안돼나요? 아니면 다른의미가 있는건지 궁금합니다. public class ServerV6 { private static final int PORT = 12345; public static void main(String[] args) throws IOException { log("서버 시작"); SessionManagerV6 sessionManager = new SessionManagerV6(); ServerSocket serverSocket = new ServerSocket(PORT); log("서버 소켓 시작 - 리스닝 포트: " + PORT); // ShutdownHook 등록 ShutdownHook shutdownHook = new ShutdownHook(serverSocket, sessionManager); Runtime.getRuntime().addShutdownHook(new Thread(shutdownHook, "shutdown")); try { while (true) { Socket socket = serverSocket.accept(); // 블로킹 log("소켓 연결: " + socket); SessionV6 session = new SessionV6(socket, sessionManager); Thread thread = new Thread(session); thread.start(); } } } catch (IOException e) { log("서버 소캣 종료: " + e); }
버전 npm ls react 19.0.0 npm ls react-native 0.79.2 npm ls expo 53.0.9 안녕하세요 다크모드 UI를 깃허브에서 복사했는데 전까지 잘 되던 app/(tabs)/_layout.tsx 에서 post 탭을 안보이게 하는 코드가 제대로 작동하지 않습니다. 기기에서도 (post)/[us... 경로의 탭이 보이고 있습니다. 그 뒤로 제 예전 코드로 다시 돌려봐도 탭이 사라지지 않고 계속 보이는데, 어디서부터 꼬인건지 감이 안잡힙니다ㅠ 문제가 발생한 걸로 추측되는 코드입니다. <Tabs.Screen name="(post)/[username]/post/[postID]" options={{ href: null, }} />
프라이빗 컴포넌트로 잡은 것과 그냥 컴포넌트로 잡은 것의 차이가 없지 않나요? 컴포넌트를 예로 강의를 찍어 주셨는데 폴더만 더 늘어나고 좋은 예는 아닌듯합니다. 프라이빗 폴더가 어떨 때 왜 필요한지를 알려주는게 더 교육적일 것 같아 글 남깁니다. 컴포넌트 자체가 재사용성을 갖는 것이기에 내부 구성요소만 표기하는 프라이빗은 큰 의미가 없을 것 가은데요. 컴포넌트 외 폴더라고 해도 와닿지는 않습니다. 어차피 컴포넌트로 사용하면 uri 에도 잡히지 않고 말이죠. 전체적으로 폴더 구조만 더 복잡해지는 것 같아요
스프링 데이터 JPA는 자신의 정렬(Sort)을 Querydsl의 정렬(OrderSpecifier)로 편리하게 변경하는 기능을 제공한 다. 이 부분은 뒤에 스프링 데이터 JPA가 제공하는 Querydsl 기능에서 살펴보겠다. 37. 스프링 데이터 페이징 활용3 - 컨트롤러 개발 -> 여기 챕터에서 뒤에 강의에서 설명하겠다하셨는데 어디 강의일까요..답변부탁드릴게요 섹션8에 OrderSpecifier관련 내용은 없는거같은데요,,?
처음에 제로초님 따라한다고 pnpm build --platform android --profile development 로 한 번 실행을 했습니다. 이 때 go 를 설치하라는 말이 안나와서 '뭔가 이상하다' 했는데요. 이후에는 pnpm run android 로 켜면 development 로 켜집니다. 신기한 건 s 를 누르면 expo go 모드로는 잘 넘어가요. 그런데 Expo Go 앱이 보이지 않아 빌드를 선택해볼 수 가 없습니다. .