본문 바로가기

분류 전체보기

(181)
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..
Grafana 를 좀 더 잘 활용해보자 이번 포스팅에선 Grafana 에서 제공하는 몇 가지 기능을 사용해 시각화를 좀 더 잘 할 수 있는 팁을 보일까 합니다. Grafana 가 8.x 버전이 나왔지만 이 포스팅에선 7.3 버전을 사용하게 되었습니다. 하지만 크게 다른 점은 없습니다. - Overrides 트래픽을 시각화한 대시보드를 예시로 Overrides 기능에 대해 알아보도록 하겠습니다. 별도 라이브러리를 사용해 서버에 요청을 보내는 여러 서버의 트래픽 양을 나타내는 패널을 구성한 상태입니다. 물론 메트릭을 수집할 때 부터 숫자가 아닌 식별이 가능한 문자열을 사용하는 것도 방법이겠지만, 이렇게 메트릭을 수집해도 Grafana 에서 쉽게 처리가 가능합니다. 1번에 대한 Overrides 처리를 해보겠습니다. 먼저 패널 우측에 Overrid..
Grafana API 활용하기 (2) 이전 포스팅에선 간단하게 Grafana API 를 활용하는 방법에 대해서 살펴봤습니다. 이번엔 이 API 를 사용해 만들어둔 대시보드를 백업하고, 이를 이용해 원복해보는 과정을 진행해 볼 것 입니다. - Grafana resources 백업 Grafana Lab 에서 제공하는 모든 HTTP API 는 여기에서 확인할 수 있습니다. 이 중 대시보드를 백업하기 위해선 최소 4개의 API 를 사용해 필요한 정보를 조회해야 합니다. /api/datasources /api/folders /api/search /api/dashboards/uid/:{uid} Grafana 에서 대시보드를 만들 때, 일반적으로 datasources 를 먼저 세팅하고 이를 사용해 대시보드를 구성하게 됩니다. 이 datasources 정..
Grafana API 활용하기 (1) 그라파나는 Grafana Labs 에서 관리하는 오픈 소스 시각화 및 분석 도구로서, 여러 데이터 소스와 손쉬운 통합이 가능합니다. 실제로 그라파나를 설치해 Config 에서 Datasources 를 클릭해보면, 아래와 같이 연동할 수 있는 많은 데이터 소스들이 나옵니다. InfluxDB, ES, Loki, Jaeger 등 여러 데이터소스와의 통합을 지원하지만 Prometheus 와 가장 흔히 통합해 사용한다고 볼 수 있습니다. Prometheus 가 자체적으로 web UI 를 통해 시각화를 제공하지만, 모니터링용 대시보드로 사용하기엔 꽤 부족한 점이 많아 Prometheus 에서도 이를 별로 추천하지 않고 그라파나를 많이 사용합니다. (이전 포스팅) 예전 포스팅(링크)에서 그라파나 대시보드를 설치하고 ..
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 => { ..