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

🌲 지식인의 숲 🌲

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

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

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

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

안녕하세요. 경력 8년차 프리랜서 개발자 입니다.피쳐폰 2g 때부터 지금까지 모바일 앱 개발을 전문적으로 진행해 왔으며,신속하 정확 하게 의뢰하...

NativeScript에서 백그라운드 작업 처리하기

2024-11-11 22:36:58

재능넷
조회수 309 댓글수 0

NativeScript에서 백그라운드 작업 처리하기 🚀

 

 

안녕, 친구들! 오늘은 정말 흥미진진한 주제로 찾아왔어. 바로 NativeScript에서 백그라운드 작업을 처리하는 방법에 대해 알아볼 거야. 😎 이 주제는 모바일 앱 개발에서 정말 중요한 부분이니까, 집중해서 들어보자고!

🔔 잠깐! 혹시 모바일 앱 개발에 관심 있는 친구들이라면, 재능넷(https://www.jaenung.net)에서 다양한 개발자들의 노하우를 배울 수 있다는 거 알고 있었어? 여기서 NativeScript 전문가를 만날 수 있을지도 몰라!

자, 이제 본격적으로 시작해볼까? 🏁

백그라운드 작업이 뭐길래? 🤔

먼저, 백그라운드 작업이 뭔지 알아야겠지? 간단히 말해서, 백그라운드 작업은 앱의 메인 스레드를 방해하지 않고 뒤에서 조용히 실행되는 작업을 말해. 예를 들면, 큰 파일을 다운로드하거나, 복잡한 계산을 수행하거나, 네트워크 요청을 보내는 등의 작업이 여기에 해당돼.

왜 이런 게 필요할까? 🧐

  • 앱의 성능을 향상시키기 위해
  • 사용자 경험을 개선하기 위해
  • 배터리 수명을 절약하기 위해
  • 앱이 멈추거나 느려지는 것을 방지하기 위해

이해가 됐어? 그럼 이제 NativeScript에서 어떻게 이런 백그라운드 작업을 처리하는지 자세히 알아보자고!

백그라운드 작업 개념도 메인 스레드 작업 1 작업 2 작업 3

위의 그림을 보면, 메인 스레드는 계속 돌아가고 있고, 그 옆에 여러 작은 작업들이 독립적으로 실행되고 있는 걸 볼 수 있어. 이게 바로 백그라운드 작업의 기본 개념이야!

NativeScript에서의 백그라운드 작업 처리 방법 🛠️

자, 이제 본격적으로 NativeScript에서 백그라운드 작업을 어떻게 처리하는지 알아보자. NativeScript에서는 여러 가지 방법으로 백그라운드 작업을 처리할 수 있어. 하나씩 자세히 살펴볼게!

1. setTimeout과 setInterval 사용하기 ⏰

setTimeoutsetInterval은 가장 기본적인 백그라운드 작업 처리 방법이야. 이 함수들을 사용하면 특정 시간 후에 코드를 실행하거나, 일정 간격으로 코드를 반복 실행할 수 있어.

🔍 사용 예시:


// 3초 후에 "안녕!"을 출력
setTimeout(() => {
  console.log("안녕!");
}, 3000);

// 5초마다 "또 만나!"를 출력
setInterval(() => {
  console.log("또 만나!");
}, 5000);
    

이 방법은 간단하지만, 복잡한 작업이나 오래 걸리는 작업에는 적합하지 않아. 왜냐하면 여전히 메인 스레드에서 실행되기 때문이지.

2. Workers 사용하기 👷‍♂️

Workers는 NativeScript에서 제공하는 강력한 백그라운드 작업 처리 도구야. Worker를 사용하면 별도의 스레드에서 JavaScript 코드를 실행할 수 있어. 이건 정말 대단한 거야!

🔍 Worker 사용 예시:


// main-view-model.js
const worker = new Worker('./workers/my-worker');

worker.postMessage({ data: 'Hello from main thread!' });

worker.onmessage = (msg) => {
  console.log('Message received from worker', msg.data);
};

// workers/my-worker.js
onmessage = (msg) => {
  console.log('Worker received:', msg.data);
  // 복잡한 계산 수행
  postMessage('작업 완료!');
};
    

Worker를 사용하면 UI 스레드를 차단하지 않고 복잡한 계산이나 데이터 처리를 수행할 수 있어. 이건 앱의 성능과 반응성을 크게 향상시킬 수 있는 방법이야!

Worker 동작 방식 메인 스레드 Worker 스레드 postMessage onmessage

위 그림을 보면, 메인 스레드와 Worker 스레드가 어떻게 통신하는지 잘 보여주고 있어. postMessage로 메시지를 보내고, onmessage로 메시지를 받는 구조야. 이렇게 하면 두 스레드가 독립적으로 작업을 수행하면서도 필요할 때 정보를 주고받을 수 있지!

3. Promises와 async/await 사용하기 🤝

JavaScript의 Promiseasync/await 문법을 사용하면 비동기 작업을 더 쉽게 처리할 수 있어. 이 방법은 코드를 더 읽기 쉽고 관리하기 쉽게 만들어줘.

🔍 Promise와 async/await 사용 예시:


// Promise 사용
function doSomethingAsync() {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      resolve('작업 완료!');
    }, 3000);
  });
}

doSomethingAsync().then(result => {
  console.log(result);
}).catch(error => {
  console.error(error);
});

// async/await 사용
async function doSomethingElseAsync() {
  try {
    const result = await doSomethingAsync();
    console.log(result);
  } catch (error) {
    console.error(error);
  }
}

doSomethingElseAsync();
    

이 방법을 사용하면 비동기 작업의 흐름을 더 직관적으로 제어할 수 있어. 특히 여러 비동기 작업을 순차적으로 처리해야 할 때 매우 유용해!

4. 플러그인 사용하기 🔌

NativeScript에는 백그라운드 작업을 위한 다양한 플러그인들이 있어. 이런 플러그인들을 사용하면 더 복잡한 백그라운드 작업도 쉽게 처리할 수 있지.

  • nativescript-background-http: 대용량 파일 업로드를 백그라운드에서 처리
  • nativescript-background-fetch: 주기적으로 백그라운드에서 데이터를 가져오기
  • nativescript-background-geolocation: 백그라운드에서 위치 추적

이런 플러그인들은 특정 목적에 최적화된 백그라운드 작업 솔루션을 제공해. 필요에 따라 적절한 플러그인을 선택해서 사용하면 돼!

💡 팁: 재능넷(https://www.jaenung.net)에서 NativeScript 플러그인 개발에 대한 강좌를 들어보는 것도 좋은 방법이야. 다른 개발자들의 경험을 배우면 플러그인 사용이 더 쉬워질 거야!

백그라운드 작업 처리 시 주의사항 ⚠️

백그라운드 작업을 처리할 때는 몇 가지 주의해야 할 점들이 있어. 이런 점들을 잘 기억해두면 더 효율적이고 안정적인 앱을 만들 수 있을 거야!

  1. 배터리 소모에 주의하기: 백그라운드 작업은 배터리를 많이 소모할 수 있어. 꼭 필요한 작업만 백그라운드에서 실행하도록 해.
  2. 메모리 관리하기: 백그라운드 작업이 너무 많은 메모리를 사용하면 앱이 강제 종료될 수 있어. 메모리 사용량을 항상 모니터링하고 최적화해야 해.
  3. 에러 처리하기: 백그라운드 작업에서 발생하는 에러를 적절히 처리해야 해. 그렇지 않으면 앱이 예기치 않게 종료될 수 있어.
  4. 사용자 경험 고려하기: 백그라운드 작업이 진행 중일 때 사용자에게 적절한 피드백을 제공해. 예를 들어, 진행 상황을 보여주는 알림을 표시할 수 있어.
  5. 플랫폼별 차이 이해하기: iOS와 Android는 백그라운드 작업 처리 방식이 다를 수 있어. 각 플랫폼의 특성을 이해하고 그에 맞게 구현해야 해.
백그라운드 작업 주의사항 배터리 메모리 에러 UX

이 그림은 백그라운드 작업 처리 시 주의해야 할 주요 사항들을 보여주고 있어. 각 요소가 서로 연결되어 있는 걸 볼 수 있지? 이건 이 요소들이 서로 영향을 미치고 있다는 걸 의미해. 예를 들어, 메모리 사용량이 많아지면 배터리 소모도 증가하고, 에러 발생 가능성도 높아질 수 있어. 그리고 이 모든 것들이 결국 사용자 경험(UX)에 영향을 미치게 되는 거지.

🚨 중요: 백그라운드 작업을 구현할 때는 항상 테스트를 철저히 해야 해. 다양한 상황에서 앱이 어떻게 동작하는지 확인하고, 문제가 있다면 즉시 수정해야 해. 특히 배터리 소모, 메모리 사용량, 네트워크 사용량 등을 꼼꼼히 체크해봐야 해.

실제 사용 사례로 배우는 백그라운드 작업 🎓

자, 이제 실제로 NativeScript에서 백그라운드 작업을 어떻게 사용하는지 몇 가지 예제를 통해 살펴보자. 이 예제들을 통해 백그라운드 작업의 실제 활용법을 더 잘 이해할 수 있을 거야!

1. 대용량 파일 다운로드 📥

사용자가 큰 파일을 다운로드해야 하는 상황을 생각해보자. 이런 작업을 메인 스레드에서 처리하면 앱이 멈춰 보일 수 있어. 대신 백그라운드 작업으로 처리하면 사용자가 다른 작업을 계속할 수 있지.

🔍 코드 예시:


import { Http } from '@nativescript/core';

// Worker 파일 생성 (download-worker.js)
const worker = new Worker('./download-worker');

worker.postMessage({
  url: 'https://example.com/large-file.zip',
  destination: '~/Downloads/large-file.zip'
});

worker.onmessage = (event) => {
  if (event.data.progress) {
    console.log(`다운로드 진행률: ${event.data.progress}%`);
  } else if (event.data.complete) {
    console.log('다운로드 완료!');
  }
};

// download-worker.js
onmessage = (event) => {
  const { url, destination } = event.data;
  
  Http.getFile(url, destination).then(
    (response) => {
      // 진행 상황 보고
      response.on('progress', (progress) => {
        postMessage({ progress: Math.round(progress.current / progress.total * 100) });
      });
      
      // 완료 보고
      response.on('complete', () => {
        postMessage({ complete: true });
      });
    },
    (e) => {
      console.error('다운로드 실패:', e);
    }
  );
};
    

이 예제에서는 Worker를 사용해 파일 다운로드를 백그라운드에서 처리하고 있어. 메인 스레드는 계속해서 다른 작업을 수행할 수 있고, 동시에 다운로드 진행 상황을 업데이트 받을 수 있지. 멋지지 않아?

2. 주기적인 데이터 동기화 🔄

앱이 서버와 주기적으로 데이터를 동기화해야 하는 경우를 생각해보자. 이런 작업도 백그라운드에서 처리하면 좋아.

🔍 코드 예시:


import { setInterval } from '@nativescript/core/timer';

function syncData() {
  return new Promise((resolve, reject) => {
    // 여기에 실제 동기화 로직을 구현
    setTimeout(() => {
      console.log('데이터 동기화 완료');
      resolve();
    }, 2000);
  });
}

// 15분마다 동기화 실행
setInterval(() => {
  syncData()
    .then(() => console.log('동기화 성공'))
    .catch(error => console.error('동기화 실패:', error));
}, 15 * 60 * 1000);
    

이 예제에서는 setInterval을 사용해 주기적으로 데이터를 동기화하고 있어. 실제 앱에서는 네트워크 상태나 배터리 레벨 등을 고려해서 동기화 주기를 조절하는 것이 좋아.

3. 이미지 처리 🖼️

사용자가 여러 장의 이미지를 업로드하고 각 이미지에 필터를 적용해야 하는 상황을 생각해보자. 이런 작업은 CPU를 많이 사용하기 때문에 백그라운드에서 처리하는 것이 좋아.

🔍 코드 예시:


// image-processor-worker.js
onmessage = (event) => {
  const { images } = event.data;
  
  const processedImages = images.map(image => {
    // 여기에 실제 이미지 처리 로직 구현
    return applyFilter(image);
  });
  
  postMessage({ processedImages });
};

function applyFilter(image) {
  // 필터 적용 로직
  return 'filtered_' + image;
}

// main-view-model.js
const worker = new Worker('./image-processor-worker');

const images = ['image1.jpg', 'image2.jpg', 'image3.jpg'];

worker.postMessage({ images });

worker.onmessage = (event) => {
  const { processedImages } = event.data;
  console.log('처리된 이미지:', processedImages);
};
    

이 예제에서는 Worker를 사용해 여러 이미지를 동시에 처리하고 있어. 이렇게 하면 메인 스레드가 차단되지 않아 앱의 UI가 계속 반응할 수 있지.

백그라운드 작업 사용 사례 파일 다운로드 데이터 동기화 이미지 처리 백그라운드 작업

이 그림은 우리가 방금 살펴본 세 가지 백그라운드 작업 사용 사례를 보여주고 있어. 각각의 작업이 독립적으로 실행되면서도, 모두 '백그라운드 작업'이라는 공통점을 가지고 있지. 이렇게 다양한 작업들을 백그라운드에서 처리함으로써 앱의 성능과 사용자 경험을 크게 향상시킬 수 있어!

💡 팁: 이런 백그라운드 작업들을 구현할 때는 항상 사용자 경험을 최우선으로 생각해야 해. 예를 들어, 긴 작업이 진행 중일 때는 진행 상황을 보여주는 프로그레스 바를 표시하거나, 작업이 완료되면 알림을 보내는 등의 방법으로 사용자와 소통하는 것이 좋아.

백그라운드 작업의 최적화 전략 🚀

백그라운드 작업을 효율적으로 사용하는 것도 중요하지만, 그것을 최적화하는 것 역시 매우 중요해. 여기 몇 가지 최적화 전략을 소개할게.

  1. 작업 우선순위 설정: 모든 백그라운드 작업이 동등하게 중요한 것은 아니야. 중요도와 긴급성에 따라 작업의 우선순위를 설정하고, 그에 따라 리소스를 할당해.
  2. 배치 처리: 여러 개의 작은 작업을 하나의 큰 작업으로 묶어서 처리하면 오버헤드를 줄일 수 있어.
  3. 캐싱 활용: 자주 사용되는 데이터는 캐시에 저장해두고 재사용하면 불필요한 작업을 줄일 수 있어.
  4. 네트워크 최적화: 네트워크 작업은 가능한 한 묶어서 처리하고, 필요한 데이터만 주고받도록 해.
  5. 리소스 관리: CPU, 메모리, 배터리 사용량을 지속적으로 모니터링하고 최적화해.

🔍 최적화 예시 코드:


// 배치 처리 예시
const tasks = [task1, task2, task3, task4, task5];

function processBatch(tasks, batchSize) {
  return new Promise((resolve, reject) => {
    const worker = new Worker('./batch-worker');
    
    worker.postMessage({ tasks, batchSize });
    
    worker.onmessage = (event) => {
      if (event.data.complete) {
        resolve(event.data.results);
      } else {
        console.log(`진행률: ${event.data.progress}%`);
      }
    };
    
    worker.onerror = reject;
  });
}

processBatch(tasks, 2)
  .then(results => console.log('모든 작업 완료:', results))
  .catch(error => console.error('작업 실패:', error));

// batch-worker.js
onmessage = (event) => {
  const { tasks, batchSize } = event.data;
  const results = [];
  
  for (let i = 0; i < tasks.length; i += batchSize) {
    const batch = tasks.slice(i, i + batchSize);
    const batchResults = processBatch(batch);
    results.push(...batchResults);
    
    postMessage({ progress: Math.round((i + batchSize) / tasks.length * 100) });
  }
  
  postMessage({ complete: true, results });
};

function processBatch(batch) {
  // 실제 배치 처리 로직
  return batch.map(task => task());
}
    

이 예시 코드에서는 여러 작업을 배치로 묶어 처리하고 있어. 이렇게 하면 각 작업을 개별적으로 처리하는 것보다 효율적일 수 있지. 또한, 진행 상황을 주기적으로 보고하고 있어 사용자에게 피드백을 줄 수 있어.

백그라운드 작업 최적화 전략 우선순위 배치 처리 캐싱 네트워크

이 그림은 우리가 방금 살펴본 최적화 전략들을 시각화한 거야. 각 전략이 서로 연결되어 있는 걸 볼 수 있지? 이건 이 전략들이 서로 상호작용하면서 전체적인 성능 향상에 기여한다는 걸 의미해. 예를 들어, 우선순위가 높은 작업을 배치로 처리하고, 그 결과를 캐시에 저장한 뒤, 네트워크를 통해 효율적으로 전송하는 식으로 말이야.

마무리: 백그라운드 작업의 미래 🔮

자, 이제 우리는 NativeScript에서 백그라운드 작업을 어떻게 처리하는지, 그리고 어떻게 최적화할 수 있는지 알아봤어. 하지만 기술의 발전은 계속되고 있고, 백그라운드 작업 처리 방식도 계속 진화하고 있어.

앞으로 우리가 주목해야 할 몇 가지 트렌드를 소개할게:

  • AI 기반 최적화: 인공지능이 사용자의 패턴을 학습해 가장 적절한 시점에 백그라운드 작업을 수행하도록 할 거야.
  • 엣지 컴퓨팅: 일부 백그라운드 작업을 클라우드가 아닌 사용자의 디바이스 근처에서 처리해 응답 속도를 높일 수 있어.
  • 5G 네트워크: 초고속, 저지연 네트워크의 등장으로 더 많은 작업을 실시간으로 처리할 수 있게 될 거야.
  • 웨어러블 디바이스와의 연동: 스마트워치 등 웨어러블 기기와 연동해 더 다양한 백그라운드 작업을 수행할 수 있을 거야.

💡 미래를 위한 팁: 항상 새로운 기술과 트렌드를 주시하고, 필요하다면 빠르게 적용해보는 것이 중요해. NativeScript 커뮤니티에 참여하거나, 관련 컨퍼런스에 참석하는 것도 좋은 방법이야. 그리고 재능넷(https://www.jaenung.net)같은 플랫폼을 통해 다른 개발자들과 지식을 공유하는 것도 잊지 마!

백그라운드 작업은 모바일 앱 개발에서 정말 중요한 부분이야. 잘 활용하면 앱의 성능을 크게 향상시킬 수 있고, 사용자 경험도 훨씬 좋아질 거야. 하지만 동시에 배터리 소모, 데이터 사용량 등 여러 가지를 고려해야 하는 복잡한 주제이기도 해.

우리가 오늘 배운 내용을 정리해보면:

  1. 백그라운드 작업의 기본 개념과 중요성
  2. NativeScript에서 백그라운드 작업을 처리하는 다양한 방법
  3. 실제 사용 사례와 구현 방법
  4. 백그라운드 작업 최적화 전략
  5. 앞으로의 트렌드와 발전 방향

이 모든 내용을 완벽하게 이해하고 적용하는 데는 시간이 걸릴 거야. 하지만 조금씩 실습해보고, 실제 프로젝트에 적용해보면서 경험을 쌓아가면 어느새 백그라운드 작업 처리의 달인이 되어 있을 거야!

마지막으로, 항상 기억해야 할 점은 사용자 경험이 가장 중요하다는 거야. 아무리 기술적으로 뛰어난 백그라운드 작업 처리도 결국 사용자에게 더 나은 경험을 제공하기 위한 것이니까.

자, 이제 여러분의 NativeScript 앱에 멋진 백그라운드 작업을 추가해볼 시간이야. 화이팅! 🚀

관련 키워드

  • NativeScript
  • 백그라운드 작업
  • Worker
  • Promise
  • async/await
  • 성능 최적화
  • 배터리 관리
  • 메모리 관리
  • 사용자 경험
  • 모바일 앱 개발

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

자유 결제 서비스

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

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

지적 재산권 보호 고지

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

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

© 2024 재능넷 | All rights reserved.

댓글 작성
0/2000

댓글 0개

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

안녕하세요 안드로이드 개발 7년차에 접어든 프로그래머입니다. 간단한 과제 정도는 1~2일 안에 끝낼 수 있구요 개발의 난이도나 프로젝...

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

안녕하세요.2011년 개업하였고, 2013년 벤처 인증 받은 어플 개발 전문 업체입니다.50만 다운로드가 넘는 앱 2개를 직접 개발/운영 중이며,누구보...

📚 생성된 총 지식 9,798 개

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