ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • FE 개발에 도전합니다 (번외 REDIS)
    개발에 도전합니다 2022. 7. 3. 02:34

    PO 다마고치는 최근 2주간 두 가지 키워드에 머리를 앓고 있었습니다. 1번 BFF, 2번 REDIS 입니다.

     

    하 히 후 헤 호 하는 선배와 곧 아버지가 되는 호드 선배 앞에서 BFF에 대해서 설명하다가 그거 REDIS와 뭐가 다른거야 하니 할 말이 없더라구요 (...)

    곧 아버지가 되는 선배
    하 히 후 헤 호 하는 선배는 이런 선배입니다(...)

    단순 데이터 꺼내기 좋게 해주는게 아니라 로직도 들어가고 뭐도 들어가고... 했지만 그래서 한마디로 뭐야! 하니 할 말이 없었습니다. 어려운 것을 쉽게 설명해야 하는데, 다 소화하지 못해서 어렵게 설명하다 보니 정신이 혼미해졌습니다. 특히 데이터 꺼내기 어려워서 쉽게 주는거면 그거 REDIS와 뭐가 달라 하니 할 말이 없었습니다... 

    대략 이러함...

     

    그래서 쓰는 REDIS VS BFF 특집!

     

    Anderson 경의 답변 도움을 받아 명료하게 정리할 수 있었습니다. "감사감사 +1"

     

    1. REDIS - 한번에 하나씩 빠르게, 대신 비싸요! 

    Remote Dictionary Server

     

    우선 REDIS(Remote Dictionary Server)는 메모리를 어떻게 쓸 지에 대한 솔루션 중 하나입니다.

     

    명령어들 Queue, 줄을 서시오!

     

    모든 데이터를 메모리에 로드해 처리하는 DBMS로 메모리를 사전처럼 KeyValue로 단순하게 관리하며, 데이터를 쓴 후 바로 결과를 메모리를 사용하여 리턴합니다. 한 번에 하나의 명령어만 실행하는데, 만약 명령어가 쪼개져 있으면 명령어들이 합쳐져서 "하나의 명령어가 되는 순간" 그 명령어를 실행합니다.

     

    장점: 필요한걸 다 들고 있어서 응답속도가 빠릅니다. 데이터 보존이 가능하고 다양한 데이터 구조를 지원합니다 (비정형 포함). 다양한 API도 지원합니다. 
    단점: 필요한 데이터를 직접 다 들고 있고, 24시간 응답해야 하는 대용량 메모리이기 때문에 구축도 유지도 비쌉니다. 한 번에 하나의 명령어만 처리할 수 있고, API를 REDIS로 호출하는 것은 개발도 어렵고(로컬에서), 배워서 구현하기도 꽤 어렵습니다.  

     

    2. BFF(Backend For Frontend) - 필요한 것만 불러와서 처리, 빠르지는 않아요 

    Backend For Frontend

    서버에게 부탁할 정보가 복잡하거나 빈약하면 가공할 수 있는 두 번째 공장입니다.

     

    프론트엔드 생산성을 높이기 위해 데이터를 통합하는 처리를 담당합니다. API를 호출하면, 보통 응답 값을 그대로 받고 가공해서 상태관리에 저장하는데, 이 때 별도의 연산이 필요합니다.

    BFF는 API 응답값을 partial response(필요한 부분만 응답)로 받아서 FE에 필요한 모델 타입으로 변경해서 내려줍니다.

    또, BE에서 FE를 분리된 상태로 유지하여 의존성을 줄여 더 빠른 개발과 테스트를 가능하게 합니다. 

     

    장점: 원하는 것만 들고 있고, 나머지는 없애 버리기 때문에 용량을 많이 차지 하지 않아서 1Gb, 2Gb로도 할당해서 처리할 수 있는데 여기에 "로직"도 넣을 수 있습니다.

    원하는 데이터 형태를 만들기 위해서 여러 API 호출의 응답을 조작, 혼합, 일치시키지 않으므로 request 수도 줄어듭니다. **능률이 높아질 수 있지만 처리 속도 자체가 REDIS처럼 빠르지는 않습니다. 
    여러 플랫폼을 지원할 때 각각 원하는 특정 데이터를 쉽게 넣어줄 수 있습니다. 렌더링과 비즈니스 로직을 분리할 수 있어서 여러 서비스에 대응해야 하는 MSA에 적합합니다 
    단점: 상태 관리가 필수적이어서 테스트와 개발이 다소 복잡합니다. BE가 단순 gateway 역할을 하게 되어 불만이 높아질 수 있습니다. Unit Test를 할 때, 백도어를 파지 않으면 Mocking을 일일히 해줘야 하고, 우회하는 것이 복잡합니다. 

     

    BFF 개념도 (...)

     

    쓰다보니 길어졌는데 한마디로!

     

    REDIS는 서버든 클라이언트든 비쌉니다! 메모리 많이 써서 빠르기는 한데 한번에 하나만 처리할 수 있습니다.

    BFF는 좀 더 유연한 구조로 가져갈 수 있고, 싸게도 만들 수 있습니다. 안에 이것저것 넣어서 여기저기 잘 대응하게 할 수 있습니다. 빠르지는 않은데 구조가 효율적이어서 여러 곳에서 동시에 호출하면 request 수를 줄여줍니다. 

     

    자 그럼 여기까지 REDIS, BFF 정리 끗! 

     

    참고한 자료
    https://github.com/ahastudio/til/blob/main/microservices/bff.md

    https://fe-developers.kakaoent.com/2022/220310-kakaopage-bff/

     

    GitHub - ahastudio/til: Today I Learned

    Today I Learned. Contribute to ahastudio/til development by creating an account on GitHub.

    github.com

    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

    https://redis.io/

     

Designed by Tistory.