반응 성 ( Reactivity ) 고급 편 - Discover Meteor 
 미티어 에서 반응 형 데이터 소스 를 만드 는 방법 을 배운다 . 
 반응 형 데이터 소스 의 간단 한 예제 를 만들 어 본다 . 
 Deps 와 AngularJS 를 비교 해본다 . 
 의존 성 추적 코드 를 직접 작성 하 는 경우 는 거의 없 지만 , 의존 성 해소 가 진행 되 는 경로 를 추적 하 는 데 는 반응 성 을 이해 하 는 것 이 확실히 도움 이 된다 . 
 현재 사용 자 의 페이스북 친구 들 중 에서 몇 명 이 Microscope 의 각 post 에 “ 좋 아요 " 를 눌렀 는 지 를 추적 한다고 상상 해 보 자 . 사용자 를 페이스북 으로 인증 하 고 , 적절 한 API 를 호출 하 고 , 필요 한 데이터 를 파싱 하 는 작업 은 이미 구현 했 다고 가정 하 자 . 이제 우리 는 좋 아요 의 숫자 를 리턴 하 는 클라이언트 쪽 의 비동기 함수 getFacebookLikeCount ( user , url , callback ) 를 가지 고 있 다 . 
 이런 함수 에 대하 여 기억 해 둘 중요 한 사항 은 이것 이 비 반응 형 이 고 비 실시간 이 라는 점 이 다 . 이것 은 페이스북 에 HTTP 요청 을 보내 고 , 일부 데이터 를 가져오 며 , 비동기 콜백 에서 애플리케이션 에 적용 할 수 있 게 한다 . 그러나 그 기능 은 페이스북 에서 숫자 가 변경 되 어도 스스로 재 실행 되 지 않 을 것 이 다 . 그 데이터 가 변해도 우리 UI 는 변경 되 지 않 을 것 이 다 . 
 이 를 해결 하 려고 , 몇 초 간격 으로 setInterval 를 사용 하 여 함수 를 호출 한다 : 
 currentLikeCount 변수 를 체크 할 때 마다 , 우리 는 5 초 정도 의 오차 를 가지 고 정확 한 숫자 를 얻 을 것 이 라고 기대 할 수 있 다 . 이제 우리 는 이 변수 를 헬퍼 에서 다음 과 같이 사용 할 수 있 다 : 
 그런데 , currentLikeCount 이 변경 될 때 템플 릿 을 다시 그리 도록 어떤 것 도 아직 지시 하 지 않 는다 . 비록 변수 가 스스로 변경 된다는 점 에서 는 실시간 에 준 한다고 하 겠 지만 , 이것 이 반응 형 은 아니 므로 나머지 미티어 에코 시스템 과 적절 하 게 통신 하 는 것 은 아니 다 . 
 반응 성 추적 : 컴 퓨 테이 션 ( Computation ) 
 미티어 의 반응 성 은 의존 성 ( dependency ) - 컴 퓨 테 이 션 집합 을 추적 하 는 데이터 구조 - 에 의해서 중개 된다 . 
 이전 의 반응 성 사이드바 장 에서 보 았 듯이 , 컴 퓨 테이 션 은 반응 형 데이터 를 사용 하 는 코드 영역 이 다 . 이 경우 , postItem 템플 릿 에 대한 컴 퓨 테이 션 이 은연중 에 만들 어 진 바 있 다 . 그 템플 릿 매니저 의 모든 헬퍼 는 그 컴 퓨 테 이 션 내부 에서 작동 한다 . 
 컴 퓨 테이 션 을 반응 형 데이터 에 " 관심 을 가지 는 ” 코드 영역 이 라고 생각 해도 좋 다 . 데이터 가 변경 될 때 , ( invalidate ( ) 에 의해서 ) 알림 을 받 는 것 이 이 컴 퓨 테이 션 이 고 무슨 일 을 할 지 를 결정 하 는 것 이 컴 퓨 테이 션 이 다 . 
 변수 를 반응 형 함수 로 바꾸 기 
 변수 currentLikeCount 을 반응 형 데이터 소스 로 바꾸 려면 , 이 에 대한 의존 성 을 가지 는 모든 컴 퓨 테이 션 을 추적 해야 한다 . 따라서 이것 을 변수 에서 ( 임의 의 값 을 리턴 하 는 ) 함수 로 바꾸 어야 한다는 요구 가 발생 한다 : 
 우리 가 한 것 은 _ currentLikeCountListeners 의 의존 성 을 설정 한 것 인데 , 이 는 currentLikeCount ( ) 이 내부 에서 사용 된 모든 컴 퓨 테이 션 을 추적 한다 . _ currentLikeCount 값 이 변경 되 면 , 그 의존 성 에 따라 changed ( ) 함수 를 호출 하 는데 이 는 모든 추적 된 컴 퓨 테이 션 을 무효화 ( invalidate ) 시킨다 . 
 이 컴 퓨 테이 션 들 은 진행 하 면서 각 케이스 별 로 그 변경 사항 을 처리 한다 . 
 이것 이 간단 한 반응 형 데이터 소스 를 위한 전형 으로 보였 다면 , 제대로 본 것 이 다 . 미티어 는 이 과정 을 보다 쉽 게 할 수 있 는 ( 직접 컴 퓨 테이 션 을 사용 해야 할 필요 없이 , 단지 autorun 을 사용 하 면 되 도록 ) 빌트인 도구 를 제공 한다 . 플랫 폼 패키지 에 reactive - var 라는 이름 의 패키지 가 있 는데 이것 이 바로 currentLikeCount ( ) 함수 가 하 는 작업 을 처리 한다 . 이것 을 다음 과 추가 한다 : 
 그리고 이것 으로 우리 코드 를 다소 단순 화 할 수 있 다 : 
 이제 헬퍼 에서 currentLikeCount . get ( ) 를 호출 해 보 면 , 이전 과 같이 작동 할 것 이 다 . 그리고 또 다른 패키지 reactive - dict 가 있 는데 , 이것 은 ( Session 과 거의 같 은 ) 반응 형 의 키 - 밸류 저 장소 를 제공 하 는 데 , 이것 역시 매우 유용 할 것 이 다 . 
 Tracker 와 Angular 비교 
 Angular 는 구글 의 직원 들 이 개발 한 클라이언트 쪽 의 반응 형 렌더링 라이브러리 이 다 . 미티어 의 의존 성 추적 에 의한 접근 방식 을 Angular 와 비교 해 보 면 이것 의 접근 방식 은 완전히 다르 다 . 
 우리 는 미티어 의 모델 이 컴 퓨 테이 션 이 라 불리 는 코드 블록 을 사용 하 는 것 을 보 았 다 . 이 컴 퓨 테이 션 들 은 적절 한 시점 에 무효화 ( invalidate ) 하 는 특별 한 “ 반응 형 ” 데이터 소스 들 ( 함수 들 ) 에 의해서 추적 된다 . 그래서 이 데이터 소스 는 명시 적 으로 그것 이 의존 하 는 모두 에게 invalidate ( ) 를 호출 해야 하 는 시점 을 알린다 . 이 시점 은 일반 적 으로 데이터 가 변경 되 었 을 때 이 지만 , 그 데이터 소스 는 잠재 적 으로 다른 이유 로 도 무효화 를 구동 할 지 말지 를 결정 할 수 있 다는 점 을 유의 하 기 바란다 . 
 추가 로 , 컴 퓨 테이 션 이 보통 은 무효 화 될 때 재 실행 하 지만 , 독자 가 원 하 는 방식 으로 행동 하 도록 설정 할 수 있 다 . 이 모든 것 이 반응 성 에 대한 고 수준 의 제어 를 가능 하 게 한다 . 
 Angular 에서 , 반응 성 은 scope 객체 에 의해서 이루어진다 . Scope 는 특별 한 메서 드 들 을 가진 평이 한 JavaScript 객체 로 간주 된다 . 
 임의 의 scope 에서 어떤 값 에 반응 적 으로 의존 하 기 를 원하 면 , scope . $ watch 를 호출 하 여 ( scope 의 일부 영역 에 ) 관심 있 는 expression 을 제공 하 고 그 expression 이 변경 되 는 매 시점 마다 실행 되 는 listener 함수 를 제공 한다 . 따라서 그 expression 의 값 이 변경 되 는 매 시점 에 하 고자 하 는 바 를 명시 적 으로 정확 하 게 지정 한다 . 
 위 의 페이스북 예제 로 돌아가 면 , 우리 는 다음 과 같이 작성 한다 : 
 그러 한 반응 형 값 이 변경 되 었 을 때 , scope . $ apply ( ) 가 호출 되 어야 한다 . 이것 은 그 scope 의 모든 watcher 를 재 평가 하 지만 , expression 의 값 이 변경 된 watcher 의 listener 함수 를 호출 하 기 만 한다 . 
 그러므로 scope . $ apply ( ) 는 dependency . changed ( ) 와 유사 한데 , scope 의 수준 에서 동작 한다는 점 이 다르 며 , 어떤 listener 가 재 평가 되 어야 하 는지 를 정확 하 게 말 할 수 있 는 제어 능력 을 주지 는 않 는다 . 말 하 자면 , 이 제어 능력 의 부족 으로 Angular 는 어떤 listener 가 재 평가 가 필요 한지 를 정확 하 게 결정 하 는 데 있 어서 매우 똑똑 하 고 효율 적 인 능력 을 가지 게 되 었 다 . 
 Angular 에서 getFacebookLikeCount ( ) 함수 코드 를 작성 한다면 다음 과 같 은 형태 가 될 것 이 다 : 
 확실히 미티어 는 대부분 의 복잡 한 것 들 도 처리 한다 . 그리고 많 은 작업 을 하 지 않 고 도 반응 성 의 잇 점 을 얻 을 수 있 다 . 하지만 , 희망 하 건데 더 발전 하 고 싶 다면 , 이 들 패턴 에 대하 여 공부 하 는 것 이 도움 이 될 것 이 다 . «