본문 바로가기
반응형

typescript18

운영 로그와 디버그 로그 분리하기 최근에 Pete Hodgson가 martinfowler 블로그에 기재한 글을 보면서 로깅도 하나의 기능으로 봐야한다는 생각이 더 강해져서 이 글을 쓰게 되었다. 시스템을 구축하다보면 다음과 같이 크게 두 종류의 로그를 남긴다. logger.error(`API Timeout: ${timeout} seconds`, e); logger.info(`Ordered Food Product Id: ${product.id}`); logger.debug(`Total Order Price Amount: ${sum(products.amount)}`); 이 로그들은 모두 필요한 메세지를 노출시키지만, 실상은 목적이 다르다. Error와 Info 로그는 운영 환경에서 장애를 디버깅하거나 실행 중인 시스템의 여러 진행 상황, 지.. 2024. 3. 15.
Promise Pool로 성능 개선하기 (feat. Promise.all) Node.js 환경에서는 다수의 비동기 작업을 처리하기에 적합하다. 예를 들어, 다음과 같은 상황이 있다고 가정해보자. ID 별로 조회만 가능한 외부 서비스에서 대량의 건수를 API로 조회해야하는 경우 join, subquery 로 조회시 성능과 DB의 부하가 심하여, id 별로 쿼리를 나눠서 조회해야하는 경우 대량으로 이벤트 메세지를 발행해야하는 경우 등등 다량의 Promise 작업들은 백엔드 애플리케이션 작업에서는 언제든지 발생할 수 있다. 이럴때 Node.js 환경에서는 Promise.all 을 통해 쉽게 해결할 수 있다. 여기서 Promise.all 보다 좀 더 성능을 개선할 수 있는 방법을 보자. 개요 수백개 이상의 Promise 작업들은 보통 한번에 Promise.all을 수행하지 않는다. 예.. 2023. 5. 5.
람보르기니와 지프랭글러 슈퍼카의 대명사인 람보르기니는 오프로더의 대명사인 지프랭글러 보다 더 빠른 자동차일까? 이 질문에 대해 당연하게 답을 내리는 사람이 있고, 답을 할 수 없는 사람도 있다. 이 주제에 대해 한번 이야기해보고 싶다. 개발을 시작하고, 그간 사용하던 언어들이 항상 2가지 영역에서 같이 쓰다보니 오해를 일으킬때가 있다. 주로 사용하던 Java의 경우 서버 백엔드에서 사용되지만, 안드로이드 (클라이언트) 에서도 사용 된다. 지금 주력으로 사용중인 JS & TS는 Node 백엔드에서도 사용되지만 웹 프론트 (클라이언트) 에서도 사용 된다. 똑같은 언어 (Java, TS) 지만 구동되는 장소는 완전히 다르다. 구동되는 장소가 다르면 용도도 달라진다. 디바이스당 단일 사용자 (모바일기기, 브라우저)를 처리하기 위한 용.. 2022. 9. 5.
2. 테스트하기 좋은 코드 - 제어할 수 없는 코드 개선 1편 을 통해 테스트하기 어려운 코드에 대해 이야기를 나눴다. 이번 편에서는 테스트하기 어려운 코드 중 첫번째인 "제어할 수 없는 코드를 개선하는 법"을 이야기해보자. 2-1. 문제 상황 먼저 앞에서 보았던 discount() 코드를 다시 보자. export default class Order { ... discount() { const now = LocalDateTime.now(); if (now.dayOfWeek() == DayOfWeek.SUNDAY) { this._amount = this._amount * 0.9 } } } 이 discount() 는 실행할때마다 항상 결과가 다르다. LocalDateTimw.now()의 코드를 보면 알겠지만, 현재 시간은 항상 다르기 때문이다. 그렇기 때문에 실행.. 2022. 9. 1.
WebStorm에서 TypeScript 파일 단독으로 실행하기 WebStorm에서 기본적으로는 TypeScript 파일만 단독으로 실행할 수는 없다. 단독으로 실행이 필요할 경우 JS 파일로 컴파일 후, 실행해야만 한다. Run server-side TypeScript with Node.js 이 과정이 개발의 흐름을 많이 끊기 때문에 일반적인 JavaScript 파일을 실행하듯이 TypeScript 실행 환경이 필요하다. 개선 TypeScript 파일만 단독으로 수행하기 개별 플러그인만 설치하면 가능하다. Run Configuration for TypeScript 해당 플러그인 설치후, 프로젝트에 ts-node 를 설치한다. yarn add --dev ts-node 그리고 TS 파일을 다시 한번 우클릭 해보면? 다음과 같이 Run/Debug 실행 버튼이 생성된 것을.. 2022. 4. 26.
expect에서 false와 falsy 구분하기 Jest로 테스트 코드를 작성하다보면 습관적으로 IDE의 자동완성으로 toBeFalsy 와 toBeTruthy 를 사용하곤 했다. 저 둘이 아닌 toBe(false) 와 toBe(true) 는 한 번의 자동완성으로 안되기 때문에 굳이 사용하진 않았다. 그러다 팀 분의 의견을 받고 더이상 toBeFalsy() 는 사용하진 않고 있다. 물론 이에 맞는 쓰임새가 있겠지만, 모든 결과를 강타입으로 처리하는걸 선호하는 입장에서는 toBeFalsy() 는 선호하기가 어렵다. 다음과 같은 이유 때문이다. toBeFalsy() 는 JS에서 false로 판단되는 모든 값들을 기준으로 한다 내가 의도한것은 boolean 타입의 false 를 원했지만, 수행 결과가 0, undefined, null, '' 이면 toBeFa.. 2022. 4. 13.

728x90
반응형