Node

    data mapper 패턴, active record 패턴 🌱

    이제껏 백엔드 에서 orm을 사용할때 rails에서는 active record 패턴을, nestjs에서는 data mapper 패턴을 사용하였습니다. (rails에서는 ActiveRecord를 nestjs에서는 typeorm을 사용하였었습니다) 두 패턴간의 특징을 정리해두려 합니다 DB를 조회하는 메소드를 모델내에 정의하면 active record 패턴 별도의 repositories 클래스를 생성하여 쿼리 메소드를 작성하는 것은 data mapper 패턴이라 합니다. active record 패턴 DB를 조회하는 메소드를 모델내에 정의하는 패턴을 active record 패턴이라 합니다. 간단하다고 생각합니다. 개인적인 생각으로는 typeorm 에서는 entity 내부에 관계정의까지 같이 정의하는 것이 ..

    npm link

    npm link

    2022.03.04 - [Node] - nestjs 코드레벨에서 까보기 에서 nest의 여러 패키지들을 까볼때 두가지 방법을 썼다 일단 둘다 무식하게 console.log를 하나씩 찍어봤다. nest는 추상화가 잘 되어있다고 코드를 읽으면서 느꼈다. 근데 2~3 depth 넘어가게 되면 계속 흐름을 놓쳤다. (아직 큰 흐름이 크게 안읽힌다... 정진하자) 1. nest 라이브러리를 clone 받고나서 npm link를 이용하였다. 2. node_modules 에 설치되어있는 코드에서 console.log를 하나씩 찍었다. 2번을 시도하기 전에 1번으로 계속 시도했었다. 1번의 효율이 너무 안좋아서 2번으로 우회하였다. 1번을 시도하면서 알게된 방법이 npm link이다. @nest-cli를 적용할때는 n..

    nestjs 의존성 주입, 싱글턴 패턴

    nestjs 의존성 주입, 싱글턴 패턴

    HTML 삽입 미리보기할 수 없는 소스 싱글턴 패턴 nestjs에서는 모듈들(@Module, @Injectable 데코레이터를 사용하여 등록한 것들)에 싱글턴 패턴을 적용하여 사용한다. 싱글턴 패턴은 뭐고 왜 사용하는 것일까?? 싱글턴 패턴은 인스턴스를 메모리에 최초로 만들어두고 사용하는 디자인 패턴이다. 매 요청마다 인스턴스를 생성하면 메모리 관리에 어려울 수 밖에 없다(언제 삭제해줘야하는지 알수가 없음) 따라서 nestjs에서는 의존성이 주입된 모듈들을 global scope로 최초 실행시 메모리에 인스턴스를 띄워두고 각 모듈들을 사용해야 하면 메모리에서 꺼내 쓴다. (scope는 설정 가능) Node 는 싱글스레드로 동작하기 때문에 싱글턴 패턴으로 모듈들을 관리해도 문제가 없다(동시성 이슈가 발생 ..

    npm 만드는 법 && 출시

    npm 만드는 법 && 출시

    간단한 node package를 만들고 출시까지 진행하는 방법을 알아보겠습니다. 진행 순서는 다음과 같습니다. 1. 패키지 만들기 2. 로컬에서 해당 패키지 테스트 3. npm 사이트 회원가입 4. npm cli 이용해서 배포 5. npm으로 다운받고 테스트 해보기 1. 패키지 만들기 1-1 제일 처음에 폴더를 만들고 (이름을 조금 특이하게 지었습니다.) mkdir npm_my_dist_test npm init -y npm init -y 를 하게 되면 package.json 파일이 생성됩니다. 잠시 package.json에 대해 살펴보고 가겠습니다. package.json이란?? npm으로 출시를 진행하려면 package.json은 필수입니다. 다른 이들이 설치와 관리를 쉽게 하기 위해 추가할수 있습니다..

    .npmignore

    .npmignore

    최근 npm을 하나 만들면서 npmignore에 대해 궁금중이 생겼습니다. .npmignore은 package에 포함되지 않을 내용을 지정할 수 있습니다. .npmignore이 존재하지 않을시에는 .gitignore의 내용을 패키지에 포함 시키지 않습니다. 제가 겪었던 상황은 다음과 같습니다. .npmignore에 추가했지만 npm으로 배포를 했을때 npmignore의 내용들이 포함이 되어서 배포가 되었습니다. 제가 내린 결론은 다음과 같습니다. (공식적인 정답은 찾지 못하였습니다) 공식문서에서의 내용 package.json의 files에 포함된 파일들은 .npmignore와 .gitignore로 인해 제외될수 없습니다. 1. package.json에 있는 entry_point들의 내용들과 files의 ..

    algorithm-cli 생성기

    algorithm-cli 생성기

    아래의 포스팅은 algorithm cli를 만들어 보면서 고민했던 내용들에 대한 기록과 프로젝트 구조에 대한 내용입니다. npm을 이용해서 node 패키지를 만들었습니다. https://github.com/woobottle/algorithm-cli GitHub - woobottle/algorithm-cli Contribute to woobottle/algorithm-cli development by creating an account on GitHub. github.com https://www.npmjs.com/package/algorithm-cli algorithm-cli algrorithm solve file create program. Latest version: 0.0.3, last publish..

    console.log vs process.stdout.write

    console.log vs process.stdout.write

    최근 node 패키지를 하나 만들다가 process.stdout.write을 이용하는 경우가 생겼었습니다. 단순히 출력을 해주는 기능 같은데 기존에 자주 사용하던 console.log와는 무엇이 다른 것일까요? 위의 결과에서 어떤것이 console.log, process.stdout.write를 이용한 것 일까요 console.log("console.log") console.log("vs") console.log("process.stdout.write"); process.stdout.write("console.log ") process.stdout.write("vs "); process.stdout.write("process.stdout.write"); 개행이 들어간것이 console.log를 이용 들..

    서버 기본 세팅

    sudo apt-get install curl curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash - sudo apt-get install -y nodejs sudo apit-get install build-essential sudo apt-get install build-essential sudo npm install -g pm2 sudo npm install -g yarn sudo npm install -g n

    NestJs Request LifeCycle

    NestJs Request LifeCycle

    Nest Request LifeCycle Nest에서 request가 오고 나서 부터 response를 주기까지의 lifecycle에 관한 글입니다. 사용자 인증이나 parameter의 검증 등 필요한 메소드들을 적절한 단계에서 사용하면 앱은 더욱 견고해 질것입니다. Middleware, Guard, Interceptor, Pipe에 대한 지식이 선행되어 있으면 더욱 좋습니다. 먼저 큰 틀에서 보면 MiddleWare -> Guard -> Interceptor -> Pipe -> Controller -> Interceptor 입니다. 아래의 그림에서는 guard에서 부터 예외 상황이 발생할시에는 @useCatch로 exception filter에서 처리할 수 있습니다. exception filter를 g..

    Package subpath './package.json' is not definded by "exports" in ~~~

    Package subpath './package.json' is not definded by "exports" in ~~~

    mac에서 brew update를 한 이후에 아래와 같은 문제가 계속 발생했다. 설치되어 있는 node 버전이 17이여서 에러가 발생하는 것이라는 블로그 글을 보고 node 버전을 확인해보니 17.0.1 이었다. 설치된 node를 16대로 내리고 다시 수행해 보기로 했다. node 버전 관리에는 n과 nvm이 있는데 저 같은 경우 n을 사용합니다. sudo npm install -g n sudo yarn install -g n 현재 설치되어 있는 버전 확인하기 n -> 현재 설치 되어있는 node 버전은 16.13.0이고 사용중인것은 16.13.0이 라는 것을 확인할 수 있습니다. node 버전을 변경하고 싶을때는 n 을 하거나 n 을 누르고 나오는 node의 버전 리스트 중 하나를 클릭하면 됩니다. 노..