Type-Only Imports and Exports 이 기능은 대부분의 경우 필요하지 않은 기능이지만, 만약 --isolatedModules 옵션이나 타입스크립트, babel의 transpileModule API를 사용해 컴파일 할 때 이슈가 발생한다면, 이 기능이 필요할 수 있습니다. Typescript는 타입을 참조하기 위해 JavaScript의 import 문법을 재사용 사용합니다. 예를 들어, 아래의 예제에서 우리는 순수 TypeScript 타입인 Options과 함께 JavaScript 변수인 doThing을 import 합니다. // ./foo.ts interface Options { // ... } export function doThing(options: Options) { // ... ..
프로그래밍에서는 본질적인 데이터의 복잡성 때문에 논리적 정확성이 불가능할 때가 있습니다. 데이터를 추상화 시키는 것은 데이터의 단순한 표현을 만드는 데 도움이 되는 매우 유용한 도구입니다. 이를 위해 'Container' 를 만드는 방법이 있습니다. 'Container'는 오직 우리의 데이터만 가지고 있으며, 그 외에 다른 책임을 가지지 않습니다. 즉, OOP 처럼 'Container' 에 프로퍼티나 메소드를 제공하지 않습니다. 변수를 가져오고 Container 안으로 넣습니다. 그리고 Container 는 함수형 로직을 통과시키는 동안 변수를 안전하게 지키며 필요할 때 즉시적으로 변수를 가져올 수 있습니다. 따라서 Container 는 아래의 두 가지 책임이 있다는 것을 알 수 있습니다. 스스로 내부에..
명령형 프로그래밍과 선언형 프로그래밍에 대한 비교를 어디선가 한 번쯤은 접해봤을 거라 생각합니다. 그리고 그 둘이 실제로 무엇을 의미하는지 검색을 해보셨다면 아마 아래와 같은 정의를 마주했을 것입니다. 명령형 프로그래밍은 무엇을 어떻게 할 것인가에 가깝고, 선언형 프로그래밍은 무엇을 할 것인가와 가깝다. 이 정의를 처음 보면 무슨 말을 하는지 이해하기 어렵게 느껴집니다. 하지만 이 정의에는 명령형 프로그래밍과 선언형 프로그래밍의 핵심이 담겨 있습니다. 먼저, 이 정의를 쉽게 이해하기 위해 프로그래밍의 맥락에서 벗어나서 실세계의 예제를 살펴보겠습니다. 1. Red Lobster 나는 회사에서 열심히 일하고 퇴근을 한 뒤 Red Lobster에서 가족과 즐거운 외식을 하기로 결정했습니다. 그리고 Red Lo..
최근 이직을 한 후 개인적으로 '공부' 라는 것과 거리가 멀어져서 포스팅을 쓰면서 다시 시작해보고자 합니다. 마침 최근에 typescript 3.7이 새롭게 공개돼서 해당 문서를 번역해서 간단히 소개해보도록 하겠습니다. Optional Chaining Kotlin을 접해봤다면 가장 반가운 문법이지 않을까 싶습니다. Kotlin의 가장 편리한 문법중 하나가 바로 이 Optional Chaining 이라고 생각합니다. Typescript 에도 3.7 부터 Optional Chaining 이 추가 된다고 하니 반가웠습니다. Optional Chaining 을 간단하게 설명하면 기존의 복잡한 if문 을 줄여주는 문법이라 할 수 있을 것 같습니다. 기존에 null 또는 undefined 타입을 처리하기 위해서는 ..
해당 글은 github goldbergyoni 님의 javascript-testing-best-practices 를 번역하여 작성한 글 입니다. 번역 과정중 오류가 있을 수 있으니 댓글을 통해 피드백 주시면 감사하겠습니다. Error를 catch 하지 말고 검증하라 일부 입력이 에러를 발생시키는 것을 검증할 때 try-catch-finally 문을 사용하여 catch 스코프에 들어왔을 때 assertion 을 수행하는 방법을 사용할 것입니다. 하지만 이는 테스트의 의도와 기대 결과를 쉽게 파악할 수 없게 만듭니다. 좀 더 우아한 대안은 테스트 프레임워크에서 제공하는 expect(method).to.thorw or expect(method).toThrow() 과 같은 one-line throw assert..
해당 글은 github goldbergyoni 님의 javascript-testing-best-practices 를 번역하여 작성한 글 입니다. 번역 과정중 오류가 있을 수 있으니 댓글을 통해 피드백 주시면 감사하겠습니다. 스냅샷 테스트를 할 때는 짧은 인라인 스냅샵만 사용하라 snapshot testing이 필요하다면 핵심 검증 사항에만 집중된 (3~7 라인) 짧은 snapshots 을 외부 파일이 아닌 테스트 코드 내에서 사용하는 것을 권장합니다. 이 가이드라인만 지킨다면 테스트가 쉽게 깨지지 않고 좋은 가독성을 유지할 수 있습니다. 반면에, '고전적인 스냅샷'의 튜토리얼이나 도구들은 스냅샷을 매우 크게 만들고 외부 파일로 저장하도록 유도하고 있습니다. 그리고 테스트가 실행될 때 마다 외부에 저장된 ..
올해는 이직준비와 토이프로젝트, GDG 활동 그외에 몇몇가지 일들로 인해 너무 바쁘게 지내는 바람에 해외여행을 하리라고 생각도 못하고 있었습니다. 그런데 어쩌다보니 저번주 주말 베이징에 다녀왔습니다. 1박 2일로.. Northeast Aisa GDG Summit 한국, 일본, 중국, 대만 등 아시아권 GDG 운영진들은 1년에 한번씩 중국에 모여서 여러 세션과 라이트닝 토크, 토론등을 통해 이야기를 나누고 경험을 공유할 수 있는 Northeast Asia GDG Summit 에 참여할 수 있습니다. 저도 이번 Northeast Asia GDG Summit 2019 에 참가하기 위해 베이징에 다녀오게 되었습니다. 원래 행사 일정은 금요일부터 일요일까지였고 월요일에 휴가를 쓰고 관광을 더 하다 오려고 했지만,..
해당 글은 github goldbergyoni 님의 javascript-testing-best-practices 를 번역하여 작성한 글 입니다. 번역 과정중 오류가 있을 수 있으니 댓글을 통해 피드백 주시면 감사하겠습니다. 적절하게 테스트 더블을 사용하라 테스트 더블은 테스트 코드를 편하게 작성할 할 수 있도록 해주는 도구 입니다. 하지만 어플리케이션 내부 구현 코드와 커플링 된다는 문제가 있기 때문에 남용하는 것은 권장하지 않습니다. 테스트 더블을 적절하게 사용하려면 요구사항 기능을 테스트하는대에 사용하는지를 고려하면 됩니다. 만약 요구사항 기능을 테스트하는대에 사용하는게 아니라면 해당 테스트는 화이트박스 테스트일 가능성이 높습니다. 예를 들어, 결제 서비스가 중단되었을 때 앱이 합리적으로 동작하는지를..
해당 글은 github goldbergyoni 님의 javascript-testing-best-practices 를 번역하여 작성한 글 입니다. 번역 과정중 오류가 있을 수 있으니 댓글을 통해 피드백 주시면 감사하겠습니다. 들어가며 우리는 평소에 소프트웨어 구현만을 위한 코드(Production code)만을 신경쓰고 있습니다. 따라서 기존에 익숙하지 않은 테스트 코드를 작성하는 대에 어려움과 거부감을 느끼게 되고 많은 분들이 포기하게 됩니다. 하지만 익숙하지 않음에도 불구하고 테스트 코드에 대한 작은 투자는 큰 가치를 얻을 수 있습니다. 하지만 과한 테스트보다는 필요한 만큼만 테스트하고, 빠른 테스트를 유지하기 위해 노력해야 합니다. 때로는 민첩성과 단순성을 위해 테스트를 포기하고 신뢰성을 낮추는게 더..
해당 포스트는 Puppeteer 에 대해 학습하기 위해 puppeteer 의 영어 문서를 토대로 부가적인 설명과 간단한 puppeteer의 사용 방법을 소개합니다. Puppeteer Puppeteer는 DevTools Protocol을 통해 Chrome 또는 Chromium을 제어하기 위한 API를 제공하는 node.js 라이브러리 입니다. 다양한 기능이 있지만 가장 큰 특징은 Headless로 실행될 수 있다는 점 입니다. puppeteer 문서에서 소개되는 대표적인 기능들은 아래와 같습니다. 1. SPA(Single-Page Application)를 크롤링하고 미리 렌더링된 컨텐츠 (SSR - Server Side Rendering)를 생성 할 수 있습니다. 2. 최신 자동 테스트 환경을 만듭니다. ..