안녕하세요 원시타입과 객체타입 강의를 보다가 궁금한점이 생겨 질문을 드립니다. let p1 = 1; let p2 = p1; p2 = 2; 이렇게 1에서 2로 재할당을 하면 메모리상에는 원래 1이 있었는데 새로운 메모리에 2가 추가가 되면서 해당 공간을 가리키는데 메모리 공간에 저장되어 있던 1은 수정되지 않는다...라고 이해하고 있습니다. 그럼 여기서 1은 수정만 되지 않을 뿐 없어지지 않고 그대로 1이 저장이 되어있는건가요? 그리고 객체타입에서는 값을 변경하면 원본이 바로 변경되므로 안전하게 ... 스프레드로 값을 복사해서 사용한다라는 설명이 맞나요?
안녕하세요. useMemo와 useCallback에 대한 사용 시기에 관련해서 여쭤보고싶습니다. useMemo와 useCallback을 사용한다면 특정상황을 제외하고, 기억된 값 또는 함수를 사용하여 성능을 올릴 수 있다는 부분까지 이해했습니다. 질문 드리고 싶은 부분은 useMemo를 "복잡한 함수", 불필요하게 다시 실행되는 함수의 결과값을 저장하기 위해, useCallback은 함수의 생성 비용이 "크다"라고 생각될때 사용하는 것이라고 이해중인데, 이때 "복잡한"과 "크다"의 기준이 무엇인지 알고 싶습니다. "복잡한"과 "크다"에 수치, 기준이 존재하는지 궁금합니다. 정확한 수치가 있는것인지, 주관적인것인지에 대해 알고 싶습니다. 감사합니다.
안녕하세요 강의 잘 보고 있습니다. 보이지 않는 임시 객체 9:48초에 질문이 있습니다. 자바 컴파일러가 String s1 = "Java";를 String s1 = new String("Java");로 변환한다고 하셨는데 자바 컴파일러는 변환 하는것이 아닌걸로 이해하고 있어요.. String은 리터럴 방식과 객체 생성 방식이 다르게 관리되고 있는걸로 알고 있는데 혹시 제가 잘못 이해를 하고 있는건가 싶어서요.
안녕하세요 강의 너무 잘 보고 있습니다. 강의를 듣다가 Async와 await에 대해 질문이 있습니다. api요청과 같이 시간이 걸리는 작업은 비동기로 이루어지기 때문에 다른 작업이 먼저 이루어지고 그다음 데이터가 불러오면 그 작업을 해야되므로 비동기로 만들어 주기 위해 async를 붙인다 까지는 이해가 되는데 await은 비동기 작업까지 다 처리되고 결과값을 얻기 위해 사용이 되는건가요? 마지막으로 async는 함수 앞에 작성이 되는데 await은 어디에 작성이 되는것인지 궁금합니다.
안녕하세요. debounce 함수 테스트 관련 강의를 보고 궁금한 점이 있어 문의드립니다. debouncedFn이 300ms이 지난 후 실행되어야 함을 테스트할 때, 기존에 작성해주신 것 처럼 테스트할 시에는 함수가 300ms 후가 아닌 즉시 실행이 되거나 그보다 작은 시간이 지나고 실행이 되어도 테스트가 통과하게 됩니다. 그에 따라 아래처럼 작성하는 것이 더 정확한 테스트라고 생각이 되는데 이렇게 테스트하지 않는 이유가 있는지 궁금합니다! it('특정 시간이 지난 후 함수가 호출된다.', () => { const spy = vi.fn(); const debouncedFn = debounce(spy, 300); debouncedFn(); expect(spy).not.toHaveBeenCalled(); // 즉시 호출되지 않았는지 확인 vi.advanceTimersByTime(299); expect(spy).not.toHaveBeenCalled(); // 299ms 후에도 호출되지 않았는지 확인 vi.advanceTimersByTime(1); expect(spy).toHaveBeenCalledTimes(1); // 300ms 후에 정확히 한 번 호출되었는지 확인 expect(spy).toHaveBeenCalled(); });
const express = require('express') const app = express() const port = 5000 const mongoose = require('mongoose') mongoose.connect('mongodb+srv://newlifecode:1234@newlifecode.f0tau.mongodb.net/test?retryWrites=true&w=majority&appName=newlifecode' , { useNewUrlParser: true, useUnifiedTopology: true, }) .then(() => console.log('MongoDB Connected...')) .catch(err => console.error('MongoDB Connection Error:', err.message)); app.get('/', (req, res) => { res.send('Hello World!') }) app.listen(port, () => { console.log(`Example app listening on port ${port}`) }) PS C:\Users\USER\Documents\boiler-plate> npm run start > boiler-plate@1.0.0 start > node index.js (node:7628) [MONGODB DRIVER] Warning: useNewUrlParser is a deprecated option: useNewUrlParser has no effect since Node.js Driver version 4.0.0 and will be removed in the next major version (Use `node --trace-warnings ...` to show where the warning was created) (node:7628) [MONGODB DRIVER] Warning: useUnifiedTopology is a deprecated option: useUnifiedTopology has no effect since Node.js Driver version 4.0.0 and will be removed in the next major version node:events:496 throw er; // Unhandled 'error' event ^ Error: listen EADDRINUSE: address already in use :::5000 at Server.setupListenHandle [as _listen2] (node:net:1907:16) at listenInCluster (node:net:1964:12) at Server.listen (node:net:2066:7) at Function.listen (C:\Users\USER\Documents\boiler-plate\node_modules\express\lib\application.js:635:24) at Object.<anonymous> (C:\Users\USER\Documents\boiler-plate\index.js:19:5) at Module._compile (node:internal/modules/cjs/loader:1546:14) at Object..js (node:internal/modules/cjs/loader:1689:10) at Module.load (node:internal/modules/cjs/loader:1318:32) at Function._load (node:internal/modules/cjs/loader:1128:12) at TracingChannel.traceSync (node:diagnostics_channel:315:14) Emitted 'error' event on Server instance at: at emitErrorNT (node:net:1943:8) at process.processTicksAndRejections (node:internal/process/task_queues:90:21) { code: 'EADDRINUSE', errno: -4091, syscall: 'listen', address: '::', port: 5000 } Node.js v22.11.0 PS C:\Users\USER\Documents\boiler-plate> npm run start > boiler-plate@1.0.0 start > node index.js (node:860) [MONGODB DRIVER] Warning: useNewUrlParser is a deprecated option: useNewUrlParser has no effect since Node.js Driver version 4.0.0 and will be removed in the next major version (Use `node --trace-warnings ...` to show where the warning was created) (node:860) [MONGODB DRIVER] Warning: useUnifiedTopology is a deprecated option: useUnifiedTopology has no effect since Node.js Driver version 4.0.0 and will be removed in the next major version node:events:496 throw er; // Unhandled 'error' event ^ Error: listen EADDRINUSE: address already in use :::5000 at Server.setupListenHandle [as _listen2] (node:net:1907:16) at listenInCluster (node:net:1964:12) at Server.listen (node:net:2066:7) at Function.listen (C:\Users\USER\Documents\boiler-plate\node_modules\express\lib\application.js:635:24) at Object.<anonymous> (C:\Users\USER\Documents\boiler-plate\index.js:19:5) at Module._compile (node:internal/modules/cjs/loader:1546:14) at Object..js (node:internal/modules/cjs/loader:1689:10) at Module.load (node:internal/modules/cjs/loader:1318:32) at Function._load (node:internal/modules/cjs/loader:1128:12) at TracingChannel.traceSync (node:diagnostics_channel:315:14) Emitted 'error' event on Server instance at: at emitErrorNT (node:net:1943:8) at process.processTicksAndRejections (node:internal/process/task_queues:90:21) { code: 'EADDRINUSE', errno: -4091, syscall: 'listen', address: '::', port: 5000 }
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 안녕하세요! 강의 정말 잘 듣고 있습니다. MemoryMemberRepository클래스의 save() 메소드에 대해서 궁금한게 있습니다. @Override public Member save(Member member) { member.setId(++sequence); store.put(member.getId(), member); return member; } 여기서 리턴값에 멤버를 그대로 반환하는데요, 이러면 외부에서 member값을 변형할 수 있고 그 변형이 DB에 저장된 값에도 영향을 미치는 위험이 있지 않나 해서요. return new Member(member); 이런식으로 하는게 더 나은 방법이 아닌가 싶어서 여쭤봅니다.
안녕하세요 조은님! 강의 즐겁게 수강했습니다 🤓 다른게 아니라 배포 후 발견한 문제 때문에 질문 드립니닷! 로컬에서는 문제없이 새로고침할 때마다 조회수가 1씩 증가하는데용 배포 후에는 조회수가 3씩 증가 하고 있습니닷 🤔 (포스팅 갯수도 3개여서 관련이 있을 거라고 생각되는데욤..) 제 코드는 강의와 약간 다른 점이 있습니닷! 현재 Vercel 에서는 기존 Vercel Postgres를 대체하는 Neon Marketplace 통합으로 변경되었는데요 (자세히는 잘 모르겠습니닷.. 관련 링크를 첨부합니닷..) https://vercel.com/docs/storage/vercel-postgres https://vercel.com/changelog/neon-now-available-on-vercel-marketplace 그래서 강의와는 다른 import { neon } from "@neondatabase/serverless"; 를 불러와서 사용 중입니닷 "use server"; import { neon } from "@neondatabase/serverless"; import { unstable_noStore as noStore } from "next/cache"; const sql = neon(`${process.env.DATABASE_URL}`); export async function getViewsCount(): Promise< { slug: string; count: number; }[] > { if (!process.env.POSTGRES_URL) { return []; } noStore(); const rows = await sql` SELECT slug, count FROM views `; return rows.map((row) => ({ slug: row.slug, count: row.count, })); } export const incrementView = async (slug: string) => { noStore(); await sql` INSERT INTO views (slug, count) VALUES (${slug}, 1) ON CONFLICT (slug) DO UPDATE SET count = views.count + 1; `; }; 다른 분들도 저와 비슷한 오류가 생길지 궁금한데용.. 혹시 배포 후 조회수 증가를 확인해주실 수 있을까용..? 감사합니다!
안녕하세요, 강좌들으며, msw를 프로젝트에 도입하다 궁금한점이 있어 남깁니다! 현재 위와 같이 코드를, 작성하여, 로그인 성공시, 위와 같이, 데이터와, 쿠키를 동시에 세팅해주고 있는 상황입니다! 실제로 아래와 같이, response들은 잘 넘어오나 response headers에 쿠키가, 오지 않아, 실제로 스토리지에 쿠키가 담기지 않습니다! 원래, 가상으로 심어주는 쿠키는, 브라우저의 쿠키에 담기지 않는건가요?? 궁금하여 질문남깁니다!! 좋은 강의 감사합니다!
19:28 문제 vegetables = {"carrot", "broccoli", "spinach", "carrot", "lettuce"} set 형태는 중복을 불가하지 않나요? carrot이라는 값이 이미 2개 존재하는 모순이 생깁니다. 아니면 어떤 것이 중복 불가한가요? 제가 무엇을 잘못 알고 있나요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 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. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 전체 가격 합을 출력하는 부분(26~28번째 줄)에 대한 질문입니다. 강의에서는 해당 부분을 내부에서만 사용되는 메서드를 만들어 호출했는데, 저는 메서드 대신 위 사진에 sum이라는 변수를 private로 선언하여 작성하였습니다. 코드 동작에는 문제가 없는 것으로 확인되는데 이렇게 작성하는 건 지양하는 방법인지 궁금해서 질문합니다!
프로젝트를 진행하면서 MultipleBagFetchException 예외를 만나 예전에 영한님 강의에서 해결법 같은게 생각나서 다시 강의를 듣고 아래와 같이 default_batch_fetch_size 옵션으로 문제를 해결하려 했으나 여전히 MultipleBagFetchException 예외가 발생해 질문합니다. jpa: hibernate: ddl-auto: update properties: hibernate: default_batch_fetch_size: 1000 2개 이상의 OneToMany 엔티티에 Fetch Join을 선언했을때 MultipleBagFetchException가 발생함을 인지했고 이러한 문제를 해결하기 위해 default_batch_fetch_size 옵션도 추가 했으나 여전히 MultipleBagFetchException가 발생합니다. 혹시 몰라 SELECT 쪽에 DISTINCT도 추가했으나 여전히 예외가 발생합니다.
안녕하세요 조은님! 앞서 작성했던 질문 글에 다 작성하며 너무 길어질 것 같아 이렇게 나눠서 적게 되었습니다 ㅎㅎ; Q3. 강의에서 즉시 실행함수는 스코프를 제한해주기 위해서 사용한다고 이해를 했는데, 이건 혹시 모를 변수 중복 위험을 제한하기 위해서일까요?? 이 외에도 강사님께서 즉시 실행 함수를 사용하는 일반적인 케이스나 즉시 실행함수를 사용하면 좋은 케이스들이 있다면 배워가고 싶습니다! Q4. 추가로 dangerouslySetInnerHTML를 사용하는 이유에 대해서 여쭤보고 싶습니다! 제가 찾아봤을 때는 React에서 HTML 사용에 위험성을 알리기 위해서는 dangerouslySetInnerHTML를 사용해라. 라는 것까지는 확인을 했습니다! 하지만 기능적으로 특별한 기능을 하는 것 같지는 않은데.. dangerouslySetInnerHTML이 사용되는 다른 이유가 있을지에 대해 여쭤보고 싶습니다!
안녕하세요. 조은님 :) 이번에 다크 모드 관련 내용을 수강하면서 head 태그를 작성하는 부분에서 작은 의문이 생겨 질문 드리게 되었습니다. Q1. 이번 강의 중 다크모드 설정을 localStorage에서 가져오는 부분에서 head에서 script를 사용하는 이유에 대해서 알 수 있을까요?? fouc 문제를 막기위해서 저렇게 사용한다고 검색을 통해 알게 되었는데, 이 의도 맞을지 혹시 또 다른 이유가 있을지에 대해서 여쭤보고 싶습니다! Q2. 이어지는 질문으로 관련해서 공부를 하다보니 NextJS에서 제공하는 Head tag와 Script tag가 있는 걸 알게 되었습니다. 혹시 해당 태그들을 사용하지 않고 순수 HTML로 작성하신 이유에 대해서 궁금증이 생겨 여쭤보고 싶습니다! 가능하다면 두 개의 차이점에 대해서도 여쭤보고 싶습니다!