[번역] 왜 타입스크립트는 당신을 구해주지 못하는가
실제 안전을 보장해 주지는 않습니다.- 그냥 약속일뿐
- 타입이 정의되어있을뿐
- 정말, 실제로 그 타입 그대로 존재할 것이라고 보장할 수 없기 때문이다
- 하지만 실제 API 응답은 그 어떤 형태로든 반환할 수 있고
- 타입스크립트는 이걸 알 수 없다는 사실
- 실제로 그 타입 그대로 왔는지 검증해야하는데
- 이를 타입스크립트가 런타임에 해주는 것이 아니기 때문에 검증 작업은 직접 수동으로 작성해야한다
- 약속 그대로 지켜진다면 정말 좋기만한 상황
- 타입이 있기 때문에 검증을 하지 않아도 될것이라는 막연한 믿음
(번역) 지시문(directives)과 플랫폼의 경계
use client, use strict- 이러한 것들은 표준화된 자바스크립트 기능이 아니기에 런타임이 이해하지 못한다
- 그럼에도 코드의 일부라고 생각하기 이르렀다
- 그냥 각각 자신만의 읽기 좋은 무언가를 만들어냈을뿐
- 단순하게 시작되었다
- 이것은 클라이언트이며 이것은 서버이다
- 지시문으로써 시작되었지만 이제 점점 살이 붙어 다양한 형태가 되었다
use cache:remote, cache(...)- 이런저런 옵션까지 가지다보니 점점 자신만이 해석할 수 있는 형태가 되었다
- 주체를 알 수 없다
- import 하지 않았으니 어떤 특정 API 라고 알 수 없다
- 누가 어느 시점에 읽히기를 원하는 것인지 알 수 없다
- 지시문을 통해 무엇을 하고 싶은걸까
- 어떠한 동작을 실행하고자 함이였다면
- 특정 함수를 import하여 실행하도록 하는 방법이 있었을텐데
- 명세화 되어야한다
- ecma
- 모두가 알 수 있도록
[번역] 상태 기반 렌더링 vs 시그널 기반 렌더링
- 계속 시그널을 사용하면 좋겠다는 시그널을 보내는 중 🥺
-
상태 업데이트에 의한 리렌더링을 막는 방법으로 메모이제이션을 열심히 했다
-
그럼에도 리렌더링은 일어난다
-
컨텍스트로 감싸져있기 때문이다
-
그럼 리렌더링 자체가 안되게 하겠다는 일념으로
-
해당 상태에 접근하는 구역에서만 상태를 구독하는 방식으로 변경한다
-
시그널 기반과 유사한 기능을 하고 있다 -
그럼에도 시그널을 원하는 이유는 상태에 접근할때에 리렌더링 된다는 점
-
지금 나의 상태는 접근할때라고 볼 수 없다
-
구독 선언되어있는 컴포넌트 전체는 리렌더링 된다
const Parent = () => { // 리렌더가 되지 않음 return ( <> <ChildA /> <ChildB /> <ChildC /> </> ); }; const ChildC = () => { const count = useQuerySelector('count'); // count가 변하면 리렌더링 된다 return ( <> <Text>abcd</Text> <Text>{count}</Text> </> ); }; -
하지만 시그널은 선언한 컴포넌트가 아닌 이 상태 값을 읽는 위치에서야 리렌더링 된다
const Parent = () => { const count = useSignal(0); return ( <> {/* 리렌더가 되지 않음 */} <ChildA /> <ChildB /> {/* count 값을 읽는 경우에만 리렌더 됨 */} <ChildC count={count} /> </> ); }; -
리렌더링 되는 부분은 ChildC로 동일하나
-
구독 형태는 위치가 잘못된 경우에 컨텍스트와 같은 문제가 발생할 수 있지만 시그널은 애초에 발생하지 않는다
-
- 발상의 전환
이제 우리는 리렌더링을 메모이제이션으로 ‘막는’ 것이 아니라, 필요한 곳에서만 ‘발생시키는’ 방식으로 사고해야 합니다.
연봉 값을 하는 엔지니어의 비밀: "모르는 것(Ambiguity)"을 "할 수 있는 것"으로 바꾸는 기술
- 모호함을 줄이는 능력
- "성능 개선 필요", "사용자 불만 증가", "확장성 고려"와 같이 불분명하고 추상적인 요구사항을 받았을 때
- 모호한 문제를 단순히 수행하는 것이 아니라, 이를 분석하고 해체하여 구체적인 과제로 변환
- 이 과정은 프로젝트의 리스크를 낮추고(De-risking), "무엇인지 모르는 상태"를 "실행 가능한 작은 프로젝트와 제거할 요소"로 정리함
- 사용자 정의: 구체적으로 누구의 어떤 고통을 해결하려 하는가? ("사용자"라는 포괄적 단어 지양)