안녕하세요.
코딩 교육 크리에이터 짐코딩 입니다 🙂
유튜브에서 코딩 교육 "짐코딩 GYM CODING"채널을 운영하고 있으며,
인프런 교육 플랫폼에서 프로그래밍 지식을 공유하고 있습니다.
제 강의의 특징은 이제 막 시작하시는 분들을 위하여
설명하고자 할 때는 최대한 쉽게,
알려드리고자 할 때는 최대한 알차게 설명드립니다.
항상 수강생 입장에서 생각하는 코딩 교육 크리에이터가 되겠습니다.
감사합니다.
👨🏫인프런 지식 공유자 | 수강생 24,000+ | 강의평점 ⭐️4.9
📹짐코딩 유튜브 채널 운영 | 구독자 25,000+
💻 짐코딩 클럽 | gymcoding.co
🔗 GitHub: https://github.com/gymcoding
🧑💻 인스타그램 @gymcoding
📨 이메일 bruce.lean17@gmail.com
Courses
Reviews
- [Latest] The Ultimate Vue Lecture: Nuxt 3 Perfect Mastery
- Vue3 Perfect Mastery: From Basics to Practice - "Basics"
- Next.js Complete Mastery (v15): Building a Notion-Based Developer Blog (with Cursor AI)
- Front-end Wings: Knowledge You Must Know Before Learning Vue and React
- Vue3 Perfect Mastery: From Basics to Practice - "Practical Edition"
Posts
Q&A
커서 UI 변경
안녕하세요! 소중한 피드백 감사드립니다 😊커서 AI의 업데이트 속도는 AI 도구들 중에서도 정말 빠른 편이에요. 거의 매주 업데이트 되는 것 같습니다. 다행히도 이 강의는 실제 AI 개발 워크플로우를 모두 클로드 코드로 진행하도록 설계되어 있어요 🥹 커서 AI는 파일 구조 확인, 코드 확인 및 편집을 위한 단순한 에디터 역할만 담당하고 있습니다.그래서 커서 AI가 업데이트되어도 강의를 수강하시는 데는 문제없으실 거예요! 강의의 핵심 내용과 워크플로우는 그대로 유지되니, 안심하고 학습하셔도 됩니다.혹시 커서 업데이트로 인해 강의 수강하는 데 어려움이 있으시거나, 커서 AI에 대한 궁금한 사항이 있으시다면 질의응답 게시판에 남겨주세요. 즉시 답변 드리고 필요한 부분은 보완 영상을 준비하겠습니다! 💪감사합니다 🙏
- 0
- 2
- 16
Q&A
terminal-setup 불가 문의
/terminal-setup 명령어는 Shift+Enter 줄바꿈 단축키를 설정해주는 기능인데, 모든 터미널에서 지원되지 않습니다. tmux, screen, SSH 세션, GNOME Terminal 등에서는 작동하지 않는 알려진 제한사항입니다.### 지원되는 터미널Windows: Windows TerminalmacOS: iTerm2, Apple TerminalIDE: VSCode, Cursor, Windsurf기타: Ghostty, WezTerm해결 방법방법 1: 그냥 백슬래시 사용하기 (권장)Shift+Enter 대신 \ + Enter로 멀티라인 입력이 가능합니다. 별도 설정 없이 바로 사용할 수 있습니다.방법 2: 지원되는 터미널에서 설정하기1. 현재 tmux/screen/SSH 세션에서 나가기1. VSCode, iTerm2 등 지원되는 터미널에서 /terminal-setup 실행1. 다시 원래 환경으로 돌아오면 설정 유지됨참고GitHub 이슈: https://github.com/anthropics/claude-code/issues/8762
- 0
- 2
- 27
Q&A
terminal-setup 불가 문의
현재 터미널에서 해당 명령어가 실행이 안되는거 같은데요 혹시 shift + enter 를 했을 때 줄바꿈이 되나요? Terminal-setup은 shift + enter했을때 줄바꿈이 가능하게 하는 설정이기에 된다면 실행하지 않으셔도돼요 :)
- 0
- 2
- 27
Q&A
강의와 만들어진 코드가 달라요
ReactDOM.createRoot와 createRoot의 차이는 모듈을 가져오는 import 방식의 차이입니다:ReactDOM.createRoot (네임스페이스 import)ReactDOM 객체를 통해 접근전통적이고 명시적인 방식어떤 패키지에서 온 메서드인지 명확함 createRoot (named import)함수를 직접 import더 간결한 코드필요한 함수만 import (tree-shaking에 유리할 수 있음)기능적 차이는 없습니다! 두 방식 모두 동일한 함수를 호출합니다.권장사항개인/팀 선호도에 따라 선택일관성 유지가 중요React 공식 문서는 주로 named import 방식 사용최신 프로젝트에서는 createRoot (named import)를 더 많이 사용하는 추세
- 0
- 3
- 23
Q&A
강의자료
현재 노션으로만 제공하는 점 양해부탁드립니다.
- 0
- 2
- 36
Q&A
확장 프로그램 설치 및 최적화 버전 문의
안녕하세요 🙂아래 가이드를 한번 확인해 보시겠어요?Play CDN 사용하기Play CDN을 사용하면 별도의 빌드 과정 없이 브라우저에서 바로 Tailwind를 사용해 볼 수 있습니다. Play CDN은 개발 목적으로만 설계되었으며, 실제 운영 환경에서는 사용할 수 없습니다.01 HTML에 Play CDN 스크립트 추가하기HTML 파일의 에 Play CDN 스크립트 태그를 추가하고, Tailwind의 유틸리티 클래스를 사용하여 콘텐츠 스타일을 지정하기 시작하세요.index.html Hello world! 02 커스텀 CSS 추가해보기type="text/tailwindcss"를 사용하여 Tailwind의 모든 CSS 기능을 지원하는 커스텀 CSS를 추가할 수 있습니다.index.html @theme { --color-clifford: #da373d; } Hello world!
- 1
- 2
- 47
Q&A
Notion API-DB 연결이 안돼요
안녕하세요 🙂노션 데이터베이스 우측 상단 더보기 버튼 클릭 후 [연결] 메뉴에서 생성하신 API 통합을 설정하셨을까요?많은 분들이 이부분을 실수로 누락하셔서요.
- 0
- 2
- 130
Q&A
필터 watchEffect 질문입니다.
안녕하세요 🙂실무에서는 입력할 때마다 DB 조회를 하면 확실히 성능 문제가 발생할 수 있기에 Debounce, Throttle 기술을 사용합니다.좋은 질문입니다! 실무에서는 입력할 때마다 DB 조회를 하면 확실히 성능 문제가 발생할 수 있습니다. 일반적으로 다음과 같은 방법들을 사용합니다:1. Debouncing (디바운싱) - 가장 많이 사용사용자가 입력을 멈춘 후 일정 시간(보통 300-500ms)이 지나면 API를 호출합니다.import { ref, watch } from 'vue'; import { debounce } from 'lodash-es'; // 또는 직접 구현 const searchKeyword = ref(''); // lodash 사용 예시 const debouncedSearch = debounce(async (keyword) => { // API 호출 const response = await axios.get('/api/search', { params: { q: keyword } }); }, 300); // 300ms 대기 watch(searchKeyword, (newValue) => { debouncedSearch(newValue); }); 직접 구현 예시:const searchKeyword = ref(''); let timeoutId = null; watch(searchKeyword, (newValue) => { clearTimeout(timeoutId); timeoutId = setTimeout(async () => { // API 호출 await fetchData(newValue); }, 300); }); 2. Throttling (쓰로틀링)일정 시간 간격으로만 API를 호출합니다 (예: 1초에 한 번만).3. 최소 글자 수 제한watch(searchKeyword, (newValue) => { if (newValue.length 4. 클라이언트 사이드 캐싱이미 검색한 키워드는 캐시에 저장하고, 같은 검색어는 재요청하지 않습니다.const cache = new Map(); const searchWithCache = async (keyword) => { if (cache.has(keyword)) { return cache.get(keyword); } const result = await axios.get('/api/search', { params: { q: keyword } }); cache.set(keyword, result.data); return result.data; }; 5. 백엔드에서 처리백엔드에서 Rate Limiting 적용데이터베이스 인덱싱 최적화검색 엔진(Elasticsearch 등) 활용실무에서 가장 많이 사용하는 조합:Debouncing + 최소 글자 수 제한 + 클라이언트 캐싱이렇게 하면 사용자 경험도 좋고, 서버 부하도 크게 줄일 수 있습니다!
- 0
- 1
- 25
Q&A
eslint 룰 관련 질문이 있습니다.
안녕하세요 🙂컨벤션에 대해 말씀드리면주요 ESLint 컨벤션대표적인 컨벤션:Airbnb Style Guide - 가장 인기 있는 JavaScript 컨벤션Standard JS - 세미콜론 없는 스타일Google Style Guide - 구글의 JavaScript 컨벤션Vue 전용:vue/recommended - Vue 공식 권장 규칙설치 예시# Airbnb (가장 많이 사용) npm install --save-dev eslint-config-airbnb-base # Standard npm install --save-dev eslint-config-standard 추천실무에서는 Airbnb 가장 많이 사용하고, Vue 프로젝트면 eslint-plugin-vue 추가하면 됩니다.팀 상황에 맞게 선택하거나 커스터마이징해서 사용하는 걸 권장드립니다.~!
- 0
- 2
- 22
Q&A
private folders 와 전역 폴더
안녕하세요 🙂좋은 질문입니다! src/components와 src/app/_components의 차이와 사용 이유를 설명해드리겠습니다.주요 차이점src/components (전역 폴더)프로젝트 전체에서 재사용되는 컴포넌트여러 페이지/라우트에서 공통으로 사용예: Header, Footer, Button, Modal 등src/app/_components (Private 폴더)언더스코어(_)로 시작하는 폴더는 Next.js 라우팅에서 제외됨해당 라우트 세그먼트 내부에서만 사용하는 컴포넌트페이지 URL에 영향을 주지 않음분리하는 이유1. 명확한 스코프 관리src/ ├── components/ # 전역 재사용 컴포넌트 │ ├── Header.tsx │ └── Button.tsx └── app/ ├── blog/ │ ├── _components/ # blog 페이지에서만 사용 │ │ └── BlogCard.tsx │ └── page.tsx └── about/ ├── _components/ # about 페이지에서만 사용 │ └── TeamMember.tsx └── page.tsx 2. 코드 조직화와 유지보수컴포넌트가 어디서 사용되는지 명확히 알 수 있음특정 페이지 수정 시 해당 _components만 확인하면 됨3. 의존성 관리전역 컴포넌트 수정 시 영향 범위가 넓음Private 컴포넌트는 영향 범위가 제한적사용 가이드라인하나만 사용해도 되는 경우:작은 프로젝트재사용 컴포넌트가 많지 않을 때팀 규모가 작을 때분리가 권장되는 경우:대규모 프로젝트여러 개발자가 협업할 때페이지별로 독립적인 컴포넌트가 많을 때결론반드시 분리할 필요는 없습니다. 프로젝트 규모와 팀의 선호도에 따라 선택하면 됩니다.간단한 프로젝트: src/components만 사용복잡한 프로젝트: 두 가지 모두 활용하여 명확한 구분제 개인적인 추천은 처음에는 src/components만 사용하다가, 특정 페이지 전용 컴포넌트가 많아지면 그때 _components를 도입하는 것입니다.
- 0
- 2
- 29





![Thumbnail image of the [Latest] The Ultimate Vue Lecture: Nuxt 3 Perfect Mastery](https://cdn.inflearn.com/public/courses/333042/cover/654fc01a-31c1-4138-addf-69527cae68bc/333042.png?w=148)


