[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
제가 생각한 벡엔드는 메인서버 데이터베이스에 모든 자료를 저장해 놓고 유저가 요청하는 경우에 필요한 자료를 전송하는 것이라고 생각했는데 sql 강의를 보니 사용자 앱에 자료가 저장되는 것 같아 헷갈리네요. getApplicationDocumansDirectory()라고 하는것을 볼때 사용자의 앱 내에 데이터를 저장하는 것 같은데 벡엔드 서버 구성은 따로 어떻게 되는건지 알고싶습니다
선생님 안녕하세요. 생성자 강의에서 아래 캡처한 부분 설명해주시는 과정에서 기본생성자인 Blackbox()의 중괄호 안에 this("모델명", "해상도", ...) 라고 선생님이 입력하신 내용을 저도 따라 입력해 봤는데요. 제 경우에는 Recursive Constructor Invocation라는 에러 메시지가 뜨는 데 어떻게 해야 문제를 해결할 수 있을까요?
http://boj.kr/06440aeccbb045b8829d9cdadf5f6a33 이 링크는 답지 12행에 있는 if(cnt[i])가 아니라 while(cnt[i)로 바꾸고 이에 맞춰, 18-20행을 바꿔보았습니다. 제출하게되면, 시간초과가 나는데 while을 이용한 제 코드의 시간복잡도는 얼마인가요..? http://boj.kr/1cb106485f6b478ab640c60a6dda5cc0 전에 제가 cnt배열크기를 26이 아닌 200으로 설정한 이유를 여쭤봤었는데, 답변으로 26으로 설정해도 되며 강사님께서 200으로 설정한 이유는 크게 잡기 위해서라고 하셨습니다. 하지만, 링크를 실행하게되면 배열크기를 26, 30으로 잡고했더니 시간초과가 뜹니다. 배열크기를 60, 70으로 설정하면 메모리 초과로 뜹니다. 배열크기를 100으로 해야 정답입니다 라고 뜹니다. 이렇게 배열의 크기가 26이 아닌것 같아서 어떤 근거로 배열 크기를 설정 해야하는지 재 질문 드립니다!
안녕하세요 큰돌님 덕분에 알고리즘을 재미있게 공부하고 있습니다! 질문사항이 있는데요 완전탐색으로 풀이를 해보았는데 시간초과가 났습니다. 그래서 방법을 바꿔 visited를 사용하지 않고 풀어보았는데 통과했습니다. 시간초과가 발생한 정확한 이유를 모르겠어서 디버깅을 해보았는데 두코드간의 함수호출 횟수가 분명 차이가 있었습니다. 하지만 그 원리를 이해하지 못해서 질문드립니다. 디버깅을 하면 할수록 머리가 더 복잡해지는것 같습니다... 시간초과 코드 http://boj.kr/9ca3908dd4624835a28aca2db266321e 정답 코드 http://boj.kr/18bd16121a7d46ada6f06e4313594796
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 2:50초 ObjectMapper import하고 코드 작성 후 부터 서버 실행이 실패했다고 뜹니다. 처음엔 톰캣 문제인줄 알고 지운후 다시 연동해봤으나 안되고 objectmapper 부분을 주석처리하니 정상적으로 서버 실행이 됩니다. import com.fasterxml.jackson.databind.ObjectMapper 으로 가져왔는데 혹시 임포트 주소가 잘못된걸까요?
스프링 데이터 jpa에 정의된 save나 findById같은 메서드들은 기본적으로 @Transactional이 포함돼있어서 비지니스 로직 영역에서 @Transactional을 포함하지 않아도 트랜잭션이 걸리면서 잘 실행되는 것을 확인하였는데 @Query로 선언한 네임드 query같은 경우에도 비지니스 로직 영역에서 @Transactional을 포함하지 않아도 트랜잭션이 걸리면서 실행이 되는 것을 확인했습니다. 왜 그런건가요??
안녕하세요. 토비님. 강의를 들으면서 DispatcherServletConfig 와 TomcatWebServerConfig 정보는 ...import 파일에서 정보를 가져와서 빈으로 등록하는 것으로 이해하였습니다. 그러면 의아했던 점이 ..Config 클래스에 선언한 @MyAutoConfiguration 애노테이션의 역할을 import 파일이 대신 해주고 있는 것으로 이해하였는데, 이 애노테이션도 같이 선언되어있어서 이 애노테이션은 어떤 역할을 하는지 궁금합니다. 실제로 @MyAutoConfiguration 이 애노테이션을 삭제하고 스프링을 실행해도 정상적으로 동작을 하고 테스트도 통과하였습니다. (강의 내에서 토비님께서 관례상으로 붙인다고 말씀하셨던 것으로 기억을 하는데, 이가 @MyAutoConfiguration 애노테이션을 관례상 붙여준다는 의미였는지는 정확히 잘 모르겠어서 질문드렸습니다.) 좋은 강의 만들어주셔서 잘 듣고 있습니다! 감사합니다!!
ref 태그로 특정 input 태그를 가져와 focus를 주는 과정에서 nextTick 프로퍼티를 통해 작업 순서를 앞당겨주는 것으로 focus를 곧바로 실행시키는 부분은 이해하고 있습니다 ( nextTickQueue와 MicroTaskQueue는 이벤트루프상 특정 큐의 실행을 마치기 직전 실행하고 종료하는 것으로 알고 있습니다) 그런데 왜 여기서 ref로 잡아낸 태그에 focus를 주는 과정의 렌더링 사이클이 뒤로 밀리는건지 이해를 못했습니다. 클릭이벤트 실행시 onAddList 함수를 실행하게되면 해당 click 이벤트가 큐로 빠지고, focus 이벤트도 큐로 빠져서 실행하게 될텐데, 그러면 렌더링 순서에는 문제가 없다고 보아야 하지 않을까요? 이게 단순 자바스크립트 이벤트루프 문제로 보아야할지 뷰 라이프사이클 개념에서 별도의 렌더링 단계가 있다고 보아야할지, 아니면 아예 제가 감을 잘못 잡고 있는건지 헷갈립니다.
[질문 내용] 안녕하세요. H2에 시퀀스가 연속적으로 나오지 않고 ID 값이 1,2,33처럼 나옵니다. 그래서 다른분들의 질문을 참고해보았는데 INFORMATION_SCHEMA에 들어있는 시퀀스를 바꿔야하는데 항상 이와 같은 질문에 첨부해주신 블로그에는 따로 시퀀스가 파일??이 존재하였고 그걸 참고로 다양한게 대입해서 바꾸려고 하는데 안되네요... 어떻게 해야하나요.. 대입했던 내용 ALTER SEQUENCE HIBERNATE_SEQUENCE RESTART WITH 1 ALTER SEQUENCES SEQUENCES RESTART WITH 1 ALTER SEQUENCES INFORMATION_SCHEMA.SEQUENCES RESTART WITH 1
안녕하세요 나도코딩 선생님...ㅎ 몇 주전에 나도코딩 자바편 강의를 완강하고 다시 2회차로 강의를 듣는 중입니다...ㅎ 추상 클래스 (abstract class)와 인터페이스(interface) 관련 강의를 들으면서 각각의 특징들 및 차이점들에 대해서 다시 조금씩 알아가고 있는데... (예를 들면, 추상클래스는 abstract 키워드를 가지고, abstract메소드를 가지고 있어서 객체를 생성할 수 없는 반면, 인터페이스(interface)는 보통 -able 키워드, 변수 X, 생성자 X, 오로지 메소드만 있다 등) 이 둘, 그러니까 추상 클래스 (abstract class)와 인터페이스(interface)는 '어느 때 (또는 어느 시점)'에 활용하는게 가장 적절한지 디테일하게 알 수 없을까요? 항상 좋은 강의와 답변 감사합니다...ㅎ
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] 영상에서 12분 40초 부분에 bulkDelete와 관련된 내용입니다. 저는 일단 예제와는 조금 다르게 진행을 하였는데요. delete 하려는 User entity에는 OneToMany 관계로 되어있는 테이블이 하나 있습니다. 그래서 User entity에 Cascade All을 추가했는데 querydsl에서는 에러가 뜨면서 실행이 안되더라구요. 제가알기로는 cascade를 설정해주면 entity가 삭제될 때 관련된 foreign key를 삭제해주는걸로 알고 있는데 아무리 찾아봐도 답이 안보여서 이렇게 질문남깁니다.
import java.util.*; import java.io.*; public class P03_결혼식 { public static void main(String[] args) throws Exception { // 초기 세팅 BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int N = Integer.parseInt(br.readLine()); int[] starts = new int[73]; int[] ends = new int[73]; for (int i=0; i<N; i++) { StringTokenizer st = new StringTokenizer(br.readLine()); int start = Integer.parseInt(st.nextToken()); int end = Integer.parseInt(st.nextToken()); starts[start]++; ends[end]++; } // 로직 int max = 0; int count = 0; for (int i=0; i<starts.length; i++) { count += starts[i]; count -= ends[i]; max = Math.max(max, count); } // 출력 System.out.println(max); } } 저는 이렇게 풀었는데 따로 정렬하는 Class 안 만들고 이렇게 하는것도 괜찮나여 ? 방대한 데이터가 들어왔을 경우에도 문제없는 코드인지 궁금합니다 !
application.properties로 하면 오류가 뜨고 application.yaml로 하면 문제가 해결이 됩니다.. 뭐가 문제인지 모르겠습니다. spring.output.ansi.enabled=always # DB 설정 spring.datasource.url=jdbc:h2:tcp://localhost/~/capstone spring.datasource.username=sa spring.datasource.password= spring.datasource.driver-class-name=org.h2.Driver # JPA 관련 spring.jpa.hibernate.ddl-auto=create-drop #애플리케이션을 시작할 때 데이터베이스를 초기화하고 다시 테이블 생성 # ddl-auto=none로 하면 데이터 보존 spring.jpa.properties.hibernate.format_sql=true #실행되는 query를 보여준다. # JPA Log -> SQL 로거를 통해 출력, 바인딩 되는 파라미터 확인 2가지 가능하도록 logging.level.org.hibernate.SQL=DEBUG logging.level.org.hibernate.type.descriptor.sql.BasicBinder=TRACE # JPA Log #spring.jpa.show-sql=true system.out은 안되야 하므로 이건 X 위가 application.properties이고 logging: level: org: hibernate: SQL: DEBUG type: descriptor: sql: BasicBinder: TRACE spring: datasource: driver-class-name: org.h2.Driver password: url: jdbc:h2:tcp://localhost/~/capstone username: sa jpa: hibernate: ddl-auto: create-drop #??????? ??? ? ??????? ????? ?? ??? ??' properties: hibernate: format_sql: true #???? query? ????.' output: ansi: enabled: always 위가 application.yaml로 실행했을 때 입니다. 어째서 yaml로 해야만 실행되는지 모르겠습니다. 모든 설정은 같은거 같은데 혹시 부트 3.0이라 그런 것인지 궁금합니다.
v16.19.1 8.19.3 mac 2-4. csv에 출력하기 Error: Protocol error (Target.createTarget): Target closed. at /Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Connection.js:74:56 at new Promise (<anonymous>) at Connection.send (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Connection.js:73:12) at Browser._createPageInContext (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Browser.js:174:47) at BrowserContext.newPage (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Browser.js:367:26) at Browser.newPage (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Browser.js:166:33) at Browser.<anonymous> (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/helper.js:112:23) at /Users/youssi/crawler/lecture/index.js:15:34 at Array.map (<anonymous>) at crawler (/Users/youssi/crawler/lecture/index.js:13:31) -- ASYNC -- at Browser.<anonymous> (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/helper.js:111:15) at /Users/youssi/crawler/lecture/index.js:15:34 at Array.map (<anonymous>) at crawler (/Users/youssi/crawler/lecture/index.js:13:31) at processTicksAndRejections (node:internal/process/task_queues:96:5) Error: Protocol error (Target.createTarget): Target closed. at /Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Connection.js:74:56 at new Promise (<anonymous>) at Connection.send (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Connection.js:73:12) at Browser._createPageInContext (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Browser.js:174:47) at BrowserContext.newPage (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Browser.js:367:26) at Browser.newPage (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Browser.js:166:33) at Browser.<anonymous> (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/helper.js:112:23) at /Users/youssi/crawler/lecture/index.js:15:34 at Array.map (<anonymous>) at crawler (/Users/youssi/crawler/lecture/index.js:13:31) -- ASYNC -- at Browser.<anonymous> (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/helper.js:111:15) at /Users/youssi/crawler/lecture/index.js:15:34 at Array.map (<anonymous>) at crawler (/Users/youssi/crawler/lecture/index.js:13:31) at processTicksAndRejections (node:internal/process/task_queues:96:5) Error: Protocol error (Target.createTarget): Target closed. at /Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Connection.js:74:56 at new Promise (<anonymous>) at Connection.send (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Connection.js:73:12) at Browser._createPageInContext (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Browser.js:174:47) at BrowserContext.newPage (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Browser.js:367:26) at Browser.newPage (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Browser.js:166:33) at Browser.<anonymous> (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/helper.js:112:23) at /Users/youssi/crawler/lecture/index.js:15:34 at Array.map (<anonymous>) at crawler (/Users/youssi/crawler/lecture/index.js:13:31) -- ASYNC -- at Browser.<anonymous> (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/helper.js:111:15) at /Users/youssi/crawler/lecture/index.js:15:34 at Array.map (<anonymous>) at crawler (/Users/youssi/crawler/lecture/index.js:13:31) at processTicksAndRejections (node:internal/process/task_queues:96:5) Error: Protocol error (Target.createTarget): Target closed. at /Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Connection.js:74:56 at new Promise (<anonymous>) at Connection.send (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Connection.js:73:12) at Browser._createPageInContext (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Browser.js:174:47) at BrowserContext.newPage (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Browser.js:367:26) at Browser.newPage (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Browser.js:166:33) at Browser.<anonymous> (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/helper.js:112:23) at /Users/youssi/crawler/lecture/index.js:15:34 at Array.map (<anonymous>) at crawler (/Users/youssi/crawler/lecture/index.js:13:31) -- ASYNC -- at Browser.<anonymous> (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/helper.js:111:15) at /Users/youssi/crawler/lecture/index.js:15:34 at Array.map (<anonymous>) at crawler (/Users/youssi/crawler/lecture/index.js:13:31) at processTicksAndRejections (node:internal/process/task_queues:96:5) Error: Protocol error (Target.createTarget): Target closed. at /Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Connection.js:74:56 at new Promise (<anonymous>) at Connection.send (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Connection.js:73:12) at Browser._createPageInContext (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Browser.js:174:47) at BrowserContext.newPage (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Browser.js:367:26) at Browser.newPage (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Browser.js:166:33) at Browser.<anonymous> (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/helper.js:112:23) at /Users/youssi/crawler/lecture/index.js:15:34 at Array.map (<anonymous>) at crawler (/Users/youssi/crawler/lecture/index.js:13:31) -- ASYNC -- at Browser.<anonymous> (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/helper.js:111:15) at /Users/youssi/crawler/lecture/index.js:15:34 at Array.map (<anonymous>) at crawler (/Users/youssi/crawler/lecture/index.js:13:31) at processTicksAndRejections (node:internal/process/task_queues:96:5) Error: Protocol error (Target.createTarget): Target closed. at /Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Connection.js:74:56 at new Promise (<anonymous>) at Connection.send (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Connection.js:73:12) at Browser._createPageInContext (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Browser.js:174:47) at BrowserContext.newPage (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Browser.js:367:26) at Browser.newPage (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Browser.js:166:33) at Browser.<anonymous> (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/helper.js:112:23) at /Users/youssi/crawler/lecture/index.js:15:34 at Array.map (<anonymous>) at crawler (/Users/youssi/crawler/lecture/index.js:13:31) -- ASYNC -- at Browser.<anonymous> (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/helper.js:111:15) at /Users/youssi/crawler/lecture/index.js:15:34 at Array.map (<anonymous>) at crawler (/Users/youssi/crawler/lecture/index.js:13:31) at processTicksAndRejections (node:internal/process/task_queues:96:5) Error: Protocol error (Target.createTarget): Target closed. at /Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Connection.js:74:56 at new Promise (<anonymous>) at Connection.send (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Connection.js:73:12) at Browser._createPageInContext (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Browser.js:174:47) at BrowserContext.newPage (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Browser.js:367:26) at Browser.newPage (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Browser.js:166:33) at Browser.<anonymous> (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/helper.js:112:23) at /Users/youssi/crawler/lecture/index.js:15:34 at Array.map (<anonymous>) at crawler (/Users/youssi/crawler/lecture/index.js:13:31) -- ASYNC -- at Browser.<anonymous> (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/helper.js:111:15) at /Users/youssi/crawler/lecture/index.js:15:34 at Array.map (<anonymous>) at crawler (/Users/youssi/crawler/lecture/index.js:13:31) at processTicksAndRejections (node:internal/process/task_queues:96:5) Error: Protocol error (Target.attachToTarget): Target closed. at /Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Connection.js:74:56 at new Promise (<anonymous>) at Connection.send (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Connection.js:73:12) at Connection.createSession (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Connection.js:153:36) at Target._sessionFactory (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Browser.js:116:75) at Target.page (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Target.js:73:32) at Target.<anonymous> (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/helper.js:112:23) at Browser._createPageInContext (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Browser.js:177:31) at processTicksAndRejections (node:internal/process/task_queues:96:5) at async /Users/youssi/crawler/lecture/index.js:15:20 -- ASYNC -- at Target.<anonymous> (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/helper.js:111:15) at Browser._createPageInContext (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Browser.js:177:31) at processTicksAndRejections (node:internal/process/task_queues:96:5) at async /Users/youssi/crawler/lecture/index.js:15:20 at async Promise.all (index 0) at async crawler (/Users/youssi/crawler/lecture/index.js:13:5) -- ASYNC -- at Browser.<anonymous> (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/helper.js:111:15) at /Users/youssi/crawler/lecture/index.js:15:34 at Array.map (<anonymous>) at crawler (/Users/youssi/crawler/lecture/index.js:13:31) at processTicksAndRejections (node:internal/process/task_queues:96:5) Error: Protocol error (Target.attachToTarget): Target closed. at /Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Connection.js:74:56 at new Promise (<anonymous>) at Connection.send (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Connection.js:73:12) at Connection.createSession (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Connection.js:153:36) at Target._sessionFactory (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Browser.js:116:75) at Target.page (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Target.js:73:32) at Target.<anonymous> (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/helper.js:112:23) at Browser._createPageInContext (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Browser.js:177:31) at processTicksAndRejections (node:internal/process/task_queues:96:5) at async /Users/youssi/crawler/lecture/index.js:15:20 -- ASYNC -- at Target.<anonymous> (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/helper.js:111:15) at Browser._createPageInContext (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Browser.js:177:31) at processTicksAndRejections (node:internal/process/task_queues:96:5) at async /Users/youssi/crawler/lecture/index.js:15:20 at async Promise.all (index 1) at async crawler (/Users/youssi/crawler/lecture/index.js:13:5) -- ASYNC -- at Browser.<anonymous> (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/helper.js:111:15) at /Users/youssi/crawler/lecture/index.js:15:34 at Array.map (<anonymous>) at crawler (/Users/youssi/crawler/lecture/index.js:13:31) at processTicksAndRejections (node:internal/process/task_queues:96:5) Error: Protocol error (Target.attachToTarget): Target closed. at /Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Connection.js:74:56 at new Promise (<anonymous>) at Connection.send (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Connection.js:73:12) at Connection.createSession (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Connection.js:153:36) at Target._sessionFactory (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Browser.js:116:75) at Target.page (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Target.js:73:32) at Target.<anonymous> (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/helper.js:112:23) at Browser._createPageInContext (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Browser.js:177:31) at processTicksAndRejections (node:internal/process/task_queues:96:5) at async /Users/youssi/crawler/lecture/index.js:15:20 -- ASYNC -- at Target.<anonymous> (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/helper.js:111:15) at Browser._createPageInContext (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/Browser.js:177:31) at processTicksAndRejections (node:internal/process/task_queues:96:5) at async /Users/youssi/crawler/lecture/index.js:15:20 at async Promise.all (index 2) at async crawler (/Users/youssi/crawler/lecture/index.js:13:5) -- ASYNC -- at Browser.<anonymous> (/Users/youssi/crawler/lecture/node_modules/puppeteer/lib/helper.js:111:15) at /Users/youssi/crawler/lecture/index.js:15:34 at Array.map (<anonymous>) at crawler (/Users/youssi/crawler/lecture/index.js:13:31) at processTicksAndRejections (node:internal/process/task_queues:96:5) index.js const parse = require('csv-parse/lib/sync'); const stringify = require('csv-stringify/lib/sync'); const fs = require('fs'); const puppeteer = require('puppeteer'); const csv = fs.readFileSync('csv/data.csv'); const records = parse(csv.toString('utf-8')); const crawler = async () => { try{ const result = []; const browser = await puppeteer.launch({ headless: false }); await Promise.all(records.map(async (r, i) => { try{ const page = await browser.newPage(); await page.goto(r[1]); const scoreEl = await page.$('.score.score_left .star_score'); if (scoreEl) { const text = await page.evaluate((tag) => { return tag.textContent; }, scoreEl); console.log(r[0], '평점', text.trim()); result.push([r[0], r[1], text.trim()]); } await Page.waitFor(3000); await page.close(); } catch (e) { console.error(e); } })); await browser.close(); const str = stringify(result); fs.writeFileSync('csv/result.csv', str); } catch (e) { console.error(e); } }; crawler(); package.json { "name": "lecture", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "start": "node index" }, "author": "youssi", "license": "MIT", "dependencies": { "axios": "^1.3.4", "cheerio": "^1.0.0-rc.12", "csv-parse": "^4.4.6", "csv-stringify": "^5.3.0", "puppeteer": "^1.13.0", "xlsx": "^0.18.5" } }