개요 백엔드를 주 개발을 하면서 뷰까지 개발하게 되면 `SSR`을 사용하게 되는데, 이러한 `SSR`을 사용하게 되면 문제는 실시간으로 반영되는 데이터를 유저에게 보여줄 수 없다는 것입니다. 그렇다면 유저는 당연하게도 원하는 데이터를 화면에서 보기 위해서 페이지 새로고침을 해야 한다는 것입니다. 이러한 문제를 해결하기 위해서 사용되는 방식은 `SSE`와 웹소켓인데 이번 그 중에서 `SSE`를 `Nest.js`로 구현하면서 이해 해보고자합니다. SSE vs Web Socket 기술을 사용하기 전에 실시간 통신을 하기위해 사용되는 `SSE`와 `Web Socket`은 어떠한 차이가 있는지 알아 보고자 합니다. SSE `단방향 통신` : SSE는 오로지 서버에서 클라이언트 쪽 서버로만 데이터를 보낼 수 있는 ..
Node.js에서 child_process 모듈은 자식 프로세스를 생성하고 관리하는 데 사용됩니다. 이 모듈은 다양한 기능을 제공하여 다른 요구 사항을 충족시킵니다. 주요 함수로는 `spawn()`, `fork()`, `exec()`, `execFile()` 및 이들의 동기 버전이 있습니다. 각각에 대한 간략한 개요는 다음과 같습니다. spawn() 사용법: `child_process.spawn(command, [args], [options])` 목적: 길고 지속적인 프로세스에 적합하며, 많은 양의 데이터를 처리하는 데 사용됩니다. 명령을 실행하기 위해 쉘을 생성하지 않아 조금 더 효율적입니다. 데이터 처리: `stdout`과 `stderr`를 통해 데이터를 스트림합니다. `child_process`를 ..
콜백과 이벤트 핸들링의 진화 `Node.js` 개발자들에게 익숙한 콜백은, 과거 `Node`에서 이벤트 처리의 핵심이었습니다. `JavaScript`가 일급 객체를 지원하므로 콜백을 자유롭게 전달할 수 있었죠. 하지만 시간이 흐르면서, 프로미스(Promise)와 `async/await` 구문이 등장하여 비동기 코드 처리 방식이 크게 달라졌습니다. ES6 이전의 동기와 비동기 코드 `ES6` 이전에는 비동기 및 동기 코드를 혼합해 사용하는 것이 일반적이지 않았습니다. 예를 들어, `fileSize` 함수는 문자열 인수를 받고, 비동기 `fs.stat`을 사용해 파일 크기를 반환합니다. 하지만 동기적 에러 처리(예: 잘못된 인수 타입)와 비동기적 에러 처리가 혼합되어 있어 이해하기 어려운 코드가 되곤 했습니..
`Nest.js`는 강력한 백엔드 프레임워크로서, 복잡한 비즈니스 로직과 백그라운드 작업을 효과적으로 관리해야 할 때 사용할 수 있는 다양한 도구와 라이브러리를 제공합니다. 이 중에서도 `Bull.js`는 백그라운드 작업을 처리하기 위한 강력한 큐 라이브러리 중 하나로, `Nest.js`와 함께 사용하면 효율적인 작업 관리가 가능해집니다. Bull.js란? `Bull.js`는 `Node.js` 기반의 큐 라이브러리로, 백그라운드 작업을 비동기적으로 처리할 때 사용됩니다. `Bull.js`는 안정성과 성능을 중시하며, 다양한 기능과 옵션을 제공하여 다양한 상황에 적용할 수 있습니다. Task `Bull.js`에서 `task`는 큐(Queue)에 추가된 개별 작업을 나타냅니다. 이 작업은 비동기적으로 백그라..
Database 생성 `use` 메소드만으로 `DB` 생성과 변경이 가능함. use blog Collection 생성 `createCollection()` 을 통해 콜렉션을 생성. db.createCollection("posts") 데이터 생성 `insertOne()` 은 하나의 데이터를 입력하는데 사용. 입력시에 내용을 `JSON`형식 으로 입력, `MongoDB` 는 `BSON` 타입을 지원하기에 가능함. db.posts.insertOne({ title: "Post Title 1", body: "Body of post.", category: "News", likes: 1, tags: ["news", "events"], date: Date() }) `insertMany()` 는 여러개의 데이터를 입력하..
옵티마이저와 실행계획 옵티마이저란 사용자가 질의한 SQL문에 대한 최적의 실행방법을 결정하는 역할을 수행. 이러한 최적의 실행방법을 실행 계획이라고 한다. 다양한 실행 방법들을 도출하고 그중에서 최적의 실행방법을 결정하는 것이 옵티마이저의 역할이다. 비용기반 옵티마이저 SQL문을 처리하는데 비용이 가장 적게 드는 실행계획을 선택하는 방식. 여기서 비용이란 SQL문을 처리하는데 예상되는 시간 또는 자원을 의미. 테이블, 인덱스 등의 통계 정보와 시스템 통계정보를 이용하여 최적의 실행계획을 도출. 인덱스를 사용하는 비용이 테이블 풀 스캔보다 크다고 판단되면 테이블 풀 스캔을 유도. 옵티마이저의 구성 요소 질의 변환기 : 사용자가 작성한 SQL문을 처리하기에 보다 용이한 형태의 SQL문으로 변환. 비용 예측기..