녕후킴

10월 2주차

0 views

📌 nest 공부 시작

저번 주 토요일에 기숙사를 들어갔다. 덕분에 출퇴근 시간이 1시간에서 5분으로 단축됐다. 책상 앞에 앉아 있을 수 있는 시간이 늘어났는데, 뭘 하면 좋을까 하다가 회사에서 백엔드 인력도 부족해서 프로젝트 진행이 안되기도 하고, 이전에 사놓고 안들어놓은 nestjs 강의도 있어서 해당 강의를 수강하며 백엔드에 shallow dive 해보려고 한다.


📌 listens on port 3000 for connections

express 공식 문서에서 listens on port 3000 for connections 라는 문장을 봤다. 낯이 익어서 언제 봤지 했는데, TCP 통신의 3 way handshake에서 본것 같다. 벌써부터 지식이 확장되는 느낌이 든다. 끌끌,,,


📌 command + J

터미널 여는 단축키를 몰라서 맨날 command palette 열고, View Toggle 터미널의 약자인 vt를 입력해서 띄우곤 했는데, 오늘 nest 강의에서 command + J를 통해 들어갈 수 있다는 것을 배웠다. 이로써 생산성이 조금 더 향상되었다. 끌끌,,,


📌 Strong and Weak Typing

타입스크립트를 공부하면서 Strong Type과 Weak Type이라는 단어를 심심치 않게 마주친게 기억나서 리서치했다. 이 두 용어 자체는 굉장히 모호해서, 다음 네가지로 해석될 수 있다고 한다.

  1. strong은 static을 의미하기도 하지만, 대부분의 사람들은 static의 정의에 동의하기 때문에 static을 사용하는게 좋습니다.

  2. strong은 데이터 타입간에 암묵적인 형변환이 발생하지 않음을 의미합니다. 예를들면, 자바스크립트는 Weak Typing으로 “a” - 1을 허용합니다. 하지만 대부분의 언어의 경우, 1 - 1.1과 같은 정수에서 소수로의 변환과 같이, 암묵적 형변환의 수준이 정해져 있습니다. strong은 허용되는 형변환과 허용되지 않는 형변환의 기준을 나누는데, strong, 그러니까 이 기준에는 명확한 기준이 없으며 개개인에 따라서 다릅니다.

  3. strong은 언어의 타입 규칙을 어길 수 없음을 의미하기도 합니다.

  4. strong은 memory-safe함을 의미합니다. C가 좋은 예입니다. 만약 xs가 4개의 숫자를 저장하는 배열이라고 해도, C는 xs[5]나 xs[1000]을 허용합니다.

위처럼 뭐 다양하게 사용되는 것 같은데, 타입스크립트에서 마주치는 strong과 weak의 쓰임은 2번이 아닐까 싶다.

Strong and Weak Typing


📌 Life Cycle Script

아래 script에서 npm run start를 했을 때, prestart와 build가 먼저 실행된다고 한다.

{
  "scripts": {
    "prestart": "npm run build",
    "build" "tsc",
    "start": "node dist/app.js"
  }
}

prestart가 먼저 실행되면 npm run build가 실행되기 때문에 tsc가 실행되는 것 인정. 그런데 prestart가 왜 먼저 실행될까? 하던 의문이 들던차에, Life Cycle Script의 존재에 대해서 알게되었다. 이름 그대로 start가 실행되기 전에 prestart가 실행되는 것인데, git life cycle과 비슷하게 바라보면 될듯하다. @___@


📌 tsc-watch package

nest강의에 셋업에 대한 추가적인 설명이 없어서 리서치했다. tsc-watch는 타입스크립트를 위한 nodemon이라고한다. nodemon은 소스 코드에 어떠한 변경이 발생했을 때 자동으로 서버를 다시 시작하는 유틸리티를 의미한다고 한다. tsc-watch는 타입스크립트 컴파일러를 –watch 플래그와 함께 실행하고, 추가적으로 컴파일의 상태(성공, 실패와 같은)에 따른 COMMAND 실행도 가능하게 한다고 한다.

{
  "scripts": {
    "start:dev": "tsc-watch --onSuccess \"node dist/app.js\"",
  }
}

위 명령어는 타입스크립트 컴파일이 성공했을 때, node dist/app.js 명령어를 실행하는 스크립트로 볼수있다.


📌 Signleton 패턴

오픈소스 컨트리뷰션을 하면서, commit에 따른 code diff view 코드를 구현하기 위해서 git lens 코드를 리버스 엔지니어링한 경험이 있다. 그때 당시에 어떤 클래스가 자기 자신의 인스턴스를 자기 자신의 정적 메서드에서 호출하는 코드를 본적이 있었다. 촉으로 ‘이거 패턴이다! 패턴같은데!!’라고 내적 호기심의 폭발과 함께 개발자 톡방에 물어봤지만 읽씹당했다🤮. 당시에 “언젠가 너 또 만나겠지?” 하고 있었는데, 이번에 nest 공부하면서 만나게 됐다. 얼마나 반가운지 ㅋㅋㅋㅋ 기념으로 creational에 정리해 두었다.