인프런 커뮤니티 질문&답변

김태희님의 프로필 이미지
김태희

작성한 질문수

Node.js로 웹 크롤링하기

1-1. 웹 크롤러 소개

크롤링을 여러개 돌리려면 어떠한 방법을 선택하는게 좋을까요?

작성

·

675

0

안녕하세요, 지금 Puppeteer로 크롤링을 하고있는데 예를들어서 1 ~ 10까지 작업이 각각 있다고했을때 이 10가지의 크롤링 작업을 완료하는데 너무 오래걸려서 Multi Processing 혹은 Multi Thread 방식을 생각하고 있습니다. 둘중에 어떠한게 좋을까요?

 

Puppeteer 1개(node process 1개)로 1~10까지 돌렸을때 너무 오래걸려서 이걸 각각의 작업당 프로세스 1개를 붙힐것인지, 아니면 Process는 하나인데 Worker Thread를 여러개 만들어서 Main 스레드는 1번 작업, 나머지 9개 Worker Thread 생성해서 각각 작업에 한개씩 붙혀서 작업하게끔 하는게 좋을지 고민하고 있는데 혹시 어떠한 방법이 좋을까요 ?

혹시 설명이 부족할까봐 좀 구체적으로 예시를 남기면,

<기존방식>

작업들: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10

이름이 main.js인 1개 자바스크립트 파일을 node main.js로 실행 및 이걸로 그냥 1~10까지 작업들을 모두 동기적으로 처리

>> 너무 시간이 오래걸림

<원하는 방식 및 고민하고 있는 2가지 방식>

작업들: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10

  1. 이름이 main.js인 1개 자바스크립트 파일이 있고 process.argv로 인자를 줘서 아래와 같이 node process를 10개를 생성하여 각각 작업들을 1개의 프로세스들이 실행

node main.js 1
node main.js 2
node main.js 3
...
node main.js 10

 

  1. 이름이 main.js인 1개 자바스크립트 파일이 있고 거기에서 Worker Thread 9개를 만들어서 Main Thread는 1번작업에 붙히고, 만든 9개 Worker Thread를 각각 2,3,4 ~ 10까지의 작업에 각각 한개씩 붙혀서 작업

감사합니다

답변 1

0

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

멀티 프로세스와 멀티 스레드의 차이를 생각해보시면 될 것 같습니다. 프로세스는 자원 공유가 안 되고 쓰레드는 가능합니다. 1~10까지의 작업이 서로 중간에 공유할 데이터가 있는지는 모르겠네요. 프로세스의 경우는 DB나 redis를 활용해서 자원 공유해도 됩니다.

김태희님의 프로필 이미지
김태희

작성한 질문수

질문하기