1. 소개

오늘은 리액티브 프로그래밍이 무엇인지 소개하려고 합니다.

2. 리액티브 프로그래밍이란 무엇인가?

데이터가 통지될 때마다 관련 프로그램이 반응(Reaction)하여 데이터를 처리하는 기법이기 때문에 리액티브 프로그래밍이라고 불리웁니다.

GPS 위치 정보가 바뀔때 데이터 흐름을 생각해 볼께요. 이동을 하게 되어 위치 정보가 변경되면 데이터를 전송하지만 이동을 하지 않으면 데이터도 전송하지 않아요. 이와 같이 데이터를 한번에 다 보내는 것이 아니라 각 데이터가 생성될 때마다 보냅니다. 이러한 데이터 흐름을 스트림(Stream)이라고 해요. 이미 생성되어 있는 데이터 집합이 아니라 앞으로 발생할 가능성이 있는 데이터까지 포함을 하는 구조죠.

이 데이터 스트림은 이벤트와 관련이 있어요. 문자열을 입력하는 행위는 입력한 데이터가 순서대로 생성되는 것으로 생각할 수 있죠. 123이라고 입력한다면 입력 이벤트 발생 시 아래와 같은 데이터가 생성된다고 볼 수 있어요.

  • [1]
  • [12]
  • [123]

버튼을 누르는 행위도 '버튼을 누르다'라는 이벤트 데이터가 생성된다고 보면 되죠. 버튼을 여러번 누른다면 누른 횟수만큼 '버튼을 누르다'라는 이벤트 데이터가 발생하는 겁니다. 이벤트가 발생할 때마다 데이터를 전송하는 스트림으로 취급할 수 있어요.

리액티브 프로그래밍은 데이터 스트림으로 데이터를 전달받은 프로그램이 그때마다 적절히 처리할 수 있게 구성됐어요. 프로그램이 필요한 데이터를 가져오는 것이 아닙니다! 데이터를 받은 시점에 반응(Reaction)하여 이를 처리하는 겁니다.

3. 리액티브 프로그래밍의 특징

3.1. Responsive (Future Pattern) - 응답성

요청 즉시 응답을 준 뒤, 실제 완료하고 나서 다시 응답합니다.

3.2. Elastic - 유연성

결합도가 크지 않고 작은 조합들로 큰 로직을 이룹니다. 확장성과 관련이 있어요.

3.3. Resilent - 탄력성

상태를 갖고 있지 않아서 회복력이 좋아요.

3.4. Message-driven (Reactor Pattern) - 메시지 주도

메시지 기반으로 동작해서 클래스간 결합도는 없어요.

4. 리액티브 프로그래밍과 리액티브 시스템

리액티브 프로그래밍은 리액티브 시스템의 하위 집합이라고 할 수 있어요.