전체 글

import { Dream } from "future";
· Node.js
Turborepo 도입기 디프만에서 프로젝트를 진행하려고 하는데, 서버 언어로 TypeScript를 사용하고 있기 때문에 프론트엔드와 함께 레포지터리를 사용하기에 용이했다. 그래서 Yarn Berry를 통해서 monorepo를 구축할 계획이었다. 프론트와 백 모두 익숙하신 분께서 모노레포를 모두 구축해주셨고 이를 활용해서 프로젝트를 디벨롭 하고자 했다. 백엔드와 프론트엔드 모두 세팅이 안정적으로 완료됐지만, Next.js의 Vercel 배포가 Yarn Berry에서는 잘 동작하지 않는다는 것을 알게 됐고, 이를 대체하고자 Turborepo를 통해 모노레포를 구축하고자 했다. Turborepo란? 공식 문서 설명에 따르면, JavaScript나 TypeScript 코드를 위해 최적화된 빌드 시스템이라고 한..
· Node.js/JS
map, filter 결합법칙 특정한 방식으로 다르게 평가 순서를 바꿔도 똑같은 결과를 만든다는 결합 법칙을 가진다. 사용하는 데이터가 무엇이든지, 사용하는 보조 함수가 순수 함수라면 무엇이든지 아래와 같이 결합한다면 둘 다 결과가 같게 출력된다. [[mapping, mapping], [filtering, filtering], [mapping, mapping]] = [[mapping, filtering, mapping], [mapping, filtering, mapping]] 즉시 평가하지 않고 지연 평가를 하기 때문에, mapping -> filtering -> mapping의 과정은 동일하게 처리되게 된다. 가로로 계산을 진행하는 것이나, 세로로 하나하나 함수를 거치는 것이나 동일하게 처리된다. 지연..
· Node.js/JS
const L = {}; L.range = function *(l) { let i = -1; while (++i < l) yield i; }; L.map = curry(function *(f, iter) { iter = iter[Symbol.iterator](); let cur; while (!(cur = iter.next()).done) { const a = cur.value; yield f(a); } }); L.filter = curry(function *(f, iter) { iter = iter[Symbol.iterator](); let cur; while (!(cur = iter.next()).done) { const a = cur.value; if (f(a)) yield a; } }; const..
· Node.js/JS
reduce, map, filter, take, reduce 중첩 사용 우선 지금까지 만들어 뒀던 함수들은 다음과 같다. const curry = f => (a, ..._) => _.length ? f(a, ..._) : (..._) => f(a, ..._); const range = l => { let i = -1; const res = []; while (++i { const res = []; for (const a of iter) res.push(f(a)); return res; }; const filter = curry((f, iter) => { const res = []; for (..
턴태
턴태의 밑바닥부터 시작하는 de-vlog