공유 자원(예: map, array 등)에 대해 비동기 코드가 동시에 접근할 때 동시성 문제가 발생할 수 있습니다. 자바스크립트는 단일 스레드 모델 자바스크립트는 기본적으로 단일 스레드에서 동작합니다. 이는 한 번에 하나의 작업만을 실행할 수 있다는 것을 의미합니다.비동기 작업(예: 파일 읽기, 네트워크 요청 등)은 이벤트 루프를 통해 처리되며, 이러한 작업이 완료되면 콜백 큐에 추가되어 메인 스레드가 사용 가능할 때 실행됩니다. Node.js는 개발자가 스레드 간의 동기화 문제를 걱정할 수 없게 설계가 되어있습니다.이러한 단일 스레드 모델은 여러 비동기 작업이 동시에 공유 자원에 접근할 때 동시성 문제를 일으킬 수 있습니다.예를 들어, 여러 비동기 함수가 동시에 배열에 값을 추가하거나 변경하려고 하..
회사 프로젝트 내 node.js 버전을 v22 -> v20으로 바꾸기로 했다. $ node --versionv22.1.0$ nvm install 20 Downloading and installing node v20.13.1...Downloading https://nodejs.org/dist/v20.13.1/node-v20.13.1-darwin-x64.tar.xz...################################################################################################################################################################################################..
import { decrease } from "@/services/repositories/decrease.repository";jest.mock("@/services/repositories/decrease.repository");describe('테스트코드 작성 시작...', () => { ... test('취소하기 중 어떤 유닛 테스트...', async () => { (decrease as jest.Mock).mockResolvedValue(...); ... jest로 테스트하는 코드를 보면 위처럼 작성하는 코드를 볼 수 있다. jest.mock을 사용하면 모듈 내의 모든 함수와 클래스를 자동으로 모킹할 수 있다.그럼 위 코드는 어떻게 동작하는걸까? @/serv..
moleculer 프레임워크는 모노레포로 프로젝트를 구성해서 각 환경? 을 관리한다.모노레포는 공통이 되는 모듈을 npm에 배포해서 패키지형태로 관리하게 되는데이를 위해 Npm에 간단하게 배포하는 과정을 경험해보고자 한다. 1. 현재 프로젝트를 패키지로 만들기 $ npm init --scope=jihoon 개발자 Jihoon이라는 사람이 자신의 패키지를 발행하려고 할 때, jihoon이라는 스코프를 사용하여 패키지를 발행할 수 있다.이렇게 하면 패키지의 이름이 @jihoon/패키지이름 형식으로 지정되며, 해당 패키지가 Jihoon이라는 개발자에 의해 생성되었음을 명시적으로 알 수 있게 된다.따라서 npm init --scope=jihoon 명령어를 사용하면 Jihoon이라는 스코프로 새로운 npm 패..
(node:31) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 exit listeners added to [Bus]. Use emitter.setMaxListeners() to increase limit 2023-12-20 20:05:28 (Use `node --trace-warnings ...` to show where the warning was created) 위같은 경고가 떴다. 원인 1. 메모리 관리를 못해서 필요하다는 경고 2. 외부 서비스 붙일 때, 이벤트 리스너를 추가하게 되는데 너무 많이 붙이면 경고 발생 가능함. Node.js에서 Redis, MySQL, RabbitMQ와 같은 외부 서비스를 사용..
이전에 NVM으로 NodeJS 버전을 관리했었다.(참고 https://geabalseabal.tistory.com/245) 이제 자바스크립트 문법을 공부하는데, 터미널에 어떻게 뜨는지 확인하고 싶었다. 매우 간단하다. 새로운 디렉토리를 만들었다. # 디렉토리 생성 & mkdir javascript_playground && cd javascript_playgroun # 디렉토리 내 파일 확인(나는 test.js라는 파일을 생성했다.) & ls test.js # 디렉토리 내 설치된 노드 버전이 있는지 확인 $ nvm list v17.9.1 v18.16.1 -> v18.17.0 default -> v18 (-> v18.17.0) iojs -> N/A (default) unstable -> N/A (defaul..
JS를 설치하려면 NodeJS를 설치해야한다. 근데 프로젝트마다 노드 버전이 다를 수 있다. 간략하게 설명한다. JS를 사용하기 위해서 V8이라는 JavaScript 엔진 위에서 동작하는 자바스크립트 런타임(환경) -> NodeJS 프로젝트마다 각기 다른 노드 버전을 설치해서 관리하기 위해서 사용하는 노드 버전 매니저 -> NVM 프로젝트 내에서 노드를 가지고 설치한 패키지들을 관리하기 위한 매니저 -> NPM 그래서 순서를 정하자면, 1. NVM 설치 2. NVM으로 노드버전 설치 3. 프로젝트(Express든 NestJS 든) 실행 후 패키지 매니저로 NPM init으로 프로젝트 내에서 패키지 버전 관리 * NVM 내에서 NodeJS 버전을 골라서 설치하는 것이다. 기존 Local 컴퓨터에 Globa..