쪽지발송 성공
Click here
재능넷 이용방법
재능넷 이용방법 동영상편
가입인사 이벤트
판매 수수료 안내
안전거래 TIP
재능인 인증서 발급안내

🌲 지식인의 숲 🌲

🌳 디자인
🌳 음악/영상
🌳 문서작성
🌳 번역/외국어
🌳 프로그램개발
🌳 마케팅/비즈니스
🌳 생활서비스
🌳 철학
🌳 과학
🌳 수학
🌳 역사
해당 지식과 관련있는 인기재능

안녕하세요.자기소개는 아래에 썼으니 참고부탁드리구요.(가끔 개인적 사정으로 인해 연락을 못받거나 답변이 늦어질 수 있습니다. 양해부탁...

JAVA,JSP,PHP,javaScript(jQuery), 등의 개발을 전문적으로 하는 개발자입니다^^보다 저렴한 금액으로, 최고의 퀄리티를 내드릴 것을 자신합니다....

 기본 작업은 사이트의 기능수정입니다.호스팅에 보드 설치 및 셋팅. (그누, 제로, 워드, 기타 cafe24,고도몰 등)그리고 각 보드의 대표적인 ...

10년차 php 프로그래머 입니다. 그누보드, 영카트 외 php로 된 솔루션들 커스터마이징이나 오류수정 등 유지보수 작업이나신규개발도 가능합...

마이크로프론트엔드 아키텍처: 개념부터 구현까지

2024-09-08 09:28:24

재능넷
조회수 977 댓글수 0

마이크로프론트엔드 아키텍처: 개념부터 구현까지 🏗️

 

 

웹 개발 세계는 끊임없이 진화하고 있습니다. 최근 몇 년 동안 마이크로프론트엔드 아키텍처가 주목받고 있는데, 이는 대규모 웹 애플리케이션을 더 효율적으로 개발하고 관리할 수 있는 혁신적인 접근 방식입니다. 이 글에서는 마이크로프론트엔드의 개념부터 실제 구현 방법까지 상세히 알아보겠습니다.

마이크로프론트엔드는 기존의 모놀리식 프론트엔드 구조에서 벗어나, 웹 애플리케이션을 더 작고 관리하기 쉬운 조각으로 나누는 아키텍처 스타일입니다. 이는 마이크로서비스 백엔드 아키텍처의 개념을 프론트엔드로 확장한 것으로 볼 수 있죠.

 

재능넷과 같은 다양한 기능을 제공하는 복잡한 웹 플랫폼에서 마이크로프론트엔드 아키텍처를 적용하면, 각 기능 영역(예: 사용자 프로필, 결제 시스템, 검색 기능 등)을 독립적으로 개발하고 배포할 수 있어 매우 효율적입니다. 이는 대규모 팀에서 협업을 용이하게 하고, 시스템의 유연성과 확장성을 크게 향상시킵니다.

그럼 지금부터 마이크로프론트엔드의 세계로 깊이 들어가 보겠습니다. 준비되셨나요? 함께 시작해볼까요! 🚀

1. 마이크로프론트엔드의 기본 개념 이해하기 📚

마이크로프론트엔드는 웹 애플리케이션 프론트엔드를 독립적으로 개발, 테스트, 배포할 수 있는 더 작은 애플리케이션으로 분해하는 아키텍처 접근 방식입니다. 이 개념은 마이크로서비스의 원칙을 프론트엔드 개발에 적용한 것으로, 대규모 프론트엔드 애플리케이션의 복잡성을 관리하는 데 도움을 줍니다.

 

마이크로프론트엔드의 핵심 원칙:

  • 🔹 독립성: 각 마이크로프론트엔드는 독립적으로 개발, 테스트, 배포될 수 있어야 합니다.
  • 🔹 기술 중립성: 각 팀은 자신의 마이크로프론트엔드에 가장 적합한 기술 스택을 선택할 수 있어야 합니다.
  • 🔹 격리: 한 마이크로프론트엔드의 오류가 전체 애플리케이션에 영향을 미치지 않아야 합니다.
  • 🔹 통합: 모든 마이크로프론트엔드는 사용자에게 일관된 경험을 제공하기 위해 원활하게 통합되어야 합니다.

 

마이크로프론트엔드의 장점은 다음과 같습니다:

  • 확장성: 대규모 팀과 복잡한 애플리케이션을 더 쉽게 관리할 수 있습니다.
  • 유연성: 각 부분을 독립적으로 업데이트하고 배포할 수 있습니다.
  • 기술 다양성: 다양한 프레임워크와 라이브러리를 사용할 수 있습니다.
  • 팀 자율성: 각 팀이 자신의 영역에 대해 완전한 책임을 가질 수 있습니다.

 

하지만 마이크로프론트엔드 아키텍처가 모든 상황에 적합한 것은 아닙니다. 작은 규모의 프로젝트나 단순한 애플리케이션의 경우, 오히려 복잡성만 증가시킬 수 있습니다. 따라서 프로젝트의 규모와 복잡성, 팀의 구조 등을 고려하여 적용 여부를 결정해야 합니다.

 

💡 Tip: 마이크로프론트엔드를 도입할 때는 팀 간의 원활한 커뮤니케이션과 명확한 인터페이스 정의가 매우 중요합니다. 이를 통해 각 마이크로프론트엔드 간의 통합 과정에서 발생할 수 있는 문제를 최소화할 수 있습니다.

 

다음 섹션에서는 마이크로프론트엔드 아키텍처를 구현하는 다양한 방법과 각각의 장단점에 대해 자세히 알아보겠습니다. 계속해서 흥미진진한 마이크로프론트엔드의 세계로 함께 여행을 떠나볼까요? 🌟

2. 마이크로프론트엔드 구현 방식 🛠️

마이크로프론트엔드를 구현하는 방법은 여러 가지가 있습니다. 각 방식은 고유한 장단점을 가지고 있으며, 프로젝트의 요구사항과 팀의 기술 스택에 따라 적절한 방식을 선택해야 합니다. 여기서는 주요 구현 방식들을 살펴보고, 각각의 특징과 사용 사례를 알아보겠습니다.

2.1 iframe을 이용한 구현 📦

iframe은 마이크로프론트엔드를 구현하는 가장 간단한 방법 중 하나입니다. 각 마이크로프론트엔드를 별도의 iframe 내에 로드하여 메인 애플리케이션에 통합합니다.

장점:

  • 완벽한 격리: 각 마이크로프론트엔드는 완전히 독립적인 환경에서 실행됩니다.
  • 간단한 구현: 기존 애플리케이션을 크게 수정하지 않고도 적용할 수 있습니다.

단점:

  • 성능 이슈: 각 iframe이 별도의 문서로 로드되어 리소스 사용량이 증가할 수 있습니다.
  • 사용자 경험 저하: iframe 간 상호작용이 제한적이며, 스크롤 등의 문제가 발생할 수 있습니다.

🌟 사용 사례: iframe 방식은 완전히 독립적인 기능을 통합해야 할 때 유용합니다. 예를 들어, 재능넷에서 외부 결제 시스템을 통합하거나, 독립적인 위젯을 추가할 때 사용할 수 있습니다.

2.2 Web Components를 이용한 구현 🧩

Web Components는 재사용 가능한 커스텀 엘리먼트를 생성할 수 있게 해주는 웹 플랫폼 API의 집합입니다. 이를 이용하여 각 마이크로프론트엔드를 캡슐화하고 메인 애플리케이션에 통합할 수 있습니다.

장점:

  • 표준 기술: 브라우저 네이티브 기술을 사용하므로 프레임워크에 종속되지 않습니다.
  • 캡슐화: Shadow DOM을 통해 스타일과 마크업을 캡슐화할 수 있습니다.

단점:

  • 브라우저 지원: 일부 오래된 브라우저에서는 지원되지 않을 수 있습니다.
  • 학습 곡선: Web Components API에 익숙하지 않은 개발자들에게는 학습이 필요할 수 있습니다.

🌟 사용 사례: Web Components는 재사용 가능한 UI 컴포넌트를 만들 때 특히 유용합니다. 재능넷에서 프로필 카드나 리뷰 컴포넌트 등을 Web Components로 구현하여 여러 페이지에서 재사용할 수 있습니다.

2.3 서버 사이드 통합 🖥️

서버 사이드 통합 방식은 각 마이크로프론트엔드를 서버에서 조합하여 클라이언트에 전달합니다. 이 방식은 서버 사이드 렌더링(SSR)과 함께 사용될 때 특히 효과적입니다.

장점:

  • 성능: 초기 로딩 시간을 줄일 수 있습니다.
  • SEO 친화적: 서버에서 렌더링된 콘텐츠는 검색 엔진에 더 잘 노출됩니다.

단점:

  • 복잡성: 서버 구성이 복잡해질 수 있습니다.
  • 실시간 업데이트의 어려움: 클라이언트 사이드 상호작용이 필요한 경우 추가적인 작업이 필요합니다.

🌟 사용 사례: 서버 사이드 통합은 SEO가 중요한 페이지나 초기 로딩 성능이 중요한 경우에 적합합니다. 재능넷의 메인 페이지나 검색 결과 페이지 등에 이 방식을 적용할 수 있습니다.

2.4 런타임 통합 (Module Federation) 🔄

Webpack 5에서 도입된 Module Federation은 런타임에 여러 독립적인 빌드 간에 코드와 종속성을 공유할 수 있게 해주는 고급 기능입니다. 이를 통해 각 마이크로프론트엔드를 동적으로 로드하고 통합할 수 있습니다.

장점:

  • 동적 로딩: 필요한 마이크로프론트엔드만 동적으로 로드할 수 있습니다.
  • 코드 공유: 공통 종속성을 효율적으로 공유할 수 있습니다.

단점:

  • 설정의 복잡성: Webpack 설정이 복잡해질 수 있습니다.
  • 버전 관리의 어려움: 공유 종속성의 버전 관리에 주의가 필요합니다.

🌟 사용 사례: Module Federation은 대규모 SPA(Single Page Application)에서 특히 유용합니다. 재능넷의 대시보드나 관리자 페이지와 같이 복잡하고 동적인 기능이 많은 페이지에 적용하면 좋습니다.

 

각 구현 방식은 고유한 장단점을 가지고 있으며, 프로젝트의 요구사항과 팀의 기술적 배경에 따라 적절한 방식을 선택해야 합니다. 때로는 이러한 방식들을 혼합하여 사용하는 것도 좋은 전략이 될 수 있습니다.

다음 섹션에서는 실제로 마이크로프론트엔드를 구현하는 과정을 단계별로 살펴보겠습니다. 이론적 이해를 바탕으로 실제 구현 과정을 통해 마이크로프론트엔드의 실용적인 측면을 경험해 보시죠! 🚀

3. 마이크로프론트엔드 구현 단계 🛠️

마이크로프론트엔드를 실제로 구현하는 과정은 여러 단계로 나눌 수 있습니다. 각 단계를 자세히 살펴보면서, 실제 프로젝트에 적용할 수 있는 구체적인 방법과 팁을 알아보겠습니다.

3.1 프로젝트 구조 설계 📐

마이크로프론트엔드 구현의 첫 단계는 전체 프로젝트 구조를 설계하는 것입니다. 이 단계에서는 애플리케이션을 어떻게 나눌지, 각 부분의 책임은 무엇인지 등을 결정합니다.

주요 고려사항:

  • 기능별 분리: 각 마이크로프론트엔드의 책임 영역을 명확히 정의합니다.
  • 공통 컴포넌트: 여러 마이크로프론트엔드에서 공유할 수 있는 컴포넌트를 식별합니다.
  • 데이터 흐름: 마이크로프론트엔드 간의 데이터 공유 방식을 결정합니다.
  • 라우팅 전략: 전체 애플리케이션의 라우팅을 어떻게 관리할지 계획합니다.

 

예시 프로젝트 구조:


project-root/
├── container/              # 메인 애플리케이션 컨테이너
├── micro-frontend-1/       # 첫 번째 마이크로프론트엔드
├── micro-frontend-2/       # 두 번째 마이크로프론트엔드
├── micro-frontend-3/       # 세 번째 마이크로프론트엔드
└── shared/                 # 공유 컴포넌트 및 유틸리티

이러한 구조에서 각 마이크로프론트엔드는 독립적으로 개발되고 배포될 수 있으며, container는 이들을 통합하는 역할을 합니다.

3.2 기술 스택 선택 🧰

각 마이크로프론트엔드에 사용할 기술 스택을 선택합니다. 이는 팀의 전문성, 프로젝트 요구사항, 성능 고려사항 등을 바탕으로 결정됩니다.

고려해야 할 요소:

  • 프레임워크 선택: React, Vue, Angular 등
  • 상태 관리 도구: Redux, MobX, Vuex 등
  • 빌드 도구: Webpack, Rollup, Parcel 등
  • 스타일링 방식: CSS-in-JS, SASS, CSS Modules 등

 

팁: 가능한 한 일관된 기술 스택을 사용하는 것이 통합과 유지보수를 용이하게 만들지만, 필요에 따라 다른 기술을 사용하는 것도 마이크로프론트엔드의 장점 중 하나입니다.

3.3 통합 방식 구현 🔗

앞서 살펴본 여러 통합 방식 중 프로젝트에 가장 적합한 방식을 선택하고 구현합니다. 여기서는 Module Federation을 사용한 예시를 살펴보겠습니다.

Module Federation 설정 예시 (Webpack 5):


// webpack.config.js (container)
const ModuleFederationPlugin = require("webpack/lib/container/ModuleFederationPlugin");

module.exports = {
  // ...other webpack configs
  plugins: [
    new ModuleFederationPlugin({
      name: "container",
      remotes: {
        microFrontend1: "microFrontend1@http://localhost:3001/remoteEntry.js",
        microFrontend2: "microFrontend2@http://localhost:3002/remoteEntry.js",
      },
    }),
  ],
};

// webpack.config.js (micro-frontend-1)
module.exports = {
  // ...other webpack configs
  plugins: [
    new ModuleFederationPlugin({
      name: "microFrontend1",
      filename: "remoteEntry.js",
      exposes: {
        "./App": "./src/App",
      },
    }),
  ],
};

이 설정을 통해 container 애플리케이션은 microFrontend1과 microFrontend2를 동적으로 로드할 수 있게 됩니다.

3.4 커뮤니케이션 메커니즘 구현 💬

마이크로프론트엔드 간의 커뮤니케이션은 중요한 고려사항입니다. 이를 위해 다양한 방법을 사용할 수 있습니다.

커뮤니케이션 방법:

  • Custom Events: 브라우저의 CustomEvent API를 사용
  • Pub/Sub 패턴: 이벤트 버스를 통한 통신
  • Props 전달: 컨테이너 애플리케이션을 통한 props 전달
  • 상태 관리 도구: Redux 등을 사용한 전역 상태 관리

 

Custom Event를 사용한 커뮤니케이션 예시:


// micro-frontend-1
const event = new CustomEvent('dataUpdate', { detail: { data: 'Some data' } });
window.dispatchEvent(event);

// micro-frontend-2
window.addEventListener('dataUpdate', (event) => {
  console.log('Received data:', event.detail.data);
});

3.5 스타일링 전략 수립 🎨

일관된 사용자 경험을 제공하기 위해 스타일링 전략을 신중히 수립해야 합니다.

스타일링 접근 방식:

  • CSS-in-JS: 컴포넌트 레벨의 스타일 격리
  • CSS Modules: 클래스 이름 충돌 방지
  • Shared Stylesheets: 공통 스타일 정의
  • Design System: 일관된 UI 컴포넌트 제공

 

CSS-in-JS 예시 (styled-components 사용):


import styled from 'styled-components';

const Button = styled.button`
  background-color: #0070f3;
  color: white;
  padding: 10px 20px;
  border: none;
  border-radius: 5px;
  cursor: pointer;

  &:hover {
    background-color: #0051bb;
  }
`;

export default Button;

3.6 테스트 전략 구축 🧪

마이크로프론트엔드 아키텍처에서는 각 부분을 독립적으로, 그리고 통합된 상태에서 모두 테스트해야 합니다.

테스트 레벨:

  • 단위 테스트: 개별 컴포넌트 및 함수 테스트
  • 통합 테스트: 마이크로프론트엔드 간의 상호작용 테스트
  • E2E 테스트: 전체 애플리케이션 흐름 테스트

 

Jest를 사용한 단위 테스트 예시:


import React from 'react';
import { render, screen } from '@testing-library/react';
import Button from './Button';

test('renders button with correct text', () => {
  render(<button>Click me</button>);
  const buttonElement = screen.getByText(/click me/i);
  expect(buttonElement).toBeInTheDocument();
});

3.7 배포 파이프라인 구축 🚀

각 마이크로프론트엔드를 독립적으로 배포할 수 있는 CI/CD 파이프라인을 구축합니다.

배포 고려사항:

  • 독립적인 버전 관리
  • 자동화된 테스트 실행
  • 단계적 배포 (Staging, Production)
  • 롤백 전략

 

GitHub Actions를 사용한 CI/CD 파이프라인 예시:


name: CI/CD

on:
  push:
    branches: [ main ]

jobs:
  build-and-deploy:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v2
    - name: Use Node.js
      uses: actions/setup-node@v2
      with:
        node-version: '14'
    - run: npm ci
    - run: npm run build
      - run: npm test
    - name: Deploy to staging
      if: success()
      run: |
        # 여기에 스테이징 환경 배포 스크립트 추가
    - name: Deploy to production
      if: success()
      run: |
        # 여기에 프로덕션 환경 배포 스크립트 추가

이러한 CI/CD 파이프라인을 통해 각 마이크로프론트엔드의 변경사항을 자동으로 테스트하고 배포할 수 있습니다.

3.8 모니터링 및 성능 최적화 📊

마이크로프론트엔드 아키텍처에서는 각 부분의 성능과 전체 시스템의 건강 상태를 모니터링하는 것이 중요합니다.

모니터링 및 최적화 전략:

  • 성능 메트릭 수집: 로딩 시간, 첫 번째 콘텐츠풀 페인트(FCP) 등
  • 에러 추적: 각 마이크로프론트엔드의 에러 로깅
  • 사용자 행동 분석: 사용 패턴 및 사용자 경험 모니터링
  • 코드 스플리팅: 필요한 코드만 로드하여 초기 로딩 시간 개선
  • 캐싱 전략: 효율적인 리소스 관리

 

성능 모니터링 예시 (웹 비탈스 사용):


import { getCLS, getFID, getLCP } from 'web-vitals';

function sendToAnalytics({ name, delta, id }) {
  // 여기에 분석 서비스로 데이터를 보내는 로직 추가
  console.log(`Metric: ${name} | Value: ${delta} | ID: ${id}`);
}

getCLS(sendToAnalytics);
getFID(sendToAnalytics);
getLCP(sendToAnalytics);

이러한 모니터링을 통해 성능 문제를 조기에 발견하고 해결할 수 있습니다.

3.9 문서화 및 가이드라인 작성 📚

마지막으로, 마이크로프론트엔드 아키텍처의 성공적인 구현과 유지보수를 위해 철저한 문서화가 필요합니다.

문서화 항목:

  • 아키텍처 개요 및 설계 결정 사항
  • 각 마이크로프론트엔드의 책임 및 기능 설명
  • 개발 환경 설정 가이드
  • 코딩 컨벤션 및 베스트 프랙티스
  • 배포 프로세스 설명
  • 트러블슈팅 가이드

 

문서화는 지속적으로 업데이트되어야 하며, 모든 팀 멤버가 쉽게 접근하고 이해할 수 있어야 합니다.

이러한 단계들을 통해 마이크로프론트엔드 아키텍처를 성공적으로 구현할 수 있습니다. 각 단계는 프로젝트의 특성과 팀의 상황에 맞게 조정될 수 있으며, 지속적인 개선과 학습이 필요한 과정입니다.

마이크로프론트엔드 아키텍처는 복잡한 웹 애플리케이션을 더 효율적으로 개발하고 관리할 수 있게 해주는 강력한 접근 방식입니다. 하지만 이를 성공적으로 구현하기 위해서는 신중한 계획과 실행, 그리고 팀 전체의 협력이 필요합니다.

재능넷과 같은 복잡한 플랫폼에서 마이크로프론트엔드를 도입한다면, 각 기능 영역(예: 사용자 프로필, 프로젝트 관리, 결제 시스템 등)을 독립적인 마이크로프론트엔드로 개발할 수 있습니다. 이를 통해 각 팀이 자율성을 가지고 빠르게 개발하고 배포할 수 있으며, 전체 시스템의 확장성과 유지보수성을 크게 향상시킬 수 있습니다.

마이크로프론트엔드 아키텍처의 여정은 끊임없는 학습과 개선의 과정입니다. 기술의 발전과 함께 새로운 도구와 방법론이 계속해서 등장하고 있으므로, 항상 최신 트렌드를 주시하고 팀의 역량을 지속적으로 향상시키는 것이 중요합니다.

이제 여러분은 마이크로프론트엔드의 개념부터 실제 구현 방법까지 전반적인 내용을 알게 되었습니다. 이를 바탕으로 여러분의 프로젝트에 마이크로프론트엔드를 적용해 보시는 것은 어떨까요? 복잡한 웹 애플리케이션을 더 효율적으로 관리하고, 사용자에게 더 나은 경험을 제공할 수 있는 새로운 가능성이 여러분을 기다리고 있습니다. 화이팅! 🚀🌟

관련 키워드

  • 마이크로프론트엔드
  • 웹 개발
  • 아키텍처
  • 모듈화
  • 확장성
  • 프론트엔드 프레임워크
  • 컴포넌트 기반 개발
  • CI/CD
  • 성능 최적화
  • 웹 컴포넌트

지적 재산권 보호

지적 재산권 보호 고지

  1. 저작권 및 소유권: 본 컨텐츠는 재능넷의 독점 AI 기술로 생성되었으며, 대한민국 저작권법 및 국제 저작권 협약에 의해 보호됩니다.
  2. AI 생성 컨텐츠의 법적 지위: 본 AI 생성 컨텐츠는 재능넷의 지적 창작물로 인정되며, 관련 법규에 따라 저작권 보호를 받습니다.
  3. 사용 제한: 재능넷의 명시적 서면 동의 없이 본 컨텐츠를 복제, 수정, 배포, 또는 상업적으로 활용하는 행위는 엄격히 금지됩니다.
  4. 데이터 수집 금지: 본 컨텐츠에 대한 무단 스크래핑, 크롤링, 및 자동화된 데이터 수집은 법적 제재의 대상이 됩니다.
  5. AI 학습 제한: 재능넷의 AI 생성 컨텐츠를 타 AI 모델 학습에 무단 사용하는 행위는 금지되며, 이는 지적 재산권 침해로 간주됩니다.

재능넷은 최신 AI 기술과 법률에 기반하여 자사의 지적 재산권을 적극적으로 보호하며,
무단 사용 및 침해 행위에 대해 법적 대응을 할 권리를 보유합니다.

© 2024 재능넷 | All rights reserved.

댓글 작성
0/2000

댓글 0개

해당 지식과 관련있는 인기재능

 안녕하세요. 개발자 GP 입니다. 모든 사이트 개발은 웹사이트 제작시 웹표준을 준수하여 진행합니다.웹표준이란 국제표준화 단체...

 간단한 웹프로그래밍(php,asp.mssql,코딩,포토샵,html) 해드립니다. 저렴한 비용으로 신속하고 빠른 처리 하시길 바랍니다. 간단...

안녕하세요.부동산, ​학원, 재고관리, ​기관/관공서, 기업, ERP, 기타 솔루션, 일반 서비스(웹, 모바일) 등다양한 분야에서 개발을 해왔습니...

📚 생성된 총 지식 10,591 개

  • (주)재능넷 | 대표 : 강정수 | 경기도 수원시 영통구 봉영로 1612, 7층 710-09 호 (영통동) | 사업자등록번호 : 131-86-65451
    통신판매업신고 : 2018-수원영통-0307 | 직업정보제공사업 신고번호 : 중부청 2013-4호 | jaenung@jaenung.net

    (주)재능넷의 사전 서면 동의 없이 재능넷사이트의 일체의 정보, 콘텐츠 및 UI등을 상업적 목적으로 전재, 전송, 스크래핑 등 무단 사용할 수 없습니다.
    (주)재능넷은 통신판매중개자로서 재능넷의 거래당사자가 아니며, 판매자가 등록한 상품정보 및 거래에 대해 재능넷은 일체 책임을 지지 않습니다.

    Copyright © 2024 재능넷 Inc. All rights reserved.
ICT Innovation 대상
미래창조과학부장관 표창
서울특별시
공유기업 지정
한국데이터베이스진흥원
콘텐츠 제공서비스 품질인증
대한민국 중소 중견기업
혁신대상 중소기업청장상
인터넷에코어워드
일자리창출 분야 대상
웹어워드코리아
인터넷 서비스분야 우수상
정보통신산업진흥원장
정부유공 표창장
미래창조과학부
ICT지원사업 선정
기술혁신
벤처기업 확인
기술개발
기업부설 연구소 인정
마이크로소프트
BizsPark 스타트업
대한민국 미래경영대상
재능마켓 부문 수상
대한민국 중소기업인 대회
중소기업중앙회장 표창
국회 중소벤처기업위원회
위원장 표창