Q) 자바스크립트는 싱글 스레드 언어입니다. 그러나 node.js에서 작업하면 두세 개 작업을 동시에 할 수 있는데, 원리가 뭘까요? A) Node.js는 파일 시스템 작업, 네트워크 요청 등 대부분의 작업을 비동기로 처리합니다. 콜백(callback), 프로미스(promises), async/await 등의 기능으로 한 번에 여러 요청을 보내더라도 꼬이지 않고 순차적 처리가 되는데요, 비동기 작업을 통해서 동시에 여러 작업을 거의 동시에 처리할 수 있습니다. T : 순차적 처리라고 하셨는데, 동시에 작업하는 것과는 약간 개념이 다른 것 같습니다. 그렇다면, 실행에 1초가 걸리는 함수를 100번 호출하면 100초의 시간이 걸리는 걸까요? 나 : 헉 그러게요... T : 이벤트 루프에 대해 공부해보시면 좋..
javascript
반응형
Q. find의 인자로 들어간 변수 'article'? private articles: { id: number; title: string; content: string }[] = []; update(id: number, updatePostDto: UpdatePostDto) { const {content, password} = updatePostDto; const article = this.articles.find((article)=>article.id === id); } 여기서 사용된 article은 JavaScript의 Array.prototype.find 메서드에서 콜백 함수의 인자로 넘어온 변수다. find 메서드는 배열의 각 요소에 대해 콜백 함수를 실행하며, 콜백 함수의 첫 번째 인자로 현재 처..
TypeScript 개발 환경을 구축하기 위해선 Node.js를 먼저 설치할 필요가 있다. npm이라는 Node.js기반 패키지 매니저를 통해 TypeScript를 설치할 예정이기 때문 Node.js 설치는 아래 블로그 글 참조 https://im-running.tistory.com/7 MacOS 기반으로 TypeScript 설치하는 방법 # npm 사용 가능한지 버전 확인 npm -v 위와 같이 node.js가 설치되어 있는지 먼저 확인하고 다음과 같은 명령어를 실행해 준다. npm i typescript -g 글로벌하게 typescript가 설치되었다. tsc tsc를 입력하여 커맨드들이 제대로 출력되는지 확인하자! 제대로 출력된다면 TypeScript 설치 완료.
캐시 특강 캐시에 대하여 CPU? 메모리에서 연산자와 피연산자의 정보를 가져온다. 흠... 이거보다 더 빠른 방법이 없을까? 메모리에 물어보기 전에 캐시한테 물어봐서, 캐시가 갖고 있으면 캐시에서 데이터를 갖고 오는 게 빠르다! 이유? 캐시가 더 가까움(100미터 떨어진 자판기1km 떨어진 편의점) 특정 음료가 자판기에 있으면 cache hit : 편의점에 안 가도 됨 특정 음료가 자판기에 없으면 cache miss : 편의점에 가야 함~ 그럼, 편의점보다 가까운 자판기에 인기가 있을만한 음료수를 배치하면 굳이 편의점에 안 가고 여기서 계속 이용하겠지? 캐시가 인기 있을만한 정보를 미리 들고 있으면 CPU가 캐시에게 물어본다. 내가 지금 메모리 OO에 위치한 변수의 값을 좀 가져와야겠는데 혹시 그거 아니..
타입스크립트 강의 1주차 JavaScript가 나온 이유 - JavaScript는 원래 웹 페이지에 동적인 효과를 주기 위해 만들어진 스크립트 언어다. 웹 페이지의 부드러운 상호작용을 위해 HTML과 CSS와 함께 사용되었음 JavaScript의 발전 시간이 지나면서 웹 브라우저 내에서 실행되는 JavaScript의 성능을 높이고자 하는 니즈가 생김 구글에서 V8 엔진을 공개 C++로 작성된 Google의 오픈소스 고성능 JavaScript 및 WebAssembly 엔진 Google Chrome 웹 브라우저에 처음 사용되었으며, 현재는 Node.js, Deno 및 다양한 다른 소프트웨어 프로젝트에서도 널리 사용됨 자바스크립트 코드를 실행하기 위해 고성능을 제공하며, 자바스크립트를 직접 기계어로 컴파일하는..

의존성 주입에 대하여 메뉴 관련 service 파일을 수정하는 과정에서 문제가 발생했다. 메뉴 등록시, 해당 메뉴를 등록할 업장(가게)이 존재하지 않으면 오류를 발생시키려고 했는데, 해당 코드에서 의존성을 주입한 this.storesRepository를 읽어오지 못하는 것이다. 어떤 부분이 문제인가 싶어 의존성 주입한 부분을 다시 살펴봤다. // service 파일 내부 constructor(menuRepository, storesRepository) { this.menuRepository = menuRepository; this.storesRepository = storesRepository; } // router 파일 const storesRepository = new StoresRepository(..
구조 분해 할당이란? 구조 분해 할당(Destructuring Assignment)은 ECMAScript 2015(ES6)에서 도입된 JavaScript의 문법으로, 배열이나 객체의 속성을 해체하여 그 값을 개별 변수에 담을 수 있게 해주는 표현식이다. 이 문법은 코드를 더 간결하고 읽기 쉽게 만들며, 데이터를 다루는 작업을 더 효율적으로 할 수 있게 돕는다고 한다. 예를 들어 보자. // 객체 구조 분해 const person = { name: 'Nye', age: 30 }; const { name, age } = person; console.log(name); // Nye console.log(age); // 30 //배열 구조 분해 const numbers = [1, 2, 3]; const [one..
자동 로그인 구현 로그인 검증용 미들웨어를 조금 수정하여 자동 로그인을 구현했다. 검증이 필요한 요청을 보낼 때마다 해당 미들웨어를 거치는데, 여기에서 토큰을 검증하고 액세스 토큰이 만료가 되어있으면 리프래시 토큰이 살아있는지 체크한다... if (error.name === 'TokenExpiredError' && refreshToken) { try { const decodedRefreshToken = jwt.verify( refreshToken, process.env.REFRESH_TOKEN_SECRET_KEY, ); const newAccessToken = createAccessToken(decodedRefreshToken.id); res.cookie('accessToken', newAccessTok..
이력서 업데이트 patch를 사용하여 이력서 항목을 업데이트 하는 로직을 구현했는데, 테스트 중 문제를 하나 알게 되었다... const updatedResume = await prisma.resumes.update({ where: { resumeId: +resumeId }, data: { title:title, contents:contents, statusCode:statusCode, }, }); 사실 이렇게 기존 코드로 업데이트를 진행해도 무방하나 데이터를 보내지 않을 경우 해당 데이터도 공란으로 엎어쳐지는 문제가 있었다. 사실 업데이트 때보다 신규 등록시에 더 문제가 되는 부분이었다. statusCode라는 컬럼의 기본값이 "APPLY"인데, 이력서 등록 시 다른 값이 들어갈 가능성을 고려해서(관리..
반응형