나는 왜 Reactive streams와 친해지지 않는가?
Reactive stream에 관심을 갖게 된 건 2017년 스프링캠프를 통해서이다.
![](data:image/png;base64,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AREQAREQAREQgXIT6FjoHz16tKc1fPTRR93q1at7WgZlLgJVJ7B06VL3+OOPV70aKn8LAlu2bHHDhg1zBw4caBGzPocnTJjg5syZU58KlaAmai9KYISSFCFvDfbee++5F154oSu1W7x4sXv66ae7kle3M9m7d6+bNGmSu+mmm1xmoQ+gH//4x+5b3/qW//30pz91XPzthrFjx7qzzjqr3dMa8cl/9uzZjW2tlJPAkaNH3cZPd5azcCqVe+mll9wpp5ySicQ111zj7rrrrkzn1vmkPYcOuB379pSqikuWLPHt9aefflqqchVZmIsuusjdd999TbOQ/zZF0/RAJ+1F00RLcqCs/vDcc8+50047zW3btq0kpAaLkbcGe/LJJzvShO3AGT16tDv99NPbOaUycW+77TZ/T6ftyyz0zzzzTHfBBRe4t956yyH6R40a5ebPn982hI8++sj3OuzEBx980NEwpw3tOhmdChxJIZnAextXue+NutVdM/25xIi3z3rJffepP/vfiHemN4378NtT3JfuusAdPnqkaZy4A2+vX+nLccPr3enhx5Wh7PvavWbi6tPJjXvWrFnunXfeiUu2lvsOHjniEPGtwg+eu8dfF63idfN43YV+3LXQSugX5b9b92x0d7x+sbttxoV+uf/w3m6autC8OmkvCi1YDolH/aEsmgFBit559tlnc6hlfkm0q8HCnOfOnevrFO6T0B+kEdeWhZyS1o8cOeJOPvnkxpORTEKfqTIYd+XKlUl5ZTpG7yNJ6EenCoVOFj0WV4Cki/azzz5z/NKGNPmFabVKu9XxMK1W61954DdeWCOu+X35novcBa/8xX24dV2rU/3xPQf3u99OesL925M3JcZfuWOTm7pyofuPZ+5wl0xsPvVj9pql7rLJ7XewBg7sdRdPGOnFfmJBCjrYysatjrcqVrs2j8uv1TWTlIelV8SN29JuxYDjreJe+MrwIf5sfs1y1MJZabLILQ6d2/PGD2uZHh3f4Quad35bJlBAhKjQT+MbWYuRlHarNLOeG3ctRIV+mrRb+eOIt//sfj3uW7G/Wasm+uodPnrYfbB5gZv7yVQfb9f+Ha2qnevxVnWIy6zVOXY8a3th57ebd9J5YVpp44XntFpvpRlanR/1tyxl/OCDD7zmYhYFg6zNQtq008aLyyd6brsaLEyT2RicH4ao0I/yC+NG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ITB1hqk7t956q4/LtJpeCP1rrrnGz+m/7rrr3JNPPumn9yR5RDh157G3rnfb926Ojd6J0CfBA0f2O+b+8/Lvrv3bY/PQThEQAREQAREQAREQARFIQyA3oY+IP/XUU/18+EOHDjXytnnvJvY5YOJ++vTpfs48o+3jxo1rnDN+/PjYOfpEYGoQ8S1d9rWauhOO6PMCME8beLpwzz33+N/w4cPdhx9+2Mg/uhIK/eixcLuZ0H/rk1f9E4HP3OCXiGxqjk3dIQ2ODZ93s7t2ytnulum/8i8AM+1HQQREQAREQAREQAREQASyEMhN6JM58+xtys6ll17qv4rDNoGv4jBlh6/d8OIsL8dah4ARduL99re/deecc45ft/PCl3FJh6cFCH1eBCYPOg3tCP3169f7qTtXX321Y17+/fff7/gCEGlu3LjRlzX8w8g6wpvv4yPQGXWPhj0HB/yxqcued3yOk3hh3G17NvlR+hkrxju+4nPXzN/6beb5ExD0o9970O/buW+r3yYdpvB8emCXn+YEmzSfA42WTdsiIAIiIAIiIAIiIAL9SSCz0J82bZrbvPn4KSx8yYaXcJ966in32muveWEO2n379vnReL6+Q4cAgW4BActXeOzY9u3bHaP9hE8//dSnF47gI9bHjBnjeBmYc9euXetf0rX0KFv4n3T5Wg9l4qkCnQr7dKfFX7JkiRf677zzju1qLKPf0Z+ybHTjmK2YcI9+bx9hb+GJ+bd5IU8cXuy1uIh85ubb9rw1r7nl2xY3toe9eY0X+hdddJEvv6WnpQiIgAiIgAiIgAiIgAgkEcgs9JMSLfMx+zznZZdd5h588EE/dYcpR/wvgLDzUUQd+ErPgcP7ikhaaYqACIiACIiACIiACIjAEAJ9J/Sp/eLFi/0TB6buPP74444XiMN3CIYQ0oYIiIAIiIAIiIAIiIAIVJBAXwr9CtpJRRYBERABERABERABERCBtghI6LeFS5FFQAREQAREQAREQAREoBoEJPSrYSeVUgREQAREQAREQAREQATaIiCh3xYuRRYBERABERABERABERCBahCQ0K+GnVRKERABERABERABERABEWiLgIR+W7gUWQREQAREQAREQAREQASqQUBCvxp2UilFQAREQAREQAREQAREoC0CEvpt4VJkERABERABERABERABEagGAQn9athJpRQBERABERABERABERCBtghI6LeFS5FFQAREQAREQAREQAREoBoEJPSrYSeVUgREQAREQAREQAREQATaIiCh3xYuRRYBERABERABERABERCBahCQ0K+GnVRKERABERABERABERABEWiLgIR+W7gUWQREQAREQAREQAREQASqQUBCvxp2UilFQAREQAREQAREQAREoC0CEvpt4VJkERABERABERABERABEagGAQn9athJpRQBERABERABERABERCBtghI6LeFS5FFQAREQAREQAREQAREoBoEJPSrYSeVUgREQAREQAREQAREQATaIiCh3xYuRRYBERABERABERABERCBahCQ0K+GnVRKERABERABERABERABEWiLgIR+W7gUWQREQAREQAREQAREQASqQUBCvxp2UilFQAREQAREQAREQAREoC0CEvpt4VJkERABERABERABERABEagGAQn9Duy0efNmN3XKZHfv3Xe6X//qfHfa905x3/z6V90J//uL/sc6+zhGHOJyjkJvCMheveGuXEVABERABERABHpDQEK/Te4DAwPuudHPuHN/9hP35b/5n5l+nEsapKVQLAHZq1i+/Zj64yOG++uepYIIiIAIiIAIlJmAhH5K6zAazKg8o/Um8L9ywhfdSWd+2Z12xf91P7rr79y5I/7eXfDcP7uLxp7kf6yzj2PEIS7n2PmkRZoa5U9phDaixdnr6yd80V181t+6h//4FTfxgf/rFoz6hlsx/ptu3aQT/Y919nGMOMTlHNmrDfA1j2oi33xCYr/mBlf1REAERKDiBCT0Uxjwr4+PGCLwEexn3vKNQUE/7p/dRe38xp7kzyUNEwsIfvJQyIdA1F4I9hfv/JoX8+snn+ja+dEJ4FzSkL3ysU+VUzEfCJdVro/KLgIiIAIiUG8CEvoJ9l320Ufu58EUnX/5yQnuZ4+e2J6wT+gEkBZpmmggL/JUyEYgaq/Lf/YlN2fk/2tL2Cd1AkiLNGWvbPapw1lm+3BZh3qpDiIgAiIgAvUkIKHfxK68OGvTdP7uX//GT79pa+Q+QeBH02FqD3kgHsiTvBXaIxDa6/ST/5effpMk2js5xtQe8pC92rNRHWKHAt/W61Av1UEEREAERKCeBCT0Y+zKi7J2E//2uV/JNkWnDaHvhf/Ykxx5Wb6UQSEdgdBe11zw5UxTdNoV/kzpIS/ZK52N6hLL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)
![](https://github.com/Netflix/Hystrix/wiki/images/soa-2-640.png)
![](https://github.com/Netflix/Hystrix/wiki/images/soa-3-640.png)
그 때 나는 비동기 어플리케이션의 추적(Tracing)에 빠져 있어, 스프링캠프에서 관련된 세션을 발표했는데 이 세션에서 언급된 비동기 어플리케이션이 reactive streams를 지칭한 것은 아니었다. (스프링캠프 : 비동기 어플리케이션 모니터링과 밀당하기)
Reactive stremas와 webflux는 이름 정도만 아는 수준이었는데 스프링캠프의 토비님 세션을 통해 좀 더 알게 되었다. (스프링캠프: Spring Webflux)
지금도 잘 이해하고 있는 것은 아니지만 그 당시에는 그저 비동기 논블로킹을 구현하는 또 다른 스타일 또는 nodejs와 유사한 이벤트 루프 처리와 콜백 헬을 좀 더 우아하게 처리하는 방법인가? 정도로만 생각했고 webflux 공식 버전이 나온것도 아니기에 관심이 오래가지는 않았다.
그러다 관련된 정보들이 점점 많아지고 주변에서도 이를 사용하기 시작하면서 나도 개발중인 시스템에 적용하게 되었다. 특히 사용하는 시스템들이 늘어나다 보니 SCOUTER에서도 webflux에 대한 추적을 지원할 필요가 있었다.
그런데 webflux로 개발을 하거나 관련 코드를 볼때 뭔가 불편한 이질감을 떨칠 수가 없었고 종종 "내가 지금 왜 이러고 있나~"라는 멍타임이 오곤 했는데, 주변 개발자들도 "나도 그렇다!" 라는 얘기들을 하여 이참에 이 이질감의 정체를 밝혀 보려고 한다.
그럼 먼저 개발 관점에서 reactive streams의 몇가지 장점을 한번 짚어보자.
- 일괄 처리
- 백프레셔
- 스트림을 다룰때의 풍성한 표현력
또한 reactive streams는 당연히 비동기 논블로킹 프로그래밍의 장점을 가지고 있다.
- C10K 문제 해결
비동기 논블로킹 프로그래밍의 장점으로 많이 얘기되는 것이 C10K 문제의 해결, 즉 "만개의 클라이언트를 동시에 처리할 수 있는가?" 이다.
소켓은 동시에 수백만개를 열 수 있는 반면, 블로킹 프로그램에서는 많아야 수천개만 동시에 처리할 수 있는데, 이 불일치를 해결하기 위한 방법으로 비동기 논블로킹 프로그래밍이 인기를 끌고 있는 것이다.
이처럼 C10K 문제의 우아한 해결과 풍성한 표현력, 백프레셔 등 기술에 대한 우수함은 이해가 가지만 왠지 정이 가지 않고 친해지지 않는 reactive streams, 이제부터 개인 감성으로 이넘에 대한 불만을 한번 터뜨려 보겠다.
먼저 난 운영 관점에서 추적성을 아주 중요하게 생각하는데 스택 트레이스에 컨텍스트가 유실되는게 가장 먼저 짜증으로 다가왔다. 최신 버전의 reactor에서는 여기 인위적인 정보를 삽입하여 보완해주기는 하지만 여전히 난해하고 코드와 일치하지 않는다.
특히나 IO 수행중에는 할당된 스레드가 없기 때문에 스레드 덤프를 통해 알 수 있는 정보는 더욱 제한적이다.
(비동기 논블로킹 프로그램과 동일한 문제를 가지고 있지만 reactor에서는 바인딩된 스레드의 스택트레이스 조차 거의 쓸모가 없는 경우가 많아 더욱 짜증을 불러 일으킨다.)
그림. 블로킹 프로그램에서의 스택트레이스 |
그림. 비동기 프로그램에서의 스택트레이스 |
두번째로, 내가 작성하는 비즈니스 로직이 Mono와 Flux에 매몰되어 로직이 주인인지 reactor가 주인인지 조차 헷갈릴 정도로 래퍼들로 도배되고 특히나 여러개의 Mono, Flux를 합쳐야 하는 경우는 원본 객체가 Mono를 입었다 벗었다 하면서 혼란을 가중시켰으며 내가 짠 코드를 읽을 때 조차 순간적으로 비즈니스 로직이 잘 보이지 않는 마법같은 일이 발생하곤 했다.
이로 인해 순간적으로 뇌가 멈추는 현타에 종종 빠지며 reactor가 제공하는 풍성한 연산자들 조차도 그냥 이 불편함을 보완해 주는 장치로 느껴졌다. 수많은 연산자들... 구지 이걸 내가 다 알아야 하는 것인가?
얼마 전에는 카카오테크에 한 아티클이 올라왔는데 (사용하면서 알게 된 Reactor, 예제 코드로 살펴보기) 글의 내용에 집중되기 보다는, 과연 비즈니스 어플리케이션을 개발할때 이런 고민까지 하는 것이 정상인가? 라는 생각이 먼저 들었다.
그림. Reactor의 switchMap() 연산자 |
뭐 그랬다. 지금까지 다른 새로운 것들을 접할때와 달리 그냥 노오력~이 부족해서 친해지지 않는다고 치부하기에는 좀 이상했다. (물론 노오력~을 더 하면 더 친해지긴 하겠지...)
그렇다면 다시 한번 냉정히 생각해보자.
정말 왜 그럴까? 왜 이런 불편함이 느껴질까?
이런 경우 보통 셋 중에 하나다.
1. reactive streams가 진짜 구리다.
2. 노오력이 부족하다.
3. 적절한 곳에 적절하게 사용되지 않았다.
"노오력 선택지"는 일단 제끼자. 사실 이 경우도 종종 있긴한데 노오력이 부족한 상태에선 절대 깨달을 수 없으니...
"진짜 구리다 선택지"는 경험상 아주 드물게 선택될 수 있으니 세번째라고 가정하고 좀 생각해 보자.
내가 webflux를 사용한 가장 중요한 이유가 무엇인가? 어떤 경우에 webmvc가 아닌 webflux를 선택하는가?
주변에 왜 사용해요? 라고 종종 물어보면 빠르고 성능이 좋아서... 라는 대답을 종종 듣는데 지금 내가 개발하는 어플리케이션은 피크 타임에도 워커 스레드가 수십개 수준이라 이런 상황에서 처리량, 응답시간 두 관점 모두 webflux가 더 나은 결과를 낼 것 같지는 않다.
내가 webflux를 선택하는 첫번째 목적은 그냥 무거운 스레드 문제(=C10K 문제)를 해결하기 위함이다.
무거운 스레드 문제
OS 스레드는 생성 유지에 사용되는 메모리량이 크고 이용되는 스레드가 많아질수록 컨텍스트 스위칭이 빈번하게 발생하며 이때 수반되는 비용도 적지 않으므로 보통 무한정 스레드를 생성하지 않고 스레드풀을 만들어 재사용 하는 식으로 개발한다. (블로킹 시스템의 경우)이런 방식에서 특정 IO(예를 들면 연동하는 다른 서비스에 대한 호출) 응답이 느려진다면 해당 스레드는 거기서 응답이 올 때까지 대기(블로킹) 하게 된다. 이 상황이 지속되면 스레드 풀에 있는 모든 스레드들이 대부분 그 위치에 오랜 시간 대기하게 되고 결국 모두 소진되어 이후 발생하는 요청이 더이상 스레드를 확보할 수 없어 실패하게 된다. 단 한 군데의 IO 지연이 발생했지만 결국 전체 시스템을 사용할 수 없는 경우가 되는 것이다.
너무나도 유명한 넷플릭스의 연쇄 실패 이미지를 보면 아마 바로 이해가 될 것이다.
![](https://github.com/Netflix/Hystrix/wiki/images/soa-2-640.png)
![](https://github.com/Netflix/Hystrix/wiki/images/soa-3-640.png)
이 문제를 풀기위한 대표적인 방법이 비동기 논블로킹 프로그램이다.
IO가 필요한 구간을 만나면 스레드를 반납하고 진행하던 작업은 잠시 큐에 넣어둔다. 그리고 그 IO가 끝나면 워커 스레드가 하던 일을 다시 꺼내어 다음에 만나는 IO 작업까지 수행하게 된다.오래 걸리는 IO 구간을 비동기 논블로킹으로 처리하기 때문에 적은 수의 스레드로 훨씬 많은 요청을 동시에 받아들일 수 있으며 스레드 풀이 모자라서 더이상 요청을 받아들이지 못하는 경우는 없어지는 것이다.
사실 이런 비동기 처리를 위한 프로그래밍 스타일 때문에 발생하는 많은 문제에 대해 풀어볼 썰이 있긴한데 그건 다음 번 Project Loom에 대한 글에서 같이 다뤄볼 수도 있을 것 같다.
다시 본론으로 돌아와서, 결국 난 이 문제(무거운 스레드 문제)만 해결하면 된다.
지금 개발하는 시스템은 일반적인 비즈니스 로직을 처리하는 웹 어플리케이션이고 여기에 필요한 것은 스트림이나 일괄처리나 백프레셔는 아니다. 사실 사용자에게 백프레셔를 줄 수 있는건 아니지 않는가?
이걸 해결하기 위해 webflux를 쓴다면 해결되는 문제에 비해 여기서 발생하는 단점이 너무 크다
- 쓸모 없는 스택 트레이스
- 읽기 어려운 비즈니스 로직
- 이를 더 혼란스럽게 만드는 수많은 래퍼들 Mono, Flux
그리고 이 문제는 당연히 다른 방식으로도 완화하거나 해결할 수 있다.
그래 맞아. 이거였다. 삽만 있어도 충분한데 포크레인을 쓴 거구나. ㅠ.ㅠ
이미 몇 가지 삽은 사용하고 있고 지금으로써는 이걸로도 충분한 것으로 보인다.
연쇄 실패를 방지하기 위해 타임아웃과 써킷 브레이커를 적용하고 있고 간혹 있는 대량 데이터의 조회 처리에서는 콜백 함수를 로우 핸들러에 넘겨서 response write를 하는 식으로 스트림 방식의 처리를 하고 있다.
또한 webflux를 사용한다고해서 써킷 브레이커 같은 장치가 전혀 필요 없는 것은 아니다. 스레드를 사용하지 않더라도 해당의 컨텍스트를 보유할 메모리는 필요하며 이 또한 무한정은 아니다. 그리고 처리가 늦어지는 요청을 계속 쌓아두기 보다는 차라리 빨리 실패하는 경우가 더 좋은 경우도 많다.
당분간 웹 어플리케이션 개발할때 webflux는 사용하지는 않을 것 같다. 물론 스트림을 다루고 효율적인 네트워크 처리가 중요한 어플리케이션을 개발해야 한다면 다른 여러가지와 방안과 함께 하나의 선택지가 될 수는 있겠다.
이처럼 짜증나는 무거운 스레드 문제를 좀 더 자연스럽게 풀기 위한 여정 또한 계속 할 것이고 그 중 하나로 자바의 Project Loom이 하루 빨리 완성되기를 기대하고 있으며 아마 다음 글은 Loom에 대한 글이 되지 않을까 한다.
좋은 내용 잘 읽었습니다.
답글삭제뭔지도 모르면서 써야 할때도 있죠.
답글삭제일단 쓰는 라이브러리가 reactor 기반이라던가...
정말 아무것도 모르는 사람 입장에서 WebFlux를 왜 써야하는지 언제써야하는지에 대한 관점에서 보기에는 도움 많이 되었습니다. ^^
삭제그냥 자바를 안쓰면 모든 문제가 해결되는것임을...
답글삭제자바를 안쓰면 어떤 문제가 어떻게 해결돼요?? 엔지니어 관점에서 되게 보기 불편한 글이네요 ㅋㅋ 자바 옹호자는 아니지만 그렇다고 억까는 하지맙시다. 엔지니어답게 대안을 제시해주세요.
삭제정말 몰라야 저렇게 말할 수 있는거죠 ㅋㅋ
삭제어느 회사 다니시는지 궁금하네요 ㅋㅋ
삭제보통 이런 시니컬한 척 하면서 아무나 일단 까고난 후에 그걸 포장삼아 자기가 잘하는 줄 아는.. 그래야 남들이 자길 덜 의심할거라 생각하는, 이상한 자기만의 세상에 사는 모자란 사람들 참 많죠.
삭제좋은 내용 잘 보았습니다. Webflux를 한 번 사용하고 나서 과연 webflux가 최선인가에 대해 고민하고 있는 와중에 상당히 공감이 가는 내용이였습니다. 감사합니다.
답글삭제reactor 를 요즘 돌아다니면서 공부하고 있는데, 공감되는 내용이 많아서 재밌게 읽었습니다.
답글삭제공감이 되네요. 좋은 글 잘 읽었습니다. 다른 글에서 언급하신 것 처럼 coroutine, virtual thread로 인해 webflux 진영은 점차 축소 될 것 같네요~
답글삭제재미있게 잘 읽었습니다 ㅎㅎ
답글삭제