(AI 퀀트) 코드 한 줄 안 쓰고 주식 자동 분석 시스템 만들기 feat. Claude CLI
강의를 듣고 저도 한번 저만의 크롤링을 하려고 코드를 짜다보니, 네이버 증권 데이터를 가져와 사용하는것이 불법이라고 AI가 답변합니다. 다른 대안이 있을까요? 1. 기술적·정책적 문제 (네이버 이용약관 및 robots.txt) 서비스 이용약관 위반: 네이버를 포함한 대부분의 플랫폼은 이용약관을 통해 무단 크롤링, 데이터 수집 및 재배포를 엄격히 금지 하고 있습니다. 이는 사용자가 서비스에 가입할 때 동의한 계약 사항이므로, 이를 위반할 경우 서비스 이용 정지 등의 제재를 받을 수 있습니다. robots.txt 준수 의무: 네이버는 사이트 내에 robots.txt 라는 파일을 통해 수집 로봇의 접근을 제어하고 있습니다. 이를 무시하고 데이터를 대량으로 수집하는 행위는 기술적 보호 조치를 우회하는 행위로 간주되어 정보통신망법 위반 소지가 있습니다. 2. 저작권법 및 부정경쟁방지법 데이터의 저작물성: 단순히 숫자(주가, 거래량 등)만 가져오는 것은 사실 정보에 해당하여 저작권 침해 논란이 적을 수 있습니다. 그러나 이를 가공하여 정리한 '표'나 '분석 결과' 등을 그대로 가져오는 경우, 이는 네이버의 데이터베이스 저작권 을 침해하는 행위로 판단될 수 있습니다. 부정경쟁방지법: 타인이 상당한 노력과 비용으로 구축한 데이터를 무단으로 사용하여 자신의 영업에 활용하는 행위는 '부정경쟁방지 및 영업비밀보호에 관한 법률'상 부정경쟁행위로 간주될 수 있습니다. 상업적 목적이 없더라도 네이버 측에서 "데이터 무단 사용으로 인해 서비스 운영에 피해를 입었다"고 판단하면 법적 분쟁의 대상이 될 수 있습니다.
우선 이전 질문/답변을 통해서 eslint 설정 파일명이 바뀐것을 알게되었습니다. 문제는 강의의 코드와 저의 코드가 다르다는 점인데, 이정환 강사님께서 설정하신 그대로 따라간다면 rules: { "no-unused-vars": "off", "react-prop-types": "off", }, 이 코드만 추가하면되는걸까요? 강의에서는 rules 프로퍼티가 이미 있고 해당 객체 내부에 react-refresh/only-export-components ~가 있는데 제 코드에는 rules 자체가 없습니다. 26-07-01 기준 현재 vite 프로젝트의 eslint.config.js 파일 코드 export default defineConfig([ globalIgnores(["dist"]), { files: ["**/*.{js,jsx}"], extends: [ js.configs.recommended, reactHooks.configs.flat.recommended, reactRefresh.configs.vite, ], languageOptions: { globals: globals.browser, parserOptions: { ecmaFeatures: { jsx: true } }, }, }, ]);
"AI 딸깍의 시대" 원리로 돌파하는 Node.js와 CS Part 2 - 스트림 아키텍처와 하드웨어 통제기
// 3. 작업 종료 알림: end 이벤트를 통해 댐 바닥 확인 streamRead.on("end", async () => { console.log("\\n✅ [종료] 댐 바닥 도착. 모든 데이터 복사 완료!"); // 메서드: 더 보낼 물이 없다고 선언하고 파이프 닫기 절차 진입 // finish 이벤트: 쓰기 파이프가 논리적으로 완벽히 닫혔음을 보장 streamWrite.on("finish", async () => { // 쓰기 파일 디스크립터(번호표) 운영체제에 반환 (메모리 누수 방지) await fileHandleWrite.close(); console.timeEnd("복사_소요_시간"); console.log( `📊 요약: 총 ${chunkCount}회 펌프질, ${pauseCount}회 비상 정지(메모리 방어 성공)`, ); // 메서드: 실험용 임시 파일 삭제 클린업 (unlink) await fs.unlink(SOURCE_FILE); await fs.unlink(DEST_FILE); }); streamWrite.end(); // 메서드: 사용이 끝난 읽기 파일 디스크립터(번호표) 운영체제에 반환 await fileHandleRead.close(); 읽기 스트림과 쓰기 스트림을 종료하는 3번 단계에서 쓰기 스트림을 end 하기 전에 .on finish를 등록을 해야 콘솔에서 요약을 볼 수 있었습니다. 클로드는 레이스 컨디션이 발생해서 그렇다고 하는데 어떤 부분에서 경합이 일어났는지 잘 모르겠습니다.
let previousContent = ""; const addToFile = async (path, content) => { if (previousContent === content) return; // 중복 실행 방지를 위한 거름망 if(!(await fileExist(path))) return; // file이 존재하는지 않하는 지 체크 try { await appendFile(path, content); previousContent = content; console.log(`✅ ${content} is successfully appended to ${path}`); } catch (error) { if (error.code === "ENOENT") { console.log(`⚠️ ${path} does not exist`); } console.error(`❌ 에러 발생: ${error.message}`); } }; catch error 부분에서 에러 코드로 ENOENT를 사용해서 path가 존재하지 않는 경우를 잡아내는 코드를 작성했지만, 실제로 실행했을 때 appendFile 자체가 이미 새로운 파일을 생성해내는데 성공하였기 때문에 error로 연결되지 않았습니다. 중복 콘텐츠 방지를 위한 if 밑에 또 다른 if로 fileExist를 사용해서 early return을 하는 이런 방식으로 처리를 하는 게 맞을까요? 아니면 제가 놓친 다른 catch error 가 있는 걸까요?
The 10x AI-Native Developer: 회사에서 AI로 압도적 성과를 내는 법
claude-squad 실행 후 로그인을 하라, 권한이 없다 등의 메세지가 나오는 경우 어떻게 해결해야 하는걸까요? 강의 초기에 말씀하셨던 클로드는 이미 결제했는데, 추가 결제가 필요한 건가요? claude login을 해도 로그인 창이 뜨지 않습니다ㅠ AI에게 물어본 결과 처음에 결제한 것과, 터미널에서 사용하려는 api 호출 비용은 별도라고 하는데 맞는건가요?
안녕하세요. 강의 잘 듣고 있습니다. libuv 발음이 '립유브이' '엘아이비유브이' '리버브' 등 발음법이 계속 바뀌네요. 다른 질문에서 답변으로 AI로 만든 강의 아니다라고 하셨고 직접 녹음한거라고 하셨는데 직접 하신거라면 조금 아쉬운 것 같습니다. 강의 내용도 흥미롭고 좋은 주제를 다루는 것 같아서 배울게 많아 정말 좋은데 이런 부분들이 조금 강의의 퀄리티를 떨어뜨리는 것 같아서 보완해주시면 좋을 것 같습니다. 강의는 정말 잘 듣고 있는 만큼 보완되었으면 하는 마음에 조심스레 글 남깁니다.