프론트엔드 프레임워크 TypeScript는 프론트엔드 응용 프로그램 개발에 아주 적합합니다. 풍부한 JSX 지원과 변경에 안전하게 대응할 수 있는 능력으로 무장한 TypeScript는 응용 프로그램에 안전성과 멋진 구조를 선사하고, 빠르게 변화하는 프론트엔드 개발 환경에 적합한 정확하면서도 유지보수하기 쉬운 코드를 쉽게 작성할 수 있도록 도와줄 것이기 때문입니다. 물론 모든 내장 DOM API는 타입이 안전합니다. TypeScript에서 이 API를 사용하려면 간단히 프로젝트의 tsconfig.json에 필요한 타입 선언을 추가하기만 하면 됩니다. 이 설정은 TypeScript가 코드에서 타입을 검사할 때 lib.dom.d.ts(브라우저와 DOM 타입 내장 선언) 파일에 선언된 타입들을 포함하도록 합니다..
백엔드 프레임워크 DB와 상호작용하는 응용 프로그램을 만들 때 처음엔 타입을 갖지 않는 SQL 또는 API 호출을 그대로 사용했을 것입니다. // node-postgres를 이용한 PostgreSQL let client = new Client let res = await client.query( 'SELECT name FROM members where mId = $2', [123456] ) // any // node-mongodb-native를 이용한 MongoDB db.collection('members') .find({mId: 123456}) .toArray((err, member) => // member는 any ) 수동으로 타입을 추가하면 대부분의 any를 제거하면서 더 안전한 API로 개선할 수..
비동기 스트림 미래의 서로 다른 시점에 이용할 수 있게 될 값이 여러 개라면 어떻게 처리해야 할까요? 이런 상황은 생각보다 자주 발생합니다. 예를 들어 파일 시스템에서 파일의 일부를 읽는 상황, 티빙 서버로부터 비디오 스트리밍의 픽셀들을 받는 상황, 폼을 작성하느라 여러 키를 입력하는 상황, 연말 파티에 수십 명의 친구가 오는 상황 등이 모두 이에 해당한다고 볼 수 있습니다. 각각의 이벤트가 서로 관련 없어 보이지만, 비동기 스트림 관점에선 다들 비슷합니다. 이들은 모두 여러 개의 데이터로 이루어지며, 각각의 데이터를 미래의 어떤 시점에 받게 된다는 점에서 똑같습니다. 몇 가지 방법으로 이런 상황을 설계할 수 있는데, 가장 흔히 NodeJS의 Event Emitter 같은 이벤트 방출기(event emi..
JavaScript의 이벤트 루프 예제를 이용해 아래 문제를 풀어봅시다. 각각 1밀리 초와 2밀리 초 후에 실행되는 두 개의 타이머를 설정했습니다. setTimeout(()=> console.info('A'), 1) setTimeout(()=> console.info('B'), 2) console.info('C') 콘솔엔 어떤 결과가 출력될까요? A, B, C일까요? JavaScript 프로그래머라면, A, B, C가 아니라 C, A, B가 된다는 사실을 알고 있을 것입니다. JavaScript나 TypeScript를 사용해 본 적이 없는 사람이라면 이 결과가 직관적이지 않고 이상해 보일 것입니다. 사실 동작 원리는 간단합니다. JavaScript의 동시성 모델이 C언어의 sleep이나 Java 같은 다..