전체 글

import { Dream } from "future";
· Frontend/JS
reduce나 take는 하나의 결과를 만드는 함수이다. 이에 반해 map, filter는 배열이나 이터러블한 모나딕한 값에 원소들에게 함수들을 합성해 놓는 역할을 하고, reduce나 take는 원소들을 꺼내서 연산을 진행하기에, 최종적으로 결과를 만드는 함수다. map이나 filter 같은 함수는 지연성을 가질 수 있는 함수라고 볼 수 있고, reduce 같은 함수는 연산을 시작하는 시작점을 알리는 함수라고 볼 수 있다. map, filter를 반복하다가 reduce 같은 함수로 연산을 시켜서 함수를 종료하는 등으로 중간에 연산을 시작한다. 함수형으로 작업할 때, map이나 filter로 정제하다가 reduce로 값을 뽑아내도록 사고하는 것이 중요하다. map, filter, reduce로 함수 생성..
· Node.js
Turborepo 도입기 디프만에서 프로젝트를 진행하려고 하는데, 서버 언어로 TypeScript를 사용하고 있기 때문에 프론트엔드와 함께 레포지터리를 사용하기에 용이했다. 그래서 Yarn Berry를 통해서 monorepo를 구축할 계획이었다. 프론트와 백 모두 익숙하신 분께서 모노레포를 모두 구축해주셨고 이를 활용해서 프로젝트를 디벨롭 하고자 했다. 백엔드와 프론트엔드 모두 세팅이 안정적으로 완료됐지만, Next.js의 Vercel 배포가 Yarn Berry에서는 잘 동작하지 않는다는 것을 알게 됐고, 이를 대체하고자 Turborepo를 통해 모노레포를 구축하고자 했다. Turborepo란? 공식 문서 설명에 따르면, JavaScript나 TypeScript 코드를 위해 최적화된 빌드 시스템이라고 한..
· Frontend/JS
map, filter 결합법칙 특정한 방식으로 다르게 평가 순서를 바꿔도 똑같은 결과를 만든다는 결합 법칙을 가진다. 사용하는 데이터가 무엇이든지, 사용하는 보조 함수가 순수 함수라면 무엇이든지 아래와 같이 결합한다면 둘 다 결과가 같게 출력된다. [[mapping, mapping], [filtering, filtering], [mapping, mapping]] = [[mapping, filtering, mapping], [mapping, filtering, mapping]] 즉시 평가하지 않고 지연 평가를 하기 때문에, mapping -> filtering -> mapping의 과정은 동일하게 처리되게 된다. 가로로 계산을 진행하는 것이나, 세로로 하나하나 함수를 거치는 것이나 동일하게 처리된다. 지연..
· Frontend/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..
턴태
턴태의 밑바닥부터 시작하는 de-vlog