묻고 답해요
160만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결웹에서 미디어를 다루는 방법 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; // 오류 발생 시 재생 루프 중지 } }
-
미해결김영한의 실전 데이터베이스 - 기본편
join 문제 풀이2 문제1(self join) 질문
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문 전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예[질문 내용] join 문제와 풀이2에서 문제 1번에 대한 질문입니다.풀이는 아래 쿼리 중 1번의 형태로 해주셨는데 저는 풀이 보기 전 혼자 풀었을 때 2번의 형태로 작성을 했는데...일단 동작은 둘 다 같은데 유지보수적인 면이라던지 의미적인 면이라던지 더 좋은 형태가 있는 지, 둘의 차이가 있는 지 궁금하여 질문 드립니다. 1번 쿼리SELECT m.employee_id, mname, m.manager_id, enameFROM employees eJOIN employees m ON e.employee_id = m.manager_idWHERE m.manager_id = 42번 쿼리SELECT e.employee_id, ename, e.manager_id, mnameFROM employees eJOIN employees m ON e.manager_id = m.employee_idWHERE e.manager_id = 4
-
해결됨FastAPI 완벽 가이드
어디가 필요없는 코드인지 알아내려면....
제가 아래의 사이트를 자체 서버를 만들어 구동을 해보았습니다. 물론 테스트 및 학습용으로....http://112.166.186.238/사용한 것들App서버: FastAPI로 백엔드 api와 간단한 프론트 엔드DB 서버: MySQLRedis 서버Nginx 서버Portainer.io를 이용해, Dockerfile로 이미지 생성하고 4개의 컨테이너를 만들어, 구동시켰습니다. 서버는 제가 쓰던 오래된 개인 PC(아마도 족히 15년가까이된 구닥다리 컴퓨터)에 우분투 22.04.5 LTS를 설치해서 서버 구동을 시켰습니다.제가 전공자는 아니고, 완전히 다른 직업군에 있는 사람이라... 몇년전에 장고, 플라스크로 웹어플리케이션 공부를 한적이 있는데 그때 웹프레임워크만 제외하고 똑같은 방식으로 서버구동을 시켜본 적이 있는데... 이번에 FastAPI로 한번 더 공부하면서 구축해보았습니다.아직, docker-compose.yml로 docker swarm 구축을 해보지는 못했구요... 그런데 여기까지 오면서 궁금해진것이 바로 직전에 질문하신 분처럼 nginx서버 설정을 하다보면, FastAPI코드에서 굳이 없어도 될 부분의 설정부분이 있을 것 같은데.... 그게 어떤것인지 궁금해지더라구요... 예를 들면,정적파일 처리를 nginx에서 처리하는 경우 app.mount()가 필요없을 것 같은데... 답변이 그렇게 되어 있어, 예상했던 데로 였습니다. app.mount()가 설정이 있어도 무방한 것인지 궁금합니다. 또한 저는 정적파일 css. js 파일들은 nginx에서 처리하지 않도록 했는데... 바뀔수가 있을 것 같아서... 여기서 궁금한것: 이렇게 해도 무방한 것인지 궁금합니다. (참고로,저는 static/media폴더 안에 user_images, user_videos폴더를 만들어 user가 업로드하는 파일들을 그 폴더안에 저장하게 로직을 작성했습니다. nginx에서 이 디렉토리를 찾아갈 수 있게 해 놓았고, volume mount를 해서 컨테이너가 삭제되더라도 사용자가 올린 실제 이미지들이 삭제되지 않게 했놨습니다. )MySQL서버와 Redis 서버를 찾아가는 FastAPI코드가 있고, yml파일로 컨테이너를 만드는 코드를 작성할 때, network로 서로를 연결하게 될텐데.... 이때 MySQL서버와 Redis 서버를 찾아가는 FastAPI코드가 없어야만 되는지, 아니면, 있더라도 상관이 없는 것인지... 그것도 궁금합니다.이 두가지 말고도 yml작성시에 들어가는 내용때문에 FastAPI코드에서 굳이 없어도 부분이 있는지 궁금합니다.감사합니다.
-
미해결
강의 재생이 안됩니다
일부강의만 재생이 되고 대부분 재생이 안됩니다.빠르게 해결해주시면 감사하겠습니다.고객센터 전화번호도 연결이 아예 안되어서 너무 불편합니다.
-
미해결graphRAG - Neo4J로 구현하는 지식 그래프 기반 RAG 시스템 (feat. LangChain)
쿼리문 질문 드립니다.
"graphRAG 구현 (랭체인 LCEL 활용)" 부분입니다.WHERE ANY(title IN $movie_titles WHERE movie.title CONTAINS title) 부분을 아래와 같이 수정 WHERE movie.title IN $movie_titles수정한 이후에 건수가 제대로 나오질 않았습니다. ( 참고 $movie_titles 는 4건인데최총 추출되는 것은 2건입니다.) 단순히 생각하면 title 이 추출된 title 에 포함되어 있는 movie 만 추출하면 될 거 같은데..제대로 동작하지 않네요...왜 그런지 설명 부탁드립니다.WHERE 절 안에 다시 WHERE 절이 있는 것도 잘 모르겠습니다.감사합니다.
-
미해결쿠버네티스 어나더 클래스-Sprint 1, 2 (#실무기초 #설치 #배포 #Jenkins #Helm #ArgoCD)
온프레미스 환경에 쿠버네티스도입
안녕하세요현재 회사에서 IDC 온프레미스환경에 쿠버네티스 도입하기로 결정되었습니다.다만 인프라관련 인원이 없는상황이라 어쩔수없이 주니어인 제가 당장 인프라 구조를 구축해야하는데 쿠버네티스가 어려운 기술이다보니 당장 도입하기보다 공부하고 점진적 도입을 하려는데도커로 먼저 시스템을 서버에 배포해놓고 추후에 쿠버네티스를 점진적으로 도입이 유연하게 되는지 궁금합니다. 또한 DBMS올리는건 로컬과 컨테이너 중 보통 어느곳에 올리실까요?
-
해결됨[코드캠프] 부트캠프에서 만든 고농축 프론트엔드 코스
문의드립니다!! ㅠㅠ
안녕하세요,프론트엔드(구), 백엔드 강의 모두 구매한 1인입니다 ㅠㅠ 다름이 아니라, [코드캠프] 부트캠프에서 만든 '완벽한' 프론트엔드 코스관련해서 -> 할인 쿠폰을 받을 수 있을 지 문의드립니다. 추가로, 완벽한 백엔드 코스는 11월 중에는 출시가 될까요? 이것도 기존 구매자들에게 할인이 있을지 문의드립니다. 마지막으로, 제가 앱 개발(플러터)일만 하다가 -> 리액트+리액트 네이티브로 전환하는 과정에서,현재 회사에서 외주를 주는 상황에서 -> 지그재그 같이 화면 width를 600px로 고정을 할 계획인데,이 과정에서 디자인을 figma로 만들때, 어떤 식으로 전달을 해야되는지도 문의드립니다!강의 내용중에 expo와 react native로 커버가 가능한 부분일지도 문의드립니다 ㅠㅠ https://inf.run/8p6wg코드캠프
-
미해결김영한의 실전 데이터베이스 - 설계 1편, 현대적 데이터 모델링 완전 정복
실무에서의 복수 항목에 대한 관리 방법이 궁금합니다.
실무에서도 복수 항목에 대해서 원자성을 고려해 테이블을 분리하는지 궁금합니다. 예를 들어, 카드 정보라는 테이블이 있을 때, 혜택이라는 컬럼에는 '캐시백', '쿠폰 할인' 이런 식으로 복수의 데이터가 들어가게 되는데, 그럼 따로 카드 혜택이라는 하위 테이블을 만들어서 관리하나요? 이런 복수 항목이 늘어날 때마다 테이블을 하나씩 만들어야 하는지... 테이블 구조가 복잡해지는 느낌이 들어 질문드립니다.
-
해결됨코딩 없이 AI 자동화 전문가가 되는 법, n8n 완벽 가이드
n8n mac 설치환경설정 관련 질문
안녕하세요 mac을 사용하는유저입니다. 맛보기강의를 수강하면서 아무것도 모른체 챗지피티설명듣고 n8n다운로드하였습니다.-docker 다운로드-docker내 image 에서 n8n"만" 검색하여 설치 후 실행미리보기로 진도살짝 나가고 유료결제통하여 "n8n설치환경강의"를 보고나니 제가 놓친게 많아보이더라구요(초보관점에서 불현듯 두렵네요. 깃헙도 사용하고 윈도우에 직접 타입핑해야하는것도있고..)나중 중후반 강의들을때쯤 설치환경을 강의와 똑같이 해놓지않아서 문제가생길까봐 두려운데, 혹시 mac 설치환경설정 강의는 없을까요?
-
미해결제미니의 개발실무 - 커머스 백엔드 기본편
룰셋으로 문제를 푸는것에 대해
룰셋으로 풀어내면, 일종의 암묵지가 생깁니다.이런 내용은 결국 어딘가에는 적혀 있어야 다음에 온 개발자가 인지할 수 있는데 보통 안적혀있습니다. 지금 재직중인 회사에도 이런 문제가 있어요.그래서 이런 암묵지를 문서화하려고 노력중인데, 다른 회사에서는 어떻게 정리해두는지 궁금합니다.왜냐하면 PRD(기획서)와는 다른 종류의 문서이기 때문입니다.기획서야 최초 기능, 개선건 등등 개발이 들어갈때마다 신규 문서를 작성하면 쉽지만,이런 암묵지(정책)를 모아둔 문서는 통합된 단 하나의 문서가 있어야 나중에 이해하기 쉽거든요.(기획서로 정책을 이해하려면 최초 개발 문서부터 최종 문서(개선건)까지 전부 읽어야 정책을 알 수 있음) 영상에서 이런 암묵지를 관리하는 내용은 소개되지 않아 질문을 남깁니다. 암묵지: 코드로는 보이지 않지만 반드시 지켜져야하는 규칙
-
미해결FreeRTOS 프로그래밍
실행순서
안녕하세요 강사님fflush를 주석처리하지 않고동일한 우선순위인 task1 과 task2가 있을때aaaaaaaaaaaaaaab와 같이 비정상 출력이 나오는 상황에서아래 제가 정리한 내용이 맞나요?FACT 1.HAL_UART_Transmit 실행 중에도 컨텍스트 스위칭은 가능하며,단지 UART 하드웨어 자원이 점유 중이라 다른 Task는 전송만 못 할 뿐이지 SysTick에 의해 timeslice마다 Context Switching이 일어난다.FACT2. FACT1에 따라 Task2가 printf("b")와 fflush로 UART 점유 및 전송중일때Tick마다 ContextSwitching이 일어나고 그때 Task1의 printf("a")로 인해 버퍼가 누적되며 동시에 fflush는 기존에 TASK2가 UART를 점유중이여서 Skip된다는 것이 맞을까요?____________ 그리고 task1과 task2가 fflush때문에 aaaaaaaaaaaaaab 와 같이 a다수 b한개만 실행될경우어떤 timeline을 거쳐 저렇게 실행되는것인지 정리해주실수 있나요?___________
-
미해결김영한의 실전 데이터베이스 - 기본편
9. 인덱스2.pdf 중에서
[4페이지 - 예시 2]하나는 "~", 다른 하나는 "AND"인 부분 뭔가 어색?한 거 같습니다.
-
미해결FreeRTOS 프로그래밍
uart 전송중에는 스위칭이 금지되나요?
틱인터럽트가 들어와도fflush로 uart 점유 및 전송중이면 스위칭을 안하는건가요?
-
해결됨제미니의 개발실무 - 커머스 백엔드 기본편
화면과 관련한 정보 처리 질문입니다
안녕하세요..! 네이티브 앱 환경에서 서버 개발을 하다보니, 여기 강의에서나오는 리뷰 수가 어떻게 보일지 같은 문제를 서버에서 컨트롤 하자는 얘기가 자주 나와 질문 드립니다. 예를들어, 15000건의 리뷰수를 100+ 였다가, 15k 같은식으로 변경 되는걸 서버에서 string으로 내려달라는 것이죠. 현재는 원본데이터를 도메인에서 처리하고, 보여질 데이터를 dto 단에서 처리하는 식인데요..매번 화면에 표현되는걸 실험이라고 계속 바꿔대는데, 조금 불편한 느낌이 생기더라구요. 이런 경우는 보통 어떻게 처리하는게 좋을까요? 화면을 제어하는 필드가 많아질 수록 더 관리가 안되는거 같아요. 특히 os 별 다르게 처리한다던가..
-
미해결이득우의 언리얼 프로그래밍 Part2 - 언리얼 게임 프레임웍의 이해
6강을 마무리하며 트레이스 채널 을 이해하지 못했습니다.
강의 내용을 들었을 때 트레이스 채널은 반드시 필요한데 막상 사용하는 곳은 SweepSingleByChannel 의 파라미터 중 하나로 기입하는 것 뿐입니다. CollisionProfileName 처럼 각 액터별로 지정해 특정 액터(콜리젼)과 충돌 처리에 대한 여부를 설정하지도 않ㄱ트레이스 채널에서 Ignore 만 설정된 것은 그럼 Engine->Collision->Preset 리스트 중, ignore 로 설정 된 Name 만 찾는 것인지.. 죄송합니다. 제대로 이해를 못했는데 정확한 역활은 무엇인가요?
-
미해결6주 완성! 백엔드 이력서 차별화 전략 4가지 - 똑같은 이력서 속에서 돋보이는 법
API 별 실행 쿼리 모니터링 구현 질문 있습니다.
1. 현재 학습 진도몇 챕터/몇 강을 수강 중이신가요? 여기까지 이해하신 내용은 무엇인가요? 2. 어려움을 겪는 부분어느 부분에서 막히셨나요?코드의 어떤 로직이 이해가 안 되시나요?어떤 개념이 헷갈리시나요? 3. 시도해보신 내용문제 해결을 위해 어떤 시도를 해보셨나요?에러가 발생했다면 어떤 에러인가요?현재 작성하신 코드를 공유해주세요 안녕하세요 강의 잘 보고 있습니다. 저는 강의를 보고 아래와 같이 이해를 했습니다.1.API 별 실행 쿼리 모니터링 구현2.그러면, 모든 api 엔드포인트에 대한 쿼리 min , max값을 알 수 있음. 질문1근데, 그렇게 되면 실제로 서비스에 필요한 코드와 모니터링 코드가 불필요하게 섞이는 거 아닌가요? 왜냐하면, 실제 모니터링이라고 하면 서버를 유지보수할 때, 필요한 데이터를 실시간으로 받아와서 시각화한다는 것으로 이해를 했습니다. 그런데 "API 별 실행 쿼리 모니터링 구현"은 서버의 유지보수에 필요한 모니터링 기능이 아니라, 1번만 딱 실행되면 되는데 이 부분이 왜 모니터링 구현으로 분류가 되는지 잘 모르겠습니다! 질문2API 별 실행 쿼리 모니터링 구현 부분에서, 실무에서도 "API 별 실행 쿼리 모니터링을 구현"해서 사용하는게 맞나요? 잘은 모르겠지만, 쿼리 분석이나 다른 방법이 있을 것 같은데 왜 이 부분이 서비스 코드 내에 포함을 시키면서까지 모니터링의 영역으로 분류가 되는지 잘 모르겠습니다 ! 질문3 만약에 실무에서는 해당 방법을 잘 사용하지 않는다면 API 별 실행 쿼리 횟수를 보통 어떤 식으로 측정을 하는건가요??? 감사합니다 ! 이렇게 구체적으로 알려주시면, 더 정확하고 도움이 되는 답변을 드릴 수 있습니다!
-
해결됨제미니의 개발실무 - 커머스 백엔드 기본편
Service 간 의존하는 경우
안녕하세요! 너무 구현적인 질문을 드리는 걸 수도 있지만, 개념을 나누고 이를 결과적으로 코드로 구현해보려는 입장에서 어느정도 규칙이나 일관성을 두고 구현하면 더 좋겠다는 생각에 질문드립니다! 현재 구현상으로 1. 하나의 개념을 한 서비스로 만들고, 서비스간의 의존은 피하는 형태로 구현하신 게 맞을까요? 2. 만약 그렇다면, 예를 들어 ReviewService에서 현재는 pointHandler를 호출하고 있는데, 이 핸들러의 로직이 더욱 응집되어 PointService의 메서드 자체를 호출하는 것이 하나의 동작으로써 자연스럽다면, 이런 경우는 PointService를 ReivewService에서 의존해서 메서드를 호출하기보단, ReviewHandler 및 추가로직이 응집된 PointService 서비스 하위레이어(?)를 두어서 이를 의존하게 하는 형태로 구현하시는 건지 알고 싶습니다..!
-
미해결AI 도구와 피그마를 활용한 앱 서비스 기획
캡쳐할때 쓰시는 프로그램 이름 알 수 있나요?
캡쳐 하실때 쓰는 프로그램이 좋아보이는데요. 이름이 궁금합니다
-
해결됨C개발자를 위한 최소한의 C++
이동생성자의 매개변수로 넘어가는 임시객체의 값 유지 관련하여 질문이 있습니다.
안녕하세요.이동시멘틱 강의를 보다가 의문이 있어 문의드립니다.강의에 나오는 CMyString 클래스는 내부 포인터 변수 멤버를 가지고 있는데, CMyString a,b,c;에서 a = b+c;를 실행할 때CMyString operator+() 함수의 return값의 사본이 임시객체에 저장되고 이 임시객체가 이동생성자의 매개변수에 들어가는 것이 맞을까요?만약 그렇다면 사본을 가진 임시객체의 포인터 변수 멤버의 값이 return 값의 포인터 변수 멤버의 값과 같을텐데 return 후 return값이 소멸함에도 이동생성자 내부에서 사본은 어떻게 계속 값을 유지하는걸까요?이동생성자 호출 시에는 이동생성자 종료 전까지 return 값이 사라지지 않는걸까요?사본이라고 표현하신 것의 의미도 궁금합니다...사본은 모든게 다 똑같은 복사본인걸까요..?근데 그러면 참조자와 같은것일것같은데 반환형식이 참조자는 아니고... shallow copy한 것도 아니고 deep copy한 것도 아닌것 같은데...너무 헷갈리네요...감사합니다.
-
해결됨[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)
작업형2에서 결측치 처리
결측치를 삭제할지, 결측치를 채울지는 본인이 선택하면 되는걸까요?결측치 삭제할때 행, 열 , 특정 열 삭제 중 뭘 선택해야할지 좀 복잡해보여서그냥 결측치를 채우는 방식으로 하고싶은데 결과값이 많이 달라질까 궁금합니다