내가 참여하는 프로젝트에서, 크롤링을 해와야 할 일이 생겼었다.
다행히 팀원 한 분이 고생해주신 덕에 돈키호테라는 사이트에서 상품 정보를 크롤링 해 올 수는 있었는데, 문제는 그 json 파일을 db에 넣는 것이었다.

일단 여러 가지 고민들이 있었는데
1.워커벤치에서 임포트를 하려고 했는데 맨 위에 있는 항목 하나만 들어가짐
2. won_price, en_price 를 int 타입으로 설정해 놓아서 오류가 생기는 건가? 라는 의문
3. 값들이 not null으로 설정되어 있어서 중간에 비어 있는 값들 때문에 import가 되지 않는 건가? 라는 생각도 해봄
4. 우리가 필요한 건 한국어 데이터인데... 못 넣겠으면 그냥 GPT 시켜서 쿼리 짜게 해서 그걸로 넣을까 (나눠서 ㅋㅋ) <- 사실 이걸로 진짜 하려고 함ㅋㅋ 혼자였으면 ㄹㅇ 했을지도...
그치만 정말 이건 아니다라는 생각이 들어 json 파일 채로 db에 넣을 방법으로 다시 시도
그러다가 node.js를 이용한 fs 모듈로 해결할 수 있는 방법을 찾아서 스껄하게 해결함
일단 패키지가 깔려 있지 않다면 그것부터 해줘야 함
npm install fs mysql2
그리고 mjs 파일을 만들어 줌
파일 이름은 적절하게 지어주시고
import fs from 'fs';
import path from 'path';
import mysql from 'mysql2/promise';
// 데이터베이스 연결 설정
const connection = await mysql.createConnection({
host: 'localhost', // 데이터베이스 호스트
user: 'root', // 데이터베이스 사용자
password: 'password', // 데이터베이스 비밀번호
database: 'database_name' // 데이터베이스 이름
});
// JSON 파일 절대 경로 설정
const filePath = path.resolve('products.json');
// JSON 파일 읽기
fs.readFile(filePath, 'utf8', async (err, data) => {
if (err) {
console.error('파일 읽기 오류:', err);
return;
}
if (!data) {
console.error('파일이 비어 있습니다.');
return;
}
let products;
try {
products = JSON.parse(data);
} catch (parseErr) {
console.error('JSON 파싱 오류:', parseErr);
return;
}
// INSERT 문 생성
let insertQuery = 'INSERT INTO product (id, name, description, won_price, en_price, image, sales_area, product_type) VALUES ';
const values = products.map((product, index) => {
return `(${index + 1}, '${product.name}', '${product.description}', ${parseInt(product.won_price.replace(/[^0-9]/g, ''))}, ${parseInt(product.en_price.replace(/[^0-9]/g, ''))}, '${product.image}', '${product.sales_area}', '${product.product_type}')`;
});
insertQuery += values.join(', ');
// 데이터베이스에 쿼리 실행
try {
const [results] = await connection.execute(insertQuery);
console.log('데이터 삽입 성공:', results);
} catch (err) {
console.error('쿼리 실행 오류:', err);
}
// 연결 종료
await connection.end();
});
데이터 베이스 연결 설정에 대한 코드
그리고 필요한 json 파일을 읽는 코드
inser문을 생성해주는 코드 (컬럼은 필요에 따라 맞게 수정)
등을 작성해주시면 됨
그리고 가장 중요한 점은
json 파일과 mjs 파일은 같은 디렉토리 구조 상 같은 곳에 위치해야 합니다
같은 폴더라던지..
사실 그런 문제들을 해결하기 위해 중간에 절대 경로에 관한 설정도 넣었음
// JSON 파일 절대 경로 설정
const filePath = path.resolve('products.json');
이부분이여요
아무튼 상황에 맞게 컬럼 같은 것들을 수정해 주시고 실행시키면 됨
node 파일이름.mjs
여기서 추가로 공부해 볼 점은
1. mjs / js 파일의 차이
2. 절대 경로
정도가 될것같음
아무튼 이렇게 하면?

쨔쟈쟌~
db에 코드가 들어갔다네요
굿.
아무튼 오늘도 한 건 해결!