Redux 공부 필기

  1. Redux의 혁신은 상태를 한곳에 몰아넣은 것, 상태와 ‘상태 변경자’들을 분리한 것이다. 맞다, WAS들이 이미 하고 있는 그것 맞다. (AWS Lambda가 왜 ‘람다’인지 생각해보라.)
  2. 상기 혁신을 통해 핫 리로딩(hot-reloading)을 지원한 것이 키 피처중 하나였다. 역시 WAS들이 이미 하고 있는 그것 맞다.
  3. 모듈화는 상태를 찢어놓음으로 달성한게 아니라 함수를 찢어놓음으로 달성한다. 찢어진 함수들은 ‘함수 합성’을 통해 다시 합쳐질 수 있다.
  4. 키 피처중 다른 하나는 시간 여행 디버깅(Time Travel Debugging)이다. (Redux라는 네이밍의 중의적 의미중 하나. 후술.) Visual Studio나 WinDbg에서 지원하는 그거 맞다. 다만 Redux가 먼저 나왔고 따라해도 VS와 WinDbg가 따라했을 것 같다.
  5. 시간여행의 비결이 뭐냐? 애플리케이션 상태를 1개의 불변(immutable) 객체에 저장하는 것이다. 상태가 바뀔 때 어떠카냐고? 불변형 객체를 하나 새로 만들면 된다.
  6. 그렇게 하게되면 메모리 사용량이 무식하게 늘어나지 않냐? 아니다. 최적화되어 필요한 부분만 증분으로 늘어난다. 즉 상태변경을 하는 일반 애플리케이션과 큰 차이가 없다. (특히 웹앱의 생명주기상 더욱 문제 안된다.)
  7. 메모리 사용량이 폭증하지 않는 마법의 비결이 뭐냐? 답은 의외로 간단했다. 얕은 복사(Shallow Copy)다. 진짜 천재다.
  8. 물론 이상 모두 Redux의 핵심을 짚었다고 할 수 없다. Flux – Redux 진화 라인의 핵심은 액션의 단방향 흐름이다. 즉 이벤트 소싱이다.
  9. 이벤트 소싱과 상태의 예측성 모두 게임 쪽에서 훨씬 일찍부터 태동하고있던 사상이었고, DB쪽에서는 옛날부터 이미 구현된 현실이었다.
  10. 물론 수렴 진화(Convergent evolution)에서 그 어떤 가지도 모두 동등하게 중요하고 대체불가하다.
  11. 함수형 프로그래밍 신도들은 immutable 의 승리가 보일 것이고, 데이터베이스 힙 가이들은 “THE LOG IS THE DATABASE”가 보일 것이고, 이벤트 소싱파들은 이벤트 소싱이 보일 것이고, CRDT연구자들은 CRDT가 보일 것이고, Redis 애호가들은 Redis가 보일 것이고, 블록체인 신도들은 블록체인이 보일 것이다.
  12. “Redux”는 “Reduce”(“맵리듀스”의 그 “리듀스” 맞다)와 같은 라틴어 어원을 갖는다. 위에서 언급한 것처럼 “(과거의 것을) 되찾음”이란 뜻이 있다. 그리고 reduce는 함수형 프로그래밍에서 잘 알려진 패턴인데 억지번역을 해보자면 ‘귀납 합병’ 같은거다. 필자도 지금 알게 된건데 “fold”가 더 표준적인 용어더라.
  13. 정말 블록체인으로 Redux를 구현한 사람이 있다.
  14. Redux는 놀랍도록 짧다. 핵심 코드 99줄 구현을 갖고있는 것으로 유명하다. 그도 그럴것이 React Europe이란 컨퍼런스에 ‘핫 리로딩’ 관련 기술공유를 하기 위해 PoC 목적으로 급조해 만들어졌다고 한다. (거봐 그냥 WAS를 본딴거라니까)
  15. Redux 발명자는 이미 페이스북에서 채갔다.

과학적 방법이란?

과학적 방법은 하나의 통일된 ‘방법’이 아니다. 그것은 수세기에 걸쳐 진화한(그리고 계속 진화하고 있는) 수십 가지 기법과 과정의 집합이다. 각 방법은 사회에서 지식의 통일성을 점진적으로 증가시키는 하나의 작은 단계다. 과학적 방법의 선구적인 발명 중 몇가지를 보자.

  • 기원전 280년 도서관 색인 목록. 기록된 정보를 검색하는 방법. (알렉산드리아에서.)
  • 1403년 공동 저술 백과사전. 둘 이상의 지식을 공유하는 방법.
  • 1590년 통제 실험. 프랜시스 베이컨이 사용했으며 한 가지 변수를 바꾸면서 하는 실험.
  • 1665년 재현 필요성. 한 실험의 결과가 타당하려면 반복될 수 있어야 한다는 로버트 보일의 개념.
  • 1752년 동료 심사를 거치는 학술지. 공유된 지식에 확인과 타당성을 한층 덧붙임.
  • 1885년 무작위 맹검 실험 설계. 인간의 편견을 줄이는 방법이며, 새로운 유형의 정보로서의 무작위화.
  • 1934년 반증할 수 있는 검사 가능성. 타당한 실험은 그것이 틀릴 수 있는 검증 가능한 방식을 지녀야 한다는 카를 포커의 개념.
  • 1937년 통제된 속임약. 참가자의 편향된 지식 효과를 제거하기 위한 실험 수단.
  • 1946년 컴퓨터 시뮬레이션. 이론을 세우고 자료를 생성하는 새로운 방법.
  • 1952년 이중 맹검 실험. 실험자의 지식이 미치는 영향을 제거하는 더 다듬어진 방법.
  • 1974년 메타 분석. 한 분야에서 앞서 이루어진 모든 분석의 이차적 분석.

이런 획기적인 혁신들이 모여서 현대 과학 활동을 낳는다. (내 목적상 정확한 날짜는 중요하지 않기 때문에 발견의 우선권을 둘러싼 다른 여러 주장들을 무시하려 한다.) 오늘날의 전형적인 과학적 발견은 사실들과 반증 가능한 가설, 아마도 속임약과 이중 맹검 설계에 따른 재현 가능하고 통제된 실험, 동료 심사를 거치는 학술지에 실리고 관련된 문헌들이 보관된 도서관의 색인에 실리는 것에 의존할 것이다.

과학 자체와 마찬가지로 과학적 방법도 축적된 구조다.

이 짧은 연대표에 명확히 드러나 있듯이, 우리가 현재 ‘과학적 방법’이라고 생각하는 것의 주요 혁신 중에는 비교적 최근에 이루어진 것이 많다.

이 최근성은 과학에서 내년에 발명될 다른 ‘핵심’ 방법이 무엇일까 하는 궁금증을 일으킨다.

과학의 본성은 여전히 유동적이다. 즉 테크늄은 앎의 새로운 방법들을 빠르게 발견하고 있다. 지식의 가속, 정보의 폭발, 진보의 속도를 고려할 때, 과학적 과정의 본성은 지난 400년 동안에 그랬던 것보다 다음 50년 동안 더 변화할 것이다. (추가될 가능성이 있는 것이 몇가지 있다. 부정적인 결과 포함, 컴퓨터 증명, 삼중 맹검 실험, 위키 학술지 등.)

과학의 자기 변형의 핵심에는 기술이 있다. 새 도구들은 정보를 구조화하는 다른 방법들, 새로운 발견 방법들을 가능하게 한다. 우리는 이 조직 체계를 지식이라고 부른다. 기술 혁신이 이루어질수록 우리 지식의 구조는 진화한다.

과학은 새로운 것을 발견함으로써 업적을 이룬다. 그리고 과학의 진화는 발견들을 새 방식으로 조직하는 것이다. 우리 도구들의 조직화 자체도 지식의 한 유형이다.

현재 통신 기술과 컴퓨터의 등장으로 우리는 새로운 앎의 방식에 진입했다. 테크늄이 나아가는 궤적은 우리가 생성하고 있는 수많은 정보와 도구를 더욱 조직하고 만들어진 세계의 구조를 증가시키는 방향이다.

—- 케빈 켈리 <기술의 충격(What Technology Wants)> 에서