Community

# 반응형 프로그래밍에 대한 이해 📨 지난 새해 계획에서 소개해드린 것처럼, 저는 요즘 틈틈이 Reactive 프로그래밍에 대한 글을 찾아보며 익히고 있습니다. 프론트엔드에 대해 유익하고 깊은

# 반응형 프로그래밍에 대한 이해 📨 지난 새해 계획에서 소개해드린 것처럼, 저는 요즘 틈틈이 Reactive 프로그래밍에 대한 글을 찾아보며 익히고 있습니다. 프론트엔드에 대해 유익하고 깊은 글을 많이 써주시는 Teo님께서 마침 반응형 프로그래밍에 대해 다루어주셔서 정리 내용을 공유합니다.(예시도 잘 되어있으니, 원본 글도 함께 보기실 추천합니다!) • 프로그래밍에서 패러다임은 프로그래밍의 관점을 갖게 해주고 결정하는 것으로, 간단히 '어떠한 관점으로 설계를 하느냐'입니다. 목적이 같더라도 관점에 따라서 다른 형태가 됩니다. 객체지향은 프로그램을 상호작용하는 객체들의 집합으로 보고, 함수형 프로그래밍은 프로그램을 상태값이 없는 함수값의 연속으로 생각하게 해줍니다. • 잘 만들어진 프로그래밍 패러다임은 보다 좋은 프로그램을 만드는 방법과 시각을 제공합니다. 나아가 여러 패러다임을 안다면, 상황별로 그 상황을 '더 간결하고 단순하게 설명하는 관점'을 선택할 수 있습니다. • 현대의 프로그램은 하나의 패러다임만 취하는 게 아니라, 여러 패러다임을 함께 섞어서 사용하려는 시도가 늘고 있습니다. 반응형 프로그래밍도 프로그래밍 관점을 갖게하고 결정하는 하나의 패러다임입니다. • 반응형(Reactive) 프로그래밍이란, '데이터의 흐름'과 '변경사항의 전파'에 중점을 둔 '선언적 프로그래밍' 패러다임입니다. 가장 친숙한 예는 스프레드 시트(엑셀)입니다. 하나의 셀에 다른 셀을 사용하는 수식을 '선언'해두면, 다른 셀의 값이 변경되면 '변경사항이 전파'되어 수식의 값도 변경되지요. 이런 수식이 중첩되어 있다면, 변경사항이 '데이터의 흐름'도 만들어집니다. • 웹 개발에서 반응형 프로그래밍이 중요해진 계기는 웹 프레임워크 전환이 있습니다. MVVM 패턴을 따르는 웹 프레임워크의 본질은 "'값이 변경'되었을 때 '템플릿에 선언' 해둔대로 알아서 렌더링을 해준다"인데요, 반응형의 정의와 유사합니다. • 또한 웹 프레임워크의 핵심은 어떻게 동작하는 지가 아니라 무엇을 해야할지 '선언'해서 내부에서 적절하게 렌더링하는 방식입니다. 이는 선언적 프로그래밍으로 명령형 프로그래밍에 비해 가독성, 재사용성, 독립성, 유지보수 면에서 좋습니다. • '선언'으로 변화는 데이터를 대하는 방식도 변경했습니다. 기존에는 Pull의 관점에서 렌더링할 때필요한 데이터를 모두 불러왔다면, 이제 Push의 관점으로 값이 변화할 때마다 템플릿으로 데이터를 전달합니다. 초기에는 반응형이 뷰에 집중되었다면, 이제 비즈니스 로직 전반으로 개념이 확장되었습니다. • 프론트엔드에서 반응형 프로그래밍이 중요한 다른 이유는 비동기 프로그래밍을 잘하기 위해서 입니다. 프론드엔드를 사용하는 사람의 동작과 서버의 응답시간을 예측할 수 없기 때문에, 대부분의 프론트엔드 로직은 비동기로 되어 있습니다. • 비동기 프로그래밍은 코드 작성 순서대로 동작하지 않으며, 언제 실행이 될지 예측할 수 없고, 호출 순서대로 동작한다는 보장과 호출 당시의 값과 실제 실행 값이 그대로일 거라는 보장이 없습니다. Rx와 반응형 프로그래밍은 이런 어려운 비동기 상황을 더 잘 대응합니다. • 반응형 프로그래밍은 '데이터의 변경을 템플릿에 반영하는 일'을 [데이터의 변경/템플릿 반영]으로 나눕니다. 이때 참조의 주체는 [템플릿 반영]하는 쪽입니다. [데이터의 변경]쪽은 그저 데이터가 변경될 때 전달만 하면 됩니다. 이렇게 하면 캡슐화와 느슨한 결합이 용이해지고, 모듈간의 책임이 확실해지며 확장이 쉬워집니다. • ReactiveX는 관측가능한 스트림을 통해 비동기 프로그래밍을 하기 위한 API(An API for asynchronous programming with observable streams)입니다. Rx는 단순한 API라기 보다 새로운 패러다임인 반응형 프로그래밍에 가깝습니다. • 반응형 프로그래밍은 [데이터의 변경]을 [템블릿 반영]하는데, 이를 Event라고 할 수 있습니다. Rx는 이벤트의 종류를 Next, Error, Complete 타입으로 정의하여 보편적인 상황을 처리합니다. Next는 일반적인 이벤트, Error는 에러난 상황, Complete는 더 이상 이벤트가 없는 상황입니다. 이런 이벤트가 여러개 연결될 때, 이벤트는 값으로 다루어 집니다. • 이렇게 보편적인 상황을 모두 다루는 형태를 Stream이라고 할 수 있습니다. 반응형 프로그래밍이란 '스트림을 선언적으로 작성하는 프로그래밍 패러다임'이라고 할 수 있습니다.

알림

알림이 없습니다