묻고 답해요
160만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결한 입 크기로 잘라먹는 실전 프로젝트 - SNS 편
TailWind css 린트
bg-muted, muted-foreground를 린트가 인식하지 못하는 것 같아요.Tailwind CSS IntelliSense 설치했구요, 추가로 PostCSS Language Support 확장 프로그램까지 설치한 상태입니다.현재 제 eslint.config.js파일입니다. import js from '@eslint/js'; import globals from 'globals'; import reactHooks from 'eslint-plugin-react-hooks'; import reactRefresh from 'eslint-plugin-react-refresh'; import tseslint from 'typescript-eslint'; import { defineConfig, globalIgnores } from 'eslint/config'; import tailwind from 'eslint-plugin-tailwindcss'; export default defineConfig([ globalIgnores(['dist']), js.configs.recommended, // ESLint 기본 권장 ...tailwind.configs['flat/recommended'], // Tailwind 플러그인 권장(배열) ...tseslint.configs.recommended, // TypeScript 권장(배열) { files: ['**/*.{ts,tsx}'], extends: [ reactHooks.configs['recommended-latest'], // React Hooks 권장 reactRefresh.configs.vite, // Vite 환경에서 React Refresh ], rules: { 'tailwindcss/classnames-order': 'off', // 정렬은 Prettier가 담당하므로 충돌 방지 "@typescript-eslint/no-unused-vars": 'warn', // 사용되지 않은 변수가 있다면 경고 "@typescript-eslint/no-explicit-any": 'warn' // 명시적으로 any를 사용하면 경고 }, languageOptions: { globals: globals.browser, }, }, ]);
-
미해결한 입 크기로 잘라 먹는 리액트(React.js) : 기초부터 실전까지
렌더링
혹시 main.jsx파일에서의ReatDom.creatRoot(document.getElementById("root")).render(<App/>);에서 id값을 따로 root로 설정해주지 않아도 render함수안에 있는 인자 값으로 root가 설정되는 걸까요? 어떻게 root로 설정하고 app을 루트로 만들어줬는지 궁금합니다.
-
해결됨웹 개발자의 연봉을 올려주는 하이브리드앱 with Expo 프레임워크
강의자료는 어디에 있나요?
강의자료는 어디에 있나요?[02-05] 헤더 옵션 심화 하는데 이미지 첨부하는 자료또는 강의에서 진행하는 소스코드를 어디서 받을 수 있는지 알려주세요.
-
해결됨한 입 크기로 잘라 먹는 리액트(React.js) : 기초부터 실전까지
55강 Counter App 데모사이트 링크가 잘못된 것 같습니다.
안녕하세요, 정환님 :)55강 6.2) UI 구현하기에서 데모 사이트 링크가https://counter-six-pi.vercel.app/(데모 사이트)대신 https://hyobb.com/?utm_source=notbook(김효빈님 resume)으로 연결되는 것 같습니다.확인 부탁드립니다! + : 강의 너무 잘 듣고 있습니다.리액트 네이티브 프로젝트 전에 리액트 공부를 위해 구매했는데,깔끔한 발성과 쉬운 설명 덕분에 리액트 공부가 훨씬 쉬워지는 느낌입니다.강의 내용 잘 소화해서 프로젝트 잘 진행해보겠습니다! 감사합니다.
-
미해결한 입 크기로 잘라먹는 실전 프로젝트 - SNS 편
(6.1) 인증과 인가 아해하기
질문은 아니고오타가 있어서 제보 합니다. 이해하기 인데 아해하기로 되어 있네요(6.1) 인증과 인가 아해하기
-
미해결한 입 크기로 잘라먹는 실전 프로젝트 - SNS 편
next.js가 아닌 react.js로 강의를 한이유가 궁금합니다.
next.js가 더 좋은거같은데 react.js로 하는이유가 있을까요?next.js요즘 안쓰는사람많던데 이유가 궁금합니다.
-
미해결AI와 함께 배우는 Next.js
api 오류
https://app-router-api-five.vercel.app/api 네트워크 오류가 나서 계속 500 오류가 납니다ㅠ
-
해결됨한 입 크기로 잘라 먹는 리액트(React.js) : 기초부터 실전까지
오류가 아닌 warning 메세지가 계속 뜹니다.
🚨 필독) 질문하시기 전에 꼭 읽어주세요 (10초 소요)제목을 구체적으로 작성해 주세요✅ 좋은 예 : 감정일기장 Home 구현중 xx 이슈가 발생합니다.⛔️ 나쁜 예 : 이거 왜 안되나요?, 오류나요 도와주세요 등비슷한 궁금함을 갖고 계신 분들께 도움이 될 수 있어요! 코드의 이슈는 전체 프로젝트를 "링크 형태"로 올려주셔야 원인을 파악할 수 있습니다.깃허브, 구글드라이브 등의 수단을 통해 링크 형태로 전달해주세요직접 실행해보며 원인을 파악해야 하기 때문에 텍스트 형태로 붙여넣는건 삼가해주세요 🥲 답변이 도움이 되셨다면 답글 or 해결완료 버튼을 클릭해주세요비슷한 궁금함을 갖고 계신 분들께 도움이 될 수 있어요!제 답변이 여러분께 도움이 되었는지 저도 알고 싶어요 🥲 강의 내용에 궁금한 점이 있다면 몇 챕터의 몇 분 몇 초인지 알려주시면 더 좋아요더 빠른 답변이 가능합니다실행하는데 문제가 되지는 않는데 혹시 해결할 수 있는 방법이 있을까요??
-
미해결한 입 크기로 잘라먹는 실전 프로젝트 - SNS 편
컴포넌트 네이밍 컨벤션 관련 질문 드립니다.
안녕하세요! 강의 잘 보고 있습니다.정환님이 제작하신 강의는 모두 수강하고 있는데요,리액트나 넥스트 강의에서 보면 컴포넌트 파일명도 케밥 케이스로 작성하시던데, 일반적으로 컴포넌트는 파스칼 케이스로 작성하는 경우가 많아서 혹시 특별한 이유가 있는지 궁금합니다!
-
미해결한 입 크기로 잘라먹는 실전 프로젝트 - SNS 편
Zustand의 get/set 메서드 관련 질문 드립니다.
안녕하세요! 강의 잘 듣고 있습니다.(3.2) Zustand 기본 사용법 1 강의의 9분 21초경에서 궁금한 점이 생겨 질문드립니다. 강의에서 get 메서드는 store(객체) 전체를 반환한다고 설명하셨습니다.그리고 set 메서드는 인자로 전달된 객체의 프로퍼티만을 갱신한다고 하셨는데요.그런데 아래 코드처럼 보면,set 내부에서는 따로 get()을 호출하지 않아도 count 값을 바로 참조해 업데이트하고 있습니다. increase: () => { const count = get().count; // 여기서 store의 count 프로퍼티를 가져온다 set({ count: count + 1 }); // 그런데 여기서는 count를 직접 사용할 수 있다? } 제가 이해하기로는 store의 값을 변경하기 위해 프로퍼티를 참조할 때에도(여기서는 count:) 먼저 get()으로 현재 store의 참조를 얻은 뒤 수정해야 할 것 같은데,set({ count: count + 1 })처럼 직접 count를 갱신할 수 있는 이유가 궁금합니다.즉, set은 내부적으로 get()을 다시 호출해서 현재 store 상태를 알고 있는 건가요?아니면 set이 store 객체의 참조를 이미 가지고 있어서 가능한 건가요?
-
해결됨한 입 크기로 잘라먹는 실전 프로젝트 - SNS 편
.prettierrc 자동완성
.prettierrc 파일에서 플러그인 설정 관련 코드를 작성하실 때 자동완성이 되시는데 혹시 어떤 설정을 해야하나요??
-
미해결React Native with Expo: 제로초에게 제대로 배우기
기기에서는 네트워크 에러가 납니다.
로컬에서는 분명히 문제 없이 DB에 접속이 되는데 빌드를 해서 apk파일을 만들어서 안드로이드 기기에 설치를 하면 network error가 나네요 app.json 파일에 "android": { "usesCleartextTraffic": true,이렇게 설정을 했는데도 네트워크 오류가 나는데 이것 말고 더 수정해야하는 내용이 있을까요?환경 설정은https://inf.run/6wYbc여기와 동일합니다.
-
미해결[Live 챌린지] 6주 완성! 개발 실무를 위한 고농축 바이브코딩 (Cursor AI, Figma)
common component생성, storybook 작성시 하나하나 하게 됨
수업에서는 common component생성, storybook 작성을 한번에 하고 그 다음 수정하는것이 효율적이라고 하셨는데일괄생성 후 수정작업하다 보니( 색상코드를 사용하지 않음, 색상코드를 적용오류에 대한 발견, html 구조 이상, story 파일 오류 등 )다시 하나씩 재생성하는 경우도 생기게 되네요. 그냥 하나씩 component 생성 후 story 생성하는것이 낫지 않을까 싶어 글 남깁니다.
-
미해결스프링 부트와 리액트로 구현하는 소셜 로그인
[소셜 로그인 33강] 일반 로그인 -> 소셜 로그인 관련 질문
33강에 27-30분대를 보면SecurityConfig 클래스에서 .formLogin을 .oauth2Login으로 바꾸고, TodoController 에서 CustomUserDetails로 받았던 사용자 정보를 CustomOAuth2User 로 바꾼 것으로 보이는데,,일반 로그인 시에 사용할 로직과 소셜 로그인 시에 사용할 로직을 둘 다 두지 않고, 소셜 로그인 하나만 사용하는 것으로 진행하려고 바꾸는건가요??
-
해결됨React start with Next.js
[Todo삭제와 수정처리1] selectTodo 함수에서 filter 대신 find 메서드를 사용하면 안될까요?
function selectTodo(id) { const targetTodo = arr.find(todo => todo.id === id); if (targetTodo) { setCurrent(targetTodo); } else { setCurrent(null); } } 또는 selectTodo 함수의 파라미터를 선택한 todo 객체 자체를 넘기는 것으로 처리했을 때 차이가 있을 까요?function selectTodo(todo) { setCurrent(todo) }
-
해결됨DOM에서 픽셀까지, 브라우저 렌더링과 CRP 완전 정복 - [DOM 완전 정복 Part 3]
지금 이 화면에서 뭘로 fps를 알 수 있나요?
지금 이 화면에서 뭘로 fps를 알 수 있나요?
-
미해결Next.js 15: Full-Stack Development
강의를 들을 때 타입스크립트 지식이 필요한가요?
안녕하세요 js, React만 배우고 바로 Next.js로 넘어왔는데 혹시 TypeScript도 필요한가요?
-
미해결웹에서 미디어를 다루는 방법 MediaStream API
오디오 Input -> Speaker 출력 Noise
안녕하세요.이번에 프로젝트를 진행 하고 있는데 해결되지 않는 부분이 있어서 질문을 드립니다.상황을 간단히 말씀드리면, 미팅룸 개설을 하고 참여한 인원중에 말을 하면 해당 음성을 다른 참여자의 스피커로 출력하는 방식입니다. (발화자 제외) 이때 Input Audio format은 16Khz, MONO, 32Float, 16,000 sample 로 지정되어 있습니다.(음성 출력 뿐만 아니라, STT 서버에 보내서 텍스트를 반환하는데 이때 STT 서버의 오디오 요청스펙 입니다.) 그리고 Gemini의 도움을 받아 아래와 같이 옵션을 설정하였지만, 실제로 스피커 출력시 매우심한 Noise가 발생합니다. (STT 서버의 응답 텍스트는 정상 동작) 저는 백엔드 개발자인데, 프론트단에서 해결 방법을 잘 모르겠어서, 강의를 결제하게 되었습니다. 혹시 조언을 해주실수 있을까요?아니면 강의에 몇강을 보면 관련 주제가 나오는지 알려주도 좋을거같습니다. 긴글 읽어주셔서 감사합니다. Input audio data 관련 코드audio: { echoCancellation: true, noiseSuppression: false, autoGainControl: false, } this.highPassFilter = this.audioContext.createBiquadFilter(); this.highPassFilter.type = 'highpass'; // [튜닝] 목소리 뭉개짐을 피하기 위해 60Hz로 설정 this.highPassFilter.frequency.value = 60; // 2. Compressor (안전장치/Limiter 역할 튜닝) this.compressor = this.audioContext.createDynamicsCompressor(); // [튜닝] -6dB를 넘어가는 "정말 큰 기계음"만 잡는 '안전장치'로 사용 this.compressor.threshold.value = -6; this.compressor.knee.value = 30; // [튜닝] 2:1로 최소한만 압축 this.compressor.ratio.value = 2; // [튜닝] 순간적인 피크를 빠르게(3ms) 잡음 this.compressor.attack.value = 0.003; this.compressor.release.value = 0.25; // 3. GainNode (전체 볼륨 증폭) this.gainNode = this.audioContext.createGain(); // [튜닝] 압축을 거의 안 하므로 1.1배로 소폭만 증폭 this.gainNode.gain.value = 1.1; // --- 7. 노드 체인 연결 --- this.audioSource.connect(this.highPassFilter); // 1. (마이크) -> 저주파 험 제거 this.highPassFilter.connect(this.compressor); // 2. -> "정말 큰 소리"만 방지 this.compressor.connect(this.gainNode); // 3. -> 전체 볼륨 소폭 증폭 this.gainNode.connect(this.resamplerNode); // 4. -> VAD 및 리샘플링 this.resamplerNode.connect(this.audioContext.destination); // (워크렛 실행용)스피커 출력 관련 코드// --- [수정] 오디오 출력(Playback) 로직 (심리스 스케줄링) --- private handleIncomingAudio(audioData: ArrayBuffer): void { if (audioData.byteLength === 0 || !this.playbackAudioContext) return; if (this.playbackAudioContext.state === 'suspended') { this.playbackAudioContext.resume().catch((err) => { console.error('Playback AudioContext 재개 실패:', err); }); } this.audioQueue.push(audioData); // [수정] 재생 루프가 멈춰있을 때(!this.isPlaying)만 새로 시작 if (!this.isPlaying) { this.isPlaying = true; // 현재 시간을 기준으로 스케줄링을 다시 시작합니다. this.nextChunkTime = this.playbackAudioContext.currentTime; this.playNextChunk(); } } private playNextChunk(): void { if (this.audioQueue.length === 0) { this.isPlaying = false; // 큐가 비면 재생 중지 return; } if (!this.playbackAudioContext || this.playbackAudioContext.state === 'closed') { this.isPlaying = false; this.audioQueue = []; return; } const audioData = this.audioQueue.shift()!; try { const float32Data = new Float32Array(audioData); const audioBuffer = this.playbackAudioContext.createBuffer( PLAYBACK_CHANNELS, float32Data.length, this.playbackAudioContext.sampleRate ); audioBuffer.copyToChannel(float32Data, 0); const source = this.playbackAudioContext.createBufferSource(); source.buffer = audioBuffer; source.connect(this.playbackAudioContext.destination); // --- [수정] 심리스 스케줄링 로직 --- // 1. 랙(Lag)으로 인해 예약 시간이 이미 지났는지 확인 const currentTime = this.playbackAudioContext.currentTime; if (this.nextChunkTime < currentTime) { // 지연이 발생했으면, 갭(Gap)이 생기지 않도록 현재 시간으로 리셋 this.nextChunkTime = currentTime; } // 2. 계산된 nextChunkTime에 재생을 '예약'합니다. (갭 제거) source.start(this.nextChunkTime); // 3. 다음 청크가 시작될 시간을 미리 계산합니다. this.nextChunkTime += audioBuffer.duration; // 4. [수정] onended에서 다음 청크를 비동기적으로 호출합니다. (버그 수정) source.onended = () => { // 큐에 다음 데이터가 있으면, 딜레이 없이 바로 다음 청크를 스케줄링합니다. if (this.audioQueue.length > 0) { this.playNextChunk(); } else { this.isPlaying = false; // 큐가 비었으면 재생 종료 } }; // 5. [삭제] 즉각적인 재귀 호출을 삭제합니다. (이것이 버그였습니다) // if (this.audioQueue.length > 0) { // this.playNextChunk(); // } } catch (e) { console.error('오디오 청크 재생 중 오류:', e); this.isPlaying = false; // 오류 발생 시 재생 루프 중지 } }
-
해결됨[코드캠프] 부트캠프에서 만든 고농축 프론트엔드 코스
문의드립니다!! ㅠㅠ
안녕하세요,프론트엔드(구), 백엔드 강의 모두 구매한 1인입니다 ㅠㅠ 다름이 아니라, [코드캠프] 부트캠프에서 만든 '완벽한' 프론트엔드 코스관련해서 -> 할인 쿠폰을 받을 수 있을 지 문의드립니다. 추가로, 완벽한 백엔드 코스는 11월 중에는 출시가 될까요? 이것도 기존 구매자들에게 할인이 있을지 문의드립니다. 마지막으로, 제가 앱 개발(플러터)일만 하다가 -> 리액트+리액트 네이티브로 전환하는 과정에서,현재 회사에서 외주를 주는 상황에서 -> 지그재그 같이 화면 width를 600px로 고정을 할 계획인데,이 과정에서 디자인을 figma로 만들때, 어떤 식으로 전달을 해야되는지도 문의드립니다!강의 내용중에 expo와 react native로 커버가 가능한 부분일지도 문의드립니다 ㅠㅠ https://inf.run/8p6wg코드캠프
-
해결됨한 입 크기로 잘라 먹는 리액트(React.js) : 기초부터 실전까지
새일기쓰기하고 새로고침하면 새로쓴일기가 사라져요
🚨 필독) 질문하시기 전에 꼭 읽어주세요 (10초 소요)제목을 구체적으로 작성해 주세요✅ 좋은 예 : 감정일기장 Home 구현중 xx 이슈가 발생합니다.⛔️ 나쁜 예 : 이거 왜 안되나요?, 오류나요 도와주세요 등비슷한 궁금함을 갖고 계신 분들께 도움이 될 수 있어요! 코드의 이슈는 전체 프로젝트를 "링크 형태"로 올려주셔야 원인을 파악할 수 있습니다.깃허브, 구글드라이브 등의 수단을 통해 링크 형태로 전달해주세요직접 실행해보며 원인을 파악해야 하기 때문에 텍스트 형태로 붙여넣는건 삼가해주세요 https://drive.google.com/drive/folders/1lRO0fOAae3cWJUtuNK7L5atrGTgFFRWO?usp=drive_link 답변이 도움이 되셨다면 답글 or 해결완료 버튼을 클릭해주세요비슷한 궁금함을 갖고 계신 분들께 도움이 될 수 있어요!제 답변이 여러분께 도움이 되었는지 저도 알고 싶어요 강의 내용에 궁금한 점이 있다면 몇 챕터의 몇 분 몇 초인지 알려주시면 더 좋아요더 빠른 답변이 가능합니다!