/
https://42jerrykim.github.io/ _index.md
02장에서 재정렬(re-ranking)용으로 소개한 Cross-Encoder를 직접 학습시키는 방법을 다룹니다. In-batch Negative와 Hard Negative 구성, InfoNCE Loss의 수식, 전체 학습 파이프라인을 원 논문과 함께 정리합니다. 시리즈 D의 마지막 챕터입니다. Redux의 Action과 Reducer는 결국 JavaScript의 객체와 함수일 뿐입니다. var/let/const의 스코프 차이, 함수 선언 방식, 객체·배열 기본 조작을 Redux 코드를 읽는 데 필요한 만큼 정리합니다. Redux 리듀서 코드의 대부분은 구조 분해와 스프레드 연산자로 이루어져 있습니다. 원본을 바꾸지 않고 새 객체·배열을 만드는 이 두 문법을 정확히 익히면 08편의 불변성 원칙이 훨씬 쉬워지는 이유를 코드 예제로 다룹니다. Redux의 selector와 리듀서는 map/filter/reduce 같은 고차 함수로 상태를 조회·변환합니다. 원본을 바꾸지 않는 배열·객체 메서드와 바꾸는 메서드를 명확히 구분해 불변성을 지키는 습관을 코드로 다룹니다. Redux의 Reducer는 반드시 동기·순수해야 하지만, 실제 앱은 API 호출 같은 비동기 작업 없이 동작할 수 없습니다. Promise와 async/await의 동작 원리를 21–24편의 미들웨어를 이해하는 데 필요한 만큼 정리합니다. 실무 Redux 코드는 대부분 TypeScript로 작성됩니다. 기본 타입, 인터페이스, 제네릭을 Action과 State에 타입을 붙이는 데 필요한 만큼 정리하고, 28편(Redux와 TypeScript)의 기초를 다집니다. Redux는 Facebook의 Flux 아키텍처를 단순화한 라이브러리입니다. 양방향 바인딩이 왜 대규모 앱에서 문제가 됐는지, 단방향 데이터 흐름이 그 문제를 어떻게 푸는지, Redux의 세 가지 원칙을 정리합니다. Redux 코드의 90%는 Action, Reducer, Store 세 요소의 조합입니다. createStore로 순수 Redux 스토어를 직접 만들어보며, dispatch·subscribe·getState가 실제로 어떻게 맞물리는지 코드로 확인합니다. 리듀서에서 상태를 직접 변경하면 리렌더가 일어나지 않거나, Redux DevTools의 시간여행 디버깅이 무의미해집니다. 불변성이 왜 필요한지, 얕은 비교가 이를 어떻게 이용하는지 실제 버그 재현 코드로 확인합니다. 07편에서 만든 세 요소가 실제로 dispatch 한 번에 어떤 순서로 실행되는지 단계별로 추적합니다. 동기 흐름과 비동기 흐름을 구분해, DevTools로 각 단계를 실제로 관찰하는 방법까지 코드와 함께 다룹니다.