반응형

프로세스 종료를 위해 kill -9 PID 방식을 사용했다.

 

하지만 이런 경우 프로세스의 서브프로세스는 종료되지 않고 계속 남아, 다시 kill -9 PID로 모든 서브프로세스를 종료해야 했다.

 

이제는 kill -9 PID 대신 kill -TERM PID 방식을 사용하자.

kill -SIGNAL PID 명령에서 SIGNAL의 default는 -TERM이므로, 안전하게 프로세스를 종료하고자 한다면 -9 옵션을 사용하지 말자.

 

반응형

'개발환경 > Mac' 카테고리의 다른 글

subprocess가 죽지 않을 때  (0) 2021.08.09
[Parallels][Big Sur] localhost 접근  (0) 2021.05.10
iTerm 실행 키보드 단축키 설정  (0) 2020.05.26
반응형

enum과 const object는 비슷하게 동작하는듯 하면서도 다르다. 그 차이에 대해서 알아보자.

enum

값 또는 상수를 가독성 높게 사용할 수 있다.

// 상수인 경우
enum Gender {
  Male,
  Female,
};

// 문자열인 경우
enum Gender {
  Male = 'male',
  Female = 'female',
};

const object

일반 Javascript 객체와 동일하다.

// 상수인 경우
const Gender = {
  Male: 0,
  Female: 1,
};

// 문자열인 경우
const Gender = {
  Male: 'male',
  Female: 'female',
};

차이

1. enum

transpile 이후에 역방향 매핑을 위한 값이 부가적으로 생겨난다.

// 작성
enum Gender {
  Male = 0,
  Female = 1,
};

// transpile 이후의 상태,
var Gender;
(function (Gender) {
    Gender[Gender["Male"] = 0] = "Male";
    Gender[Gender["Female"] = 1] = "Female";
})(Gender || (Gender = {}));

// Gender의 상태는 풀어서 작성하면 다음과 같다
var Gender = {
  Male: 0,
  Female: 1,
  // 역방향 매핑을 위한 값들이 생겨났다
  '0': 'Male',
  '1': 'Female',
}

2. const object

object는 primitive 타입이 아니기 때문에 const이더라도 내부의 값은 수정이 가능하다.
즉, enum으로써의 불변성이 보장되지 않는다.

const Gender = {
  Male: 0,
  Female: 1,
};
Gender.male; // 0
Gender.Male = 2; // <-- 값을 변경할 수 있다
Gender.Male; // 2

보완

1. enum

역방향 매핑은 경우에 따라 필요하지만 현재 코드에서 사용하지 않는다면 const enum으로 변경하자.
const enum을 사용하면 transpile 이후에 역방향 매핑을 위한 부가적인 코드가 추가되지 않는다.

// 작성
const enum Gender {
  Male,
  Female,
};
console.log(Gender.Male);

// transpile 이후
console.log(0 /* Male */); // 해당 하는 값이 바로 설정되었다

2. const object

as const를 사용하여 object 내부 필드의 수정을 방지하자.

const Gender = {
  Male: 0,
  Female: 1,
} as const;

Gender.Male = 2; // Cannot assign to 'Male' because it is a read-only property.

결론

  • 역방향 매핑의 사용이 필요하다면 enum을 사용하자.
  • 그렇지 않다면 const enum이나 as const를 사용하자.
    • as const는 타입 추론시에 타입 추론의 범위를 줄여준다.
반응형
반응형

curl 을 사용해 로컬에 있는 파일을 업로드하기 위해서는 다음과 같이 --upload-file(-T) 옵션을 사용하면 된다.

curl --upload-file {file path}

 

그런데 위에서 전달받은 파일을 fetch API를 사용해 다른 API의 body로 전달하려고하면 해당 파일의 타입이 ReadableStream이라 실제 파일의 타입으로 내용이 전달되지 않는다.

 

ReadableStream을 원하는 타입으로 전달하기 위해선 다음과 같이 처리하면 된다.

const response = new Response(data as ReadableStream); // stream으로 Response 객체 생성
const text = await response.text();

fetch(url, {
  method: 'post',
  // stream이 javascript 파일이라면 Content-Type 헤더를 설정해주면 된다.
  // headers: {
  //   'Content-Type': 'application/javascript',
  // },
  body: text,
});

 

반응형

+ Recent posts