반응형

코드를 먼저 보면 다음과 같다.

 

http.get을 통해 리모트 경로의 파일을 요청하고 응답으로 반환되는 Readable한 객체의 pipe 메소드를 통해 csv-parser를 실행시켜 주면된다.

 

참고로 readStream과 writeStream이 존재할 때 pipe는 다음과 동일하게 변경할 수 있다.

const readStream = fs.createReadStream("some file"); // response
const writeStream = fs.createWriteStream("another file");

readStream.on("data", (chunk) => {
  writeStream.write(chunk);
});
// can be ==> readStream.pipe(writeStream);

gist 예시의 pipe를 제거해보려고 했으나, 아직은 어떻게 하는지 모르겠고 csv-parser 모듈에도 그런 설명이 없어 넘어가기로 한다.

 

csv-parser 모듈의 리드미에는 로컬에 존재하는 csv파일을 기준으로 아주 쉽게 설명되어 있으나, 막상 이를 리모트 파일로 변경하려다보니 온갖 이슈(파일을 다 읽기 전에 파싱을 시작해버린다거나, 이전에 읽은 것이 남아 있다거나...)가 발생하였다.

 

stream과 pipe에 대해 대략적으로라도 알고 시작했으면 더 빨리 해결할 수 있었을텐데 하는 아쉬움이 남는다.

더 유명한 csv 파싱 모듈로 papaparse가 있는데, 이것도 마찬가지로 리모트 파일에 대한 공식 예시 코드가 없어 어려움이 있었다.

 

좀 더 파악이 되면 다시 시도해봐도 좋을 것 같다.

반응형
반응형

웹 개발을 하다보면 브라우저에 디버깅의 대부분은 브라우저에서 이루어 진다. 프론트엔드의 경우 99% 비율로 브라우저에서 디버깅을 하게 된다.

 

좀 더 손쉬운 디버깅을 위해 라인 넘버를 클릭해 중단점을 걸어 디버깅을 진행하는 방법이 있다.

하지만 반복문의 특정 인덱스에 대한 디버깅이나 비동기로 실행되는 코드가 특정 값을 반환하는 경우에만 디버깅을 하는 것은 위 방식으로는 상당히 번거롭다.

좀 더 나은 방법으로는 코드에 debugger 키워드를 활용하여 원하는 조건과 함께 작성하는 것이다. 다음과 같이 사용해 볼 수 있다.

// 1. 반복문
for (let i = 0; i < 100; i++) {
  if (debuggingCondition) {
    debugger;
  }
  
  ...someLogicHere...
}

// 2. 비동기 통신
fetch(someAPI).then((res) => {
  if (debuggingCondition) {
    debugger;
  }
  ...someLogicHere...
}

 

이 방식을 통해 원하는 조건에서 코드를 중단 시키는 것이 가능해졌다. 하지만 디버깅을 위해선 코드를 수정할 수 있어야 하고, 수정하더라도 나중에 다시 복구해야하므로 번거롭다.

 

이 경우 크롬 개발자 도구의 조건부 중단점 기능을 활용해볼 수 있다. 방식은 위에서 작성한 것과 유사하다.

 

1. 조건부 중단점을 추가할 라인넘버를 우클릭한 후 "Add conditional breakpoint"를 선택한다.

 

 

2. 표시되는 입력 폼에 중단할 조건을 입력한다.

 

 

3. 엔터를 치면 다음과 같이 반만 칠해진 빨간 원이 나타난다.

 

 

4. 페이지를 새로고침하면 추가한 조건에서 중단점이 동작한 것을 확인할 수 있다.

 

 

 

 

조건부 중단점을 사용하면 원래 코드를 건드리지 않고도 깔끔하게 원하는 지점에서 코드를 중단할 수 있다.

반응형
반응형

nodejs로 작성된 서버를 실행하는 방법에는 여러 가지가 있다.

 

server.js 라는 파일에 서버 코드를 작성 하였다고 가정하면.

 

1. 파일을 직접 실행

node server.js

 

2. package.json에 실행 명령을 등록한 후 npm 명령을 통해 실행

{
  ...
  "scripts": {
    "start": "node server.js"
  },
  ...
}
npm start # 또는 npm run start

 

3. pm2를 활용하여 실행

pm2 start server.js

 

 

1, 2번의 경우 서버 실행 시 프로세스가 foreground에 떠있으므로 새로운 작업을 하려는 경우 새로운 세션을 열어 작업을 해야한다. background에서 동작하도록 처리하는 방법은 여러가지가 있으나 pm2를 사용할수만 있다면 그냥 pm2를 사용하는 것이 여러모로 편하다.

 

웬만하면 pm2를 사용하는데 문제가 없지만 package.json에 등록해둔 스크립트를 실행할 때 문제가 생기게 된다.

예를 들어, 다음과 같이 명령에 여러 옵션을 제공해야 한다고 가정해보자.

{
  ...
  "scripts": {
    "start": "node server.js -p 9090 -c myconfig.json"
  },
  ...
}

위 코드를 다음과 같이 pm2에서 시도한다면 옵션에 대한 주체가 pm2로 변경되기 때문에 에러가 발생한다.

pm2 start server.js -p 9090 -c myconfig.json

이런 경우, 기존 방식대로 서버 파일을 직접 사용하는 대신 스크립트에 등록한 명령을 바로 활용하면 된다.

pm2 start npm -- start # npm start 와 동일한 작업을 수행한다.

 

반응형

+ Recent posts