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

🌲 지식인의 숲 🌲

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

안녕하세요.신호처리를 전공한 개발자 입니다. 1. 영상신호처리, 생체신호처리 알고리즘 개발2. 안드로이드 앱 개발 3. 윈도우 프로그램...

소개안드로이드 기반 어플리케이션 개발 후 서비스를 하고 있으며 스타트업 경험을 통한 앱 및 서버, 관리자 페이지 개발 경험을 가지고 있습니다....

 안녕하세요. 안드로이드 기반 개인 앱, 프로젝트용 앱부터 그 이상 기능이 추가된 앱까지 제작해 드립니다.  - 앱 개발 툴: 안드로이드...

Flutter in-app purchase 플러그인 활용

2024-10-26 14:55:03

재능넷
조회수 240 댓글수 0

Flutter in-app purchase 플러그인 활용하기 🚀💰

 

 

안녕, 친구들! 오늘은 정말 흥미진진한 주제로 찾아왔어. 바로 Flutter에서 in-app purchase 플러그인을 활용하는 방법에 대해 알아볼 거야. 😎 이 글을 통해 너희는 앱에서 결제 기능을 구현하는 방법을 배우게 될 거야. 마치 재능넷에서 다양한 재능을 거래하듯이, 우리도 앱 안에서 다양한 상품을 판매할 수 있게 되는 거지! 🎨💼

자, 이제 본격적으로 시작해볼까? 준비됐어? 그럼 출발~! 🏁

1. in-app purchase란 뭘까? 🤔

먼저 in-app purchase가 뭔지 알아보자. in-app purchase는 말 그대로 '앱 내 구매'를 의미해. 앱을 사용하면서 추가 기능이나 콘텐츠를 구매할 수 있게 해주는 거지. 예를 들어, 게임 앱에서 아이템을 사거나, 음악 앱에서 프리미엄 구독을 하는 것 모두 in-app purchase야.

in-app purchase는 크게 세 가지 유형으로 나눌 수 있어:

  • 소모품 (Consumable): 한 번 사용하면 없어지는 아이템. 예를 들면 게임 속 코인이나 생명 같은 거야.
  • 비소모품 (Non-consumable): 한 번 구매하면 계속 사용할 수 있는 것. 앱의 광고를 제거하는 옵션 같은 게 여기에 해당돼.
  • 구독 (Subscription): 정기적으로 결제하고 서비스를 이용하는 형태. 음악 스트리밍 서비스의 월간 구독 같은 거지.

이런 in-app purchase를 구현하면 뭐가 좋을까? 🌟

in-app purchase의 장점:

  • 추가 수익 창출 가능
  • 사용자에게 더 많은 가치 제공
  • 앱의 기능을 확장하고 개선할 수 있는 기회
  • 사용자의 참여도와 충성도 향상

재능넷에서 다양한 재능을 거래하듯이, 앱에서도 다양한 디지털 상품을 거래할 수 있게 되는 거야. 멋지지 않아? 😄

In-App Purchase 유형 소모품 비소모품 구독

자, 이제 in-app purchase가 뭔지 알았으니까, Flutter에서 어떻게 이걸 구현하는지 알아볼까? 🕵️‍♂️

2. Flutter in-app purchase 플러그인 소개 📦

Flutter에서 in-app purchase를 구현하려면 특별한 도구가 필요해. 바로 'in_app_purchase' 플러그인이야. 이 플러그인은 Flutter 팀에서 공식적으로 만든 거라서 믿고 쓸 수 있지.

이 플러그인은 iOS의 App Store와 Android의 Google Play Store 모두에서 작동해. 즉, 하나의 코드로 두 플랫폼 모두에서 in-app purchase를 구현할 수 있다는 거지. 개발자 입장에서는 정말 편리한 거야! 😊

in_app_purchase 플러그인의 주요 기능:

  • 상품 정보 조회
  • 구매 처리
  • 구매 내역 복원
  • 구독 관리

이 플러그인을 사용하면 재능넷에서 다양한 재능을 쉽게 거래하듯이, 앱에서도 다양한 디지털 상품을 쉽게 판매할 수 있어. 멋지지 않아? 🎉

자, 이제 이 플러그인을 어떻게 설치하고 사용하는지 알아볼까? 🛠️

플러그인 설치하기

먼저, 프로젝트의 pubspec.yaml 파일에 다음 줄을 추가해야 해:

dependencies:
  in_app_purchase: ^3.1.5

그리고 터미널에서 다음 명령어를 실행해:

flutter pub get

이렇게 하면 플러그인 설치 완료! 😎

플러그인 import 하기

이제 코드에서 플러그인을 사용하려면 import 문을 추가해야 해:

import 'package:in_app_purchase/in_app_purchase.dart';

이렇게 하면 준비 완료! 이제 본격적으로 in-app purchase 기능을 구현할 준비가 됐어. 🚀

Flutter In-App Purchase 플러그인 설치 과정 pubspec.yaml 수정 flutter pub get import 하기

자, 이제 플러그인 설치는 끝났어. 다음으로 이 플러그인을 어떻게 사용하는지 자세히 알아볼까? 🧐

3. in_app_purchase 플러그인 사용하기 🛍️

자, 이제 본격적으로 in_app_purchase 플러그인을 사용해볼 거야. 마치 재능넷에서 다양한 재능을 거래하듯이, 우리도 앱에서 다양한 상품을 판매할 수 있게 될 거야. 신나지 않아? 😆

3.1 InAppPurchase 인스턴스 생성하기

먼저, InAppPurchase 인스턴스를 생성해야 해. 이 인스턴스를 통해 모든 in-app purchase 관련 작업을 수행할 수 있어.

final InAppPurchase _inAppPurchase = InAppPurchase.instance;

이 코드 한 줄로 in-app purchase의 세계로 들어가는 문을 열었어! 이제 이 인스턴스를 통해 상품을 조회하고, 구매하고, 구매 내역을 복원할 수 있지.

3.2 상품 정보 조회하기

앱에서 판매할 상품 정보를 가져오려면 어떻게 해야 할까? 바로 productDetails를 사용하면 돼!

Future<void> _getProducts() async {
  Set<string> ids = {'product_id_1', 'product_id_2', 'product_id_3'};
  ProductDetailsResponse response = await _inAppPurchase.queryProductDetails(ids);
  List<productdetails> products = response.productDetails;
}</productdetails></string></void>

이 코드를 실행하면, App Store나 Google Play Store에서 설정한 상품 정보를 가져올 수 있어. 상품의 이름, 설명, 가격 등 모든 정보가 담겨 있지.

Tip: 상품 ID는 App Store나 Google Play Console에서 미리 설정해둔 값을 사용해야 해. 이 값들은 플랫폼마다 다를 수 있으니 주의해야 해!

3.3 구매 처리하기

이제 상품 정보를 가져왔으니, 실제로 구매를 처리해볼까? 구매 처리는 다음과 같이 할 수 있어:

Future<void> _buyProduct(ProductDetails product) async {
  final PurchaseParam purchaseParam = PurchaseParam(productDetails: product);
  await _inAppPurchase.buyNonConsumable(purchaseParam: purchaseParam);
}</void>

이 코드를 실행하면 실제로 결제 창이 뜨고 사용자가 결제를 진행할 수 있어. 결제가 완료되면 구매 완료 이벤트가 발생하고, 이를 처리하는 로직을 추가해야 해.

3.4 구매 완료 처리하기

구매가 완료되면 어떻게 해야 할까? 바로 구매 완료 이벤트를 처리해야 해:

late StreamSubscription<list>> _subscription;

@override
void initState() {
  super.initState();
  final Stream<list>> purchaseUpdated = _inAppPurchase.purchaseStream;
  _subscription = purchaseUpdated.listen((purchaseDetailsList) {
    _listenToPurchaseUpdated(purchaseDetailsList);
  }, onDone: () {
    _subscription.cancel();
  }, onError: (error) {
    // 에러 처리
  });
}

void _listenToPurchaseUpdated(List<purchasedetails> purchaseDetailsList) {
  purchaseDetailsList.forEach((PurchaseDetails purchaseDetails) async {
    if (purchaseDetails.status == PurchaseStatus.purchased) {
      // 구매 완료 처리
      await _deliverProduct(purchaseDetails);
    } else if (purchaseDetails.status == PurchaseStatus.error) {
      // 에러 처리
    }
    if (purchaseDetails.pendingCompletePurchase) {
      await _inAppPurchase.completePurchase(purchaseDetails);
    }
  });
}</purchasedetails></list></list>

이 코드는 구매 상태를 실시간으로 감시하고 있다가, 구매가 완료되면 적절한 처리를 해주는 거야. 예를 들어, 구매한 아이템을 사용자에게 지급한다거나 하는 식으로 말이야.

In-App Purchase 처리 과정 상품 정보 조회 구매 요청 결제 처리 구매 완료 처리

자, 이렇게 해서 기본적인 in-app purchase 구현 방법을 알아봤어. 어때, 생각보다 복잡하지 않지? 😉

하지만 이게 끝이 아니야. 실제로 앱에 in-app purchase를 구현할 때는 더 많은 것들을 고려해야 해. 예를 들면, 구매 내역 복원이나 구독 관리 같은 것들 말이야. 이런 것들에 대해서도 알아볼까? 🤓

4. 고급 기능: 구매 내역 복원과 구독 관리 🔄

자, 이제 좀 더 심화된 내용을 알아볼 거야. 구매 내역 복원과 구독 관리, 이 두 가지는 in-app purchase를 구현할 때 정말 중요한 기능이야. 마치 재능넷에서 거래 내역을 관리하는 것처럼, 앱에서도 사용자의 구매 내역을 잘 관리해야 하거든. 😊

4.1 구매 내역 복원하기

사용자가 앱을 재설치하거나 새 기기에서 앱을 실행할 때, 이전에 구매한 내역을 복원해줘야 해. 이걸 '구매 내역 복원'이라고 해.

Future<void> _restorePurchases() async {
  await _inAppPurchase.restorePurchases();
}</void>

이 코드 한 줄로 사용자의 모든 구매 내역을 복원할 수 있어! 하지만 복원된 구매 내역을 처리하는 로직도 추가해야 해:

void _listenToPurchaseUpdated(List<purchasedetails> purchaseDetailsList) {
  purchaseDetailsList.forEach((PurchaseDetails purchaseDetails) async {
    if (purchaseDetails.status == PurchaseStatus.restored) {
      // 복원된 구매 처리
      await _deliverProduct(purchaseDetails);
    }
    // ... 다른 상태 처리
  });
}</purchasedetails>

이렇게 하면 사용자가 이전에 구매한 모든 항목을 다시 사용할 수 있게 돼. cool하지? 😎

4.2 구독 관리하기

구독 상품을 판매한다면, 구독 상태를 관리하는 것도 중요해. 구독이 만료되었는지, 갱신되었는지 등을 확인해야 하거든.

Future<void> _checkSubscription() async {
  final bool available = await _inAppPurchase.isAvailable();
  if (!available) {
    // Store가 사용 불가능한 경우 처리
    return;
  }

  // 현재 활성화된 구독 확인
  final QueryPurchaseDetailsResponse response = await _inAppPurchase.queryPastPurchases();
  for (PurchaseDetails purchase in response.pastPurchases) {
    if (purchase.productID == 'your_subscription_id') {
      if (purchase.status == PurchaseStatus.purchased) {
        // 구독이 활성화된 상태
        // 여기서 구독 만료일을 확인하고 필요한 처리를 수행
      }
    }
  }
}</void>

이 코드는 현재 활성화된 구독을 확인하고, 그에 따른 처리를 할 수 있게 해줘. 구독이 만료되면 갱신을 유도하거나, 특정 기능의 접근을 제한하는 등의 작업을 할 수 있지.

주의사항: 구독 관리는 복잡할 수 있어. 특히 플랫폼별로 다른 점이 있을 수 있으니, Apple과 Google의 가이드라인을 잘 확인해야 해!

구매 내역 복원 및 구독 관리 프로세스 구매 내역 복원 구독 관리 복원된 구매 처리 구독 상태 업데이트

자, 이렇게 해서 구매 내역 복원과 구독 관리에 대해 알아봤어. 이 기능들을 잘 활용하면 사용자 경험을 크게 향상시킬 수 있어. 재능넷에서 사용자들이 자신의 거래 내역을 쉽게 확인하고 관리할 수 있듯이, 우리 앱에서도 사용자들이 자신의 구매 내역을 쉽게 관리할 수 있게 되는 거지! 👍

하지만 여기서 끝이 아니야. in-app purchase를 구현할 때는 보안도 정말 중요해. 다음 섹션에서는 이 부분에 대해 자세히 알아볼 거야. 준비됐어? 🔒

5. 보안과 검증: 안전한 in-app purchase 구현하기 🛡️

자, 이제 정말 중요한 부분이야. in-app purchase를 구현할 때 보안은 정말 중요해. 마치 재능넷에서 안전한 거래를 보장하듯이, 우리도 앱에서 안전한 구매를 보장해야 해. 어떻게 하면 될까? 🤔

5.1 서버 측 검증

가장 중요한 건 서버 측 검증이야. 클라이언트(앱)에서만 검증을 하면 해킹의 위험이 있어. 그래서 서버에서 한 번 더 검증을 해줘야 해.

// 클라이언트 측 코드
Future<void> _verifyPurchase(PurchaseDetails purchaseDetails) async {
  // 구매 영수증을 서버로 전송
  final response = await http.post(
    Uri.parse('https://your-server.com/verify-purchase'),
    body: {
      'receipt': purchaseDetails.verificationData.serverVerificationData,
      'productId': purchaseDetails.productID,
    },
  );

  if (response.statusCode == 200) {
    // 서버 검증 성공
    await _deliverProduct(purchaseDetails);
  } else {
    // 서버 검증 실패
    // 에러 처리
  }
}</void>

이 코드는 구매가 완료되면 서버로 구매 정보를 전송해. 서버에서는 이 정보를 Apple이나 Google의 서버와 한 번 더 확인하는 거지.

Tip: 서버 측 검증은 반드시 해야 해! 이걸 안 하면 가짜 구매나 해킹된 앱으로 인 한 무단 사용을 막을 수 없어.

5.2 구매 상태 추적

구매 상태를 지속적으로 추적하는 것도 중요해. 특히 구독 상품의 경우에는 더욱 그래.

void _listenToPurchaseUpdated(List<purchasedetails> purchaseDetailsList) {
  purchaseDetailsList.forEach((PurchaseDetails purchaseDetails) async {
    if (purchaseDetails.status == PurchaseStatus.purchased ||
        purchaseDetails.status == PurchaseStatus.restored) {
      // 구매 또는 복원된 상품 검증
      await _verifyPurchase(purchaseDetails);
    } else if (purchaseDetails.status == PurchaseStatus.error) {
      // 에러 처리
      print('Error: ${purchaseDetails.error!.message}');
    } else if (purchaseDetails.status == PurchaseStatus.canceled) {
      // 취소된 구매 처리
      print('Purchase canceled');
    }
  });
}</purchasedetails>

이 코드는 구매 상태의 변화를 실시간으로 감지하고 적절히 대응해. 구매가 성공했을 때, 오류가 발생했을 때, 취소되었을 때 등 각각의 상황에 맞는 처리를 할 수 있어.

5.3 보안 best practices

마지막으로, in-app purchase 구현 시 꼭 지켜야 할 보안 best practices를 알아볼까?

  • 항상 최신 버전의 in_app_purchase 플러그인을 사용해.
  • 민감한 정보(예: 제품 가격)는 항상 서버에서 관리해.
  • 구매 검증 로직을 앱 내부에 하드코딩하지 마. 서버에서 처리해.
  • 모든 네트워크 통신은 HTTPS를 사용해.
  • 사용자의 구매 정보를 안전하게 저장해. 가능하면 암호화해서 저장해.
안전한 In-App Purchase 프로세스 서버 스토어 서버 구매 요청 검증 요청 검증 결과 구매 확인 안전한 데이터 저장 및 관리

자, 이렇게 해서 in-app purchase의 보안에 대해 알아봤어. 보안은 정말 중요해. 재능넷에서 안전한 거래를 보장하듯이, 우리 앱에서도 안전한 구매를 보장해야 해. 그래야 사용자들이 안심하고 앱을 사용할 수 있지! 😊

이제 in-app purchase의 거의 모든 것을 배웠어. 마지막으로, 실제 앱에 이걸 적용할 때 주의해야 할 점들에 대해 알아볼까? 🤔

6. 실제 적용 시 주의사항 및 팁 💡

자, 이제 마지막이야. in-app purchase를 실제로 앱에 적용할 때 주의해야 할 점들과 유용한 팁들을 알아볼 거야. 마치 재능넷에서 처음 거래를 시작할 때처럼, 우리도 in-app purchase를 처음 적용할 때 조심해야 할 점들이 있거든. 😉

6.1 테스트 계정 사용하기

실제 돈을 쓰지 않고 in-app purchase를 테스트하려면 테스트 계정을 사용해야 해. Apple과 Google 모두 개발자를 위한 테스트 환경을 제공하고 있어.

  • iOS: Sandbox 테스트 계정을 사용해.
  • Android: Google Play Console에서 테스트 트랙을 설정해.

이렇게 하면 실제 결제 없이도 모든 시나리오를 테스트할 수 있어.

6.2 사용자 경험 최적화

in-app purchase는 단순히 기술적인 구현만으로는 부족해. 사용자 경험도 중요하지!

  • 구매 과정을 최대한 간단하게 만들어.
  • 구매할 상품의 가치를 명확하게 설명해.
  • 구매 후 즉각적인 피드백을 제공해.
  • 구매 내역을 쉽게 확인할 수 있게 해.

Tip: 사용자가 구매를 망설일 때, 한시적인 할인이나 특별 혜택을 제공하는 것도 좋은 방법이야!

6.3 플랫폼별 가이드라인 준수

Apple과 Google은 각각 in-app purchase에 대한 엄격한 가이드라인을 가지고 있어. 이를 반드시 준수해야 해.

  • Apple: 실물 상품은 반드시 외부 결제 시스템을 사용해야 해.
  • Google: 구독 취소 및 환불 정책을 명확히 제시해야 해.

이런 가이드라인을 지키지 않으면 앱이 리젝될 수 있어. 주의해야 해!

6.4 에러 처리 및 복구

네트워크 오류, 서버 다운 등 다양한 문제가 발생할 수 있어. 이런 상황에 대비해야 해.

try {
  // 구매 로직
} catch (e) {
  if (e is PlatformException) {
    // 플랫폼 특정 에러 처리
    print('Platform error: ${e.message}');
  } else {
    // 일반 에러 처리
    print('Error: $e');
  }
  // 사용자에게 에러 메시지 표시
  showErrorDialog(context, 'Purchase failed. Please try again later.');
}

에러가 발생했을 때, 사용자에게 친절하게 안내하고 재시도할 수 있는 옵션을 제공해.

6.5 지속적인 모니터링 및 업데이트

in-app purchase는 한 번 구현하고 끝나는 게 아니야. 지속적인 관리가 필요해.

  • 구매 성공률을 모니터링해.
  • 사용자 피드백을 주기적으로 확인해.
  • 새로운 결제 방식이나 플랫폼 정책 변경에 대응해.

이렇게 하면 시간이 지나도 안정적이고 효과적인 in-app purchase 시스템을 유지할 수 있어.

In-App Purchase 적용 시 주의사항 테스트 계정 사용자 경험 가이드라인 에러 처리 모니터링 업데이트

자, 이렇게 해서 Flutter에서 in-app purchase 플러그인을 활용하는 방법에 대해 모두 알아봤어. 기본적인 구현부터 보안, 실제 적용 시 주의사항까지, 정말 많은 내용을 다뤘지? 😊

in-app purchase는 앱의 수익화에 있어 정말 중요한 요소야. 재능넷에서 다양한 재능을 거래하듯이, 우리도 앱에서 다양한 디지털 상품을 판매할 수 있게 됐어. 이 지식을 잘 활용해서 멋진 앱을 만들어보자! 🚀

혹시 더 궁금한 점이 있다면 언제든 물어봐. 화이팅! 👍

관련 키워드

  • Flutter
  • in-app purchase
  • 플러그인
  • 결제
  • 구독
  • 보안
  • 검증
  • 사용자 경험
  • 테스트
  • 모니터링

지식의 가치와 지적 재산권 보호

자유 결제 서비스

'지식인의 숲'은 "이용자 자유 결제 서비스"를 통해 지식의 가치를 공유합니다. 콘텐츠를 경험하신 후, 아래 안내에 따라 자유롭게 결제해 주세요.

자유 결제 : 국민은행 420401-04-167940 (주)재능넷
결제금액: 귀하가 받은 가치만큼 자유롭게 결정해 주세요
결제기간: 기한 없이 언제든 편한 시기에 결제 가능합니다

지적 재산권 보호 고지

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

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

© 2024 재능넷 | All rights reserved.

댓글 작성
0/2000

댓글 0개

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

 주문전 꼭 쪽지로 문의메세지 주시면 감사하겠습니다.* Skills (order by experience desc)Platform : Android, Web, Hybrid(Cordova), Wind...

 [프로젝트 가능 여부를 확인이 가장 우선입니다. 주문 전에 문의 해주세요] ※ 언어에 상관하지 마시고 일단 문의하여주세요!※ 절대 비...

IOS/Android/Win64/32(MFC)/MacOS 어플 제작해드립니다.제공된 앱의 화면은 아이폰,아이패드,안드로이드 모두  정확하게 일치합니...

웹 & 안드로이드 5년차입니다. 프로젝트 소스 + 프로젝트 소스 주석 +  퍼포먼스 설명 및 로직 설명 +  보이스톡 강의 + 실시간 피...

📚 생성된 총 지식 8,224 개

  • (주)재능넷 | 대표 : 강정수 | 경기도 수원시 영통구 봉영로 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 스타트업
대한민국 미래경영대상
재능마켓 부문 수상
대한민국 중소기업인 대회
중소기업중앙회장 표창
국회 중소벤처기업위원회
위원장 표창