본문 바로가기

Backend

(126)
ECMAScript 이 포스팅을 먼저 썼어야 했을 것 같지만.. 앞선 포스팅들에서 ES2022, TS39 Process 등에 대해 알아봤었는데 그럼 ECMAScript 는 무엇인가? 에 대해 이번 포스팅에서 다뤄보도록 하겠습니다. - ECMAScript ? Wiki 의 문구를 그대로 인용하자면, ECMAScript 란 ES 라고도 불리우며 Ecma International 이 ECMA-262 기술 규격에 따라 정의하고 있는 표준화된 스크립트 프로그래밍 언어를 뜻합니다. (링크) ECMAScript 는 Javascript 의 표준화를 위해 만들어졌습니다. 액션스크립트와 J스크립트 등의 다른 구현체도 포함하고 있다고 하며, Node.js 에서도 약간의 설정을 통해 ECMAScript 를 사용할 수 있습니다. 즉 ECMAScri..
TC39 Process ECMAScript 에 대해 보다보면 TC39 라는 용어가 나오는데 이게 무엇인지에 대해 이번 포스팅에서 살펴보도록 하겠습니다. 참고한 블로그의 링크를 같이 남겨놓도록 하겠습니다. - TC39 매년 ECMAScript 스펙이 하나의 스펙으로 릴리즈되는데, 여기엔 지난 에디션 이후로 승인된 모든 새로운 기능 혹은 변경이 포함되어 있습니다. TC39 는 the 39nth Technical Committee 의 약자로 Javascript 개발자, 학자 등으로 구성된 ECMA 멤버들을 포함한 ECMA International 이라는 조직의 산하 그룹입니다.이 위원회는 커뮤니티와 협력해 ECMAScript 스펙의 정의를 유지하고 발전시켜 나갑니다. ECMAScript 의 스펙을 변경하는 프로세스는 TC39 에 의..
ES2022 다소 (많이) 늦었지만, ES2022 에서 새로 나온 기능들 중 일부에 대해 얘기를 해보려 합니다. - ES2022 ? ES2022, ES6, ES5, ES2015 등의 용어는 자바스크립트 개발자라면 꽤 자주 봤을 것 입니다. 여기서 ES 는 ECMAScript 의 줄임말로, 국제적 표준화 기구인 Ecma International 이 ECMA-262 기술 규격에 따라 정의하고 있는 표준화된 스크립트 프로그래밍 언어를 뜻한다고 합니다. 알아둬야 할 건 자바스크립트 표준화를 위해 만들어졌다는 것 입니다. ECMAScript 에 대해선 다른 포스팅에서 좀 더 적어보도록 하겠습니다. 무튼 이 버전은 publish 되는 해에 맞춰서 네이밍 되는 것 같습니다. ES2020, ES2021, ES2022 이런 순서로 ..
package-lock.json 이란? 이번 포스팅에선 npm 6 버전부터 보이기 시작한 것 같은 package-lock.json 파일이 무엇이고 어떤 역할을 하는지에 대해 공식 문서의 도움을 받으며 알아보도록 하겠습니다. - npm npm 은 Node Package Manager 의 줄임말로 현재 Node.js 의 기본 패키지 관리자 이기도 합니다. nvm 을 사용해 node 버전을 바꾸면 위처럼 npm 버전도 맞춰서 변경되는 걸 볼 수 있습니다. 꽤 예전부터 npm 의 대항마처럼 사용되던 yarn 이나 근래 사용자가 늘고 있는 yarn-berry 등의 패키지 매니저도 있지만 아직은 npm 이 가장 널리 쓰이는 것 같습니다. 이 npm 을 사용하면서 우리는 package-lock.json 파일을 마주하게 됩니다. - What is packa..
Javascript 내장 클래스 확장 - 문제 상황 배치 프로그램 작성 중 Javascript 의 내장 클래스인 Map 을 사용하면 딱 적절할 부분이 있었는데, 해당 클래스에 몇 가지의 메서드를 추가하거나 기존 메서드를 수정하고 싶은 케이스가 있었습니다. 예를 들면 생성한 Map 에 set 을 하는데 조건을 만족하는 key 에 대해서만 얼마나 set 이 호출되었는지 카운팅을 하기 위해서 말이죠. const map = new Map(); map.set(...); map.set(...); ... console.info(map.getSpecificCount()); // ? 원하는 바를 약간 수도코드처럼 작성하면 위와 같을 것 입니다. 하지만 내장 클래스인 Map 에 set 메서드는 있지만 getSpecificCount 와 같은 메서드는 없고, 기..
Typescript Generic 활용 - Type & Generic TS 코드를 작성함에 있어 타입을 명확히 하지 않고 any 를 통해 느슨한 타입을 명시하는 코드는 생각보다 많습니다. const add = (a: any, b: any) => a + b; console.info(add(3, 4)); // 7 console.info(add('3', 4)); // '34' console.info(add(3, '4')); // '34' console.info(add('3', '4')); // '34' 좀 억지스러운 예제일 수 있지만, 이런 단순한 함수를 작성할 때도 a, b 에 any 타입을 넣는 개발자는 꽤 많습니다. 실제로 이 코드는 a, b 에 any 타입을 받을 수 있으니 string 이나 number 가 들어와도 상관이 없으며 별다른 에..
Typescript 외부 모듈 타입 선언 - 문제 상황 업무간에 외부 모듈을 사용하는 경우는 너무도 많습니다. 당장 생각나는 것들 나열만 해도 express, lodash, nest, ioredis, mysql, dayjs 등 굉장히 많죠. Javascript 에서 일반적인 CommonJS 스타일로 모듈을 사용한다면 코드는 아래와 같을 겁니다. const _ = require('lodash'); const test = [1, 2, 3]; _.each(test, item => { console.info(item); }); // 1 // 2 // 3 하지만 이를 Typescript 에서 ES6 syntax 로 바꿔 사용하면, 문제점이 있습니다. import _ from 'lodash'; const test = [1, 2, 3]; _.each(tes..
더 많은 함수형 자바스크립트 사용.. (2) 이전 포스팅 참고 - 비동기 상황 Node.js 로 서버 프로그래밍을 하다보면, 비동기 상황을 자주 만나게 됩니다. DB 혹은 Redis 를 사용하던지 다른 서버 api 를 호출해야 하는 코드에선 비동기 상황을 피할 수 없으며 예전의 경우엔 자연스레 콜백 지옥으로 이어지게 되었습니다. 이 콜백 지옥을 벗어나기 위해 Promise 를 사용하면서 Promise chaining 와 Promise.all 까지 활용해왔습니다. 이번에 볼 예시들은 이러한 비동기 상황에서의 문제 해결 방법으로 partial.js 를 활용해보는 함수형적인 접근입니다. (굳이 partial.js 가 아니어도 됩니다) const lazyResponse = (result) => { return new Promise(resolve => { ..