반복적인 코드 작업 자동화, codebone으로 손쉽게
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
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 식구들 ..그리고 , 공유하며 성장할 수 있도록 함께 도와주신 동료 분들께한분한분 감사의 인사를 드립니다 .