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

🌲 지식인의 숲 🌲

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

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

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

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

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

옵저버 패턴과 타입스크립트 활용

2024-10-11 20:35:45

재능넷
조회수 479 댓글수 0

옵저버 패턴과 타입스크립트 활용 🕵️‍♂️🚀

 

 

안녕, 친구들! 오늘은 정말 흥미진진한 주제로 찾아왔어. 바로 옵저버 패턴타입스크립트를 활용하는 방법에 대해 얘기해볼 거야. 이 두 가지를 합치면 어떤 마법이 일어날까? 😉 우리 함께 알아보자구!

먼저, 옵저버 패턴이 뭔지 간단히 설명할게. 이 패턴은 마치 우리가 유튜브 채널을 구독하는 것과 비슷해. 새 영상이 올라오면 알림을 받잖아? 그게 바로 옵저버 패턴의 핵심이야. 프로그래밍에서도 이런 식으로 작동한다고 생각하면 돼.

그리고 타입스크립트는 뭐냐고? 음... 자바스크립트의 슈퍼히어로 버전이라고 생각하면 될 것 같아. 더 강력하고, 더 안전하고, 더 똑똑해! 👨‍🚀

이 두 가지를 합치면 어떤 일이 벌어질까? 우리는 더 안전하고 효율적인 코드를 작성할 수 있게 돼. 마치 재능넷에서 다양한 재능을 찾아 조합하는 것처럼, 우리도 이 두 가지 요소를 조합해서 멋진 프로그램을 만들 수 있어!

자, 이제 본격적으로 깊이 들어가 볼까? 준비됐어? 그럼 출발~! 🚀

1. 옵저버 패턴의 기초 🧱

옵저버 패턴, 들어보기만 해도 뭔가 복잡해 보이지 않아? 하지만 걱정 마! 생각보다 훨씬 간단하고 재미있어. 이 패턴은 객체들 사이의 일대다 관계를 정의하는 디자인 패턴이야. 뭔 소리냐고? 쉽게 설명해줄게!

🎭 옵저버 패턴의 주요 등장인물:

  • Subject (주체): 관찰 당하는 대상
  • Observer (관찰자): 변화를 지켜보는 객체들

자, 이제 실생활의 예를 들어볼게. 넌 유명한 유튜버야(Subject). 그리고 네 구독자들은 관찰자(Observer)들이지. 네가 새 영상을 올리면(상태 변화), 구독자들은 알림을 받아. 이게 바로 옵저버 패턴의 기본 개념이야!

옵저버 패턴 다이어그램 Subject (유튜버) Observer 1 Observer 2 Observer 3

이 다이어그램을 보면 옵저버 패턴의 구조가 한눈에 들어오지? Subject(유튜버)가 중심에 있고, 여러 Observer(구독자)들이 연결되어 있어. 이런 구조 덕분에 Subject의 상태가 변할 때마다 모든 Observer들에게 자동으로 알림이 가는 거야.

옵저버 패턴의 장점은 뭘까? 바로 느슨한 결합(Loose Coupling)이야. 이게 무슨 뜻이냐면, Subject와 Observer들이 서로 독립적으로 존재할 수 있다는 거지. 유튜버는 구독자의 존재를 알 필요가 없고, 구독자도 다른 구독자의 존재를 몰라도 돼. 그저 자신의 역할만 잘 수행하면 되는 거야.

이런 구조는 프로그래밍에서 정말 유용해. 왜냐하면:

  • 코드의 재사용성이 높아져 🔄
  • 시스템의 확장성이 좋아져 🌱
  • 객체 간의 의존성을 줄일 수 있어 🔗

재능넷에서도 이런 패턴을 활용할 수 있을 거야. 예를 들어, 새로운 재능이 등록될 때마다 관심 있는 사용자들에게 알림을 보내는 시스템을 만들 수 있겠지? 이렇게 하면 사용자들은 자신이 관심 있는 분야의 새로운 재능을 놓치지 않고 확인할 수 있을 거야.

💡 재능넷 활용 예시:

1. 재능 제공자(Subject): 새로운 재능을 등록
2. 관심 사용자들(Observer): 자동으로 알림 수신
3. 결과: 사용자 경험 향상 & 재능 거래 활성화

자, 이제 옵저버 패턴의 기본 개념을 알게 됐어. 근데 이걸 어떻게 코드로 구현할 수 있을까? 그리고 타입스크립트를 사용하면 어떤 장점이 있을까? 다음 섹션에서 자세히 알아보자구! 🕵️‍♂️

2. 타입스크립트로 옵저버 패턴 구현하기 💻

자, 이제 우리가 배운 옵저버 패턴을 실제로 코드로 구현해볼 거야. 그것도 타입스크립트를 사용해서! 😎 타입스크립트를 사용하면 코드의 안정성과 가독성이 높아지기 때문에, 복잡한 패턴을 구현할 때 특히 유용해.

먼저, 우리의 Subject와 Observer를 위한 인터페이스를 정의해볼게.


interface Subject {
  attach(observer: Observer): void;
  detach(observer: Observer): void;
  notify(): void;
}

interface Observer {
  update(subject: Subject): void;
}

여기서 Subject 인터페이스는 세 가지 메서드를 가지고 있어:

  • attach: 새로운 Observer를 등록
  • detach: 등록된 Observer를 제거
  • notify: 모든 Observer에게 변경 사항을 알림

그리고 Observer 인터페이스는 단 하나의 메서드만 가지고 있지:

  • update: Subject로부터 변경 사항을 받아 처리

이제 이 인터페이스를 구현하는 클래스를 만들어볼게. 우리의 예시를 계속 이어가서, 유튜버(Subject)와 구독자(Observer)를 만들어볼까?


class YouTuber implements Subject {
  private observers: Observer[] = [];
  private latestVideo: string = '';

  attach(observer: Observer): void {
    const isExist = this.observers.includes(observer);
    if (isExist) {
      return console.log('이미 구독 중인 사용자입니다.');
    }
    this.observers.push(observer);
    console.log('새로운 구독자가 추가되었습니다.');
  }

  detach(observer: Observer): void {
    const observerIndex = this.observers.indexOf(observer);
    if (observerIndex === -1) {
      return console.log('존재하지 않는 구독자입니다.');
    }
    this.observers.splice(observerIndex, 1);
    console.log('구독자가 제거되었습니다.');
  }

  notify(): void {
    console.log('새 영상 알림을 보냅니다!');
    for (const observer of this.observers) {
      observer.update(this);
    }
  }

  uploadVideo(title: string): void {
    this.latestVideo = title;
    console.log(`새 영상 "${title}"이(가) 업로드되었습니다.`);
    this.notify();
  }

  getLatestVideo(): string {
    return this.latestVideo;
  }
}

class Subscriber implements Observer {
  private name: string;

  constructor(name: string) {
    this.name = name;
  }

  update(subject: Subject): void {
    if (subject instanceof YouTuber) {
      console.log(`${this.name}: 와! "${subject.getLatestVideo()}" 영상이 업로드됐네요!`);
    }
  }
}

우와, 코드가 좀 길어 보이지? 하지만 걱정 마! 하나씩 뜯어보면 그렇게 어렵지 않아. 😉

YouTuber 클래스를 보면:

  • observers 배열에 구독자들을 저장해.
  • latestVideo는 가장 최근에 업로드된 영상의 제목을 저장해.
  • attach, detach 메서드로 구독자를 추가하거나 제거할 수 있어.
  • notify 메서드는 모든 구독자에게 새 영상 알림을 보내.
  • uploadVideo 메서드로 새 영상을 업로드하고, 구독자들에게 알림을 보내.

그리고 Subscriber 클래스를 보면:

  • 각 구독자는 name을 가지고 있어.
  • update 메서드에서는 새 영상이 업로드되면 그 소식을 받아 처리해.

이제 이 클래스들을 사용해서 실제로 동작하는 코드를 만들어볼까?


// 유튜버 생성
const pewdiepie = new YouTuber();

// 구독자들 생성
const fan1 = new Subscriber('팬1');
const fan2 = new Subscriber('팬2');
const fan3 = new Subscriber('팬3');

// 구독자들을 유튜버에 연결
pewdiepie.attach(fan1);
pewdiepie.attach(fan2);
pewdiepie.attach(fan3);

// 새 영상 업로드!
pewdiepie.uploadVideo('100만 구독자 특집 영상');

// 한 명의 구독자가 구독 취소
pewdiepie.detach(fan2);

// 또 다른 새 영상 업로드
pewdiepie.uploadVideo('200만 구독자 감사 영상');

이 코드를 실행하면 어떤 일이 벌어질까? 상상해봐! 🌈

🎬 실행 결과:

새로운 구독자가 추가되었습니다.
새로운 구독자가 추가되었습니다.
새로운 구독자가 추가되었습니다.
새 영상 "100만 구독자 특집 영상"이(가) 업로드되었습니다.
새 영상 알림을 보냅니다!
팬1: 와! "100만 구독자 특집 영상" 영상이 업로드됐네요!
팬2: 와! "100만 구독자 특집 영상" 영상이 업로드됐네요!
팬3: 와! "100만 구독자 특집 영상" 영상이 업로드됐네요!
구독자가 제거되었습니다.
새 영상 "200만 구독자 감사 영상"이(가) 업로드되었습니다.
새 영상 알림을 보냅니다!
팬1: 와! "200만 구독자 감사 영상" 영상이 업로드됐네요!
팬3: 와! "200만 구독자 감사 영상" 영상이 업로드됐네요!

보이지? 새 영상이 업로드될 때마다 구독자들이 자동으로 알림을 받고 있어. 그리고 구독을 취소한 '팬2'는 두 번째 영상에 대한 알림을 받지 않았어. 이게 바로 옵저버 패턴의 힘이야! 😎

이런 패턴은 재능넷 같은 플랫폼에서 정말 유용하게 쓰일 수 있어. 예를 들어, 특정 분야의 새로운 재능이 등록될 때마다 관심 있는 사용자들에게 알림을 보내는 기능을 구현할 수 있지. 이렇게 하면 사용자들은 자신이 원하는 재능을 더 쉽게 찾을 수 있고, 재능 제공자들은 더 많은 고객을 확보할 수 있을 거야.

재능넷에서의 옵저버 패턴 활용 재능넷 (Subject) 디자인 관심 사용자 프로그래밍 관심 사용자 마케팅 관심 사용자 새 재능 등록 알림 관심 분야별 맞춤 알림

이 다이어그램을 보면, 재능넷이 Subject 역할을 하고 다양한 관심사를 가진 사용자들이 Observer 역할을 하고 있어. 새로운 재능이 등록되면 재능넷은 관련된 분야에 관심 있는 사용자들에게만 선별적으로 알림을 보낼 수 있지. 이렇게 하면 사용자들은 자신에게 필요한 정보만 받을 수 있어서 더 효율적이고 만족도도 높아질 거야.

타입스크립트를 사용하면 이런 구조를 더 안전하고 명확하게 구현할 수 있어. 예를 들어, 각 재능 분야를 enum으로 정의하고, 사용자의 관심 분야를 타입으로 지정할 수 있지:


enum TalentCategory {
  Design,
  Programming,
  Marketing,
  Writing,
  Music
}

interface User extends Observer {
  interests: TalentCategory[];
}

class TalentNet implements Subject {
  private observers: User[] = [];
  // ... 나머지 구현
}

class RegisteredUser implements User {
  interests: TalentCategory[];
  
  constructor(public name: string, interests: TalentCategory[]) {
    this.interests = interests;
  }

  update(subject: Subject): void {
    if (subject instanceof TalentNet) {
      console.log(`${this.name}: 새로운 재능이 등록되었네요!`);
    }
  }
}

이렇게 하면 타입 안정성이 높아져서 실수로 잘못된 카테고리를 지정하거나 잘못된 타입의 객체를 사용하는 실수를 미리 방지할 수 있어. 또한 코드의 가독성도 좋아지고 자동 완성 기능도 더 잘 작동하게 되지.

옵저버 패턴을 이용하면 재능넷 같은 플랫폼에서 다음과 같은 기능들을 쉽게 구현할 수 있어:

  • 새로운 재능 등록 시 관심 사용자에게 알림
  • 특정 재능의 가격 변동 알림
  • 인기 있는 재능 추천
  • 재능 제공자의 새로운 포트폴리오 업데이트 알림
  • 시즌별 특별 이벤트 알림

이런 기능들은 사용자 경험을 크게 향상시키고, 플랫폼의 활성화에도 도움이 될 거야. 😊

자, 여기까지 타입스크립트로 옵저버 패턴을 구현하는 방법을 알아봤어. 어때, 생각보다 어렵지 않지? 이제 이 패턴을 활용해서 더 멋진 프로그램을 만들 수 있을 거야. 다음 섹션에서는 이 패턴의 장단점과 주의할 점들에 대해 더 자세히 알아보자! 🚀

3. 옵저버 패턴의 장단점과 주의점 🤔

자, 이제 우리는 옵저버 패턴이 뭔지, 그리고 어떻게 구현하는지 알게 됐어. 근데 모든 것에는 장단점이 있듯이, 옵저버 패턴도 예외는 아니야. 이 패턴을 사용할 때 어떤 점들을 고려해야 할지 한번 살펴볼까?

💡 옵저버 패턴의 장점:

  • 느슨한 결합: Subject와 Observer는 서로 독립적으로 존재할 수 있어.
  • 확장성: 새로운 Observer를 쉽게 추가할 수 있어.
  • 실시간 업데이트: 상태 변화를 즉시 모든 Observer에게 알릴 수 있어.
  • 개방-폐쇄 원칙: 기존 코드를 수정하지 않고도 새로운 구독자 클래스를 추가할 수 있어.

이런 장점들 덕분에 옵저버 패턴은 많은 상황에서 유용하게 사용돼. 특히 재능넷 같은 플랫폼에서는 실시간 업데이트와 확장성이 중요하니까, 이 패턴이 딱이지! 😎

하지만 모든 게 장점만 있는 건 아니야. 옵저버 패턴에도 몇 가지 주의해야 할 점들이 있어:

⚠️ 옵저버 패턴의 단점 및 주의점:

  • 메모리 누수: Observer 객체를 제대로 해제하지 않으면 메모리 누수가 발생할 수 있어.
  • 예상치 못한 업데이트: Observer가 예상치 못한 시점에 업데이트될 수 있어.
  • 성능 이슈: Observer가 많아지면 모든 Observer에게 알림을 보내는 데 시간이 오래 걸릴 수 있어.
  • 복잡성: 잘못 사용하면 코드가 복잡해질 수 있어.

이런 단점들을 어떻게 극복할 수 있을까? 몇 가지 팁을 줄게:

  1. 메모리 관리에 신경 쓰기: Observer를 더 이상 사용하지 않을 때는 반드시 Subject에서 제거해줘야 해. 타입스크립트를 사용하면 이런 부분을 좀 더 쉽게 관리할 수 있어.
  2. 업데이트 로직 최적화: 불필요한 업데이트를 줄이고, 필요한 경우에만 알림을 보내도록 해.
  3. 비동기 처리 활용: 많은 Observer에게 알림을 보낼 때는 비동기 처리를 활용해 성능을 개선할 수 있어.
  4. 책임 분리: Observer와 Subject의 역할을 명확히 분리해서 코드의 복잡성을 줄여.

자, 이제 이런 점들을 고려해서 재능넷에 옵저버 패턴을 적용해볼까? 🤓


class TalentNet {
  private observers: Map<talentcategory set>> = new Map();

  registerObserver(category: TalentCategory, user: User): void {
    if (!this.observers.has(category)) {
      this.observers.set(category, new Set());
    }
    this.observers.get(category)!.add(user);
  }

  removeObserver(category: TalentCategory, user: User): void {
    this.observers.get(category)?.delete(user);
  }

  notifyObservers(category: TalentCategory, talent: Talent): void {
    const observers = this.observers.get(category);
    if (observers) {
      observers.forEach(observer => {
        observer.update(talent);
      });
    }
  }

  addNewTalent(talent: Talent): void {
    console.log(`새로운 재능이 등록되었습니다: ${talent.name}`);
    this.notifyObservers(talent.category, talent);
  }
}

interface User {
  update(talent: Talent): void;
}

class RegisteredUser implements User {
  constructor(public name: string) {}

  update(talent: Talent): void {
    console.log(`${this.name}님, 새로운 ${TalentCategory[talent.category]} 재능이 등록되었습니다: ${talent.name}`);
  }
}

interface Talent {
  name: string;
  category: TalentCategory;
}

// 사용 예시
const talentNet = new TalentNet();

const user1 = new RegisteredUser("Alice");
const user2 = new RegisteredUser("Bob");
const user3 = new RegisteredUser("Charlie");

talentNet.registerObserver(TalentCategory.Programming, user1);
talentNet.registerObserver(TalentCategory.Design, user2);
talentNet.registerObserver(TalentCategory.Programming, user3);

const newTalent: Talent = { name: "웹 개발 마스터 클래스", category: TalentCategory.Programming };
talentNet.addNewTalent(newTalent);

// 사용이 끝난 후
talentNet.removeObserver(TalentCategory.Programming, user3);
</talentcategory>

이 코드에서 우리는 몇 가지 개선사항을 적용했어:

  • 카테고리별로 Observer를 관리해서 필요한 사용자에게만 알림을 보내도록 했어.
  • Set을 사용해서 중복 등록을 방지하고, 효율적인 Observer 관리가 가능해졌어.
  • removeObserver 메서드를 통해 더 이상 필요 없는 Observer를 쉽게 제거할 수 있어.

이렇게 하면 메모리 관리도 더 쉬워지고, 불필요한 업데이트도 줄일 수 있지. 게다가 코드의 구조도 더 명확해졌어!

💡 실제 적용 시 고려사항:

  • 대규모 시스템에서는 메시지 큐 시스템(예: RabbitMQ, Apache Kafka)을 사용하는 것도 좋은 방법이야.
  • 데이터베이스를 활용해 Observer 정보를 영구적으로 저장하고 관리할 수 있어.
  • 웹소켓을 이용하면 실시간으로 클라이언트에게 업데이트를 푸시할 수 있어.

자, 이제 우리는 옵저버 패턴의 장단점을 알고, 이를 효과적으로 사용하는 방법도 배웠어. 이 패턴을 잘 활용하면 재능넷 같은 플랫폼에서 사용자 경험을 크게 향상시킬 수 있을 거야. 예를 들어:

  • 사용자가 관심 있는 카테고리의 새로운 재능이 등록되면 실시간 알림을 보낼 수 있어.
  • 인기 있는 재능의 가격이 변동될 때 관심 있는 사용자에게 알려줄 수 있어.
  • 특정 재능 제공자의 새로운 서비스가 추가될 때 팔로워들에게 알림을 줄 수 있어.

이런 기능들은 사용자들의 참여를 높이고, 플랫폼의 활성화에 큰 도움이 될 거야. 😊

마지막으로, 옵저버 패턴을 사용할 때 항상 기억해야 할 점이 있어:

🌟 핵심 포인트:

  • 옵저버 패턴은 강력하지만, 과도한 사용은 피해야 해.
  • 항상 성능과 메모리 사용을 모니터링하고 최적화해야 해.
  • 사용자 프라이버시를 고려해서 알림 시스템을 설계해야 해.
  • 테스트 코드를 작성해서 옵저버 패턴이 예상대로 동작하는지 확인해야 해.

자, 이제 우리는 옵저버 패턴에 대해 정말 많이 알게 됐어! 이 패턴을 활용하면 재능넷 같은 플랫폼을 더욱 동적이고 반응성 높은 시스템으로 만들 수 있을 거야. 사용자들은 자신이 관심 있는 정보를 실시간으로 받아볼 수 있고, 재능 제공자들은 더 많은 고객과 연결될 수 있겠지?

이 패턴을 적용할 때는 항상 사용자 경험을 최우선으로 생각해야 해. 너무 많은 알림은 오히려 사용자를 피곤하게 만들 수 있으니, 적절한 균형을 찾는 게 중요해. 그리고 사용자가 쉽게 알림 설정을 관리할 수 있도록 하는 것도 잊지 마!

옵저버 패턴은 정말 강력한 도구야. 하지만 모든 도구가 그렇듯, 현명하게 사용해야 해. 상황에 맞게 적절히 사용하고, 필요하다면 다른 패턴이나 기술과 조합해서 사용하는 것도 좋은 방법이야.

자, 이제 너희들은 옵저버 패턴의 전문가가 됐어! 이 지식을 가지고 더 멋진 프로그램을 만들 수 있을 거야. 화이팅! 🚀🌟

관련 키워드

  • 옵저버 패턴
  • 타입스크립트
  • 디자인 패턴
  • 이벤트 기반 프로그래밍
  • 느슨한 결합
  • 실시간 업데이트
  • 메모리 관리
  • 성능 최적화
  • 사용자 경험
  • 확장성

지적 재산권 보호

지적 재산권 보호 고지

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

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

© 2024 재능넷 | All rights reserved.

댓글 작성
0/2000

댓글 0개

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

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

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

○ 2009년부터 개발을 시작하여 현재까지 다양한 언어와 기술을 활용해 왔습니다. 특히 2012년부터는 자바를 중심으로 JSP, 서블릿, 스프링, ...

📚 생성된 총 지식 10,694 개

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