Reflex 란?
특징
- 구 Pynecone -> 현 Reflex 로 이름 변경
- 비동기 이벤트 기반의 실시간 애플리케이션 개발을 위한 프레임워크
- 성능 측면에서 좋은 결과를 보여줄 수 있음 (고성능 비동기 웹 서버 Dazzler 가 내부적으로 사용됨)
- 실시간 데이터 처리, 대시보드, 모니터링 및 제어 시스템 등의 애플리케이션에 적합
- 커뮤니티와 문서화가 상대적으로 부족 (이슈 발생시 문제 발생시 해결에 오래걸릴 수 있음)
- 내부적으로 FastAPI Backend와 FE는 Next.js 기반으로 동작함 (소켓으로 연결됨, Next.js는 React로 변환)
- 에러 지점이 많을 수 있음 (Next.js에서 차용하는 라이브러리의 버전 업에 따른, deprecated 등)
- docs , github, star 수 11.9k 개
Streamlit 란?
Streamlit 특징
- 빠른 개발과 빠른 반응성(캐싱을 통한 수정시 바로 반영)에 중점을 둔 프레임워크 (Interaction 중심)
- 성능적으로 대규모 데이터 처리나 고도의 병렬 처리를 위한 프레임워크는 아님
- 인터렉티브나 프로토 타이핑, 다양한 시각화에 적합
- Streamlit css 입히기가 어려움
- docs , github, star 수 26.4k 개
주요 고려 사항
두개의 UI Framework 중 선택 하기전에, 기능에 대한 요구사항을 바탕으로 다양한 관점에서 비교해 보았다.
1. REST API 활용에 잘 어울리는지 (기본 제공되는 함수가 있는지)
- 둘다 똑같이 Request, aiohttp 등 외부 라이브러리를 사용해서 구현 해야 함
- Schema, Dto 에 대한 정의도 따로 외부 라이브러리 사용 필요
- 결론 : Reflex = Streamlit
2. CSS에 대한 자유도 (편의성)
- Reflex : 내부적으로 CSS에 대한 직접적인 인자값 제공
- Streamlit : 기본적으로 많이 구현되어 있는 컴포넌트 제공, 커스텀 어려움
- 결론 : Reflex > Streamlit
3. 성능
- 결론 : Reflex > Streamlit (But. 성능이 좋아야 된다는 요구사항은 없음)
4. 패키지 규모
- Reflex : Node + Python (FastAPI) 등 Node가 추가적으로 필요.
- Streamlit : 단일 라이브러리 (추가적인 패키지 요구사항 X)
- 결론 : Streamlit > Reflex
5. 자료 데이터 활용 (Excel , CSV)
- 결론 : Streamlit = Reflex
6. 페이지 분리 편의성
- 해당 기준은 페이지별 구현이 쉬운지, 협업하기 좋은지
- Reflex : 페이지별로 코드 구현 및 분리에 용이
- Streamlit : 단일 페이지에 보다 적합 (메뉴바, 네비게이션 등으로 컴포넌트 그룹 단위의 수정은 가능)
- 결론 : Reflex > Streamlit
7. 자료 및 문서
- 결론 : Streamlit >> Reflex (월등한 Streamlit 압승)
최종 결론
대부분의 적합도는 Reflex가 적합해서 최종 Reflex로 구현했지만, (현재는 프로젝트 구현 완료)
생각보다 컴포넌트에서 event handler 의 자유도가 떨어지고,
커스텀 하기에도 자료 및 문서의 부족이 너무 심해서 구현이 쉽진 않았던 것 같다. (심지어 pynecone에서 reflex로 바뀌어서, 자료가 더 없음)
개인적으로 다음 프로젝트를 진행 하게 된다면 Streamlit 으로 진행하지 않을 까 싶다.
(물론 제일 좋은 건 FE 프레임워크를 따로 선택 하는 것이 좋다고 생각)
'Python > UI (Reflex, Streamlit)' 카테고리의 다른 글
[Streamlit] 실행 log 남기기 (with. Dockerfile) (0) | 2024.02.01 |
---|---|
[Python UI] Reflex 보일러 플레이트 (Boiler Plate) (0) | 2023.08.12 |