리덕스 아키텍처 Best practice

리덕스 아키텍처 Best practice

리덕스를 사용하고 있는 어플리케이션에서 모든 상태관리를 리덕스를 통해 해야 할까? 아니면 알맞게 어떤건 리덕스에, 어떤건 컴포넌트에 저장해놓고 사용하면 될까? 적절하게의 기준은 뭘까? 리덕스 툴킷 공식 홈페이지에서 제시한 리덕스 아키텍처 best practice에 관련해서 알아보고자 합니다. 리액트에서 state는 두 가지 성격으로 나눌 수 있는데, 전역 state와 로컬 state로 나뉜다고 볼 수 있어요. 리덕스는 전역 state상태 관리를 도와주는 툴로 가장 대중적으로 사용되는 라이브러리다.

그리고 리덕스 툴킷은 기존에 리덕스를 작성하기 위해 요구되었던 불편함들을 해소하고 리덕스를 쓰는 표준 방법을 제공하기 위해 만들어진 라이브러리다. 리덕스보다. 사용이 간편하고 보일러플레이트도 더 적다는 혜택이 있습니다.


imgCaption0
AWS Control Tower

AWS Control Tower

Automates Accounts Deployment. 비유하자면 AWS Account Vending Machine. AWS Service Catalog는 runs within one account. AWS Control Tower는 account creation deploy Service Catalog 그 외 account에 필요한 것들을 account 생성 시점에 세팅.

Landing Zone을 설정하면, new account가 생성될 때 자동으로 실행할 CloudFormation을 지정할 수 있어요.

Manual setting이 필요 없도록 전부 자동화하는 것. 계정의 접근 권한이나 설정을 Standardize할 수 있어요.

로컬 state를 사용할 때의 자주보이는 문제점

어플리케이션의 다른 부분에 위치한 여러 컴포넌트가 동일한 stateex 유저정보를 공유하고 사용해야 할 때, 특히 그러한 state 요소가 다른 부분에 위치할 때 문제가 발생합니다. 아래 이미지를 보시면 Home컴포넌트가 User data와 Layout data를 가지고 있습니다. 하지만 Profile컴포넌트도 User data가 필요한 상황입니다. 하지만 두 컴포넌트는 평행하게 놓여있어 state를 물려줄 수 있는 구조가 아닙니다.

이것을 리덕스를 사용하여 개선하면 아래와 같은 flow가 됩니다.

AWS Service Catalog

비유하자면 일종의 AWS Resource Vending Machines. 다시, 위의 Dev Environment를 예시로 들면 create manage perapproved portfolios products 담당. portfolio admin은 CloudFormation template으로 AWS Resource provisioning을 요청할 수 있어요.

이걸 Catalog에서는 product라고 부른다.

Portfolio에는 Product가 포함될 수 있어요. users can browse the portfolios, and launch products on their accounts. Dev Environment 라는 Portfolio를 정의합니다.

Build in Docker

지금까지는 Dockerfile 외부에서 빌드를 하고, 빌드된 결과만을 복사해서 쓰는 계획을 살펴봤습니다. 그렇게되면 빌드조차 각 사용자의 영향을 받는다. 빌드 명령어를 각자 다르게 입력 혹은 빌드 환경이 달라진다 따라서, spring boot 빌드 자체도 Dockerfile에 녹이는게 좋습니다. 이로써 받는 강점은 다음과 같다. 빌드까지 따로 할 필요가 없으니, 일 Dockerfile로 진정한 이미지가 완성됩니다.

CI 도구와 통합할 필요가 없습니다.. (연동할 필요가 없습니다.. ) 빌드 명령어 또한 형상관리가 가능합니다. Dockerfile을 작성하면 다음과 같다.

DAG 작성

import pendulumfrom airflow import DAGfrom airflow.decorators import taskimport numpy as np

Task 사이의 데이터 전달은 작은 사이즈는 Xcom 을 사용하고, 대용량은 S3hDFS 같은 외부 저장소를 사용합니다. Airflow에 등록한 Variable은 Operator의 execute나 Jinja template 외에서의 사용은 지양합니다.

필요하지 않은 top level code는 지양합니다. 멱등성이 보장되어야 합니다.

자주 묻는 질문

AWS Control

Automates Accounts Deployment. 궁금한 사항은 본문을 참고하시기 바랍니다.

로컬 state를 사용할 때의 자주보이는

어플리케이션의 다른 부분에 위치한 여러 컴포넌트가 동일한 stateex 유저정보를 공유하고 사용해야 할 때, 특히 그러한 state 요소가 다른 부분에 위치할 때 문제가 발생합니다. 좀 더 자세한 사항은 본문을 참고해 주세요.

AWS Service

비유하자면 일종의 AWS Resource Vending Machines. 더 알고싶으시면 본문을 클릭해주세요.