Skip to content

Instantly share code, notes, and snippets.

View DublinCity's full-sized avatar

geonmo.nine DublinCity

  • Seoul, South Korea
View GitHub Profile
@DublinCity
DublinCity / AsyncLocalStorage.md
Last active April 22, 2024 00:13
AsyncLocalStorage

AsyncLocalStorage

어떤 문제가 있나요

우리의 서버로 하나의 request가 들어오면 서버는 응답을 처리하기 위해 필요한 여러 API를 호출하고 데이터를 가공하여 필요한 응답을 돌려줍니다. requset는 동시에 여러개 들어오기 때문에 우리는 request마다 어떤 작업을 수행했는지 그룹핑하여 모니터링하는 것이 필요합니다. 가장 일반적인 방법으로는 요청마다 requestID 를 생성해 할당하고 수행하는 작업마다 requestID 를 함께 기록하여 requestID 단위로 그룹핑해 확인하는 것입니다.

이러한 패턴은 Ruby on rails 나 Python Django 같은 플랫폼에서 매우 간단하게 구현할 수 있는데, 각 request는 하나의 thread에 할당되어 동기로 처리되기 때문에 requestID 와 같은 요청 정보는 thread context 에 저장하여 필요할 때 꺼내 사용하면 되기 때문입니다.

@DublinCity
DublinCity / item19.md
Created July 11, 2022 15:09
Item19: 추론 가능한 타입을 사용해 장황한 코드 방지하기

Item19: 추론 가능한 타입을 사용해 장황한 코드 방지하기

타입스크립트를 처음 접했을 때 가장 어려웠던 부분 중 하나는 '언제 타입을 명시적으로 선언하고, 언제 추론된 타입을 이용해야하는지' 판단할 수 없는 것이었다.

타입스크립트의 많은 타입 구문은 사실 불필요하다.

명시적인 타입구문은 대부분 필요하지 않다. 타입 추론이 된다면 불필요한 타입은 가독성을 해치고 오히려 방해가 될 뿐이다. 만약 타입을 확신하지 못한다면 에디터를 통해 체크하면 된다.

@DublinCity
DublinCity / item13.md
Last active July 6, 2022 01:32
Item13: 타입과 인터페이스

Item13: 타입과 인터페이스의 차이

타입스크립트에서 타입을 정의하는 방법은 type, interface 두 가지가 있다. 대부분의 경우 타입 또는 인터페이스를 사용해도 된다. 하지만 타입과 인터페이스 사이에 존재하는 차이를 분명하게 알고, 같은 상황에서는 동일한 방법으로 명명된 타입을 정의해 일관성을 유지해야한다.

타입과 인터페이스 모두 가능한 것

잉여속성체크

@DublinCity
DublinCity / item12.md
Created July 5, 2022 00:38
Item12: 함수 표현식에 타입 적용하기

Item12: 함수 표현식에 타입 적용하기

자바스크립트에서는 함수를 선언할때 함수 문장과 함수 표현식을 사용합니다.

function dice(input) { } // 함수 문장
const dice = (input) => { } // 함수 표현식

타입스크립트에서는 함수 표현식을 사용하는 것이 좋습니다.

@DublinCity
DublinCity / item10-11.md
Last active July 3, 2022 16:30
Item10-11_객체_래퍼타입+잉여_속성_체크

Item10: 객체 래퍼타입 피하기

자바스크립트에서는 기본형을 사용하더라도 경우에 따라 내부적으로 객체 레퍼로 형변환하여 사용한다. 객체 레퍼는 종종 아래와 같이 당황스러운 결과를 보여준다.

function hasName(input: String) {
  return ['A','B'].includes(input) // Type Error
}
@DublinCity
DublinCity / item9.md
Created July 2, 2022 15:46
# Item9: 꼭 필요한 경우 타입단언을 사용하기

Item9: 꼭 필요한 경우 타입단언을 사용하기

타입체커는 선언된 타입이 해당 인터페이스를 만족하는지 검사한다. 하지만 타입 단언은 강제로 타입을 지정하여 타입체커가 오류를 무시하도록 한다. 따라서 꼭 필요한 경우에만 사용해야한다

화살표 함수의 반환 타입 선언하기

화살표 함수에서 반환되는 값의 타입이 모호할 때가 있다.

@DublinCity
DublinCity / item6-7.md
Created June 30, 2022 16:36
Item6-7: 편집기를 사용해 타입시스템 탐색하기, 타입을 값들의 집합이라고 생각하기

Item6: 편집기를 사용해 타입시스템 탐색하기

타입스크립트를 설치하면 다음 두가지를 할 수 있다

  • 타입스크립트 컴파일러를 실행(tsc) TS -> JS
  • 단독으로 실행할 수 있는 타입스크립트 서버(tsserver)

결론

  • 타입스크립트 언어서비스를 적극 활용해야한다.
  • 타입스크립트가 동작을 어떻게 모델링 하는지 알기 위해서 타입선언파일을 찾아본다.
@DublinCity
DublinCity / item5.md
Last active July 15, 2022 00:40
# Item5: any 타입 지양하기

Item5: any 타입 지양하기

타입선언을 추가하는데 시간을 쏟고 싶지 않아서 any 를 쓴다면 타입스크립트의 많은 장점을 누리지 못한다.

any타입은 안전성이 없다.

아래 코드처럼 any 타입은 타입체크를 무시한다.

let age: number
@DublinCity
DublinCity / item4.md
Last active July 14, 2022 01:16
Item4: 구조적 타이핑에 익숙해지기

Item4: 구조적 타이핑에 익숙해지기

자바스크립트는 덕 타이핑 기반이다. 덕 타이핑이란, 객체가 어떤 타입에 부합하는 변수와 매서드를 가질경우 객체를 해당 타입에 속하는 것으로 간주하는 방식이다. 타입스크립트는 이를 모델링 하기 위해서 구조적 타이핑을 사용한다.

아래 코드를 보면 VectorSquare 간의 관계를 전혀 선언하지 않았지만 타입을 넘겨줄 수 있다.

interface Vector {
@DublinCity
DublinCity / item50.md
Last active June 28, 2022 17:09
# Item50: 오버로딩 타입보다 조건부 타입 사용하기

Item50: 오버로딩 타입보다 조건부 타입 사용하기

간단하게 numberstring 타입의 매개변수를 받아 두개를 더하는 함수를 생각해보자

시도 1

호기롭게 아래와 같이 작성해본다.

function double(input: string|number): string|number {
    return input+input // type error
}