SW/마이크로서비스

마이크로 프론트엔드 아키텍처: 더 관리 가능하고 확장 가능한 프론트엔드 애플리케이션 구축

얇은생각 2024. 8. 3. 07:30
반응형

최근 몇 년 동안 소프트웨어 개발에서 마이크로서비스 개념이 큰 인기를 얻었습니다. 이제 빠르게 주목받고 있는 새로운 기술이 등장했습니다. 바로 마이크로 프론트엔드입니다. 마이크로 프론트엔드는 작은 재사용 가능한 컴포넌트를 만들어 배포하여 더 큰 애플리케이션을 구축할 수 있게 해주는 기술입니다. 이 글에서는 Vue.js를 사용하여 마이크로 프론트엔드를 구축하고, 일반 애플리케이션 개발과 마이크로 프론트엔드 접근 방식의 차이를 논의하겠습니다.

 

마이크로 프론트엔드 아키텍처: 더 관리 가능하고 확장 가능한 프론트엔드 애플리케이션 구축

 

마이크로 프론트엔드란?

먼저 마이크로 프론트엔드가 무엇인지 정의해보겠습니다. 마이크로 프론트엔드는 프론트엔드 애플리케이션을 더 작고 관리 가능한 부분으로 나누는 아키텍처 접근 방식입니다. 각 부분, 즉 마이크로 프론트엔드는 다른 부분과 독립적으로 개발 및 배포됩니다. 이 접근 방식은 팀이 애플리케이션의 다른 부분에서 작업할 때 서로 간섭하지 않도록 해줍니다.

 

 

전통적인 프론트엔드 개발 vs 마이크로 프론트엔드

그렇다면 마이크로 프론트엔드와 전통적인 프론트엔드 개발의 차이점은 무엇일까요? 전통적인 프론트엔드 개발 접근 방식에서는 일반적으로 모든 프론트엔드 코드가 위치한 모놀리식 코드베이스를 갖게 됩니다. 이 코드베이스는 애플리케이션이 커질수록 비대해지고 관리하기 어려워집니다. 반면, 마이크로 프론트엔드 접근 방식은 프론트엔드 코드베이스를 더 작고 관리 가능한 부분으로 나눌 수 있게 해줍니다. 이 접근 방식은 애플리케이션을 확장하기 쉽게 만들고, 애플리케이션의 다른 부분에서 코드를 재사용할 수 있게 해줍니다.

 

 

Vue와 재사용 가능한 컴포넌트를 사용한 마이크로 프론트엔드 구축

Vue는 재사용 가능한 컴포넌트를 쉽게 만들 수 있도록 해주는 프로그레시브 프레임워크입니다. 재사용 가능한 컴포넌트는 애플리케이션의 다른 부분에서 동일한 코드를 여러 번 작성하지 않고도 사용할 수 있는 컴포넌트입니다. 예를 들어, 버튼 컴포넌트는 애플리케이션의 다른 부분에서 버튼이 필요한 곳마다 재사용할 수 있습니다. 이 접근 방식은 시간을 절약하고 코드 중복을 줄여줍니다.

 

 

마이크로 프론트엔드 구성 요소 식별

마이크로 프론트엔드를 구축하기 위해 먼저 애플리케이션의 다양한 부분을 더 작고 관리 가능한 부분으로 나눌 수 있는지 식별해야 합니다. 각 부분은 마이크로 프론트엔드로 개발되며 자체 재사용 가능한 컴포넌트 세트를 갖게 됩니다.

애플리케이션의 다양한 부분을 식별한 후, Vue를 사용하여 마이크로 프론트엔드를 구축할 수 있습니다. 각 마이크로 프론트엔드는 독립적으로 개발되고 별도로 배포될 수 있습니다. 마이크로 프론트엔드가 준비되면 이를 결합하여 더 큰 애플리케이션을 만들 수 있습니다.

 

 

API와의 상호작용

마이크로 프론트엔드 아키텍처에서 서비스는 일반적으로 독립적인 컴포넌트로 구축되어 다른 마이크로 프론트엔드에서 사용할 수 있습니다. 이러한 서비스는 데이터를 검색하고 저장하기 위해 API와 통신합니다.

예를 들어, 제품 목록을 표시하는 마이크로 프론트엔드가 있다고 가정해 봅시다. API와 통신하여 제품 목록을 검색하는 서비스를 구축할 수 있습니다. 이 서비스는 다른 마이크로 프론트엔드에서도 제품 목록을 표시해야 할 때 재사용할 수 있습니다.

 

 

예시: 전자상거래 플랫폼

전자상거래 플랫폼을 구축한다고 가정하고, 다음과 같은 부분을 마이크로 프론트엔드로 나눌 수 있습니다:

제품 카탈로그: 제품의 가격과 설명을 표시합니다.

장바구니: 사용자가 제품을 장바구니에 추가하고 결제할 수 있습니다.

사용자 계정: 주문 내역과 저장된 주소와 같은 사용자 계정 정보를 표시합니다.

각 마이크로 프론트엔드에 필요한 재사용 가능한 컴포넌트를 식별할 수 있습니다. 예를 들어, "제품 카탈로그" "장바구니" 마이크로 프론트엔드는 모두 제품 정보를 표시하는 컴포넌트가 필요하고, "장바구니" "사용자 계정" 마이크로 프론트엔드는 모두 사용자의 주문 내역을 표시하는 컴포넌트가 필요합니다.

이러한 재사용 가능한 컴포넌트를 Vue를 사용하여 구축한 다음, 각 마이크로 프론트엔드에 필요에 따라 가져와 사용할 수 있습니다. 이 접근 방식은 시간을 절약하고 코드 중복을 줄여줍니다.

 

서비스 구축

서비스의 경우, 제품 API와 통신하여 제품 카탈로그를 검색하고 표시하는 제품 서비스를 구축할 수 있습니다. 또한, 장바구니 API와 통신하여 사용자의 장바구니 및 결제 프로세스를 관리하는 장바구니 서비스를 구축할 수 있습니다.

마지막으로, 사용자 계정 마이크로 프론트엔드는 사용자 API와 통신하여 사용자 계정 정보를 검색하고 표시하는 사용자 서비스를 사용할 수 있습니다.

이러한 마이크로 프론트엔드와 재사용 가능한 컴포넌트 및 서비스를 통해 전자상거래 플랫폼을 더 작은 부분으로 나눌 수 있으며, 각 부분을 독립적으로 개발하고 배포할 수 있습니다. 또한, 이 접근 방식은 애플리케이션을 확장하고 플랫폼의 다양한 부분에서 코드를 재사용하기 쉽게 만듭니다.

 

Vue를 사용한 제품 카탈로그 컴포넌트 구축 예제

다음은 Vue를 사용하여 제품 카탈로그 컴포넌트를 구축하는 예제입니다:

<template>
  <div>
    <h2>Product Catalog</h2>
    <ul>
      <li v-for="product in products" :key="product.id">
        <h3>{{ product.name }}</h3>
        <p>{{ product.description }}</p>
        <p>Price: ${{ product.price }}</p>
        <button @click="addToCart(product)">Add to Cart</button>
      </li>
    </ul>
  </div>
</template>

<script>
import ProductService from '@/services/ProductService.js'

export default {
  data() {
    return {
      products: []
    }
  },
  methods: {
    addToCart(product) {
      // Call the Cart micro-frontend to add the product to the user's cart
    }
  },
  mounted() {
    ProductService.getProducts().then(response => {
      this.products = response.data
    })
  }
}
</script>

 

 

위 코드에서는 제품의 이름, 설명, 가격을 표시하는 제품 카탈로그 컴포넌트를 구현했습니다. 이 컴포넌트에는 사용자의 장바구니에 제품을 추가하는 버튼도 포함되어 있습니다. ProductService를 사용하여 제품 API에서 제품 목록을 검색하고, v-for 지시문을 사용하여 제품 목록을 반복하여 페이지에 표시합니다. 사용자가 "Add to Cart" 버튼을 클릭하면, 제품을 사용자의 장바구니에 추가하는 메서드를 호출할 수 있습니다. 이 메서드는 "장바구니" 마이크로 프론트엔드와 통신하여 실제 장바구니 업데이트를 수행할 수 있습니다.

이 예제는 Vue를 사용하여 전자상거래 제품 카탈로그를 위한 재사용 가능한 컴포넌트를 구축하는 방법을 보여줍니다. 이와 유사한 컴포넌트를 사용하여 전자상거래 플랫폼의 다른 부분, 예를 들어 장바구니 및 사용자 계정 마이크로 프론트엔드를 구축할 수 있습니다.

 

 

결론

마이크로 프론트엔드 아키텍처는 프론트엔드 애플리케이션을 구축하는 강력한 접근 방식입니다. 애플리케이션을 더 작고 관리 가능한 부분으로 나눌 수 있어 확장성과 코드 재사용성을 높일 수 있습니다. Vue를 사용하여 마이크로 프론트엔드를 구축할 때, 재사용 가능한 컴포넌트는 필수적입니다. 이를 통해 시간을 절약하고 코드 중복을 줄일 수 있습니다. 마지막으로, 마이크로 프론트엔드 아키텍처에서는 서비스가 일반적으로 독립적인 컴포넌트로 구축되며, 데이터 검색 및 저장을 위해 API와 통신합니다.

반응형