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

11,667 views

Published on

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

Published in: Technology
1 Comment
18 Likes
Statistics
Notes
No Downloads
Views
Total views
11,667
On SlideShare
0
From Embeds
0
Number of Embeds
7,224
Actions
Shares
0
Downloads
86
Comments
1
Likes
18
Embeds 0
No embeds

No notes for slide

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

  1. 1. 반복적읶 코드 작업 자동화, codebone으로 손쉽게 임선용, 짂성주
  2. 2. 발표자 소개임선용, 텔레톡비 CTO 짂성주 ( @geekbeast ) http://dicebattle.wordpress.com http://softwaregeeks.org• 제 11회 JCO “Google App Engine과 • KTH – 플랫폼개발팀 PD Android의 하모니” 발표 • (저) 앆드로이드 프로그래밍 : 제대로 된• 책 공유 서비스 BooksTour, 모임 관리 앆드로이드 앱 개발을 위핚 서비스 MeetOK 등 수많은 스타트업 • SW 아키텍트 실무자 포럼 모바읷 분과 서비스 개발 위원, NIPA SW 공학센터• 2011, 2012 공개SW 개발자대회 금상, • 2012 공개SW(OSS) 개발자대회 멘토, 은상 수상 공개소프트웨어협회• 제 3회 슈퍼 앱 코리아 우수상 수상
  3. 3. 발표자 소개 임선용, 텔레톡비 CTO http://dicebattle.wordpress.com • 제 11회 JCO “Google App Engine과 Android의 하모니” 발표 • 책 공유 서비스 BooksTour, 모임 관리 서비스 MeetOK 등 수많은 스타트업 서비스 개발 • 2011, 2012 공개SW 개발자대회 금상, 은상 수상 • 제 3회 슈퍼 앱 코리아 우수상 수상
  4. 4. 발표자 소개
  5. 5. 발표자 소개여러 의미로....
  6. 6. 발표자료는 여기서!http://softwaregeeks.org
  7. 7. 발표자료는 여기서! #jco13
  8. 8. 목차1. 모바읷 그리고 스타트업2. 빠르게 개발하려면3. codebone4. 개발 하면서5. 어떻게 적용핛까6. 자동화 도구를 만들자!7. 정리
  9. 9. 목차1. 모바일 그리고 스타트업2. 빠르게 개발하려면3. codebone4. 개발 하면서5. 어떻게 적용핛까6. 자동화 도구를 만들자!7. 정리
  10. 10. 01 모바읷 그리고 스타트업
  11. 11. 01 모바읷 그리고 스타트업
  12. 12. 01 모바읷 그리고 스타트업
  13. 13. 01 모바읷 그리고 스타트업
  14. 14. 01 모바읷 그리고 스타트업
  15. 15. 01 모바읷 그리고 스타트업 SW벤처 수 변화 Source : 정보통싞정책연구원, 2012.08 4000 3000 2963 2000 1794 1000 0 2008 2009 2010 2011
  16. 16. 01 모바읷 그리고 스타트업저도 여기 어딘가에 있습니다 ^^;
  17. 17. 01 모바읷 그리고 스타트업
  18. 18. 01 모바읷 그리고 스타트업ClientServer웹 페이지관리 콘솔 = 긴 시갂Infra
  19. 19. 01 모바읷 그리고 스타트업 어떻게 해야 빠르게 개발 핛 수 있을까?
  20. 20. 목차1. 모바읷 그리고 스타트업2. 빠르게 개발하려면3. codebone4. 개발 하면서5. 어떻게 적용핛까6. 자동화 도구를 만들자!7. 정리
  21. 21. 02 빠르게 개발하려면
  22. 22. 02 빠르게 개발하려면 다른Client 거 만들 때도 똑같네? Client Client ClientServer Server Server Server웹 페이지 웹 페이지 웹 페이지 웹 페이지관리 콘솔 관리 콘솔 관리 콘솔 관리 콘솔Infra Infra Infra Infra
  23. 23. 02 빠르게 개발하려면
  24. 24. 02 빠르게 개발하려면반복적인 작업을 줄일 수 있다면?
  25. 25. 02 빠르게 개발하려면 반복적읶 작업들을 어떻게 줄읷 수 있을까?
  26. 26. 02 빠르게 개발하려면 컴퓨터에게 일을!!!
  27. 27. 02 빠르게 개발하려면 이클립스Generate Setter/ Getter
  28. 28. 02 빠르게 개발하려면
  29. 29. 02 빠르게 개발하려면 다른 언어에서는
  30. 30. 02 빠르게 개발하려면
  31. 31. 02 빠르게 개발하려면 자바 짂영에는...
  32. 32. 02 빠르게 개발하려면
  33. 33. 02 빠르게 개발하려면 단지, 내 일을 줄이고 싶을 뿐이야…
  34. 34. 02 빠르게 개발하려면
  35. 35. 반복적읶 읷을 자동화하는codebone 개발기
  36. 36. 목차1. 모바읷 그리고 스타트업2. 빠르게 개발하려면3. codebone4. 개발 하면서5. 어떻게 적용핛까6. 자동화 도구를 만들자!7. 정리
  37. 37. 목차1. 모바읷 그리고 스타트업 1) 딜레마2. 빠르게 개발하려면3. codebone 2) 직접 사용하며4. 개발 하면서 3) 소개5. 어떻게 적용핛까6. 자동화 도구를 만들자!7. 정리
  38. 38. 03 codebone 개발하며 > 딜레마
  39. 39. 03 codebone 개발하며 > 딜레마 오픈소스 랭킹 http://www.ohloh.net/
  40. 40. 03 codebone 개발하며 > 딜레마 130,000 Commit 2,000 Contributor 8,000,000 line of code
  41. 41. 03 codebone 개발하며 > 딜레마 1,180,000 Commit 4,200 Contributor 24,000,000 line of code
  42. 42. 03 codebone 개발하며 > 딜레마 262 Commit 6 Contributor
  43. 43. 03 codebone 개발하며 > 딜레마 상어 소라 수염고래
  44. 44. 03 codebone 개발하며 > 딜레마
  45. 45. 03 codebone 개발하며 > 딜레마 왜 만들었는가? 무엇을 고민했는가? 어떻게 해결하였는가?
  46. 46. 목차1. 모바읷 그리고 스타트업 1) 딜레마2. 빠르게 개발하려면3. codebone 2) 직접 사용하며4. 개발 하면서 3) 소개5. 어떻게 적용핛까6. 자동화 도구를 만들자!7. 정리
  47. 47. 03 codebone 개발하며 > 직접 사용하며 DB DB정보 젂달 Eclipse Plugin Admin Code Page Generator Template Code 코드 코드 생성 읶용
  48. 48. 03 codebone 개발하며 > 직접 사용하며 Mission : 핚 달 안에 베타테스트?!
  49. 49. 03 codebone 개발하며 > 직접 사용하며 빠른 개발이 가능 장점 : 서비스 관리용 콘솔 총평 : 좋은데 좀 아쉬워 DB 관계를 못 가져옴 단점 : 관리용 콘솔의 불편함 서버만 자동화됨 문서화 도구 필요
  50. 50. 03 codebone 개발하며 > 직접 사용하며0.1 Release 0.2 Start
  51. 51. 목차1. 모바읷 그리고 스타트업 1) 딜레마2. 빠르게 개발하려면3. codebone 2) 직접 사용하며4. 개발 하면서 3) 소개5. 어떻게 적용핛까6. 자동화 도구를 만들자!7. 정리
  52. 52. 03 codebone 개발하며 > 소개github.com/withmomo/codebone
  53. 53. 03 codebone 개발하며 > 소개 동영상http://blog.softwaregeeks.org/archives/907
  54. 54. 03 codebone 개발하며 > 소개 Console Manager Domain A Org Mana Auth Menu ger Source Code Mustache Mapper Spring Domain B Sitemesh Security Object Relation Source Code Manager Spring MVC Domain C Template File Loader Source Code Hibernate Database Schema Domain D Crawler Source Code SpringSource Generator Skeleton
  55. 55. 03 codebone 개발하며 > 소개 스키마 관계 분석 소스코드 생성 불러오기 Source Generator Apache commons + SchemaCrawler + mustache
  56. 56. 03 codebone 개발하며 > 소개{{#columns}}public {{{javaType}}} get{{nameCamelcase}}(){ return {{name}};}{{/columns}} Source Generatorpublic Long getIndex(){ return index;}public String getData(){ return data;}
  57. 57. 03 codebone 개발하며 > 소개 SkeletonSpring 3.1 + Hibernate + Jersey + Swagger + Bootstrap
  58. 58. 03 codebone 개발하며 > 소개 필요핚 것을 묶어 핚번에!
  59. 59. 03 codebone 개발하며 > 소개 codebone을 사용핚다면...
  60. 60. 03 codebone 개발하며 > 소개• 코드생성기• 관리자 사이트• REST APIs• 안드로이드 REST APIs• API 문서
  61. 61. 발표자 소개짂성주 ( @geekbeast ) http://softwaregeeks.org• KTH – 플랫폼개발팀 PD• (저) 앆드로이드 프로그래밍 : 제대로 된 앆드로이드 앱 개발을 위핚• SW 아키텍트 실무자 포럼 모바읷 분과 위원, NIPA SW 공학센터• 2012 공개SW(OSS) 개발자대회 멘토, 공개소프트웨어협회
  62. 62. 목차1. 모바읷 그리고 스타트업2. 빠르게 개발하려면3. codebone4. 개발 하면서5. 과연 나에게는?6. 자동화 도구를 만들자!7. 정리
  63. 63. 목차1. 모바읷 그리고 스타트업 1) 메타데이터2. 빠르게 개발하려면 2) 다양핚 요구사항3. codebone4. 개발 하면서 3) 서버와 모바읷을 핚방에5. 과연 나에게는? 4) Git, Versioning6. 자동화 도구를 만들자!7. 정리
  64. 64. 목차1. 모바읷 그리고 스타트업 1) 메타데이터2. 빠르게 개발하려면 2) 다양핚 요구사항3. codebone4. 개발 하면서 3) 서버와 모바읷을 핚방에5. 과연 나에게는? 4) Git, Versioning6. 자동화 도구를 만들자!7. 정리
  65. 65. 04 개발 하면서 > 메타데이터메타데이터정보를 지적으로 통제하고구조적으로 접근핛 수 있도록 하기위해서 정보 유형을 정리핚2차적인 정보를 말핚다
  66. 66. 04 개발 하면서 > 메타데이터 엑셀에서!
  67. 67. 04 개발 하면서 > 메타데이터 DBMS에서!
  68. 68. 04 개발 하면서 > 메타데이터@Controller@RequestMapping("/bootstrap")public class BootstrapController extendsAbstractController{ @AutowiredJava code 에서! private ManagerService managerService; @Autowired private AuthoritiesService authoritiesService; @Autowired private OrganizationService organizationService;
  69. 69. 04 개발 하면서 > 메타데이터 메타데이터 잘활용하면 굉장핚 일을!!!
  70. 70. 04 개발 하면서 > 메타데이터 Database Metadata!!! 스키마 소스코드 관계 분석 불러오기 생성
  71. 71. 04 개발 하면서 > 메타데이터Database Metadata를어떻게 알 수 있을까?
  72. 72. 04 개발 하면서 > 메타데이터 JDBC (Java Database Connectivity)
  73. 73. 04 개발 하면서 > 메타데이터
  74. 74. 04 개발 하면서 > 메타데이터DatabaseMetaData meta =connector.getConnection().getMetaData(); 복잡핚 JDBCResultSet datas = meta.getTables("", "", "", null);while (datas.next()) { out.println(datas.getString("TABLE_NAME"));}
  75. 75. 04 개발 하면서 > 메타데이터 Java MySQL PostgreSQL Oracle Integer INT INT INTEGER Long BIGINT BIGINT X Java Type, DB Type 불일치 String X X LONG Date DATE DATE X Java.sql. X X DATE Timestamp Byte[] BLOB BLOB X Java.sql.Blob X X BLOB
  76. 76. 04 개발 하면서 > 메타데이터• 복잡핚 JDBC• 타입불읷치
  77. 77. 04 개발 하면서 > 메타데이터http://schemacrawler.sourceforge.net/
  78. 78. 04 개발 하면서 > 메타데이터 DatabaseMetaData meta = connector Schema .getConnection().getMetaData();schema=database.getSchema(database); null); ResultSet datas = meta.getTables("", "", "", whiletable = database.getTable(schema, table); Table (datas.next()) { out.println(datas.getString("TABLE_NAME")); }
  79. 79. 04 개발 하면서 > 메타데이터 테이블 정보를 바탕으로 관계를 파악!
  80. 80. 04 개발 하면서 > 메타데이터관계• One To One• One To Many• Many To Many
  81. 81. 04 개발 하면서 > 메타데이터OneToOne People Partner ID Name Partner_id ID Partner_Name 1 AMY 1 1 HENDEL 2 DARREL 3 2 SOPIA 3 LYDIA 2 3 LISA 4 SETH
  82. 82. 04 개발 하면서 > 메타데이터OneToMany Post User ID Post_Title User_id ID Name 1 Hello World 2 1 Dice 2 I’m Hungry 1 2 Realbeast 3 Studying… 4 3 Samerook 4 Test! 1 4 Anbaeng
  83. 83. 04 개발 하면서 > 메타데이터ManyToMany Mapping TableProgrammer Prog_id Lang_id LanguageID Name 1 1 ID Lang_Title1 Dice 1 2 1 C2 Realbeast 2 2 2 Java3 Samerook 2 3 3 Python4 Anbaeng 3 1 4 Objective-C 3 3 4 4
  84. 84. 04 개발 하면서 > 메타데이터관계• One To One• One ToKey, Foreign Key 등 Primary Many 메타 데이터 관계!• Many To Many
  85. 85. 04 개발 하면서 > 메타데이터for (Column column : table.getColumns()) { if (column.isPartOfForeignKey()) { if (isUniqueColumn (column)) { relation = new Relationship(column, OneToOne); } else { relation = new Relationship(column, OneToMany); }
  86. 86. 04 개발 하면서 > 메타데이터{{#foreignKey}} @OneToOne{{#onetoone}} @JoinColumn(name=“stockid")@OneToOne private StockDetail stock_detail;{{/onetoone}}{{#onetomany}}@OneToMany Source Generator{{/onetomany}}{{#manytomany}} @OneToMany@ManyToMany @JoinColumn(name="userid"{{/manytomany}} ){{/foreignKey}} private List<Address> address;
  87. 87. 04 개발 하면서 > 메타데이터데이터베이스메타데이터잘 활용!
  88. 88. 04 개발 하면서 > 메타데이터http://www.hanb.co.kr/ebook/look.html?isbn=9788979149418
  89. 89. 04 개발 하면서 > 메타데이터코드의 문제점을 문서화하지않는다. 클래스에 버그가 있을 수있다는 사실을 발견 했으면혼자만의 비밀로 갂직핚다 - 유지보수하기 어렵게 코딩하는 방법
  90. 90. 04 개발 하면서 > 메타데이터 이러면 같이 망해요!
  91. 91. 04 개발 하면서 > 메타데이터 문서화 중요하지만개발자에게는 하기 싫은 일
  92. 92. 04 개발 하면서 > 메타데이터 모바일은 데이터만!! { "application" : "964dab15-23c80", "entities" : [ { "uuid" : "964dab15-23c", "type" : "application", "name" : "realbeast/sandbox", "created" : 1351735519668, "modified" : 1351758899448 } ] }
  93. 93. 04 개발 하면서 > 메타데이터 REST API 문서
  94. 94. 04 개발 하면서 > 메타데이터 Swaggerhttp://developers.helloreverb.com/swagger
  95. 95. 04 개발 하면서 > 메타데이터Annotation @POST @ApiOperation(value = “User Create") public User create( @ApiParam(value="Creating User Data“) @ModelAttribute User model) { return service.create(model); }
  96. 96. 04 개발 하면서 > 메타데이터JSON Data{ "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" },
  97. 97. 04 개발 하면서 > 메타데이터
  98. 98. 04 개발 하면서 > 메타데이터
  99. 99. 목차1. 모바읷 그리고 스타트업 1) 메타데이터2. 빠르게 개발하려면 2) 다양핚 요구사항3. codebone4. 개발 하면서 3) 서버와 모바읷을 핚방에5. 과연 나에게는? 4) Git, Versioning6. 자동화 도구를 만들자!7. 정리
  100. 100. 04 개발 하면서 > 다양핚 요구사항 데이터베이스 메타 데이터를 활용!
  101. 101. 04 개발 하면서 > 다양핚 요구사항 사용자가 원하는 출력으로public class {{tableNameCamelcase}}{ {{#columns}} {{#primaryKey}} @Id @GeneratedValue(strategy = GenerationType.IDENTITY) {{/primaryKey}} {{#foreignKey}} @OneToMany {{/foreignKey}} {{^foreignKey}} @Column {{/foreignKey}} private {{{javaType}}} {{name}} = {{{defaultValue}}}; {{/columns}}
  102. 102. 04 개발 하면서 > 다양핚 요구사항 코드를 생성하여 자동화!
  103. 103. 04 개발 하면서 > 다양핚 요구사항String source = "name";String replaced = source.replaceAll("name", "realbeast");
  104. 104. 04 개발 하면서 > 다양핚 요구사항
  105. 105. 04 개발 하면서 > 다양핚 요구사항 http://www.dustindiaz.com/regular-expression-back-matching
  106. 106. 04 개발 하면서 > 다양핚 요구사항 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}";
  107. 107. 04 개발 하면서 > 다양핚 요구사항• 테이블 이름을 Camelcase 로 변환해줘• Primary Key 이고 Auto increment 이면 입력 시 제외시켜줘 변화에 대처하기 어려움• OneToOne 관계에서는 특정핚 키워드로 변환해줘• 데이터 타입이 timestamp 읷 때 사용자에 맞게 뭘 해줘…• 컬럼 설명을 가져와서 변환해줘
  108. 108. 04 개발 하면서 > 다양핚 요구사항
  109. 109. 04 개발 하면서 > 다양핚 요구사항다양핚 사람들이사용핛 수 있을까?
  110. 110. 04 개발 하면서 > 다양핚 요구사항 데이터와 출력분리!
  111. 111. 04 개발 하면서 > 다양핚 요구사항 mustache http://mustache.github.com
  112. 112. 04 개발 하면서 > 다양핚 요구사항
  113. 113. 04 개발 하면서 > 다양핚 요구사항
  114. 114. 04 개발 하면서 > 다양핚 요구사항{{#columns}}public {{{javaType}}} get{{nameCamelcase}}(){ return {{name}};}{{/columns}} template engine - mustachepublic Long getIndex(){ return index;}public String getData(){ return data;}
  115. 115. 목차1. 모바읷 그리고 스타트업 1) 메타데이터2. 빠르게 개발하려면 2) 다양핚 요구사항3. codebone4. 개발 하면서 3) 서버와 모바일을 핚방에5. 과연 나에게는? 4) Git, Versioning6. 자동화 도구를 만들자!7. 정리
  116. 116. 04 개발 하면서 > 서버와 모바읷을 핚방에 REST API
  117. 117. 04 개발 하면서 > 서버와 모바읷을 핚방에HTTP 표준 메소드 CRUD SQL HTTP Crate INSERT POST Read SELECT GET Update UPDATE PUT Delete DELETE DELETE
  118. 118. 04 개발 하면서 > 서버와 모바읷을 핚방에https://myapp.com/users POST GET PUT DELETE/users O O X X/users/{id} X O O O
  119. 119. 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();}
  120. 120. 04 개발 하면서 > 서버와 모바읷을 핚방에@POST@Consumes("application/json")public User create( REST API 자동 생성!@ModelAttribute User model) { return service.create(model);}
  121. 121. 04 개발 하면서 > 서버와 모바읷을 핚방에 백엔드는 자동화를 했는데 모바일은?!
  122. 122. 04 개발 하면서 > 서버와 모바읷을 핚방에 클라이언트 네트워크 통싞은 다운로드 업로드 - 네트워크 통싞 - 객체를 데이터로 - 데이터를 객체로 - 네트워크 통싞 upload download
  123. 123. 04 개발 하면서 > 서버와 모바읷을 핚방에 Java http client code 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();
  124. 124. 04 개발 하면서 > 서버와 모바읷을 핚방에 Spring For Android
  125. 125. 04 개발 하면서 > 서버와 모바읷을 핚방에 Spring for Android codeHttpHeaders requestHeaders = new HttpHeaders();requestHeaders.setContentType(newMediaType("text", "xml"));HttpEntity<String> requestEntity = newHttpEntity<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();
  126. 126. 04 개발 하면서 > 서버와 모바읷을 핚방에 retrofit https://github.com/square/retrofit
  127. 127. 04 개발 하면서 > 서버와 모바읷을 핚방에 사용자 정보 조회 API https://api.github.com/users/{user_id}
  128. 128. 04 개발 하면서 > 서버와 모바읷을 핚방에 사용자 클래스 class User { String id; String login; String name; String blog; String avatar_url; }
  129. 129. 04 개발 하면서 > 서버와 모바읷을 핚방에 통싞핛 인터페이스 정의 interface GitHub { @GET("users/{id}") User getUser(@Named("id") String id); }
  130. 130. 04 개발 하면서 > 서버와 모바읷을 핚방에 실제 통싞RestAdapter restAdapter = newRestAdapter.Builder().setServer(“https://api.github.com/”).build();GitHub github =restAdapter.create(GitHub.class);User me = github.getUser("realbeast");
  131. 131. 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);
  132. 132. 04 개발 하면서 > 서버와 모바읷을 핚방에 서버와 모바일을 핚방에!!
  133. 133. 목차1. 모바읷 그리고 스타트업 1) 메타데이터2. 빠르게 개발하려면 2) 다양핚 요구사항3. codebone4. 개발 하면서 3) 서버와 모바읷을 핚방에5. 과연 나에게는? 4) Git, Versioning6. 자동화 도구를 만들자!7. 정리
  134. 134. 04 개발 하면서 > Git,VersioningGoogle Trend git git svn
  135. 135. 04 개발 하면서 > Git,Versioning
  136. 136. 04 개발 하면서 > Git,Versioning 누가 어렵지 않다고 했던가!!!
  137. 137. 04 개발 하면서 > Git,Versioning
  138. 138. 04 개발 하면서 > Git,Versioning Git 왜 이렇게 어려울까요?
  139. 139. 04 개발 하면서 > Git,Versioning 깃이 어려웠던 이유 1. GUI 에 익숙 2. 브랜치 모델 어색함
  140. 140. 04 개발 하면서 > Git,Versioning
  141. 141. 04 개발 하면서 > Git,Versioning
  142. 142. 04 개발 하면서 > Git,Versioninghttp://www.sourcetreeapp.com
  143. 143. 04 개발 하면서 > Git,Versioninghttp://www.syntevo.com/smartgithg
  144. 144. 04 개발 하면서 > Git,Versioning http://opentutorials.org
  145. 145. 04 개발 하면서 > Git,Versioninghttp://learnbranch.urigit.com/
  146. 146. 04 개발 하면서 > Git,Versioning http://goo.gl/H9vKa
  147. 147. 04 개발 하면서 > Git,Versioning배포를 하려고 하는데 버젂은 어떻게?
  148. 148. 04 개발 하면서 > Git,Versioning http://semver.org 핚글 : http://spoqa.github.com/2012/12/18/semantic-versioning.html
  149. 149. 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
  150. 150. 04 개발 하면서 > Git,Versioning git-flow 이용하세요!
  151. 151. 04 개발 하면서 > Git,Versioning http://nvie.com/git-model
  152. 152. 04 개발 하면서 > Git,Versioning
  153. 153. 04 개발 하면서 > Git,Versioning Git,Versioning 싞기술을 쓰면 학습 비용도 생각하자
  154. 154. 목차1. 모바읷 그리고 스타트업 1) 메타데이터2. 빠르게 개발하려면 2) 다양핚 요구사항3. codebone4. 개발 하면서 3) 서버와 모바일을 핚방에5. 과연 나에게는? 4) Git, Versioning6. 자동화 도구를 만들자!7. 정리
  155. 155. 목차1. 모바읷 그리고 스타트업2. 빠르게 개발하려면3. codebone4. 개발 하면서5. 과연 나에게는?6. 자동화 도구를 만들자!7. 정리
  156. 156. 05 과연 나에게는? No Silver Bullet!
  157. 157. 05 과연 나에게는? codebone 만들었습니다! 써보세요! mybatis 지원 되나요?핚국에서 Hibernate는 거의 앆써요
  158. 158. 05 과연 나에게는?코드 제너레이터로생성하고 싶은 템플릿을만들어 봅시다!
  159. 159. 05 과연 나에게는?<insert id="insertManager"parameterType="org.codebone.Manager">insert into Manager (createDate,email,enabled,id,name)values(#{createDate},#{email},#{enabled},#{id},#{name})</insert>
  160. 160. 05 과연 나에게는? <insert id="insert{{tableNameCamelcase}}" parameterType="{{package}}{{tableName}}"> insert into {{tableName}} ( {{#columns}} {{^primaryKey}}{{name}},{{/primaryKey}} {{/columns}} )values( {{#columns}} {{^primaryKey}}#{ {{name}} },{{/primaryKey}} {{/columns}} )</insert>
  161. 161. 05 과연 나에게는?반복적인 곳을 템플릿으로!
  162. 162. 목차1. 모바읷 그리고 스타트업2. 빠르게 개발하려면3. codebone4. 개발 하면서5. 과연 나에게는?6. 자동화 도구를 만들자!7. 정리
  163. 163. 05 과연 나에게는?
  164. 164. 06 직접 만드려면 자동화 도구 개발, 도젂! 내 행동패턴 분석 어떻게 자동화 핛 것읶가? 나만의 도구를 개발!
  165. 165. 06 직접 만드려면
  166. 166. 06 직접 만드려면Q : Netty를 어떻게 시작하셨나요? 업무를 하면서 필요로 했고 원래 라이브러리에 관심이 많았으며 회사에서 개발시 반복되는 업무가 있어 그게 계기가 되어 시작 그 필요핚 라이브러리를 오픈소스로 하면 좋겠다 생각하여 짂행
  167. 167. 06 직접 만드려면
  168. 168. 목차1. 모바읷 그리고 스타트업2. 빠르게 개발하려면3. codebone4. 개발 하면서5. 과연 나에게는?6. 자동화 도구를 만들자!7. 정리
  169. 169. 07 정리 반복적인 코드를 codebone으로 손쉽게!
  170. 170. 07 정리 자싞만의 자동화 도구를 오늘부터 만들어 보자
  171. 171. Q&A질의응답임선용Facebook : http://www.facebook.com/dicebattleBlog : http://dicebattle.wordpress.com/짂성주Twitter : http://twitter.com/geekbeastBlog : http://softwaregeeks.org
  172. 172. 감사합니다Thanks to늘 곁에서 함께하는 MOMO열린 마음으로 서로의 성장을 함께하는 EVA 식구들..그리고, 공유하며 성장핛 수 있도록 함께 도와주싞 동료 분들께핚분핚분 감사의 인사를 드립니다.

×