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

🌲 지식인의 숲 🌲

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

PCB ARTWORK (아트웍) / 회로설계 (LED조명 및 자동차 및 SMPS/ POWER)  안녕하세요. 개발자 입니다.PCB ARTWORK 을 기반으로 PCB ...

안녕하세요, 6년차 머신러닝, 딥러닝 엔지니어 / 리서처 / 데이터 사이언티스트 입니다. 딥러닝 코딩을 통한 기술 개발부터, 오픈소스 ...

안녕하세요 . 고객님들이 믿고 사용할 수 있는 프로그램을 개발하기 위해 항상 노력하고있습니다.각 종 솔루션에 대한 상담이 가능하며 , &nb...

반복적인 업무/계산은 프로그램에 맞기고 좀 더 중요한 일/휴식에 집중하세요- :)칼퇴를 위한 업무 효율 개선을 도와드립니다 !!! "아 이건 ...

Elixir 매크로: 메타프로그래밍의 힘

2024-11-24 19:19:32

재능넷
조회수 284 댓글수 0

Elixir 매크로: 메타프로그래밍의 힘 🚀

 

 

안녕, 친구들! 오늘은 정말 흥미진진한 주제로 찾아왔어. 바로 Elixir의 매크로와 메타프로그래밍에 대해 함께 알아볼 거야. 😎 이 주제는 프로그램 개발 카테고리 중에서도 '기타 프로그램 개발'에 속하는 내용이지만, 너무 어렵게 생각하지 마! 우리 함께 재미있게 탐험해보자고!

혹시 재능넷이라는 사이트 들어봤어? 거기서는 다양한 재능을 거래할 수 있대. 우리가 오늘 배울 Elixir 매크로 skills도 언젠가 그런 플랫폼에서 공유할 수 있을 정도로 멋진 재능이 될 수 있을 거야!

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

Elixir란 뭐야? 🤔

먼저 Elixir에 대해 간단히 알아보자. Elixir는 함수형 프로그래밍 언어야. 2011년에 José Valim이라는 브라질 개발자가 만들었어. Elixir는 Erlang VM 위에서 동작하는데, 이게 무슨 말이냐면... 음, 상상해봐. 네가 아주 튼튼하고 안정적인 기계(Erlang VM) 위에서 춤을 추는 거야(Elixir 코드 실행). 멋지지 않아? 😄

Elixir의 특징:

  • 함수형 프로그래밍
  • 동시성 지원
  • fault-tolerance (오류에 강함)
  • 메타프로그래밍 기능

이 중에서 우리가 오늘 집중적으로 볼 건 바로 메타프로그래밍이야. 특히 Elixir의 매크로에 대해 깊이 파고들 거야. 근데 잠깐, 메타프로그래밍이 뭐냐고? 그건 조금 있다 자세히 설명해줄게. 기대해! 😉

Elixir 로고와 특징 Elixir 함수형 동시성 오류에 강함 메타프로그래밍

어때? Elixir가 뭔지 조금은 감이 잡히지? 이제 우리의 주인공인 매크로로 넘어가볼까? 🎭

매크로란 뭘까? 🎭

자, 이제 매크로에 대해 알아볼 차례야. 매크로라고 하면 뭐가 떠올라? 혹시 엑셀에서 사용하는 그 매크로? 음, 비슷하면서도 다르지. 프로그래밍에서의 매크로는 좀 더 강력하고 유연해. 😎

매크로(Macro)는 코드를 작성하는 코드야. 음... 좀 복잡해 보이지? 쉽게 설명해줄게.

상상해봐. 넌 지금 레고 블록으로 집을 만들고 있어. 그런데 매번 같은 모양의 창문을 만드는 게 귀찮아. 그래서 넌 "창문 만들기" 기계를 발명했어. 이 기계에 레고 블록을 넣으면 자동으로 창문 모양으로 조립해주는 거지. 이게 바로 매크로야! 🏠

프로그래밍에서 매크로는 코드의 일부를 자동으로 생성하거나 변형시키는 역할을 해. 반복적인 작업을 줄이고, 코드를 더 간결하고 읽기 쉽게 만들어주는 거지.

매크로 개념 설명 창문 창문 매크로 기계

Elixir에서 매크로는 특히 강력해. 왜냐하면 Elixir 코드 자체가 Abstract Syntax Tree(AST)라는 형태로 표현되기 때문이야. AST? 뭔가 어려워 보이지? 걱정 마, 이것도 곧 설명해줄게! 😉

매크로를 사용하면 우리는 코드가 컴파일되기 전에 그 코드를 조작할 수 있어. 마치 요리사가 음식을 만들기 전에 레시피를 수정하는 것처럼 말이야. 이런 능력이 바로 메타프로그래밍의 핵심이야.

매크로의 장점:

  • 코드 중복 줄이기
  • 도메인 특화 언어(DSL) 만들기
  • 코드 최적화
  • 언어의 문법 확장

어때? 매크로가 뭔지 조금은 감이 잡히니? 이제 우리는 이 강력한 도구를 어떻게 사용하는지 더 자세히 알아볼 거야. 준비됐어? 그럼 계속 가보자! 🚀

Abstract Syntax Tree (AST) 이해하기 🌳

자, 이제 AST에 대해 알아볼 차례야. AST가 뭐냐고? 음... 상상해봐. 네가 아주 복잡한 문장을 읽고 있어. 그 문장을 이해하기 위해 너는 그 문장의 구조를 분석하지? 주어는 뭐고, 목적어는 뭐고, 서술어는 뭔지... 이렇게 문장을 구조적으로 분석한 결과를 트리 형태로 그린 게 바로 AST야! 😃

AST는 프로그램의 구조를 트리 형태로 표현한 것이야. 각 노드는 프로그램의 구성 요소를 나타내고, 노드 간의 관계는 프로그램의 구조를 보여줘.

Elixir에서는 모든 코드가 AST로 표현돼. 이게 바로 Elixir 매크로가 그렇게 강력한 이유야. 우리는 AST를 직접 조작할 수 있거든!

AST 구조 예시 + 2 * 3 4 2 + (3 * 4) 의 AST

위의 그림을 보면, 간단한 수식 2 + (3 * 4)가 어떻게 AST로 표현되는지 볼 수 있어. 루트 노드는 '+' 연산자고, 왼쪽 자식은 '2', 오른쪽 자식은 '*' 연산자야. '*' 연산자는 다시 '3'과 '4'를 자식으로 가지고 있지.

Elixir에서는 이런 AST를 직접 다룰 수 있어. 예를 들어, 위의 수식을 Elixir 코드로 표현하면 이렇게 돼:

{:+, [context: Elixir, import: Kernel], [2, {:*, [context: Elixir, import: Kernel], [3, 4]}]}

어때? 좀 복잡해 보이지? 하지만 걱정 마. 이건 그냥 Elixir가 내부적으로 코드를 어떻게 표현하는지 보여주는 거야. 우리가 매크로를 사용할 때, 이런 구조를 이해하고 조작할 수 있으면 정말 강력한 일을 할 수 있어! 🦸‍♂️

AST의 중요성:

  • 코드의 구조를 명확하게 표현
  • 코드 분석과 변환을 용이하게 함
  • 매크로를 통한 메타프로그래밍의 기반
  • 컴파일러와 인터프리터의 핵심 요소

AST를 이해하는 것은 Elixir 매크로를 마스터하는 데 정말 중요해. 그래서 우리는 이걸 조금 더 자세히 살펴볼 거야. 준비됐어? 그럼 계속 가보자! 🚀

Elixir에서 AST 다루기 🛠️

자, 이제 우리는 AST가 뭔지 알았으니까, Elixir에서 이걸 어떻게 다루는지 알아볼 차례야. Elixir는 AST를 다루는 데 정말 편리한 도구들을 제공해. 그 중에서도 quoteunquote라는 특별한 매크로를 주목해볼 거야. 😎

quote 매크로

quote는 Elixir 코드를 AST로 변환해주는 매크로야. 마치 우리가 말한 문장을 녹음기로 녹음하는 것처럼, quote는 코드를 "그대로" 가져와서 AST로 만들어줘.


iex> quoted = quote do: 2 + 3
{:+, [context: Elixir, import: Kernel], [2, 3]}
  

여기서 2 + 3이라는 간단한 수식이 어떻게 AST로 표현되는지 볼 수 있어. :+는 덧셈 연산자를 나타내고, [2, 3]은 피연산자들이야.

unquote 매크로

unquotequote의 반대라고 생각하면 돼. AST 안에서 특정 부분을 평가하고 그 결과를 AST에 삽입할 때 사용해. 음... 좀 복잡해 보이지? 예를 들어 설명해줄게.


iex> x = 10
iex> quoted = quote do: unquote(x) + 5
{:+, [context: Elixir, import: Kernel], [10, 5]}
  

여기서 unquote(x)x의 값인 10을 AST에 직접 삽입해. 그래서 결과적으로 10 + 5의 AST가 만들어지는 거야.

quote와 unquote의 관계:

  • quote: 코드를 AST로 변환 (코드 → AST)
  • unquote: AST 안에서 값을 평가하고 삽입 (값 → AST의 일부)

이 두 가지 도구를 잘 활용하면, 우리는 코드를 동적으로 생성하고 수정할 수 있어. 이게 바로 메타프로그래밍의 핵심이야! 🎭

quote와 unquote의 관계 코드 AST quote unquote

이제 우리는 AST를 만들고 조작하는 기본적인 도구들을 알게 됐어. 이걸 바탕으로 실제 매크로를 만들어볼 준비가 됐지? 다음 섹션에서는 실제로 매크로를 정의하고 사용하는 방법을 알아볼 거야. 기대되지 않아? 😄

그리고 잊지 마, 이런 강력한 기술을 배우고 나면 재능넷 같은 플랫폼에서 네 실력을 뽐낼 수 있을 거야. 메타프로그래밍 전문가로 변신한 너의 모습을 상상해봐! 🦸‍♀️

자, 이제 실전으로 들어가볼까? 매크로 정의하기로 고고! 🚀

매크로 정의하기 🎭

드디어 우리가 기다리던 순간이 왔어! 이제 직접 매크로를 만들어볼 거야. 매크로를 정의하는 건 생각보다 어렵지 않아. Elixir에서는 defmacro라는 특별한 키워드를 사용해서 매크로를 정의해. 😎

기본 매크로 구조


defmodule MyMacros do
  defmacro my_macro(arg) do
    quote do
      # 여기에 생성하고 싶은 코드를 작성해
    end
  end
end
  

이게 바로 매크로의 기본 구조야. defmodule 안에 defmacro를 사용해서 매크로를 정의하고, 그 안에 quote를 사용해서 생성하고 싶은 코드를 작성하는 거지.

간단한 매크로 예제

자, 이제 실제로 간단한 매크로를 만들어볼까? 우리가 입력한 숫자를 두 배로 만드는 매크로를 만들어보자!


defmodule MyMacros do
  defmacro double(x) do
    quote do
      unquote(x) * 2
    end
  end
end
  

이 매크로는 어떻게 동작할까? 사용해보면 이렇게 돼:


iex> require MyMacros
iex> MyMacros.double(5)
10
  

우와! 우리가 만든 매크로가 실제로 동작하는 걸 볼 수 있어. 🎉

매크로 사용 시 주의사항:

  • 매크로를 사용하기 전에 require로 모듈을 불러와야 해
  • 매크로는 컴파일 시간에 동작해, 런타임이 아니야!
  • 너무 복잡한 매크로는 코드를 이해하기 어렵게 만들 수 있어

조금 더 복잡한 매크로

이번에는 조금 더 복잡한 매크로를 만들어볼까? 입력받은 숫자만큼 반복해서 어떤 동작을 수행하는 매크로를 만들어보자.


defmodule MyMacros do
  defmacro repeat(times, do: block) do
    quote do
      for _ <- 1..unquote(times) do
        unquote(block)
      end
    end
  end
end
  

이 매크로는 이렇게 사용할 수 있어:


iex> require MyMacros
iex> MyMacros.repeat 3 do
...>   IO.puts "Hello, Elixir!"
...> end
Hello, Elixir!
Hello, Elixir!
Hello, Elixir!
:ok
  

어 어때? 정말 멋지지 않아? 우리가 만든 매크로로 코드를 더 간결하고 표현력 있게 만들 수 있어! 😃

매크로의 동작 과정 매크로 정의 매크로 호출 코드 생성 컴파일 타임

매크로의 장단점

매크로는 정말 강력한 도구지만, 모든 도구가 그렇듯 장단점이 있어. 한번 살펴볼까?

장점 👍

  • 코드 재사용성 향상
  • 도메인 특화 언어(DSL) 생성 가능
  • 반복적인 코드 줄이기
  • 컴파일 시간 최적화

단점 👎

  • 과도한 사용 시 코드 이해도 저하
  • 디버깅이 어려울 수 있음
  • 잘못 사용하면 성능 저하 가능
  • 학습 곡선이 가파름

매크로를 사용할 때는 이런 장단점을 잘 고려해야 해. 적절히 사용하면 정말 강력한 도구가 되지만, 과도하게 사용하면 오히려 문제가 될 수 있어.

실전 예제: 로깅 매크로

자, 이제 실제로 유용하게 쓸 수 있는 매크로를 만들어볼까? 로깅을 위한 매크로를 만들어보자!


defmodule Logger do
  defmacro log(level, message) do
    quote do
      IO.puts "[#{unquote(level)}] #{unquote(message)} (#{__ENV__.file}:#{__ENV__.line})"
    end
  end
end
  

이 매크로는 로그 레벨과 메시지를 받아서, 파일 이름과 라인 번호까지 포함한 로그 메시지를 출력해. 사용법은 이렇게 돼:


defmodule MyApp do
  require Logger

  def some_function do
    Logger.log(:info, "This is an info message")
    Logger.log(:error, "Oops, something went wrong!")
  end
end

MyApp.some_function()
# 출력:
# [info] This is an info message (lib/my_app.ex:5)
# [error] Oops, something went wrong! (lib/my_app.ex:6)
  

어때? 이렇게 매크로를 사용하면 반복적인 코드를 줄이고, 더 읽기 쉬운 코드를 만들 수 있어. 😊

매크로 사용 팁:

  • 꼭 필요한 경우에만 사용하세요.
  • 가능한 한 간단하게 유지하세요.
  • 문서화를 잘 해두세요. 다른 개발자들이 이해하기 쉽게!
  • 테스트 코드를 꼭 작성하세요. 매크로도 테스트가 필요해요!

자, 이제 우리는 Elixir 매크로의 기본을 배웠어. 이걸 바탕으로 너만의 강력한 도구를 만들 수 있을 거야. 매크로를 마스터하면, 네 코드는 더 간결해지고, 더 표현력 있어질 거야. 그리고 이런 실력은 재능넷 같은 플랫폼에서 큰 가치를 발휘할 수 있을 거야. 🌟

다음 섹션에서는 좀 더 고급 기술들을 살펴볼 거야. 준비됐니? 계속 가보자! 🚀

고급 매크로 테크닉 🎓

자, 이제 우리는 매크로의 기본을 마스터했어. 하지만 Elixir의 매크로는 여기서 끝이 아니야. 더 깊이 들어가 보자! 😎

1. 위생적인 매크로 (Hygienic Macros)

위생적인 매크로란 뭘까? 간단히 말해서, 매크로 내부에서 사용된 변수가 외부 환경과 충돌하지 않도록 하는 기술이야. Elixir는 기본적으로 위생적인 매크로를 지원해.


defmodule HygienicMacro do
  defmacro my_macro(arg) do
    quote do
      var = 42
      unquote(arg) + var
    end
  end
end

defmodule TestModule do
  require HygienicMacro
  
  def test do
    var = 10
    HygienicMacro.my_macro(5)  # 결과는 47, 매크로 내부의 var와 외부의 var가 충돌하지 않음
  end
end
  

2. 바인드 변수 (Bind Variables)

때로는 매크로 내부에서 생성된 변수를 외부에서 사용하고 싶을 때가 있어. 이럴 때 바인드 변수를 사용할 수 있어.


defmodule BindMacro do
  defmacro bind_macro(value) do
    quote bind_quoted: [v: value] do
      result = v * 2
    end
  end
end

defmodule TestModule do
  require BindMacro
  
  def test do
    BindMacro.bind_macro(21)
    IO.puts result  # 42 출력
  end
end
  

3. 매크로 확장 (Macro Expansion)

매크로가 어떻게 확장되는지 보고 싶을 때가 있지? Elixir는 이를 위한 도구를 제공해.


iex> require MyMacros
iex> quoted = quote do: MyMacros.double(2 + 3)
iex> Macro.expand_once(quoted, __ENV__)
{:*, [context: MyMacros, import: Kernel], [{:+, [context: Elixir, import: Kernel], [2, 3]}, 2]}
  

Macro.expand_once/2는 매크로를 한 번만 확장해. 전체 확장을 보고 싶다면 Macro.expand/2를 사용하면 돼.

4. AST 조작

때로는 AST를 직접 조작해야 할 때가 있어. Elixir는 이를 위한 다양한 함수를 제공해.


defmodule ASTManipulation do
  def add_logging(ast) do
    Macro.postwalk(ast, fn
      {name, meta, args} = node when is_atom(name) ->
        quote do
          result = unquote(node)
          IO.puts "Called #{unquote(name)} with result: #{inspect result}"
          result
        end
      node -> node
    end)
  end
end

# 사용 예:
quoted = quote do: 1 + 2
logged_ast = ASTManipulation.add_logging(quoted)
Code.eval_quoted(logged_ast)
# 출력: Called + with result: 3
  
고급 매크로 기술 위생적인 매크로 바인드 변수 AST 조작 고급 매크로 기술

이런 고급 기술들을 마스터하면, 너는 진정한 Elixir 매크로 마법사가 될 수 있어! 🧙‍♂️ 하지만 기억해, 강력한 힘에는 큰 책임이 따르지. 매크로를 현명하게 사용해야 해.

고급 매크로 사용 시 주의사항:

  • 복잡성을 최소화하세요. 너무 복잡한 매크로는 유지보수를 어렵게 만들어요.
  • 성능에 주의하세요. 매크로는 컴파일 시간에 실행되지만, 과도한 사용은 컴파일 시간을 늘릴 수 있어요.
  • 항상 테스트를 작성하세요. 매크로는 버그를 찾기 어려울 수 있으므로 철저한 테스트가 필요해요.
  • 문서화를 잘 하세요. 다른 개발자들이 당신의 매크로를 이해하고 사용할 수 있도록 해주세요.

자, 이제 우리는 Elixir 매크로의 고급 기술까지 살펴봤어. 이 지식을 바탕으로 너만의 강력한 도구를 만들 수 있을 거야. 매크로를 마스터하면, 네 코드는 더 강력해지고, 더 유연해질 거야. 그리고 이런 실력은 재능넷 같은 플랫폼에서 정말 빛을 발할 수 있을 거야. 🌟

Elixir 매크로의 세계는 정말 깊고 넓어. 우리가 여기서 다룬 내용은 빙산의 일각에 불과해. 계속해서 공부하고, 실험하고, 새로운 것을 만들어보면서 네 실력을 키워나가길 바라! 🚀

자, 이제 우리의 Elixir 매크로 여행이 끝나가고 있어. 마지막으로 정리와 결론을 내보자. 준비됐니? 가보자! 😄

결론: Elixir 매크로의 힘 💪

우와, 정말 긴 여정이었어! 우리는 Elixir 매크로의 세계를 깊이 탐험했지. 이제 모든 것을 정리해볼 시간이야. 😊

우리가 배운 것들

  • Elixir와 매크로의 기본 개념
  • AST(Abstract Syntax Tree)의 이해와 조작
  • quote와 unquote의 사용법
  • 간단한 매크로 만들기
  • 고급 매크로 테크닉 (위생적인 매크로, 바인드 변수 등)
  • 매크로 사용 시 주의사항

매크로는 Elixir의 가장 강력한 기능 중 하나야. 이를 통해 우리는 언어 자체를 확장하고, 반복적인 코드를 줄이며, 도메인 특화 언어(DSL)를 만들 수 있지. 하지만 이 힘은 큰 책임감도 함께 가져와. 🦸‍♂️

매크로 사용의 황금률:

  1. 필요할 때만 사용하세요.
  2. 가능한 한 간단하게 유지하세요.
  3. 항상 문서화와 테스트를 잊지 마세요.
  4. 성능과 가독성의 균형을 유지하세요.

매크로를 마스터하는 것은 시간이 걸리는 일이야. 하지만 그만큼 보람차고 강력한 도구를 얻게 될 거야. 네가 이 지식을 활용해서 멋진 프로젝트를 만들고, 어쩌면 재능넷 같은 플랫폼에서 다른 개발자들을 도울 수 있게 될 거라고 믿어! 🌟

Elixir 매크로 마스터의 여정 시작 학습 마스터 Elixir 매크로 마스터의 여정

자, 이제 우리의 Elixir 매크로 여행이 끝났어. 하지만 이건 끝이 아니라 새로운 시작이야. 이 지식을 바탕으로 계속해서 성장하고, 새로운 것을 만들어나가길 바라. 언제나 호기심을 가지고, 끊임없이 학습하는 자세를 잃지 마! 🚀

그리고 기억해, 프로그래밍은 단순히 코드를 작성하는 것이 아니야. 그것은 문제를 해결하고, 세상을 조금씩 더 나은 곳으로 만드는 거야. 네가 배운 이 강력한 도구로 어떤 멋진 일을 할 수 있을지 정말 기대돼! 👏

마지막으로, 이 여정을 함께 해줘서 고마워. 네가 Elixir 매크로의 세계에서 즐거운 시간을 보냈기를 바라. 앞으로도 계속해서 성장하고, 새로운 것을 배우며, 멋진 개발자가 되길 응원할게. 화이팅! 💪😄

관련 키워드

  • Elixir
  • 매크로
  • 메타프로그래밍
  • AST
  • quote
  • unquote
  • 위생적인 매크로
  • 바인드 변수
  • 코드 생성
  • 도메인 특화 언어

지적 재산권 보호

지적 재산권 보호 고지

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

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

© 2024 재능넷 | All rights reserved.

댓글 작성
0/2000

댓글 0개

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

    단순 반복적인 업무는 컴퓨터에게 맡기고 시간과 비용을 절약하세요!​ 1. 소개  ​업무자동화를 전문적으로 개발/유...

  Matlab 이나 C 형태의 알고리즘을 분석하여 회로로 설계하여 드립니다. verilog, VHDL 모두 가능합니다. 회로설계후 simula...

현재 한국디지털미디어고등학교에 재학중인 학생입니다. 아드이노는 중 1 처음 접하였으며  횟수로 5년동안 아두이노를 해오...

c언어c++,   erwin을 이용한 데이터베이스 설계java,    jsp,     javascript,      c#  ...

📚 생성된 총 지식 10,328 개

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