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

Post on 14-Nov-2014

7.331 Views

Category:

Technology

15 Downloads

Preview:

Click to see full reader

DESCRIPTION

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

TRANSCRIPT

반복적인 코드 작업 자동화 , 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 회 슈퍼 앱 코리아 우수상 수상

발표자 소개

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

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

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

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

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

발표자 소개

발표자 소개

여러 의미로 ....

발표자료는 여기서 !

http://softwaregeeks.org

발표자료는 여기서 !

#jco13

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

2. 빠르게 개발하려면

3. codebone

4. 개발 하면서

5. 어떻게 적용할까

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

7. 정리

목차

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

2. 빠르게 개발하려면

3. codebone

4. 개발 하면서

5. 어떻게 적용할까

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

7. 정리

목차

01 모바일 그리고 스타트업

01 모바일 그리고 스타트업

01 모바일 그리고 스타트업

01 모바일 그리고 스타트업

01 모바일 그리고 스타트업

01 모바일 그리고 스타트업

2008 2009 2010 20110

1000

2000

3000

4000

1794

2963

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

01 모바일 그리고 스타트업

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

01 모바일 그리고 스타트업

01 모바일 그리고 스타트업

ClientServer웹 페이지관리 콘솔Infra

긴 시간

=

01 모바일 그리고 스타트업

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

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

2. 빠르게 개발하려면

3. codebone

4. 개발 하면서

5. 어떻게 적용할까

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

7. 정리

목차

02 빠르게 개발하려면

02 빠르게 개발하려면

ClientServer웹 페이지관리 콘솔Infra

ClientServer웹 페이지관리 콘솔Infra

ClientServer웹 페이지관리 콘솔Infra

ClientServer웹 페이지관리 콘솔Infra

다른 거 만들 때도 똑같네 ?

02 빠르게 개발하려면

02 빠르게 개발하려면

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

02 빠르게 개발하려면

반복적인 작업들을

어떻게 줄일 수 있을

까 ?

02 빠르게 개발하려면

컴퓨터에게 일을 !!!

02 빠르게 개발하려면

이클립스Generate Setter/ Getter

02 빠르게 개발하려면

02 빠르게 개발하려면

다른 언어에서는

02 빠르게 개발하려면

02 빠르게 개발하려면

자바 진영에는 ...

02 빠르게 개발하려면

02 빠르게 개발하려면

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

02 빠르게 개발하려면

반복적인 일을 자동화하는

codebone 개발기

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

2. 빠르게 개발하려면

3. codebone

4. 개발 하면서

5. 어떻게 적용할까

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

7. 정리

목차

목차

1) 딜레마

2) 직접 사용하며

3) 소개

1. 모바일 그리고

스타트업

2. 빠르게 개발하려면

3. codebone

4. 개발 하면서

5. 어떻게 적용할까

6. 자동화 도구를 만들

자 !

7. 정리

03 codebone 개발하며 > 딜레마

03 codebone 개발하며 > 딜레마

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

03 codebone 개발하며 > 딜레마

130,000 Commit2,000 Contributor

8,000,000 line of code

03 codebone 개발하며 > 딜레마

1,180,000 Commit4,200 Contributor

24,000,000 line of code

03 codebone 개발하며 > 딜레마

262 Commit6 Contributor

03 codebone 개발하며 > 딜레마

상어 수염고래소라

03 codebone 개발하며 > 딜레마

03 codebone 개발하며 > 딜레마

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

어떻게 해결하였는가 ?

목차

1) 딜레마

2) 직접 사용하며

3) 소개

1. 모바일 그리고

스타트업

2. 빠르게 개발하려면

3. codebone

4. 개발 하면서

5. 어떻게 적용할까

6. 자동화 도구를 만들

자 !

7. 정리

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

Eclipse Plugin

Admin Page

Template

Code

Code Generato

r

DB 정보 전달

DB

코드 인용

코드 생성

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

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

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

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

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

총평 : 좋은데 좀 아쉬워

장점 :

단점 :

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

0.1 Release 0.2 Start

목차

1) 딜레마

2) 직접 사용하며

3) 소개

1. 모바일 그리고

스타트업

2. 빠르게 개발하려면

3. codebone

4. 개발 하면서

5. 어떻게 적용할까

6. 자동화 도구를 만들

자 !

7. 정리

03 codebone 개발하며 > 소개

github.com/withmomo/codebone

03 codebone 개발하며 > 소개

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

archives/907

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

스키마 불러오기

관계 분석 소스코드 생성

Source GeneratorApache commons + SchemaCrawler + mustache

03 codebone 개발하며 > 소개

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

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

Source Generator

03 codebone 개발하며 > 소개

SkeletonSpring 3.1 + Hibernate + Jersey + Swagger +

Bootstrap

03 codebone 개발하며 > 소개

03 codebone 개발하며 > 소개

필요한 것을 묶어 한번에 !

03 codebone 개발하며 > 소개

codebone 을 사용한다면 ...

03 codebone 개발하며 > 소개

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

발표자 소개

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

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

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

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

공개소프트웨어협회

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

2. 빠르게 개발하려면

3. codebone

4. 개발 하면서

5. 과연 나에게는 ?

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

7. 정리

목차

목차

1) 메타데이터

2) 다양한 요구사항

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

4) Git, Versioning

1. 모바일 그리고

스타트업

2. 빠르게 개발하려면

3. codebone

4. 개발 하면서

5. 과연 나에게는 ?

6. 자동화 도구를 만들

자 !

7. 정리

목차

1) 메타데이터

2) 다양한 요구사항

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

4) Git, Versioning

1. 모바일 그리고

스타트업

2. 빠르게 개발하려면

3. codebone

4. 개발 하면서

5. 과연 나에게는 ?

6. 자동화 도구를 만들

자 !

7. 정리

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

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

유형을 정리한

2 차적인 정보를 말한다

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

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

엑셀에서 !

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

DBMS 에서 !

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

@Autowiredprivate ManagerService managerService;@Autowiredprivate AuthoritiesService

authoritiesService;@Autowiredprivate OrganizationService

organizationService; 

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

Java code 에서 !

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

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

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

생성

Database Metadata!!!

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

Database

Metadata 를 어떻게

알 수 있을까 ?

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

JDBC (Java Database Connectivity)

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

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

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

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

복잡한 JDBC

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

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 개발 하면서 > 메타데이터

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

• 복잡한 JDBC• 타입불일치

http://schemacrawler.sourceforge.net/

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

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);

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

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

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

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

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

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

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

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

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

등메타 데이터 관계 !

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

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

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

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

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

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

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

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

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

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

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

이러면 같이 망해요 !

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

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

문서화

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

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

REST API 문서

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

Swaggerhttp://developers.helloreverb.com/

swagger

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

Annotation

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

return service.create(model);}

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

{ "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 개발 하면서 > 메타데이터

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

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

목차

1) 메타데이터

2) 다양한 요구사항

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

4) Git, Versioning

1. 모바일 그리고

스타트업

2. 빠르게 개발하려면

3. codebone

4. 개발 하면서

5. 과연 나에게는 ?

6. 자동화 도구를 만들

자 !

7. 정리

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

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

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

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

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

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

코드를 생성하여 자동화 !

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

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

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

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

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

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 개발 하면서 > 다양한 요구사항

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

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

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

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

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

변화에 대처하기 어려움

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

다양한 사람들이

사용할 수 있을

까 ?

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

데이터와

출력분리 !

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

mustachehttp://mustache.github.com

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

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

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

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

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

template engine - mustache

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

목차

1) 메타데이터

2) 다양한 요구사항

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

4) Git, Versioning

1. 모바일 그리고

스타트업

2. 빠르게 개발하려면

3. codebone

4. 개발 하면서

5. 과연 나에게는 ?

6. 자동화 도구를 만들

자 !

7. 정리

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

REST API

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

HTTP 표준 메소드

CRUD

Crate

Read

Update

Delete

SQL

INSERT

SELECT

UPDATE

DELETE

HTTP

POST

GET

PUT

DELETE

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

https://myapp.com/users POS

TGET PUT

DELETE

/users O O X X

/users/{id} X O O O

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();

}

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

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

REST API 자동 생성 !

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

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

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

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

upload

download

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

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

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

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

Spring For Android

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

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

retrofithttps://github.com/square/retrofit

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

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

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

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

사용자 클래스

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

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

통신할 인터페이스 정의

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

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

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

실제 통신

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);}

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

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

목차

1) 메타데이터

2) 다양한 요구사항

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

4) Git, Versioning

1. 모바일 그리고

스타트업

2. 빠르게 개발하려면

3. codebone

4. 개발 하면서

5. 과연 나에게는 ?

6. 자동화 도구를 만들

자 !

7. 정리

gi

tsv

n

git

04 개발 하면서 > Git,Versioning

Google

Trend

04 개발 하면서 > Git,Versioning

누가 어렵지

않다고 했던

가 !!!

04 개발 하면서 > Git,Versioning

04 개발 하면서 > Git,Versioning

Git 왜 이렇게 어려울까요 ?

04 개발 하면서 > Git,Versioning

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

04 개발 하면서 > Git,Versioning

04 개발 하면서 > Git,Versioning

>win

04 개발 하면서 > Git,Versioning

04 개발 하면서 > Git,Versioning

http://www.sourcetreeapp.com

04 개발 하면서 > Git,Versioning

http://www.syntevo.com/smartgithg

http://opentutorials.org

04 개발 하면서 > Git,Versioning

http://learnbranch.urigit.com/

04 개발 하면서 > Git,Versioning

http://goo.gl/H9vKa

04 개발 하면서 > Git,Versioning

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

04 개발 하면서 > Git,Versioning

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

04 개발 하면서 > Git,Versioning

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

git-flow 이용하세요 !

04 개발 하면서 > Git,Versioning

04 개발 하면서 > Git,Versioning

http://nvie.com/git-model

04 개발 하면서 > Git,Versioning

Git,Versioning

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

04 개발 하면서 > Git,Versioning

목차

1) 메타데이터

2) 다양한 요구사항

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

4) Git, Versioning

1. 모바일 그리고

스타트업

2. 빠르게 개발하려면

3. codebone

4. 개발 하면서

5. 과연 나에게는 ?

6. 자동화 도구를 만들

자 !

7. 정리

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

2. 빠르게 개발하려면

3. codebone

4. 개발 하면서

5. 과연 나에게는 ?

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

7. 정리

목차

05 과연 나에게는 ?

No Silver Bullet!

05 과연 나에게는 ?

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

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

안써요

05 과연 나에게는 ?

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

05 과연 나에게는 ?

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

05 과연 나에게는 ?

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

05 과연 나에게는 ?

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

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

2. 빠르게 개발하려면

3. codebone

4. 개발 하면서

5. 과연 나에게는 ?

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

7. 정리

목차

05 과연 나에게는 ?

06 직접 만드려면

내 행동패턴 분석

어떻게 자동화 할 것인가 ?

자동화 도구 개발 , 도전 !

나만의 도구를 개발 !

06 직접 만드려면

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

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

06 직접 만드려면

06 직접 만드려면

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

2. 빠르게 개발하려면

3. codebone

4. 개발 하면서

5. 과연 나에게는 ?

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

7. 정리

목차

반복적인 코드를

codebone 으로 손쉽

게 !

07 정리

자신만의 자동화 도구를

오늘부터 만들어 보자

07 정리

Q & A질의응답

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

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

감사합니다

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

top related