SlideShare a Scribd company logo
코드 생성을 사용해
 개발 속도 높이기
 김이선 (veblush at neople | gmail)
       네오플 던파개발실
버블파이터
 BNB     카트라이더      프로토타입      에버플래닛      던전엔파이터
프로그래머   리드 프로그래머   리드 프로그래머   리드 프로그래머   테크니컬 디렉터




           게임 프로그래밍 10년차
생산성!
생산성은 왜?
1. enum 으로 보는
   코드 생성
2. CodeGen
3. 에버플래닛의
   사용 예
enum Fruit
{
    apple = 1,
    banana,
    grape
};
const WChar* Fruit_strs[] =
{
  L"apple",
  L"banana",
  L"grape"
};

void fillValue(CComboBox* cb)
{
  cb->Clear();
  for (int i=0; i<_countof(Fruit_str); i++)
    cb->AddString(Fruit_strs[i]);
}
enum 에게 필요한 것은?
enum ↔ 문자열
String toString(Fruit f)
banana(2) <-> L"banana"
멤버 iteration
for (f in Fruit) { print f }
apple, banana, grape
Macro | Template 이라면?
ENUM_BEGIN(Fruit)
    ENUM_V(apple, 1)
    ENUM(banana)
    ENUM(grape)
ENUM_END(Fruit)
#define ENUM_BEGIN(t) 
  char* t ## _table [] = {

#define ENUM(n) #n,

#define ENUM_END(t) };

            …
적은 비용. 외부 의존성 낮음.
때문에 좋은 해결책이기도 하다
기능 추가에 유연하지 않음.
코드 마술이 늘 쉬운 것만은 아님
코드 생성
                                  C++ 헤더 코드
     기술 코드
                                  C++ 소스 코드

<Enum name="Fruit">       struct Fruit {
  <C n="apple"/>            enum T {
  <C n="banana"/>             apple, banana, grape };
  <C n="grape"/>          };
</Enum>
                          String toString(Fruit::T v)
                          { … }
                          void fromString(WChar* str,
                          Fruit::T* v) { … }
구현 기능에 제한이 없음
코드로 할 수 있다면 뭐든지!
코드 생성 툴에 종속성이 생김
개발 과정에 꼭 필요한 툴 추가
구현 가능성 > 툴 종속성
1. enum 으로 보는
   코드 생성
2. CodeGen
3. 에버플래닛의
   사용 예
CodeGen ?

 코드 생성을 수행하는
Visual Studio 플러그인
     (C# LOC:3K)
소스 작성 중


            CodeGen
            코드 작성


            CodeGen
           플러그인 실행
            C++ 코드 생성

소스 작업 계속
CodeGen 데모
http://www.youtube.com/watch?v=6wfNfeK_t0w
소스 편집 중에 바로 코드 생성
생성된 코드를 바로 확인!
   Intellisense!
빌드 자체에는 툴 종속성이 없음
작업 코드 중간에 들어갈 수 있음
코드 생성을 위해 별도 파일 불필요
유저 코드 삽입이 자연스러움
코드 생성으로 얻는 것?
빠르게 원하는 기능 구현
구현 코드는 CodeGen 이 생성!
프로그래머는 내용에 집중!
신뢰성/일관성 있는 코드
기계적으로 생성하는 코드!
사소하지만 필요한 기능
라이브러리 형태 지원
<Enum name="Fruit" dllDecl="LibDecl">
    <Const name="apple" value="1"/>
    <Const name="banana"/>
    <Const name="grape"/>



struct LibDecl Fruit // LibDecl=__declspec(dllexport) …
{
    enum T
    {
        apple = 1,
        banana,
        grape,
doxygen 주석 붙이기
<!--! 과일을 나타냅니다 -->
<Enum name="Fruit">
    <Const name="apple" value="1" comment="사과"/>
    <Const name="banana" comment="바나나는 맛있어"/>



//! 과일을 나타냅니다
struct Fruit
{
    enum T
    {
        apple = 1, //!< 사과
        banana, //!< 바나나는 맛있어
생성된 코드에 유저 코드 삽입
<Enum name="Fruit">
    <Const name="apple" value="1"/>
    …
    <HText><![CDATA[
        Bool isMyFavorate(Fruit::T v);
    ]]></HText>


struct Fruit
{
    enum T
    …
    Bool isMyFavorate(Fruit::T v);
};
주의사항?
문법은 확장 가능하도록!
유연하게! 일반적인 문법!
XML?
생성된 코드가 수정되지 않게!
기계적인 느낌이 나도록 생성?
#pragma region?
모두가 같은 버전의 툴!
예전버전을 사용하면 곤란.
자동 업데이트?
1. enum 으로 보는
   코드 생성
2. CodeGen
3. 에버플래닛의
   사용 예
적용한 부분은?
기계적이고 반복적인 부분에 적용.
 적용 영역이 지속적으로 확대.
사용한 CodeGen 영역

          Enum


 Packet          Data


 DbCall      DbRowset
Enum : 열거형 확장

문자열 변환 기능 추가
멤버 순회 기능 추가
Enum : CodeGen


<Enum name="Fruit">
  <Const name="apple" value="1"/>
  <Const name="banana"/>
  <Const name="grape"/>
</Enum>
Enum : Generated
  struct Fruit {
     enum T {
        apple=1,
        banana,
        grape
     };
     …
  };
  String toString(…);
  fromString(…);
Enum : Usage


toString(Fruit::banana); // "banana"
fromString<Fruit::T>(L"grape"); // 3

Fruit::enumCount; // 3
Fruit::enumValue[1]; // Fruit::banana
template <class EnumType>
void fillValue(CComboBox* cb)
{
   cb->Clear();
   for (size_t i=0; i<EnumType::enumCount; i++)
     cb->AddString(EnumType::enumStr[i]);
};
Packet : 패킷 Serialization

 패킷 내용을 구조체로 구성
Byte Serialization 코드 작성
패킷은 지속적인 작업
귀찮은 Serialization 코드 작업
Packet : CodeGen


<Packet name="TestPacket">
  <Field name="code" type="Int4"/>
  <Field name="name" type="String"/>
</Packet>
Packet : Generated
struct TestPacket : public Packet
{
  TestPacket(Int4 code, String name);
  virtual Int4 getStreamSize() const;
  virtual void readFrom(Stream& is);
  virtual void writeTo(Stream& os);

public:
  Int4 code;
  String name;
};
Packet : Usage
send() {
  TestPacketPtr p = new TestPacket;
  p->code = 1;
  p->name = L"Test";
  sendPacket(p);
  // or
  sendPacket(new TestPacket(1, L"Test"));
}
recv(TestPacket* p) {
  p->code;
  p->name;
}
코드 생성이라 최적화 전략 가능

패킷 멤버 모두가 단순 타입이면
read/write 를 단순 memcpy로
Packet : Optimized

                 //   Read
// Member        is   >> userId;
Int4 userId;     is   >> itemId;
Int4 itemId;     is   >> presetId;
Int4 presetId;   is   >> pos;
Vector2 pos;
                 // Read (Optimized)
                 is.read(this,
                   sizeof(TestPacket));
Data : POD 확장
      멤버 변수를
XML | 바이트 스트림으로
     Serialization
아이템, 퀘스트 등을
기술하는데 이러한 구조체가 필요

     이러한 데이터는
파일에 있기 때문에 I/O 코드 필요
Data: CodeGen

<Data name="Item">
  <Field name="id" type="Int4"/>
  <Field name="name" type="String"/>
  <Field name="desc" type="String"/>
  <Field name="level" type="Int4" init="0"/>
  <Field name="itemClass" type="ItemClass::T"
    init="ItemClass::kMisc"/>
</Data>
Data : Generated
struct Item
{
  Item();
  void readFrom(Stream& is);
  void writeTo(Stream& os) const;
  void readFrom(XmlElement* xel);
  void writeTo(XmlElement* xel) const;

     Int4 id;
     String name;
     …
};
Data : Usage


                      <Item
Item item;              id="100"
item.readFrom(xml);     name="무쇠 갑옷"
item.id;                desc="무척강하다"
item.name;              itemClass="armor"
                      />
Data CodeGen 데모
   Pet 구조체 만들기
ItemSpawn 은 이미 있음
http://www.youtube.com/watch?v=kRrYj3Lx5Pw
<Pet                  07   0a   00   00   00   06
  id="10"             00   00   00   6d   00   6f
  name="monkey"       00   6e   00   6b   00   65
  food="banana"       00   79   00   02   00   00
  >                   00   02   00   00   00   00
  <Items>             64   00   00   00   01   c8
    <ItemSpawn        00   00   00   05   00   00
       itemId="100"   00
    />
    <ItemSpawn
       itemId="200"
       count="5"
                           용량 16%
    />
  </Items>
                           속도 x3
</Pet>
개발 때는 XML 사용
포맷 개방, 공동 작업!

배포 때는 Binary 사용
포맷 고정, 빠른 속도, 보안!
DbCall : SQL/SP 호출
  호출 전후에
파라미터 변수 바인딩
DbCall : CodeGen

<DbCall name="DcLogin" spName="spLogin">
  <Param name="id" type="String" maxLen="24"/>
  <Param name="ret" type="Int4" io="out"/>
</DbCall>



 CREATE PROCEDURE spLogin
     @id as nvarchar(24), @ret as int OUTPUT
DbCall : Generated
struct DcLogin
{
   static HRESULT exec(DbSession* s,
     const String& id, Int4* ret);
   struct Param : public DbCallParam
   {
     String id;
     Int4 ret;
     virtual HRESULT exec(DbSession* s);
   };
};
DbCall : Usage
  hr = DcLogin::exec(s, "userid", &ret);
  // or
  p = new DcLogin::Param;
  p->id = "userid";
  p->exec(s);
  p->ret;



CREATE PROCEDURE spLogin
    @id as nvarchar(24), @ret as int OUTPUT
DbRowset : Rowset 읽기
  Rowset 을 읽어
 컬럼 변수에 바인딩
DbRowset : CodeGen
<DbRowset name="DrInven">
  <Field name="id" type="Int4"/>
  <Field name="count" type="Int4"/>
  <Field name="expireTime" type="DateTime4"/>
</DbRowset>



       SELECT id, count, expireTime
         FROM tblInven WHERE charId=1
DbRowset : Generated
struct DrInven : public DbRowset
{
  Int4 id;
  Int4 count;
  DateTime4 expireTime;

protected:
   virtual HRESULT onInit(...);
   virtual void onNext();
};
DbRowset : Usage
DrInvenPtr rs;
hr = DcInvenGet::exec(dbSession, &rs);
while (rs->next()) {
  rs->id;
  rs->count;
  rs->expireTime;
}


   SELECT id, count, expireTime
     FROM tblInven WHERE charId=1
적용 비중?
사용한 CodeGen 개수
           0   200   400   600   800   1000

   Enum

  Packet

    Data

  DbCall

DbRowset
CodeGen 코드 라인 수

          원본코드
          10,946




                   x7
 생성코드
 69,391
생성코드의 비중

          생성코드
          69,391




                   11%
그외코드
559,517
Total: 11261 revs
      Packet:
1646 revs (14%) x2

    Data/Item:
215 revs (2%) x215
결론
코드 생성은
생각보다 많은 영역에 사용 가능
기대보다 많은 코드 작성을 대신
시도해보자!
감사합니다!

More Related Content

What's hot

조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012
조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012
조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012devCAT Studio, NEXON
 
실시간 게임 서버 최적화 전략
실시간 게임 서버 최적화 전략실시간 게임 서버 최적화 전략
실시간 게임 서버 최적화 전략
YEONG-CHEON YOU
 
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기
Jaeseung Ha
 
윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019
윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019
윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019
devCAT Studio, NEXON
 
NDC11_슈퍼클래스
NDC11_슈퍼클래스NDC11_슈퍼클래스
NDC11_슈퍼클래스
noerror
 
[0903 구경원] recast 네비메쉬
[0903 구경원] recast 네비메쉬[0903 구경원] recast 네비메쉬
[0903 구경원] recast 네비메쉬KyeongWon Koo
 
C++20에서 리플렉션 기능 구현
C++20에서 리플렉션 기능 구현C++20에서 리플렉션 기능 구현
C++20에서 리플렉션 기능 구현
Bongseok Cho
 
소셜게임 서버 개발 관점에서 본 Node.js의 장단점과 대안
소셜게임 서버 개발 관점에서 본 Node.js의 장단점과 대안소셜게임 서버 개발 관점에서 본 Node.js의 장단점과 대안
소셜게임 서버 개발 관점에서 본 Node.js의 장단점과 대안
Jeongsang Baek
 
빌드관리 및 디버깅 (2010년 자료)
빌드관리 및 디버깅 (2010년 자료)빌드관리 및 디버깅 (2010년 자료)
빌드관리 및 디버깅 (2010년 자료)
YEONG-CHEON YOU
 
Next-generation MMORPG service architecture
Next-generation MMORPG service architectureNext-generation MMORPG service architecture
Next-generation MMORPG service architecture
Jongwon Kim
 
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
devCAT Studio, NEXON
 
[NDC 2014] 던전앤파이터 클라이언트 로딩 최적화
[NDC 2014] 던전앤파이터 클라이언트 로딩 최적화[NDC 2014] 던전앤파이터 클라이언트 로딩 최적화
[NDC 2014] 던전앤파이터 클라이언트 로딩 최적화
Jaeseung Ha
 
MMOG Server-Side 충돌 및 이동처리 설계와 구현
MMOG Server-Side 충돌 및 이동처리 설계와 구현MMOG Server-Side 충돌 및 이동처리 설계와 구현
MMOG Server-Side 충돌 및 이동처리 설계와 구현
YEONG-CHEON YOU
 
게임 분산 서버 구조
게임 분산 서버 구조게임 분산 서버 구조
게임 분산 서버 구조
Hyunjik Bae
 
[NDC 2018] 신입 개발자가 알아야 할 윈도우 메모리릭 디버깅
[NDC 2018] 신입 개발자가 알아야 할 윈도우 메모리릭 디버깅[NDC 2018] 신입 개발자가 알아야 할 윈도우 메모리릭 디버깅
[NDC 2018] 신입 개발자가 알아야 할 윈도우 메모리릭 디버깅
DongMin Choi
 
게임서버프로그래밍 #8 - 성능 평가
게임서버프로그래밍 #8 - 성능 평가게임서버프로그래밍 #8 - 성능 평가
게임서버프로그래밍 #8 - 성능 평가
Seungmo Koo
 
게임서버프로그래밍 #1 - IOCP
게임서버프로그래밍 #1 - IOCP게임서버프로그래밍 #1 - IOCP
게임서버프로그래밍 #1 - IOCP
Seungmo Koo
 
게임 프레임워크의 아키텍쳐와 디자인 패턴
게임 프레임워크의 아키텍쳐와 디자인 패턴게임 프레임워크의 아키텍쳐와 디자인 패턴
게임 프레임워크의 아키텍쳐와 디자인 패턴MinGeun Park
 
테라로 살펴본 MMORPG의 논타겟팅 시스템
테라로 살펴본 MMORPG의 논타겟팅 시스템테라로 살펴본 MMORPG의 논타겟팅 시스템
테라로 살펴본 MMORPG의 논타겟팅 시스템
QooJuice
 
[IGC 2017] 아마존 구승모 - 게임 엔진으로 서버 제작 및 운영까지
[IGC 2017] 아마존 구승모 - 게임 엔진으로 서버 제작 및 운영까지[IGC 2017] 아마존 구승모 - 게임 엔진으로 서버 제작 및 운영까지
[IGC 2017] 아마존 구승모 - 게임 엔진으로 서버 제작 및 운영까지
강 민우
 

What's hot (20)

조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012
조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012
조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012
 
실시간 게임 서버 최적화 전략
실시간 게임 서버 최적화 전략실시간 게임 서버 최적화 전략
실시간 게임 서버 최적화 전략
 
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기
 
윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019
윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019
윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019
 
NDC11_슈퍼클래스
NDC11_슈퍼클래스NDC11_슈퍼클래스
NDC11_슈퍼클래스
 
[0903 구경원] recast 네비메쉬
[0903 구경원] recast 네비메쉬[0903 구경원] recast 네비메쉬
[0903 구경원] recast 네비메쉬
 
C++20에서 리플렉션 기능 구현
C++20에서 리플렉션 기능 구현C++20에서 리플렉션 기능 구현
C++20에서 리플렉션 기능 구현
 
소셜게임 서버 개발 관점에서 본 Node.js의 장단점과 대안
소셜게임 서버 개발 관점에서 본 Node.js의 장단점과 대안소셜게임 서버 개발 관점에서 본 Node.js의 장단점과 대안
소셜게임 서버 개발 관점에서 본 Node.js의 장단점과 대안
 
빌드관리 및 디버깅 (2010년 자료)
빌드관리 및 디버깅 (2010년 자료)빌드관리 및 디버깅 (2010년 자료)
빌드관리 및 디버깅 (2010년 자료)
 
Next-generation MMORPG service architecture
Next-generation MMORPG service architectureNext-generation MMORPG service architecture
Next-generation MMORPG service architecture
 
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
 
[NDC 2014] 던전앤파이터 클라이언트 로딩 최적화
[NDC 2014] 던전앤파이터 클라이언트 로딩 최적화[NDC 2014] 던전앤파이터 클라이언트 로딩 최적화
[NDC 2014] 던전앤파이터 클라이언트 로딩 최적화
 
MMOG Server-Side 충돌 및 이동처리 설계와 구현
MMOG Server-Side 충돌 및 이동처리 설계와 구현MMOG Server-Side 충돌 및 이동처리 설계와 구현
MMOG Server-Side 충돌 및 이동처리 설계와 구현
 
게임 분산 서버 구조
게임 분산 서버 구조게임 분산 서버 구조
게임 분산 서버 구조
 
[NDC 2018] 신입 개발자가 알아야 할 윈도우 메모리릭 디버깅
[NDC 2018] 신입 개발자가 알아야 할 윈도우 메모리릭 디버깅[NDC 2018] 신입 개발자가 알아야 할 윈도우 메모리릭 디버깅
[NDC 2018] 신입 개발자가 알아야 할 윈도우 메모리릭 디버깅
 
게임서버프로그래밍 #8 - 성능 평가
게임서버프로그래밍 #8 - 성능 평가게임서버프로그래밍 #8 - 성능 평가
게임서버프로그래밍 #8 - 성능 평가
 
게임서버프로그래밍 #1 - IOCP
게임서버프로그래밍 #1 - IOCP게임서버프로그래밍 #1 - IOCP
게임서버프로그래밍 #1 - IOCP
 
게임 프레임워크의 아키텍쳐와 디자인 패턴
게임 프레임워크의 아키텍쳐와 디자인 패턴게임 프레임워크의 아키텍쳐와 디자인 패턴
게임 프레임워크의 아키텍쳐와 디자인 패턴
 
테라로 살펴본 MMORPG의 논타겟팅 시스템
테라로 살펴본 MMORPG의 논타겟팅 시스템테라로 살펴본 MMORPG의 논타겟팅 시스템
테라로 살펴본 MMORPG의 논타겟팅 시스템
 
[IGC 2017] 아마존 구승모 - 게임 엔진으로 서버 제작 및 운영까지
[IGC 2017] 아마존 구승모 - 게임 엔진으로 서버 제작 및 운영까지[IGC 2017] 아마존 구승모 - 게임 엔진으로 서버 제작 및 운영까지
[IGC 2017] 아마존 구승모 - 게임 엔진으로 서버 제작 및 운영까지
 

Similar to 코드 생성을 사용해 개발 속도 높이기 NDC2011

Google Protocol buffer
Google Protocol bufferGoogle Protocol buffer
Google Protocol bufferknight1128
 
C#을 사용한 빠른 툴 개발
C#을 사용한 빠른 툴 개발C#을 사용한 빠른 툴 개발
C#을 사용한 빠른 툴 개발
흥배 최
 
20201121 코드 삼분지계
20201121 코드 삼분지계20201121 코드 삼분지계
20201121 코드 삼분지계
Chiwon Song
 
불어오는 변화의 바람, From c++98 to c++11, 14
불어오는 변화의 바람, From c++98 to c++11, 14 불어오는 변화의 바람, From c++98 to c++11, 14
불어오는 변화의 바람, From c++98 to c++11, 14
명신 김
 
테스트가 뭐예요?
테스트가 뭐예요?테스트가 뭐예요?
테스트가 뭐예요?
Kyoung Up Jung
 
Okjsp 13주년 발표자료: 생존 프로그래밍 Test
Okjsp 13주년 발표자료: 생존 프로그래밍 TestOkjsp 13주년 발표자료: 생존 프로그래밍 Test
Okjsp 13주년 발표자료: 생존 프로그래밍 Test
beom kyun choi
 
Naver api for android
Naver api for androidNaver api for android
Naver api for androidSangon Lee
 
[KGC2014] 두 마리 토끼를 잡기 위한 C++ - C# 혼합 멀티플랫폼 게임 아키텍처 설계
[KGC2014] 두 마리 토끼를 잡기 위한 C++ - C#  혼합 멀티플랫폼 게임 아키텍처 설계[KGC2014] 두 마리 토끼를 잡기 위한 C++ - C#  혼합 멀티플랫폼 게임 아키텍처 설계
[KGC2014] 두 마리 토끼를 잡기 위한 C++ - C# 혼합 멀티플랫폼 게임 아키텍처 설계
Sungkyun Kim
 
NDC 2011, 네트워크 비동기 통신, 합의점의 길목에서
NDC 2011, 네트워크 비동기 통신, 합의점의 길목에서NDC 2011, 네트워크 비동기 통신, 합의점의 길목에서
NDC 2011, 네트워크 비동기 통신, 합의점의 길목에서
tcaesvk
 
Secrets of the JavaScript Ninja - Chapter 12. DOM modification
Secrets of the JavaScript Ninja - Chapter 12. DOM modificationSecrets of the JavaScript Ninja - Chapter 12. DOM modification
Secrets of the JavaScript Ninja - Chapter 12. DOM modification
Hyuncheol Jeon
 
코틀린 멀티플랫폼, 미지와의 조우
코틀린 멀티플랫폼, 미지와의 조우코틀린 멀티플랫폼, 미지와의 조우
코틀린 멀티플랫폼, 미지와의 조우
Arawn Park
 
[Td 2015]녹슨 c++ 코드에 모던 c++로 기름칠하기(옥찬호)
[Td 2015]녹슨 c++ 코드에 모던 c++로 기름칠하기(옥찬호)[Td 2015]녹슨 c++ 코드에 모던 c++로 기름칠하기(옥찬호)
[Td 2015]녹슨 c++ 코드에 모던 c++로 기름칠하기(옥찬호)
Sang Don Kim
 
[TechDays Korea 2015] 녹슨 C++ 코드에 모던 C++로 기름칠하기
[TechDays Korea 2015] 녹슨 C++ 코드에 모던 C++로 기름칠하기[TechDays Korea 2015] 녹슨 C++ 코드에 모던 C++로 기름칠하기
[TechDays Korea 2015] 녹슨 C++ 코드에 모던 C++로 기름칠하기
Chris Ohk
 
옛날 웹 개발자가 잠깐 맛본 Vue.js 소개
옛날 웹 개발자가 잠깐 맛본 Vue.js 소개옛날 웹 개발자가 잠깐 맛본 Vue.js 소개
옛날 웹 개발자가 잠깐 맛본 Vue.js 소개
beom kyun choi
 
Android Native Module 안정적으로 개발하기
Android Native Module 안정적으로 개발하기Android Native Module 안정적으로 개발하기
Android Native Module 안정적으로 개발하기
hanbeom Park
 
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용프로그래밍 패러다임의 진화 및 Spring의 금융권 적용
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용
중선 곽
 
I phone 2 release
I phone 2 releaseI phone 2 release
I phone 2 release
Jaehyeuk Oh
 
HI-ARC PS 101
HI-ARC PS 101HI-ARC PS 101
HI-ARC PS 101
Jae-yeol Lee
 
C++17 Key Features Summary - Ver 2
C++17 Key Features Summary - Ver 2C++17 Key Features Summary - Ver 2
C++17 Key Features Summary - Ver 2
Chris Ohk
 
Boost라이브러리의내부구조 20151111 서진택
Boost라이브러리의내부구조 20151111 서진택Boost라이브러리의내부구조 20151111 서진택
Boost라이브러리의내부구조 20151111 서진택
JinTaek Seo
 

Similar to 코드 생성을 사용해 개발 속도 높이기 NDC2011 (20)

Google Protocol buffer
Google Protocol bufferGoogle Protocol buffer
Google Protocol buffer
 
C#을 사용한 빠른 툴 개발
C#을 사용한 빠른 툴 개발C#을 사용한 빠른 툴 개발
C#을 사용한 빠른 툴 개발
 
20201121 코드 삼분지계
20201121 코드 삼분지계20201121 코드 삼분지계
20201121 코드 삼분지계
 
불어오는 변화의 바람, From c++98 to c++11, 14
불어오는 변화의 바람, From c++98 to c++11, 14 불어오는 변화의 바람, From c++98 to c++11, 14
불어오는 변화의 바람, From c++98 to c++11, 14
 
테스트가 뭐예요?
테스트가 뭐예요?테스트가 뭐예요?
테스트가 뭐예요?
 
Okjsp 13주년 발표자료: 생존 프로그래밍 Test
Okjsp 13주년 발표자료: 생존 프로그래밍 TestOkjsp 13주년 발표자료: 생존 프로그래밍 Test
Okjsp 13주년 발표자료: 생존 프로그래밍 Test
 
Naver api for android
Naver api for androidNaver api for android
Naver api for android
 
[KGC2014] 두 마리 토끼를 잡기 위한 C++ - C# 혼합 멀티플랫폼 게임 아키텍처 설계
[KGC2014] 두 마리 토끼를 잡기 위한 C++ - C#  혼합 멀티플랫폼 게임 아키텍처 설계[KGC2014] 두 마리 토끼를 잡기 위한 C++ - C#  혼합 멀티플랫폼 게임 아키텍처 설계
[KGC2014] 두 마리 토끼를 잡기 위한 C++ - C# 혼합 멀티플랫폼 게임 아키텍처 설계
 
NDC 2011, 네트워크 비동기 통신, 합의점의 길목에서
NDC 2011, 네트워크 비동기 통신, 합의점의 길목에서NDC 2011, 네트워크 비동기 통신, 합의점의 길목에서
NDC 2011, 네트워크 비동기 통신, 합의점의 길목에서
 
Secrets of the JavaScript Ninja - Chapter 12. DOM modification
Secrets of the JavaScript Ninja - Chapter 12. DOM modificationSecrets of the JavaScript Ninja - Chapter 12. DOM modification
Secrets of the JavaScript Ninja - Chapter 12. DOM modification
 
코틀린 멀티플랫폼, 미지와의 조우
코틀린 멀티플랫폼, 미지와의 조우코틀린 멀티플랫폼, 미지와의 조우
코틀린 멀티플랫폼, 미지와의 조우
 
[Td 2015]녹슨 c++ 코드에 모던 c++로 기름칠하기(옥찬호)
[Td 2015]녹슨 c++ 코드에 모던 c++로 기름칠하기(옥찬호)[Td 2015]녹슨 c++ 코드에 모던 c++로 기름칠하기(옥찬호)
[Td 2015]녹슨 c++ 코드에 모던 c++로 기름칠하기(옥찬호)
 
[TechDays Korea 2015] 녹슨 C++ 코드에 모던 C++로 기름칠하기
[TechDays Korea 2015] 녹슨 C++ 코드에 모던 C++로 기름칠하기[TechDays Korea 2015] 녹슨 C++ 코드에 모던 C++로 기름칠하기
[TechDays Korea 2015] 녹슨 C++ 코드에 모던 C++로 기름칠하기
 
옛날 웹 개발자가 잠깐 맛본 Vue.js 소개
옛날 웹 개발자가 잠깐 맛본 Vue.js 소개옛날 웹 개발자가 잠깐 맛본 Vue.js 소개
옛날 웹 개발자가 잠깐 맛본 Vue.js 소개
 
Android Native Module 안정적으로 개발하기
Android Native Module 안정적으로 개발하기Android Native Module 안정적으로 개발하기
Android Native Module 안정적으로 개발하기
 
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용프로그래밍 패러다임의 진화 및 Spring의 금융권 적용
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용
 
I phone 2 release
I phone 2 releaseI phone 2 release
I phone 2 release
 
HI-ARC PS 101
HI-ARC PS 101HI-ARC PS 101
HI-ARC PS 101
 
C++17 Key Features Summary - Ver 2
C++17 Key Features Summary - Ver 2C++17 Key Features Summary - Ver 2
C++17 Key Features Summary - Ver 2
 
Boost라이브러리의내부구조 20151111 서진택
Boost라이브러리의내부구조 20151111 서진택Boost라이브러리의내부구조 20151111 서진택
Boost라이브러리의내부구조 20151111 서진택
 

코드 생성을 사용해 개발 속도 높이기 NDC2011