-
FE 개발에 도전합니다 (번외 REDIS)개발에 도전합니다 2022. 7. 3. 02:34
PO 다마고치는 최근 2주간 두 가지 키워드에 머리를 앓고 있었습니다. 1번 BFF, 2번 REDIS 입니다.
하 히 후 헤 호 하는 선배와 곧 아버지가 되는 호드 선배 앞에서 BFF에 대해서 설명하다가 그거 REDIS와 뭐가 다른거야 하니 할 말이 없더라구요 (...)
단순 데이터 꺼내기 좋게 해주는게 아니라 로직도 들어가고 뭐도 들어가고... 했지만 그래서 한마디로 뭐야! 하니 할 말이 없었습니다. 어려운 것을 쉽게 설명해야 하는데, 다 소화하지 못해서 어렵게 설명하다 보니 정신이 혼미해졌습니다. 특히 데이터 꺼내기 어려워서 쉽게 주는거면 그거 REDIS와 뭐가 달라 하니 할 말이 없었습니다...
그래서 쓰는 REDIS VS BFF 특집!
Anderson 경의 답변 도움을 받아 명료하게 정리할 수 있었습니다. "감사감사 +1"
1. REDIS - 한번에 하나씩 빠르게, 대신 비싸요!
우선 REDIS(Remote Dictionary Server)는 메모리를 어떻게 쓸 지에 대한 솔루션 중 하나입니다.
명령어들 Queue, 줄을 서시오!
모든 데이터를 메모리에 로드해 처리하는 DBMS로 메모리를 사전처럼 Key와 Value로 단순하게 관리하며, 데이터를 쓴 후 바로 결과를 메모리를 사용하여 리턴합니다. 한 번에 하나의 명령어만 실행하는데, 만약 명령어가 쪼개져 있으면 명령어들이 합쳐져서 "하나의 명령어가 되는 순간" 그 명령어를 실행합니다.
장점: 필요한걸 다 들고 있어서 응답속도가 빠릅니다. 데이터 보존이 가능하고 다양한 데이터 구조를 지원합니다 (비정형 포함). 다양한 API도 지원합니다.
단점: 필요한 데이터를 직접 다 들고 있고, 24시간 응답해야 하는 대용량 메모리이기 때문에 구축도 유지도 비쌉니다. 한 번에 하나의 명령어만 처리할 수 있고, API를 REDIS로 호출하는 것은 개발도 어렵고(로컬에서), 배워서 구현하기도 꽤 어렵습니다.2. BFF(Backend For Frontend) - 필요한 것만 불러와서 처리, 빠르지는 않아요
서버에게 부탁할 정보가 복잡하거나 빈약하면 가공할 수 있는 두 번째 공장입니다.
프론트엔드 생산성을 높이기 위해 데이터를 통합하는 처리를 담당합니다. API를 호출하면, 보통 응답 값을 그대로 받고 가공해서 상태관리에 저장하는데, 이 때 별도의 연산이 필요합니다.
BFF는 API 응답값을 partial response(필요한 부분만 응답)로 받아서 FE에 필요한 모델 타입으로 변경해서 내려줍니다.
또, BE에서 FE를 분리된 상태로 유지하여 의존성을 줄여 더 빠른 개발과 테스트를 가능하게 합니다.
장점: 원하는 것만 들고 있고, 나머지는 없애 버리기 때문에 용량을 많이 차지 하지 않아서 1Gb, 2Gb로도 할당해서 처리할 수 있는데 여기에 "로직"도 넣을 수 있습니다.
원하는 데이터 형태를 만들기 위해서 여러 API 호출의 응답을 조작, 혼합, 일치시키지 않으므로 request 수도 줄어듭니다. **능률이 높아질 수 있지만 처리 속도 자체가 REDIS처럼 빠르지는 않습니다.
여러 플랫폼을 지원할 때 각각 원하는 특정 데이터를 쉽게 넣어줄 수 있습니다. 렌더링과 비즈니스 로직을 분리할 수 있어서 여러 서비스에 대응해야 하는 MSA에 적합합니다
단점: 상태 관리가 필수적이어서 테스트와 개발이 다소 복잡합니다. BE가 단순 gateway 역할을 하게 되어 불만이 높아질 수 있습니다. Unit Test를 할 때, 백도어를 파지 않으면 Mocking을 일일히 해줘야 하고, 우회하는 것이 복잡합니다.쓰다보니 길어졌는데 한마디로!
REDIS는 서버든 클라이언트든 비쌉니다! 메모리 많이 써서 빠르기는 한데 한번에 하나만 처리할 수 있습니다.
BFF는 좀 더 유연한 구조로 가져갈 수 있고, 싸게도 만들 수 있습니다. 안에 이것저것 넣어서 여기저기 잘 대응하게 할 수 있습니다. 빠르지는 않은데 구조가 효율적이어서 여러 곳에서 동시에 호출하면 request 수를 줄여줍니다.
자 그럼 여기까지 REDIS, BFF 정리 끗!
참고한 자료
https://github.com/ahastudio/til/blob/main/microservices/bff.mdhttps://fe-developers.kakaoent.com/2022/220310-kakaopage-bff/
https://www.trustradius.com/reviews/redis-2019-06-20-11-11-22
https://www.apollographql.com/docs/intro/platform/
https://metleeha.tistory.com/entry/BFFBackend-for-Frontend-%EB%9E%80
'개발에 도전합니다' 카테고리의 다른 글
FE 개발에 도전합니다 (6) (0) 2022.05.24 FE 개발에 도전합니다 (5) (0) 2022.05.09 FE 개발에 도전합니다 (4) npm start (0) 2022.05.09 FE 개발에 도전합니다 (3) 1주차 회고 "백문이불여일코" (0) 2022.05.08 FE 개발에 도전합니다 (2) DOM (0) 2022.05.06