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

🌲 지식인의 숲 🌲

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

30년간 직장 생활을 하고 정년 퇴직을 하였습니다.퇴직 후 재능넷 수행 내용은 쇼핑몰/학원/판매점 등 관리 프로그램 및 데이터 ...

안녕하세요!!!고객님이 상상하시는 작업물 그 이상을 작업해 드리려 노력합니다.저는 작업물을 완성하여 고객님에게 보내드리는 것으로 거래 완료...

AS규정기본적으로 A/S 는 평생 가능합니다. *. 구매자의 요청으로 수정 및 보완이 필요한 경우 일정 금액의 수고비를 상호 협의하에 요청 할수 있...

저렴하고 빠르고 추후 유지 관리 비용 등을 고려 하여 최대한 부담없는 프로그램을 만들어 드리겠습니다.프로그램 제작에 관련된 어떤한 문의도 받...

PowerMock: 정적 메소드 및 생성자 모킹

2024-11-20 09:37:26

재능넷
조회수 611 댓글수 0

PowerMock: 정적 메소드 및 생성자 모킹 마스터하기 🚀

 

 

안녕하세요, 자바 개발자 여러분! 오늘은 정말 흥미진진한 주제로 찾아왔어요. 바로 PowerMock을 사용한 정적 메소드와 생성자 모킹에 대해 깊이 파헤쳐볼 거예요. 이 주제, 어렵게 들리시나요? 걱정 마세요! 제가 쉽고 재미있게 설명해드릴게요. 마치 카톡으로 친구와 대화하듯이 말이죠. ㅋㅋㅋ

먼저, 여러분께 한 가지 질문을 드릴게요. 테스트 코드 작성할 때 가장 골치 아픈 부분이 뭐라고 생각하세요? 네, 맞아요! 바로 정적 메소드와 생성자를 다루는 부분이죠. 이런 요소들은 보통의 모킹 프레임워크로는 처리하기가 쉽지 않아요. 그래서 우리의 영웅 PowerMock이 등장하는 거예요! 👏👏👏

💡 Tip: PowerMock은 EasyMock이나 Mockito와 같은 다른 모킹 프레임워크와 함께 사용할 수 있어요. 이런 조합은 마치 재능넷에서 다양한 재능을 조합해 더 큰 가치를 만들어내는 것과 비슷하죠!

자, 이제 본격적으로 PowerMock의 세계로 들어가볼까요? 준비되셨나요? 그럼 고고씽~! 🏃‍♂️💨

PowerMock이 뭐길래? 🤔

PowerMock은 그냥 평범한 모킹 라이브러리가 아니에요. 이 녀석은 진짜 슈퍼 히어로급이에요! 다른 모킹 프레임워크들이 못하는 일을 척척 해내거든요. 특히 정적 메소드, private 메소드, 생성자 같은 녀석들을 모킹할 수 있어요. 이런 게 왜 중요하냐고요? 음... 실제 프로젝트에서 이런 요소들을 다루는 일이 생각보다 많거든요!

예를 들어볼까요? 여러분이 레거시 코드를 유지보수하고 있다고 해봐요. 그런데 그 코드에 static 메소드가 잔뜩 있어요. 이걸 어떻게 테스트하실 건가요? 😱 바로 이럴 때 PowerMock이 빛을 발하는 거죠!

⚠️ 주의: PowerMock은 강력하지만, 남용하면 안 돼요. 테스트하기 어려운 코드를 그대로 두고 PowerMock으로 때우는 건 좋은 방법이 아니에요. 가능하면 코드를 리팩토링해서 테스트하기 쉬운 구조로 만드는 게 best죠!

자, 이제 PowerMock의 정체를 조금은 아셨나요? 그럼 이제부터 본격적으로 PowerMock을 사용해서 정적 메소드와 생성자를 모킹하는 방법을 알아볼게요. 준비되셨나요? Let's go! 🚀

PowerMock 슈퍼히어로 PowerMock Static Private

정적 메소드 모킹: 불가능을 가능하게! 🧙‍♂️

자, 이제 본격적으로 PowerMock의 마법을 펼쳐볼 시간이에요! 첫 번째로 다룰 주제는 바로 정적 메소드 모킹이에요. 정적 메소드, 그러니까 static 메소드를 모킹하는 건 보통의 모킹 프레임워크로는 정말 어려운 일이에요. 근데 PowerMock은 이걸 식은 죽 먹기로 만들어주죠!

예를 들어볼까요? 우리에게 이런 클래스가 있다고 해봐요:


public class StaticUtils {
    public static int multiplyByTwo(int number) {
        return number * 2;
    }
}

StaticUtils.multiplyByTwo() 메소드를 모킹하고 싶다면 어떻게 해야 할까요? PowerMock을 사용하면 아주 간단해요! 😎


@RunWith(PowerMockRunner.class)
@PrepareForTest(StaticUtils.class)
public class MyTest {
    
    @Test
    public void testMultiplyByTwo() {
        // Given
        PowerMockito.mockStatic(StaticUtils.class);
        when(StaticUtils.multiplyByTwo(10)).thenReturn(30);
        
        // When
        int result = StaticUtils.multiplyByTwo(10);
        
        // Then
        assertEquals(30, result);
    }
}

우와! 이게 뭔가 싶죠? ㅋㅋㅋ 하나씩 설명해드릴게요:

  • @RunWith(PowerMockRunner.class): 이건 PowerMock을 JUnit과 함께 사용하겠다는 뜻이에요.
  • @PrepareForTest(StaticUtils.class): 이 어노테이션은 PowerMock에게 "야, StaticUtils 클래스 좀 손봐줘!"라고 말하는 거예요.
  • PowerMockito.mockStatic(StaticUtils.class): 이 부분이 진짜 마법이 시작되는 곳이에요. StaticUtils 클래스의 모든 정적 메소드를 모킹해준다고 보면 돼요.
  • when(StaticUtils.multiplyByTwo(10)).thenReturn(30): 여기서 우리는 "multiplyByTwo 메소드에 10을 넣으면 30을 반환해!"라고 지정하는 거예요.

💡 Tip: 정적 메소드를 모킹할 때는 항상 PowerMockito.mockStatic()을 호출해야 해요. 이걸 빼먹으면 PowerMock이 "어? 뭘 모킹하라고요?" 하면서 당황할 거예요. ㅋㅋ

이렇게 하면 정적 메소드도 자유자재로 모킹할 수 있어요! 마치 재능넷에서 다양한 재능을 자유롭게 거래하는 것처럼 말이죠. 😉

근데 여기서 끝이 아니에요! PowerMock은 더 대단한 일도 할 수 있어요. 예를 들어, 정적 메소드의 부분 모킹도 가능하답니다. 이게 무슨 말이냐고요? 자, 봐보세요:


@Test
public void testPartialMocking() {
    // Given
    PowerMockito.spy(StaticUtils.class);
    when(StaticUtils.multiplyByTwo(10)).thenReturn(30);
    
    // When
    int result1 = StaticUtils.multiplyByTwo(10);
    int result2 = StaticUtils.multiplyByTwo(5);
    
    // Then
    assertEquals(30, result1);  // 모킹된 결과
    assertEquals(10, result2);  // 실제 메소드 결과
}

여기서 우리는 PowerMockito.spy()를 사용했어요. 이렇게 하면 특정 입력(여기서는 10)에 대해서만 모킹을 하고, 나머지는 실제 메소드를 호출하게 되는 거죠. 완전 신기하지 않나요? 😲

정적 메소드 모킹 개념도 StaticUtils 클래스 실제 메소드 multiplyByTwo(5) = 10 모킹된 메소드 multiplyByTwo(10) = 30 PowerMock의 마법!

이제 정적 메소드 모킹의 기본은 끝났어요! 어때요, 생각보다 어렵지 않죠? PowerMock을 사용하면 이런 "불가능한" 일들이 가능해지는 거예요. 마치 재능넷에서 불가능해 보이는 재능들을 발견하는 것처럼 말이죠! 🌟

다음으로는 더 흥미진진한 주제로 넘어가볼게요. 바로 생성자 모킹이에요! 이것도 정말 신기하고 유용한 기능이랍니다. 준비되셨나요? 그럼 고고! 🚀

생성자 모킹: 객체 생성의 마법사 🧙‍♀️

자, 이제 우리의 PowerMock 여행에서 두 번째 목적지에 도착했어요. 바로 생성자 모킹이에요! 이게 왜 중요하냐고요? 음... 실제 프로젝트에서 객체 생성이 복잡하거나 시간이 오래 걸리는 경우가 있거든요. 이럴 때 생성자를 모킹하면 테스트 속도도 빨라지고, 의존성 관리도 쉬워져요. 완전 꿀이죠? 🍯

예를 들어볼까요? 이런 클래스가 있다고 해봐요:


public class DatabaseConnection {
    public DatabaseConnection() {
        // 실제로는 데이터베이스 연결을 설정하는 복잡한 로직이 있을 거예요
        // 이 과정이 몇 초 걸릴 수도 있죠!
    }

    public boolean isConnected() {
        // 연결 상태를 확인하는 로직
        return true;
    }
}

public class UserService {
    private DatabaseConnection connection;

    public UserService() {
        this.connection = new DatabaseConnection();
    }

    public boolean checkUserStatus() {
        return connection.isConnected();
    }
}

자, 여기서 UserService를 테스트하고 싶은데, 실제 데이터베이스 연결은 필요 없다고 해봐요. 어떻게 할까요? PowerMock의 생성자 모킹 기능을 사용하면 됩니다! 짜잔~ 🎩✨


@RunWith(PowerMockRunner.class)
@PrepareForTest(UserService.class)
public class UserServiceTest {

    @Test
    public void testCheckUserStatus() throws Exception {
        // Given
        DatabaseConnection mockConnection = PowerMockito.mock(DatabaseConnection.class);
        PowerMockito.whenNew(DatabaseConnection.class).withNoArguments().thenReturn(mockConnection);
        
        when(mockConnection.isConnected()).thenReturn(true);

        // When
        UserService userService = new UserService();
        boolean result = userService.checkUserStatus();

        // Then
        assertTrue(result);
        PowerMockito.verifyNew(DatabaseConnection.class).withNoArguments();
    }
}

우와! 이게 뭔가 싶죠? ㅋㅋㅋ 하나씩 뜯어볼게요:

  • @PrepareForTest(UserService.class): 이번에는 UserService 클래스를 준비해달라고 PowerMock에게 부탁하는 거예요.
  • PowerMockito.whenNew(DatabaseConnection.class).withNoArguments().thenReturn(mockConnection): 이 부분이 진짜 마법이에요! "새로운 DatabaseConnection 객체를 만들려고 하면, 대신 이 mockConnection을 줘!"라고 말하는 거죠.
  • PowerMockito.verifyNew(DatabaseConnection.class).withNoArguments(): 이건 "진짜로 새 DatabaseConnection 객체를 만들려고 했는지" 확인하는 거예요.

💡 Tip: 생성자 모킹은 정말 강력하지만, 남용하면 안 돼요. 코드가 생성자 모킹에 너무 의존하게 되면, 나중에 리팩토링하기 어려워질 수 있어요. 마치 재능넷에서 한 가지 재능에만 너무 의존하면 다양성을 잃는 것처럼요!

이렇게 하면 실제 데이터베이스 연결 없이도 UserService를 테스트할 수 있어요. 완전 편하죠? 😎

그런데 말이죠, 생성자 모킹에는 또 다른 재미있는 기능이 있어요. 바로 부분 생성자 모킹이에요! 이게 뭐냐고요? 특정 매개변수를 가진 생성자만 모킹하고 나머지는 그대로 두는 거예요. 예를 들어볼게요:


public class ComplexObject {
    public ComplexObject() {
        // 기본 생성자
    }

    public ComplexObject(String name) {
        // name을 받는 생성자
    }

    public ComplexObject(int id, String name) {
        // id와 name을 받는 생성자
    }
}

@Test
public void testPartialConstructorMocking() throws Exception {
    // Given
    ComplexObject mockObject = PowerMockito.mock(ComplexObject.class);
    PowerMockito.whenNew(ComplexObject.class).withArguments(anyInt(), anyString()).thenReturn(mockObject);

    // When
    ComplexObject obj1 = new ComplexObject();  // 실제 객체
    ComplexObject obj2 = new ComplexObject("Test");  // 실제 객체
    ComplexObject obj3 = new ComplexObject(1, "Test");  // 모의 객체

    // Then
    assertNotSame(mockObject, obj1);
    assertNotSame(mockObject, obj2);
    assertSame(mockObject, obj3);
}

여기서 우리는 idname을 받는 생성자만 모킹했어요. 다른 생성자들은 그대로 실제 객체를 만들죠. 이렇게 하면 필요한 부분만 모킹하고 나머지는 그대로 둘 수 있어요. 완전 flexible하죠? 😉

생성자 모킹 개념도 ComplexObject 클래스 기본 생성자 String 생성자 int, String 생성자 (모킹됨) PowerMock의 부분 생성자 모킹

자, 이제 생성자 모킹의 세계도 탐험해봤어요! 어때요, 신기하지 않나요? PowerMock을 사용하면 이런 "불가능해 보이는" 일들이 가능해지는 거예요. 마치 재능넷에서 상상도 못한 재능들을 발견하는 것처럼 말이죠! 🌟

여기까지 왔는데, 여러분 아직 힘내실 수 있죠? ㅋㅋㅋ 우리의 PowerMock 여행은 아직 끝나지 않았어요. 다음으로는 정적 메소드와 생성자 모킹을 함께 사용하는 고급 테크닉을 알아볼 거예요. 이건 진짜 PowerMock의 끝판왕이라고 할 수 있죠! 준비되셨나요? 그럼 고고씽~! 🚀

고급 테크닉: 정적 메소드와 생성자 모킹 콤보! 🥊

자, 이제 우리는 PowerMock의 고수가 되어가고 있어요! 🏆 정적 메소드도 모킹할 수 있고, 생성자도 모킹할 수 있죠. 그런데 말이에요, 실제 프로젝트에서는 이 두 가지를 동시에 써야 할 때가 있어요. 그럴 때 어떻게 해야 할까요? 바로 이 두 가지를 콤보로 사용하는 거예요! ㅋㅋㅋ

예를 들어볼게요. 이런 상황을 한번 상상해 보세요:


public class ConfigManager {
    private static ConfigManager instance;

    private ConfigManager() {
        // 복잡한 초기화 로직
    }

    public static ConfigManager getInstance() {
        if (instance == null) {
            instance = new ConfigManager();
        }
        return instance;
    }

    public String getConfigValue(String key) {
        // 실제로는 설정 파일에서 값을 읽어오는 로직
        return "Some value";
    }
}

public class AppService {
    public String getAppConfig(String key) {
        return ConfigManager.getInstance().getConfigValue(key);
    }
}

여기서 AppService를 테스트하고 싶은데, ConfigManager의 실제 구현은 사용하고 싶지 않다고 해봐요. 어떻게 해야 할까요? 바로 정적 메소드(getInstance())와 생성자를 동시에 모킹하면 돼요! 😎


@RunWith(PowerMockRunner.class)
@PrepareForTest({ConfigManager.class, AppService.class})
public class AppServiceTest {

    @Test
    public void testGetAppConfig() throws Exception {
        // Given
        ConfigManager mockConfigManager = PowerMockito.mock(ConfigManager.class);
        PowerMockito.mockStatic(ConfigManager.class);
        PowerMockito.whenNew(ConfigManager.class).withNoArguments().thenReturn(mockConfigManager);
        PowerMockito.when(ConfigManager.getInstance()).thenReturn(mockConfigManager);
        when(mockConfigManager.getConfigValue("test-key")).thenReturn("mocked-value");

        // When
        AppService appService = new AppService();
        String result = appService.getAppConfig("test-key");

        // Then
        assertEquals("mocked-value", result);
        PowerMockito.verifyStatic(ConfigManager.class);
        ConfigManager.getInstance();
        verify(mockConfigManager).getConfigValue("test-key");
    }
}

우와! 이게 뭔가 싶죠? ㅋㅋㅋ 하나씩 뜯어볼게요:

  • @PrepareForTest({ConfigManager.class, AppService.class}): 두 클래스 모두 PowerMock의 마법이 필요해요!
  • PowerMockito.mockStatic(ConfigManager.class): ConfigManager의 정적 메소드를 모킹해요.
  • PowerMockito.whenNew(ConfigManager.class).withNoArguments().thenReturn(mockConfigManager): ConfigManager의 생성자를 모킹해요.
  • PowerMockito.when(ConfigManager.getInstance()).thenReturn(mockConfigManager): getInstance() 메소드가 우리의 모의 객체를 반환하도록 해요.
  • PowerMockito.verifyStatic (ConfigManager.class): 정적 메소드가 호출되었는지 확인해요.

💡 Tip: 이런 복잡한 모킹은 코드의 설계에 문제가 있다는 신호일 수 있어요. 가능하다면 의존성 주입 같은 기술을 사용해 코드를 리팩토링하는 것이 좋아요. 하지만 레거시 코드를 다룰 때는 이런 테크닉이 정말 유용하답니다!

이렇게 하면 ConfigManager의 실제 구현을 전혀 사용하지 않고도 AppService를 완벽하게 테스트할 수 있어요. 정적 메소드와 생성자를 동시에 모킹함으로써, 우리는 완전한 제어권을 가지게 된 거죠. 마치 재능넷에서 여러 재능을 조합해 완전히 새로운 서비스를 만들어내는 것처럼요! 🎨✨

정적 메소드와 생성자 모킹 콤보 ConfigManager 정적 메소드 모킹 생성자 모킹 PowerMock의 궁극의 콤보!

자, 이제 우리는 PowerMock의 거의 모든 비밀을 알아냈어요! 어때요, 생각보다 재미있지 않나요? 😄 PowerMock을 사용하면 정말 "불가능"이란 없어지는 것 같아요. 마치 재능넷에서 어떤 재능이든 찾을 수 있는 것처럼 말이죠!

그런데 말이에요, 이렇게 강력한 도구를 사용할 때는 항상 주의해야 해요. PowerMock은 정말 유용하지만, 남용하면 오히려 코드의 품질을 떨어뜨릴 수 있어요. 항상 "이 모킹이 정말 필요한가?"라고 자문해보는 게 좋아요. 가능하다면 의존성 주입이나 인터페이스 사용 같은 더 좋은 설계 방식을 고려해보세요.

그래도 레거시 코드를 다루거나, 어쩔 수 없이 복잡한 의존성을 가진 코드를 테스트해야 할 때는 PowerMock이 정말 큰 도움이 될 거예요. 마치 재능넷에서 특별한 상황에 딱 맞는 재능을 찾는 것처럼요! 👍

자, 이제 우리의 PowerMock 여행이 거의 끝나가고 있어요. 마지막으로 정리를 해볼까요?

정리: PowerMock 마스터가 되는 길 🏆

우와, 정말 긴 여정이었죠? 🚶‍♂️💨 하지만 여러분, 이제 여러분은 PowerMock의 진정한 마스터가 되었어요! 👏👏👏 우리가 함께 배운 내용을 정리해볼까요?

  1. 정적 메소드 모킹: PowerMock을 사용하면 static 메소드도 자유자재로 모킹할 수 있어요. PowerMockito.mockStatic()을 기억하세요!
  2. 생성자 모킹: 객체 생성을 제어하고 싶을 때 사용해요. PowerMockito.whenNew()가 핵심이에요.
  3. 콤보 기술: 정적 메소드와 생성자 모킹을 동시에 사용해 완벽한 제어를 할 수 있어요.
  4. 부분 모킹: PowerMockito.spy()를 사용해 일부만 모킹하고 나머지는 실제 동작을 유지할 수 있어요.

🚨 주의사항: PowerMock은 강력하지만, 과도한 사용은 코드의 설계 문제를 숨길 수 있어요. 항상 더 나은 설계 방법이 있는지 고민해보세요!

PowerMock을 사용하면서 느꼈겠지만, 이 도구는 정말 강력해요. 마치 재능넷에서 어떤 재능이든 찾을 수 있는 것처럼, PowerMock을 사용하면 어떤 코드든 테스트할 수 있어요. 하지만 강력한 힘에는 큰 책임이 따르는 법이죠. (스파이더맨 아저씨 명언이에요! ㅋㅋ)

PowerMock을 사용할 때는 항상 이런 질문을 해보세요:

  • 이 모킹이 정말 필요한가?
  • 코드를 리팩토링해서 더 테스트하기 쉽게 만들 수 있을까?
  • 이 테스트가 실제로 의미 있는 걸 검증하고 있나?

이런 질문들을 항상 염두에 두면서 PowerMock을 현명하게 사용한다면, 여러분은 정말 대단한 개발자가 될 거예요! 🌟

PowerMock 마스터의 길 시작 학습 마스터 PowerMock 마스터의 길

자, 이제 정말 끝이에요! 여러분은 이제 PowerMock의 진정한 마스터가 되었어요. 이 지식을 가지고 어떤 레거시 코드, 어떤 복잡한 시스템도 두려워하지 말고 당당하게 테스트하세요! 💪

그리고 기억하세요. 코딩은 즐거워야 해요. PowerMock을 사용하면서도 항상 재미있게, 그리고 창의적으로 문제를 해결해 나가세요. 마치 재능넷에서 새로운 재능을 발견하는 즐거움처럼 말이에요! 😄

여러분의 PowerMock 마스터 여정을 응원합니다! 화이팅! 🎉🎊

관련 키워드

  • PowerMock
  • 정적 메소드 모킹
  • 생성자 모킹
  • 단위 테스트
  • 레거시 코드
  • 의존성 주입
  • 테스트 주도 개발(TDD)
  • 모의 객체
  • 부분 모킹
  • 테스트 커버리지

지적 재산권 보호

지적 재산권 보호 고지

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

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

© 2024 재능넷 | All rights reserved.

댓글 작성
0/2000

댓글 0개

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

프로그래밍 15년이상 개발자입니다.(이학사, 공학 석사) ※ 판매자와 상담 후에 구매해주세요. 학습을 위한 코드, 게임, 엑셀 자동화, 업...

C언어, JAVA, C++, C# 응용프로그램 개발해드립니다.간단한 프로그램부터 복잡한 응용프로그래밍 까지 가능합니다. [일정]- 요구사항 간단히 ...

프로그램 개발자입니다. ERP, WMS, MES 등과 같은 산업용 프로그램, 설비 인터페이스 프로그램 등을 주로 개발하였습니다.현재는 모 대기업의...

📚 생성된 총 지식 10,810 개

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