반복적인 코드 작업 자동화, codebone으로 손쉽게

173

Click here to load reader

Upload: sungju-jin

Post on 14-Nov-2014

7.331 views

Category:

Technology


15 download

DESCRIPTION

반복적인 코드 작업 자동화, Codebone으로 손쉽게

TRANSCRIPT

Page 1: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

반복적인 코드 작업 자동화 , codebone 으로 손쉽게

임선용 , 진성주

Page 2: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

발표자 소개

진성주 ( @geekbeast )http://softwaregeeks.org

• KTH – 플랫폼개발팀 PD• ( 저 ) 안드로이드 프로그래밍 : 제대로

된 안드로이드 앱 개발을 위한 • SW 아키텍트 실무자 포럼 모바일 분과

위원 , NIPA SW 공학센터 • 2012 공개 SW(OSS) 개발자대회 멘토 ,

공개소프트웨어협회

임선용 , 텔레톡비 CTO

http://dicebattle.wordpress.com

• 제 11 회 JCO “Google App Engine과 Android 의 하모니” 발표

• 책 공유 서비스 BooksTour, 모임 관리 서비스 MeetOK 등 수많은 스타트업 서비스 개발

• 2011, 2012 공개 SW 개발자대회 금상 , 은상 수상

• 제 3 회 슈퍼 앱 코리아 우수상 수상

Page 3: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

발표자 소개

임선용 , 텔레톡비 CTOhttp://dicebattle.wordpress.com

• 제 11 회 JCO “Google App Engine 과 Android 의 하모니” 발표

• 책 공유 서비스 BooksTour, 모임 관리 서비스 MeetOK 등 수많은 스타트업 서비스 개발

• 2011, 2012 공개 SW 개발자대회 금상 , 은상 수상

• 제 3 회 슈퍼 앱 코리아 우수상 수상

Page 4: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

발표자 소개

Page 5: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

발표자 소개

여러 의미로 ....

Page 6: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

발표자료는 여기서 !

http://softwaregeeks.org

Page 7: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

발표자료는 여기서 !

#jco13

Page 8: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

1. 모바일 그리고 스타트업

2. 빠르게 개발하려면

3. codebone

4. 개발 하면서

5. 어떻게 적용할까

6. 자동화 도구를 만들자 !

7. 정리

목차

Page 9: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

1. 모바일 그리고 스타트업

2. 빠르게 개발하려면

3. codebone

4. 개발 하면서

5. 어떻게 적용할까

6. 자동화 도구를 만들자 !

7. 정리

목차

Page 10: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

01 모바일 그리고 스타트업

Page 11: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

01 모바일 그리고 스타트업

Page 12: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

01 모바일 그리고 스타트업

Page 13: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

01 모바일 그리고 스타트업

Page 14: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

01 모바일 그리고 스타트업

Page 15: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

01 모바일 그리고 스타트업

2008 2009 2010 20110

1000

2000

3000

4000

1794

2963

SW 벤처 수 변화 Source : 정보통신정책연구원 , 2012.08

Page 16: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

01 모바일 그리고 스타트업

저도 여기 어딘가에 있습니다 ^^;

Page 17: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

01 모바일 그리고 스타트업

Page 18: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

01 모바일 그리고 스타트업

ClientServer웹 페이지관리 콘솔Infra

긴 시간

=

Page 19: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

01 모바일 그리고 스타트업

어떻게 해야빠르게 개발 할 수 있을까 ?

Page 20: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

1. 모바일 그리고 스타트업

2. 빠르게 개발하려면

3. codebone

4. 개발 하면서

5. 어떻게 적용할까

6. 자동화 도구를 만들자 !

7. 정리

목차

Page 21: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

02 빠르게 개발하려면

Page 22: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

02 빠르게 개발하려면

ClientServer웹 페이지관리 콘솔Infra

ClientServer웹 페이지관리 콘솔Infra

ClientServer웹 페이지관리 콘솔Infra

ClientServer웹 페이지관리 콘솔Infra

다른 거 만들 때도 똑같네 ?

Page 23: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

02 빠르게 개발하려면

Page 24: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

02 빠르게 개발하려면

반복적인 작업을 줄일 수 있다면 ?

Page 25: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

02 빠르게 개발하려면

반복적인 작업들을

어떻게 줄일 수 있을

까 ?

Page 26: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

02 빠르게 개발하려면

컴퓨터에게 일을 !!!

Page 27: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

02 빠르게 개발하려면

이클립스Generate Setter/ Getter

Page 28: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

02 빠르게 개발하려면

Page 29: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

02 빠르게 개발하려면

다른 언어에서는

Page 30: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

02 빠르게 개발하려면

Page 31: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

02 빠르게 개발하려면

자바 진영에는 ...

Page 32: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

02 빠르게 개발하려면

Page 33: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

02 빠르게 개발하려면

단지 ,내 일을 줄이고싶을 뿐이야…

Page 34: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

02 빠르게 개발하려면

Page 35: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

반복적인 일을 자동화하는

codebone 개발기

Page 36: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

1. 모바일 그리고 스타트업

2. 빠르게 개발하려면

3. codebone

4. 개발 하면서

5. 어떻게 적용할까

6. 자동화 도구를 만들자 !

7. 정리

목차

Page 37: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

목차

1) 딜레마

2) 직접 사용하며

3) 소개

1. 모바일 그리고

스타트업

2. 빠르게 개발하려면

3. codebone

4. 개발 하면서

5. 어떻게 적용할까

6. 자동화 도구를 만들

자 !

7. 정리

Page 38: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

03 codebone 개발하며 > 딜레마

Page 39: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

03 codebone 개발하며 > 딜레마

오픈소스 랭킹http://www.ohloh.net/

Page 40: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

03 codebone 개발하며 > 딜레마

130,000 Commit2,000 Contributor

8,000,000 line of code

Page 41: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

03 codebone 개발하며 > 딜레마

1,180,000 Commit4,200 Contributor

24,000,000 line of code

Page 42: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

03 codebone 개발하며 > 딜레마

262 Commit6 Contributor

Page 43: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

03 codebone 개발하며 > 딜레마

상어 수염고래소라

Page 44: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

03 codebone 개발하며 > 딜레마

Page 45: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

03 codebone 개발하며 > 딜레마

왜 만들었는가 ?무엇을 고민했는가 ?

어떻게 해결하였는가 ?

Page 46: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

목차

1) 딜레마

2) 직접 사용하며

3) 소개

1. 모바일 그리고

스타트업

2. 빠르게 개발하려면

3. codebone

4. 개발 하면서

5. 어떻게 적용할까

6. 자동화 도구를 만들

자 !

7. 정리

Page 47: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

03 codebone 개발하며 > 직접 사용하며

Eclipse Plugin

Admin Page

Template

Code

Code Generato

r

DB 정보 전달

DB

코드 인용

코드 생성

Page 48: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

03 codebone 개발하며 > 직접 사용하며

Mission :한 달 안에 베타테스트 ?!

Page 49: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

03 codebone 개발하며 > 직접 사용하며

빠른 개발이 가능서비스 관리용 콘솔

DB 관계를 못 가져옴관리용 콘솔의 불편함서버만 자동화됨문서화 도구 필요

총평 : 좋은데 좀 아쉬워

장점 :

단점 :

Page 50: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

03 codebone 개발하며 > 직접 사용하며

0.1 Release 0.2 Start

Page 51: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

목차

1) 딜레마

2) 직접 사용하며

3) 소개

1. 모바일 그리고

스타트업

2. 빠르게 개발하려면

3. codebone

4. 개발 하면서

5. 어떻게 적용할까

6. 자동화 도구를 만들

자 !

7. 정리

Page 52: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

03 codebone 개발하며 > 소개

github.com/withmomo/codebone

Page 53: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

03 codebone 개발하며 > 소개

동영상http://blog.softwaregeeks.org/

archives/907

Page 54: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

03 codebone 개발하며 > 소개

Domain ASource Code

Domain BSource Code

Domain CSource Code

Domain DSource Code

Skeleton

Spring

Hibernate

Spring MVC

Spring Security

Org Man-ager

Sitemesh

Auth Menu

Source Generator

Database Schema Crawler

Template File Loader

Object Relation Man-ager

Mustache Mapper

Console Manager

Page 55: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

스키마 불러오기

관계 분석 소스코드 생성

Source GeneratorApache commons + SchemaCrawler + mustache

03 codebone 개발하며 > 소개

Page 56: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

{{#columns}}public {{{javaType}}} get{{nameCamelcase}}(){ return {{name}};}{{/columns}}

public Long getIndex(){ return index;}public String getData(){ return data;}

Source Generator

03 codebone 개발하며 > 소개

Page 57: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

SkeletonSpring 3.1 + Hibernate + Jersey + Swagger +

Bootstrap

03 codebone 개발하며 > 소개

Page 58: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

03 codebone 개발하며 > 소개

필요한 것을 묶어 한번에 !

Page 59: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

03 codebone 개발하며 > 소개

codebone 을 사용한다면 ...

Page 60: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

03 codebone 개발하며 > 소개

• 코드생성기• 관리자 사이트• REST APIs• 안드로이드 REST APIs• API 문서

Page 61: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

발표자 소개

진성주 ( @geekbeast )http://softwaregeeks.org

• KTH – 플랫폼개발팀 PD• ( 저 ) 안드로이드 프로그래밍 : 제대로

된 안드로이드 앱 개발을 위한 • SW 아키텍트 실무자 포럼 모바일 분과

위원 , NIPA SW 공학센터 • 2012 공개 SW(OSS) 개발자대회 멘토 ,

공개소프트웨어협회

Page 62: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

1. 모바일 그리고 스타트업

2. 빠르게 개발하려면

3. codebone

4. 개발 하면서

5. 과연 나에게는 ?

6. 자동화 도구를 만들자 !

7. 정리

목차

Page 63: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

목차

1) 메타데이터

2) 다양한 요구사항

3) 서버와 모바일을 한방에

4) Git, Versioning

1. 모바일 그리고

스타트업

2. 빠르게 개발하려면

3. codebone

4. 개발 하면서

5. 과연 나에게는 ?

6. 자동화 도구를 만들

자 !

7. 정리

Page 64: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

목차

1) 메타데이터

2) 다양한 요구사항

3) 서버와 모바일을 한방에

4) Git, Versioning

1. 모바일 그리고

스타트업

2. 빠르게 개발하려면

3. codebone

4. 개발 하면서

5. 과연 나에게는 ?

6. 자동화 도구를 만들

자 !

7. 정리

Page 65: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

메타데이터정보를 지적으로 통제하고 구조적으로

접근할 수 있도록 하기 위해서 정보

유형을 정리한

2 차적인 정보를 말한다

04 개발 하면서 > 메타데이터

Page 66: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

04 개발 하면서 > 메타데이터

엑셀에서 !

Page 67: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

04 개발 하면서 > 메타데이터

DBMS 에서 !

Page 68: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

@Controller@RequestMapping("/bootstrap")public class BootstrapController extends AbstractController{

@Autowiredprivate ManagerService managerService;@Autowiredprivate AuthoritiesService

authoritiesService;@Autowiredprivate OrganizationService

organizationService; 

04 개발 하면서 > 메타데이터

Java code 에서 !

Page 69: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

메타데이터잘활용하면 굉장한 일을 !!!

04 개발 하면서 > 메타데이터

Page 70: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

스키마 불러오기 관계 분석 소스코드

생성

Database Metadata!!!

04 개발 하면서 > 메타데이터

Page 71: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

Database

Metadata 를 어떻게

알 수 있을까 ?

04 개발 하면서 > 메타데이터

Page 72: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

JDBC (Java Database Connectivity)

04 개발 하면서 > 메타데이터

Page 73: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

04 개발 하면서 > 메타데이터

Page 74: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

DatabaseMetaData meta = connector.getConnection().getMetaData(); ResultSet datas = meta.getTables("", "", "", null); while (datas.next()) {

out.println(datas.getString("TABLE_NAME")); }

복잡한 JDBC

04 개발 하면서 > 메타데이터

Page 75: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

Java MySQL PostgreSQL Oracle

Integer INT INT INTEGER

Long BIGINT BIGINT X

String X X LONG

Date DATE DATE X

Java.sql.Timestamp X X DATE

Byte[] BLOB BLOB X

Java.sql.Blob X X BLOB

Java Type, DB Type 불일치

04 개발 하면서 > 메타데이터

Page 76: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

04 개발 하면서 > 메타데이터

• 복잡한 JDBC• 타입불일치

Page 77: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

http://schemacrawler.sourceforge.net/

04 개발 하면서 > 메타데이터

Page 78: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

04 개발 하면서 > 메타데이터

DatabaseMetaData meta = connector.getConnection().getMetaData(); ResultSet datas = meta.getTables("", "", "", null); while (datas.next()) {

out.println(datas.getString("TABLE_NAME")); }

Schema schema=database.getSchema(database); Table table = database.getTable(schema, ta-ble);

Page 79: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

04 개발 하면서 > 메타데이터

테이블 정보를 바탕으로 관계를 파악 !

Page 80: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

04 개발 하면서 > 메타데이터

관계• One To One• One To Many• Many To Many

Page 81: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

OneToOne

04 개발 하면서 > 메타데이터

People

ID Name Partner_id

1 AMY 1

2 DARREL 3

3 LYDIA 2

Partner

ID Partner_Name

1 HENDEL

2 SOPIA

3 LISA

4 SETH

Page 82: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

OneToMany

04 개발 하면서 > 메타데이터

User

ID Name

1 Dice

2 Realbeast

3 Samerook

4 Anbaeng

Post

ID Post_Title User_id

1 Hello World 2

2 I’m Hungry 1

3 Studying… 4

4 Test! 1

Page 83: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

ManyToMany

04 개발 하면서 > 메타데이터

Mapping Table

Prog_id Lang_id

1 1

1 2

2 2

2 3

3 1

3 3

4 4

Programmer

ID Name

1 Dice

2 Realbeast

3 Samerook

4 Anbaeng

Language

ID Lang_Title

1 C

2 Java

3 Python

4 Objective-C

Page 84: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

04 개발 하면서 > 메타데이터

관계• One To One• One To Many• Many To ManyPrimary Key, Foreign Key

등메타 데이터 관계 !

Page 85: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

for (Column column : table.getColumns()) { if (column.isPartOfForeignKey()) { if (isUniqueColumn (column)) { relation = new Relationship(column, OneToOne); } else { relation = new Relationship(column, OneToMany); }

04 개발 하면서 > 메타데이터

Page 86: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

04 개발 하면서 > 메타데이터

{{#foreignKey}}{{#onetoone}}@OneToOne{{/onetoone}}{{#onetomany}}@OneToMany{{/onetomany}}{{#manytomany}}@ManyToMany{{/manytomany}}{{/foreignKey}}

@OneToMany@JoinColumn(name="userid")private List<Address> ad-dress;

@OneToOne@JoinColumn(name=“stockid")private StockDetail stock_detail;Source Generator

Page 87: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

04 개발 하면서 > 메타데이터

데이터베이스 메타데이터잘 활용 !

Page 88: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

04 개발 하면서 > 메타데이터

http://www.hanb.co.kr/ebook/look.html?isbn=9788979149418

Page 89: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

04 개발 하면서 > 메타데이터

코드의 문제점을 문서화하지 않는다 . 클래스에 버그가 있을 수 있다는 사실을 발견 했으면혼자만의 비밀로 간직한다

- 유지보수하기 어렵게 코딩하는 방법

Page 90: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

04 개발 하면서 > 메타데이터

이러면 같이 망해요 !

Page 91: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

중요하지만개발자에게는 하기 싫은

04 개발 하면서 > 메타데이터

문서화

Page 92: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

04 개발 하면서 > 메타데이터

모바일은데이터만 !!{ "application" : "964dab15-23c80", "entities" : [ { "uuid" : "964dab15-23c", "type" : "application", "name" : "realbeast/sandbox", "created" : 1351735519668, "modified" : 1351758899448 } ]}

Page 93: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

REST API 문서

04 개발 하면서 > 메타데이터

Page 94: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

Swaggerhttp://developers.helloreverb.com/

swagger

04 개발 하면서 > 메타데이터

Page 95: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

Annotation

@POST@ApiOperation(value = “User Create")public User create(@ApiParam(value="Creating User Data“)@ModelAttribute User model) {

return service.create(model);}

04 개발 하면서 > 메타데이터

Page 96: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

{ "apiVersion" : "0.2", "apis" : [ { "description" : "Operations about user", "operations" : [ { "httpMethod" : "POST", "nickname" : "createUsersWithArrayInput", "parameters" : [ { "allowMultiple" : false, "dataType" : "Array[User]", "description" : "List of user object", "paramType" : "body", "required" : true } ], "responseClass" : "void", "summary" : "Creates list of users with given input array" } ], "path" : "/user.{format}/createWithArray" },

JSON Data

04 개발 하면서 > 메타데이터

Page 97: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

04 개발 하면서 > 메타데이터

Page 98: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

04 개발 하면서 > 메타데이터

Page 99: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

목차

1) 메타데이터

2) 다양한 요구사항

3) 서버와 모바일을 한방에

4) Git, Versioning

1. 모바일 그리고

스타트업

2. 빠르게 개발하려면

3. codebone

4. 개발 하면서

5. 과연 나에게는 ?

6. 자동화 도구를 만들

자 !

7. 정리

Page 100: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

04 개발 하면서 > 다양한 요구사항

데이터베이스 메타 데이터를 활용 !

Page 101: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

04 개발 하면서 > 다양한 요구사항

사용자가 원하는 출력으로public class {{tableNameCamelcase}}{

{{#columns}}{{#primaryKey}}@Id@GeneratedValue(strategy = GenerationType.IDENTITY){{/primaryKey}}{{#foreignKey}}@OneToMany{{/foreignKey}}{{^foreignKey}}@Column{{/foreignKey}}private {{{javaType}}} {{name}} = {{{defaultValue}}};{{/columns}}

Page 102: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

04 개발 하면서 > 다양한 요구사항

코드를 생성하여 자동화 !

Page 103: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

String source = "name"; String replaced = source.replaceAll("name", "realbeast");

04 개발 하면서 > 다양한 요구사항

Page 104: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

04 개발 하면서 > 다양한 요구사항

Page 105: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

04 개발 하면서 > 다양한 요구사항

http://www.dustindiaz.com/regular-expression-back-matching

Page 106: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

String COLUMN_LOOP_REGEX = "\\{COLUMN_LOOP\\}.*?\\{/COLUMN_LOOP\\}"; String COLUMN_LOOP_EXCLUDE_PREDEFINED_REGEX = "\\{COLUMN_LOOP_EXCLUDE_PREDEFINED\\}.*?\\{/COLUMN_LOOP_EXCLUDE_PREDEFINED\\}";

String SEARCH = "\\{SEARCH\\}.*?\\{/SEARCH\\}"; StringCOLUMN_LOOP_SEARCH_REGEX = "\\{COLUMN_LOOP_SEARCH\\}.*?\\{/COLUMN_LOOP_SEARCH\\}";

04 개발 하면서 > 다양한 요구사항

Page 107: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

04 개발 하면서 > 다양한 요구사항

• 테이블 이름을 Camelcase 로 변환해줘• Primary Key 이고 Auto increment

이면 입력 시 제외시켜줘• OneToOne 관계에서는 특정한 키워드로

변환해줘• 데이터 타입이 timestamp 일 때

사용자에 맞게 뭘 해줘… • 컬럼 설명을 가져와서 변환해줘

변화에 대처하기 어려움

Page 108: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

04 개발 하면서 > 다양한 요구사항

Page 109: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

다양한 사람들이

사용할 수 있을

까 ?

04 개발 하면서 > 다양한 요구사항

Page 110: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

데이터와

출력분리 !

04 개발 하면서 > 다양한 요구사항

Page 111: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

mustachehttp://mustache.github.com

04 개발 하면서 > 다양한 요구사항

Page 112: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

04 개발 하면서 > 다양한 요구사항

Page 113: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

04 개발 하면서 > 다양한 요구사항

Page 114: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

public Long getIndex(){ return index;}public String getData(){ return data;}

{{#columns}}public {{{javaType}}} get{{nameCamelcase}}(){ return {{name}};}{{/columns}}

template engine - mustache

04 개발 하면서 > 다양한 요구사항

Page 115: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

목차

1) 메타데이터

2) 다양한 요구사항

3) 서버와 모바일을 한방에

4) Git, Versioning

1. 모바일 그리고

스타트업

2. 빠르게 개발하려면

3. codebone

4. 개발 하면서

5. 과연 나에게는 ?

6. 자동화 도구를 만들

자 !

7. 정리

Page 116: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

04 개발 하면서 > 서버와 모바일을 한방에

REST API

Page 117: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

04 개발 하면서 > 서버와 모바일을 한방에

HTTP 표준 메소드

CRUD

Crate

Read

Update

Delete

SQL

INSERT

SELECT

UPDATE

DELETE

HTTP

POST

GET

PUT

DELETE

Page 118: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

04 개발 하면서 > 서버와 모바일을 한방에

https://myapp.com/users POS

TGET PUT

DELETE

/users O O X X

/users/{id} X O O O

Page 119: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

04 개발 하면서 > 서버와 모바일을 한방에

@GET@Path("/{idx}")@Consumes({ "application/json" })@Produces({ "application/json" })public {{tableNameCamelcase}} get(@PathParam("idx") String idx) {

return ({{tableNameCamelcase}}) service.read(idx).getData();}

@GET@Path("/")@Consumes({ "application/json" })@Produces({ "application/json" })@ApiOperation(value = "{{tableNameCamelcase}} List Read")public List<{{tableNameCamelcase}}> list(@QueryParam("page") Integer page) {

if( page == null ) page = 1;return (List) service.list(page).getData();

}

Page 120: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

04 개발 하면서 > 서버와 모바일을 한방에

@POST@Consumes("application/json") public User create(@ModelAttribute User model) {return service.create(model);}

REST API 자동 생성 !

Page 121: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

04 개발 하면서 > 서버와 모바일을 한방에

백엔드는 자동화를 했는데모바일은 ?!

Page 122: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

04 개발 하면서 > 서버와 모바일을 한방에

클라이언트 네트워크 통신은

upload

download

다운로드- 네트워크 통신- 데이터를 객체로

업로드- 객체를 데이터로- 네트워크 통신

Page 123: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

HttpClient client = new DefaultHttpClient();HttpGet get = new HttpGet();get.setURI(new URI("http://www.google.com/"));HttpResponse resp = client.execute(get);BufferedReader br = new BufferedReader(new InputStreamReader(resp.getEntity().getContent()));String str = null;StringBuffer sb = new StringBuffer();while ((str = br.readLine()) != null) { sb.append(str).append(" ");}br.close();

04 개발 하면서 > 서버와 모바일을 한방에

Java http client code

Page 124: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

04 개발 하면서 > 서버와 모바일을 한방에

Spring For Android

Page 125: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

HttpHeaders requestHeaders = new HttpHeaders();requestHeaders.setContentType(new MediaType("text", "xml"));HttpEntity<String> requestEntity = new HttpEntity<String>(requestHeaders);String url = “http://google.com";RestTemplate restTemplate = new RestTemplate();ResponseEntity<String> responseEntity = restTemplate.exchange(url,HttpMethod.GET, requestEntity, String.class);String result = responseEntity.getBody();

04 개발 하면서 > 서버와 모바일을 한방에

과연 좋아졌나요 ?

Spring for Android code

Page 126: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

04 개발 하면서 > 서버와 모바일을 한방에

retrofithttps://github.com/square/retrofit

Page 127: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

04 개발 하면서 > 서버와 모바일을 한방에

사용자 정보 조회 APIhttps://api.github.com/users/{user_id}

Page 128: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

class User { String id; String login; String name; String blog; String avatar_url;}

04 개발 하면서 > 서버와 모바일을 한방에

사용자 클래스

Page 129: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

interface GitHub { @GET("users/{id}") User getUser(@Named("id") String id);}

04 개발 하면서 > 서버와 모바일을 한방에

통신할 인터페이스 정의

Page 130: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

RestAdapter restAdapter = new RestAdapter.Builder().setServer(“https://api.github.com/”).build();

GitHub github = restAdapter.create(GitHub.class);User me = github.getUser("realbeast");

04 개발 하면서 > 서버와 모바일을 한방에

실제 통신

Page 131: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

04 개발 하면서 > 서버와 모바일을 한방에public interface {{tableNameCamelcase}}RestService {

@POST("/api/{{mappingUri}}")void create(@SingleEntity {{tableNameCamelcase}}

{{tableNameLowercase}});

@GET("/api/{{mappingUri}}")List<{{tableNameCamelcase}}> getList(@Named("page") int

page);

@GET("/api/{{mappingUri}}/{id}"){{tableNameCamelcase}} get(@Named("id")

{{primaryKeyType}} id);

@PUT("/api/{{mappingUri}}/{id}")void update(@SingleEntity {{tableNameCamelcase}}

{{tableNameLowercase}});

@DELETE("/api/{{mappingUri}}/{id}"){{tableNameCamelcase}} delete(@Named("id")

{{primaryKeyType}} id);}

Page 132: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

04 개발 하면서 > 서버와 모바일을 한방에

서버와 모바일을 한방에 !!

Page 133: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

목차

1) 메타데이터

2) 다양한 요구사항

3) 서버와 모바일을 한방에

4) Git, Versioning

1. 모바일 그리고

스타트업

2. 빠르게 개발하려면

3. codebone

4. 개발 하면서

5. 과연 나에게는 ?

6. 자동화 도구를 만들

자 !

7. 정리

Page 134: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

gi

tsv

n

git

04 개발 하면서 > Git,Versioning

Google

Trend

Page 135: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

04 개발 하면서 > Git,Versioning

Page 136: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

누가 어렵지

않다고 했던

가 !!!

04 개발 하면서 > Git,Versioning

Page 137: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

04 개발 하면서 > Git,Versioning

Page 138: 반복적인 코드 작업 자동화, Codebone으로 손쉽게
Page 139: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

Git 왜 이렇게 어려울까요 ?

04 개발 하면서 > Git,Versioning

Page 140: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

깃이 어려웠던 이유1. GUI 에 익숙2. 브랜치 모델 어색함

04 개발 하면서 > Git,Versioning

Page 141: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

04 개발 하면서 > Git,Versioning

Page 142: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

>win

04 개발 하면서 > Git,Versioning

Page 143: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

04 개발 하면서 > Git,Versioning

http://www.sourcetreeapp.com

Page 144: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

04 개발 하면서 > Git,Versioning

http://www.syntevo.com/smartgithg

Page 145: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

http://opentutorials.org

04 개발 하면서 > Git,Versioning

Page 146: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

http://learnbranch.urigit.com/

04 개발 하면서 > Git,Versioning

Page 147: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

http://goo.gl/H9vKa

04 개발 하면서 > Git,Versioning

Page 148: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

배포를 하려고 하는데 버전은 어떻게 ?

04 개발 하면서 > Git,Versioning

Page 149: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

http://semver.org한글 : http://spoqa.github.com/2012/12/18/semantic-versioning.html

04 개발 하면서 > Git,Versioning

Page 150: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

X.Y.Z (Major.Minor.Patch)• 중요 업데이트 : 1.0.0 -> 2.0.0• 마이너 업데이트 : 1.1.0 -> 1.2.0• 버그 개선 버전 : 0.1.1 -> 0.1.2• 최초 개발 버전 : 0.1.0• 선행배포 : 0.X.0-alpha, 0.X.0-beta• 빌드버전 : 0.1.1+build.29

04 개발 하면서 > Git,Versioning

Page 151: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

git-flow 이용하세요 !

04 개발 하면서 > Git,Versioning

Page 152: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

04 개발 하면서 > Git,Versioning

http://nvie.com/git-model

Page 153: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

04 개발 하면서 > Git,Versioning

Page 154: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

Git,Versioning

신기술을 쓰면 학습 비용도 생각하자

04 개발 하면서 > Git,Versioning

Page 155: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

목차

1) 메타데이터

2) 다양한 요구사항

3) 서버와 모바일을 한방에

4) Git, Versioning

1. 모바일 그리고

스타트업

2. 빠르게 개발하려면

3. codebone

4. 개발 하면서

5. 과연 나에게는 ?

6. 자동화 도구를 만들

자 !

7. 정리

Page 156: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

1. 모바일 그리고 스타트업

2. 빠르게 개발하려면

3. codebone

4. 개발 하면서

5. 과연 나에게는 ?

6. 자동화 도구를 만들자 !

7. 정리

목차

Page 157: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

05 과연 나에게는 ?

No Silver Bullet!

Page 158: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

05 과연 나에게는 ?

codebone 만들었습니다 ! 써보세요 !

mybatis 지원 되나요 ?한국에서 Hibernate 는 거의

안써요

Page 159: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

05 과연 나에게는 ?

코드 제너레이터로생성하고 싶은 템플릿을만들어 봅시다 !

Page 160: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

05 과연 나에게는 ?

<insert id="insertManager" parameterType="org.codebone.Manager">insert into Manager (createDate,email,enabled,id,name)values(#{createDate},#{email},#{enabled},#{id},#{name})</insert>

Page 161: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

05 과연 나에게는 ?

<insert id="insert{{tableNameCamelcase}}" parameterType="{{package}}{{tableName}}">insert into {{tableName}} ({{#columns}}{{^primaryKey}}{{name}},{{/primaryKey}}{{/columns}})values({{#columns}}{{^primaryKey}}#{ {{name}} },{{/primaryKey}}{{/columns}})</insert>

Page 162: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

05 과연 나에게는 ?

반복적인 곳을 템플릿으로 !

Page 163: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

1. 모바일 그리고 스타트업

2. 빠르게 개발하려면

3. codebone

4. 개발 하면서

5. 과연 나에게는 ?

6. 자동화 도구를 만들자 !

7. 정리

목차

Page 164: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

05 과연 나에게는 ?

Page 165: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

06 직접 만드려면

내 행동패턴 분석

어떻게 자동화 할 것인가 ?

자동화 도구 개발 , 도전 !

나만의 도구를 개발 !

Page 166: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

06 직접 만드려면

Page 167: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

Q : Netty 를 어떻게 시작하셨나요 ?

업무를 하면서 필요로 했고원래 라이브러리에 관심이 많았으며회사에서 개발시 반복되는 업무가 있어 그게 계기가 되어 시작그 필요한 라이브러리를 오픈소스로 하면 좋겠다 생각하여 진행

06 직접 만드려면

Page 168: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

06 직접 만드려면

Page 169: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

1. 모바일 그리고 스타트업

2. 빠르게 개발하려면

3. codebone

4. 개발 하면서

5. 과연 나에게는 ?

6. 자동화 도구를 만들자 !

7. 정리

목차

Page 170: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

반복적인 코드를

codebone 으로 손쉽

게 !

07 정리

Page 171: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

자신만의 자동화 도구를

오늘부터 만들어 보자

07 정리

Page 172: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

Q & A질의응답

임선용Facebook : http://www.facebook.com/dicebattleBlog : http://dicebattle.wordpress.com/

진성주Twitter : http://twitter.com/geekbeastBlog : http://softwaregeeks.org

Page 173: 반복적인 코드 작업 자동화, Codebone으로 손쉽게

감사합니다

Thanks to늘 곁에서 함께하는 MOMO열린 마음으로 서로의 성장을 함께하는 EVA 식구들 ..그리고 , 공유하며 성장할 수 있도록 함께 도와주신 동료 분들께한분한분 감사의 인사를 드립니다 .