안녕하세요.
코딩 교육 크리에이터 짐코딩 입니다 🙂
유튜브에서 코딩 교육 "짐코딩 GYM CODING"채널을 운영하고 있으며,
인프런 교육 플랫폼에서 프로그래밍 지식을 공유하고 있습니다.
제 강의의 특징은 이제 막 시작하시는 분들을 위하여
설명하고자 할 때는 최대한 쉽게,
알려드리고자 할 때는 최대한 알차게 설명드립니다.
항상 수강생 입장에서 생각하는 코딩 교육 크리에이터가 되겠습니다.
감사합니다.
📨 이메일 bruce.lean17@gmail.com
🏋️♀️ 헬스타그램 @helinlee.gram
🧑💻 코딩스타그램 @gymcoding
講義
受講レビュー
- Next.js 完全マスター (v15): Notionベース 開発者ブログの作り方 (with Cursor AI)
- React を完全にマスター: 基本概念から Lean Canvas プロジェクトまで
- React を完全にマスター: 基本概念から Lean Canvas プロジェクトまで
- Next.js 完全マスター (v15): Notionベース 開発者ブログの作り方 (with Cursor AI)
投稿
Q&A
setter 함수 전개구문
안녕하세요! 😊JavaScript 객체의 속성 덮어쓰기 규칙 때문입니다.JavaScript에서는 같은 키가 여러 번 나오면 마지막 값이 덮어쓰여져요!// 현재 form 상태가 이렇다고 가정해볼게요 const form = { title: "기존 제목", content: "기존 내용" }; // ✅ 올바른 방법 (전개구문 먼저) const newForm = { ...form, // 기존 모든 값 복사 title: "새로운 제목" // title만 새 값으로 덮어쓰기 }; // 결과: { title: "새로운 제목", content: "기존 내용" } // ❌ 잘못된 방법 (전개구문 나중에) const wrongForm = { title: "새로운 제목", // 이 값을 설정했지만... ...form // 전개구문이 다시 덮어버림! }; // 결과: { title: "기존 제목", content: "기존 내용" } 이 패턴은 React에서 표준 방식이니까 계속 사용하시다 보면 자연스럽게 손에 익으실 거예요! 👍
- 0
- 2
- 11
Q&A
모바일 사이즈에 대해 질문있습니다.
안녕하세요 🙂max-width 를 사용해서 최대 너비를 지정하시고요flexbox 나 mx-auto 와 같이 요소를 중앙에 배치할 수 있는 스타일을 적용하시면 돼요!팁을 말씀 드리면 원하는 사이트가 있다면 해당 사이트에거 개발자도구로 어떤 스타일이 적용되었는지 디버깅 하시면 보다 쉽게 접근할 수 있을 거예요 👍
- 0
- 1
- 18
Q&A
unstable_cache 사용 시 적정 revalidate 값 문의
서비스 특성에 따라 달라지는 것 같습니다.일반적인 가이드라인:개인 블로그: 5-10분 (300-600초) - 글 발행 빈도가 낮아서쇼핑몰 상품: 1-5분 - 재고/가격 변동 빈도에 따라 고려사항:글 작성 빈도 (일주일에 1-2개면 10분도 괜찮을 것 같고)사용자 기대치 (즉시 반영을 원하는지서버 부하 (Notion API 호출 비용) 우선 revalidate 값은 초기에 원하는 값으로 설정하시고 유지를 하며 최적의 값으로 변경하시면 될 것 같습니다.
- 0
- 2
- 20
Q&A
git hub 브렌치 강의내용 21~24쪽의 내용이 없네요
혹시 아래 repository 말씀하시는 걸까요~?https://github.com/gymcoding/learn-react (사진)
- 0
- 2
- 18
Q&A
useActionState에서 반환값 필드 생략 시 조건에 따라 에러 발생 여부가 다른 이유
이건 TypeScript의 타입 추론 방식 때문인 것 같습니다.추측해보면:if 문은 TypeScript가 정적 분석할 수 있어서 반환 타입을 엄격하게 검사하는 것 같고try-catch는 런타임에만 실행되다 보니 TypeScript가 catch 블록의 타입 검사를 덜 엄격하게 하는 것 같습니다또 다른 가능성:useActionState의 초기 state 타입 추론이 첫 번째 반환값을 기준으로 고정되는 것일 수도 있고컴파일러가 실행 경로별로 다르게 타입 검사를 하는 것일 수도 있습니다정확한 이유는 React나 TypeScript의 내부 구현을 봐야 알 것 같은데, 안전하게는 모든 반환 객체에서 같은 필드 구조를 유지하는 게 좋을 것 같습니다~!
- 0
- 2
- 17
Q&A
짐코딩님..! unplugin-vue-router/vite 적용 최근방식 부탁드령요 ㅜㅜ
아래 사항을 체크해 보시겠어요?공식 문서를 보니 핵심 문제가 보입니다:router/index.js 수정import { defineRouter } from '#q-app/wrappers' import { createRouter, createMemoryHistory, createWebHistory, createWebHashHistory } from 'vue-router' import { routes } from 'vue-router/auto-routes' // 자동 생성된 routes 가져오기 export default defineRouter(function (/* { store, ssrContext } */) { const createHistory = process.env.SERVER ? createMemoryHistory : (process.env.VUE_ROUTER_MODE === 'history' ? createWebHistory : createWebHashHistory) const Router = createRouter({ scrollBehavior: () => ({ left: 0, top: 0 }), routes, // 자동 생성된 routes 사용 history: createHistory(process.env.VUE_ROUTER_BASE) }) return Router }) quasar.config.js에서 플러그인 순서vitePlugins: [ VueRouter({ }), // Vue 관련 플러그인들은 VueRouter 뒤에 와야 함 ['vite-plugin-checker', { /* ... */ }, { server: false }] ] 기존 routes.js 파일 삭제하고 개발 서버 재시작해보세요.
- 0
- 3
- 22
Q&A
private component 관련 질문
안녕하세요 🙂네, pages/about/_components/ 경로에 배치하는 것도 좋은 방법입니다.다만 팀이나 프로젝트마다 다른 방식을 사용하기도 해요:pages/about/_components/ - 페이지별 분리pages/_components/about/ - 카테고리별 분리components/about/ - 별도 폴더 구조일관성만 유지하면 어떤 방식이든 괜찮습니다.
- 0
- 2
- 23
Q&A
강의교안 노션에 접속이 안되요
아직도 접속이 안되시나요?https://gymcoding.notion.site/acf439e5e4b04e079104439153a7f223
- 0
- 2
- 30
Q&A
블로그 목록 조회 시 author 데이터 안나오는 현상
실제 노션 블로그 데이터베이스에 Author 를 설정 하셨을까요~?코드는 이슈가 없는 거 같은데요 노션 설정 또는 계정쪽에서 확인해 봐야 할 것 같아요.- Author 속성에 사용자를 지정했는지- 노션에 사용자 계정(이름 등) 정확히 설정이 되어 있는지
- 0
- 1
- 35
Q&A
getPostMetadata 내부 함수에서 클로저를 활용하는 방식이 더 나은 선택일까요?
안녕하세요 🙂정말 좋은 질문이네요! 코드 설계에 대해 이렇게 깊이 고민하시는 모습이 인상적입니다. 👍강의에서는 그냥 더 간단해 보여서 클로저 방식을 선택했습니다. 😅두 방식 비교클로저 방식 (강의에서 사용):매개변수 안 넘겨도 되니까 간편함코드가 짧아서 보기 좋음매개변수 방식:함수가 뭘 필요로 하는지 명확함테스트하기 쉬움선택 기준// 간단한 로직 + 한 곳에서만 사용 → 클로저 OK const getCoverImage = () => page.cover?.url || ''; // 여러 변수 접근이 필요할 때도 클로저가 편함 const getMetaDescription = () => { const title = page.properties.title?.title[0]?.plain_text || ''; const excerpt = page.properties.excerpt?.rich_text[0]?.plain_text || ''; return excerpt || `${title}에 대한 포스트입니다.`; }; // 복잡한 로직 + 재사용 가능성 → 매개변수가 나음 const getCoverImage = (cover) => { /* 복잡한 처리 */ }; 결론현재 상황에서는 둘 다 괜찮습니다.클로저든 매개변수든 동작은 똑같고, 이 정도 간단한 함수에서는 큰 차이 없어요. 너무 깊게 고민하지 마시고, 팀 컨벤션이나 개인 취향에 따라 선택하시면 됩니다! 👍
- 0
- 1
- 28