SlideShare a Scribd company logo
1 of 173
반복적읶 코드 작업 자동화,
 codebone으로 손쉽게

     임선용, 짂성주
발표자 소개




임선용, 텔레톡비 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회 슈퍼 앱 코리아 우수상 수상
발표자 소개



         임선용, 텔레톡비 CTO
             http://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 모바읷 그리고 스타트업

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


 4000


 3000
                              2963

 2000   1794

 1000


    0
        2008   2009   2010         2011
01 모바읷 그리고 스타트업




저도 여기 어딘가에 있습니다 ^^;
01 모바읷 그리고 스타트업
01 모바읷 그리고 스타트업


Client
Server
웹 페이지
관리 콘솔
           = 긴 시갂
Infra
01 모바읷 그리고 스타트업




      어떻게 해야
  빠르게 개발 핛 수 있을까?
목차

1. 모바읷 그리고 스타트업
2. 빠르게 개발하려면
3. codebone
4. 개발 하면서
5. 어떻게 적용핛까
6. 자동화 도구를 만들자!
7. 정리
02 빠르게 개발하려면
02 빠르게 개발하려면




    다른
Client   거 만들 때도 똑같네?
         Client Client Client
Server   Server   Server   Server
웹 페이지    웹 페이지    웹 페이지    웹 페이지
관리 콘솔    관리 콘솔    관리 콘솔    관리 콘솔
Infra    Infra    Infra    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. 모바읷 그리고 스타트업
                  1) 딜레마
2. 빠르게 개발하려면
3. codebone       2) 직접 사용하며
4. 개발 하면서         3) 소개
5. 어떻게 적용핛까
6. 자동화 도구를 만들자!
7. 정리
03 codebone 개발하며 > 딜레마
03 codebone 개발하며 > 딜레마




         오픈소스 랭킹
    http://www.ohloh.net/
03 codebone 개발하며 > 딜레마




      130,000 Commit
      2,000 Contributor
    8,000,000 line of code
03 codebone 개발하며 > 딜레마




      1,180,000 Commit
       4,200 Contributor
    24,000,000 line of code
03 codebone 개발하며 > 딜레마




        262 Commit
        6 Contributor
03 codebone 개발하며 > 딜레마




   상어          소라        수염고래
03 codebone 개발하며 > 딜레마
03 codebone 개발하며 > 딜레마



   왜 만들었는가?
  무엇을 고민했는가?
 어떻게 해결하였는가?
목차

1. 모바읷 그리고 스타트업
                  1) 딜레마
2. 빠르게 개발하려면
3. codebone       2) 직접 사용하며
4. 개발 하면서         3) 소개
5. 어떻게 적용핛까
6. 자동화 도구를 만들자!
7. 정리
03 codebone 개발하며 > 직접 사용하며
          DB
                            DB정보
                             젂달
                Eclipse
                Plugin




        Admin                Code
         Page              Generator




                Template
                  Code
         코드                   코드
         생성                   읶용
03 codebone 개발하며 > 직접 사용하며




       Mission :
  핚 달 안에 베타테스트?!
03 codebone 개발하며 > 직접 사용하며


      빠른 개발이 가능
 장점 : 서비스 관리용 콘솔
    총평 : 좋은데 좀 아쉬워
      DB 관계를 못 가져옴
 단점 : 관리용 콘솔의 불편함
      서버만 자동화됨
      문서화 도구 필요
03 codebone 개발하며 > 직접 사용하며

0.1 Release             0.2 Start
목차

1. 모바읷 그리고 스타트업
                  1) 딜레마
2. 빠르게 개발하려면
3. codebone       2) 직접 사용하며
4. 개발 하면서         3) 소개
5. 어떻게 적용핛까
6. 자동화 도구를 만들자!
7. 정리
03 codebone 개발하며 > 소개




github.com/withmomo/codebone
03 codebone 개발하며 > 소개




                 동영상
http://blog.softwaregeeks.org/archives/907
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          Spring

Source Generator                            Skeleton
03 codebone 개발하며 > 소개




     스키마          관계 분석        소스코드 생성
    불러오기
       Source Generator
  Apache commons + SchemaCrawler + mustache
03 codebone 개발하며 > 소개
{{#columns}}
public {{{javaType}}} get{{nameCamelcase}}(){
   return {{name}};
}
{{/columns}}

               Source Generator
public Long getIndex(){
   return index;
}
public String getData(){
  return data;
}
03 codebone 개발하며 > 소개




                  Skeleton
Spring 3.1 + Hibernate + Jersey + Swagger + Bootstrap
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. 모바읷 그리고 스타트업   1) 메타데이터
2. 빠르게 개발하려면
                  2) 다양핚 요구사항
3. codebone
4. 개발 하면서         3) 서버와 모바읷을 핚방에
5. 과연 나에게는?       4) Git, Versioning
6. 자동화 도구를 만들자!
7. 정리
목차
1. 모바읷 그리고 스타트업   1) 메타데이터
2. 빠르게 개발하려면
                  2) 다양핚 요구사항
3. codebone
4. 개발 하면서         3) 서버와 모바읷을 핚방에
5. 과연 나에게는?       4) Git, Versioning
6. 자동화 도구를 만들자!
7. 정리
04 개발 하면서 > 메타데이터


메타데이터
정보를 지적으로 통제하고
구조적으로 접근핛 수 있도록 하기
위해서 정보 유형을 정리핚
2차적인 정보를 말핚다
04 개발 하면서 > 메타데이터




         엑셀에서!
04 개발 하면서 > 메타데이터

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

@Controller
@RequestMapping("/bootstrap")
public class BootstrapController extends
AbstractController{
 @AutowiredJava code 에서!
 private ManagerService managerService;
 @Autowired
 private AuthoritiesService authoritiesService;
 @Autowired
 private OrganizationService organizationService;
04 개발 하면서 > 메타데이터




      메타데이터
  잘활용하면 굉장핚 일을!!!
04 개발 하면서 > 메타데이터



   Database Metadata!!!


     스키마            소스코드
            관계 분석
     불러오기            생성
04 개발 하면서 > 메타데이터


Database Metadata를
어떻게 알 수 있을까?
04 개발 하면서 > 메타데이터
   JDBC (Java Database Connectivity)
04 개발 하면서 > 메타데이터
04 개발 하면서 > 메타데이터



DatabaseMetaData meta =
connector.getConnection().getMetaData();
              복잡핚 JDBC
ResultSet datas = meta.getTables("", "", "", null);
while (datas.next()) {
  out.println(datas.getString("TABLE_NAME"));
}
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
04 개발 하면서 > 메타데이터


• 복잡핚 JDBC
• 타입불읷치
04 개발 하면서 > 메타데이터




http://schemacrawler.sourceforge.net/
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"));
  }
04 개발 하면서 > 메타데이터




 테이블 정보를 바탕으로 관계를 파악!
04 개발 하면서 > 메타데이터

관계
• One To One
• One To Many
• Many To Many
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
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
04 개발 하면서 > 메타데이터

ManyToMany

                Mapping Table
Programmer      Prog_id   Lang_id   Language
ID Name         1         1         ID      Lang_Title
1   Dice        1         2         1        C
2   Realbeast   2         2         2        Java
3   Samerook    2         3         3        Python
4   Anbaeng     3         1         4        Objective-C
                3         3
                4         4
04 개발 하면서 > 메타데이터

관계
• One To One
• One ToKey, Foreign Key 등
  Primary Many
       메타 데이터 관계!
• Many To Many
04 개발 하면서 > 메타데이터



for (Column column : table.getColumns()) {
 if (column.isPartOfForeignKey()) {
   if (isUniqueColumn (column)) {
       relation = new Relationship(column, OneToOne);
    } else {
      relation = new Relationship(column, OneToMany);
    }
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;
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
                 }
               ]
           }
04 개발 하면서 > 메타데이터




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




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

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"
    },
04 개발 하면서 > 메타데이터
04 개발 하면서 > 메타데이터
목차
1. 모바읷 그리고 스타트업   1) 메타데이터
2. 빠르게 개발하려면
                  2) 다양핚 요구사항
3. codebone
4. 개발 하면서         3) 서버와 모바읷을 핚방에
5. 과연 나에게는?       4) Git, Versioning
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 개발 하면서 > 다양핚 요구사항




    코드를 생성하여 자동화!
04 개발 하면서 > 다양핚 요구사항




String source = "name";
String replaced
  = source.replaceAll("name", "realbeast");
04 개발 하면서 > 다양핚 요구사항
04 개발 하면서 > 다양핚 요구사항




             http://www.dustindiaz.com/regular-expression-back-matching
04 개발 하면서 > 다양핚 요구사항


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

 String SEARCH = "{SEARCH}.*?{/SEARCH}";
 StringCOLUMN_LOOP_SEARCH_REGEX                  =
"{COLUMN_LOOP_SEARCH}.*?{/COLUMN_LOOP_SEAR
CH}";
04 개발 하면서 > 다양핚 요구사항


• 테이블 이름을 Camelcase 로 변환해줘
• Primary Key 이고 Auto increment 이면
  입력 시 제외시켜줘
      변화에 대처하기 어려움
• OneToOne 관계에서는 특정핚 키워드로
  변환해줘
• 데이터 타입이 timestamp 읷 때 사용자에
  맞게 뭘 해줘…
• 컬럼 설명을 가져와서 변환해줘
04 개발 하면서 > 다양핚 요구사항
04 개발 하면서 > 다양핚 요구사항



다양핚 사람들이
사용핛 수 있을까?
04 개발 하면서 > 다양핚 요구사항




       데이터와
       출력분리!
04 개발 하면서 > 다양핚 요구사항




           mustache
  http://mustache.github.com
04 개발 하면서 > 다양핚 요구사항
04 개발 하면서 > 다양핚 요구사항
04 개발 하면서 > 다양핚 요구사항
{{#columns}}
public {{{javaType}}} get{{nameCamelcase}}(){
   return {{name}};
}
{{/columns}}

      template engine - mustache
public Long getIndex(){
   return index;
}
public String getData(){
  return data;
}
목차
1. 모바읷 그리고 스타트업   1) 메타데이터
2. 빠르게 개발하려면
                  2) 다양핚 요구사항
3. codebone
4. 개발 하면서         3) 서버와 모바일을 핚방에
5. 과연 나에게는?       4) Git, Versioning
6. 자동화 도구를 만들자!
7. 정리
04 개발 하면서 > 서버와 모바읷을 핚방에


         REST API
04 개발 하면서 > 서버와 모바읷을 핚방에

HTTP 표준 메소드

  CRUD     SQL      HTTP
   Crate   INSERT   POST
   Read    SELECT    GET
  Update   UPDATE    PUT
  Delete   DELETE   DELETE
04 개발 하면서 > 서버와 모바읷을 핚방에


https://myapp.com/users
              POST GET 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(
          REST API 자동 생성!
@ModelAttribute User model) {
  return service.create(model);
}
04 개발 하면서 > 서버와 모바읷을 핚방에



 백엔드는 자동화를 했는데
 모바일은?!
04 개발 하면서 > 서버와 모바읷을 핚방에


  클라이언트 네트워크 통싞은
  다운로드              업로드
  - 네트워크 통싞         - 객체를 데이터로
  - 데이터를 객체로        - 네트워크 통싞

          upload

         download
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();
04 개발 하면서 > 서버와 모바읷을 핚방에

     Spring For Android
04 개발 하면서 > 서버와 모바읷을 핚방에

         Spring for Android code
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 개발 하면서 > 서버와 모바읷을 핚방에




                retrofit
  https://github.com/square/retrofit
04 개발 하면서 > 서버와 모바읷을 핚방에
            사용자 정보 조회 API
   https://api.github.com/users/{user_id}
04 개발 하면서 > 서버와 모바읷을 핚방에

         사용자 클래스
  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 개발 하면서 > 서버와 모바읷을 핚방에
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. 모바읷 그리고 스타트업   1) 메타데이터
2. 빠르게 개발하려면
                  2) 다양핚 요구사항
3. codebone
4. 개발 하면서         3) 서버와 모바읷을 핚방에
5. 과연 나에게는?       4) Git, Versioning
6. 자동화 도구를 만들자!
7. 정리
04 개발 하면서 > Git,Versioning


Google Trend

                      git
                git
                      svn
04 개발 하면서 > Git,Versioning
04 개발 하면서 > Git,Versioning




   누가 어렵지
   않다고 했던가!!!
04 개발 하면서 > Git,Versioning
04 개발 하면서 > Git,Versioning




   Git 왜 이렇게 어려울까요?
04 개발 하면서 > Git,Versioning




     깃이 어려웠던 이유
     1. GUI 에 익숙
     2. 브랜치 모델 어색함
04 개발 하면서 > Git,Versioning
04 개발 하면서 > Git,Versioning
04 개발 하면서 > Git,Versioning




http://www.sourcetreeapp.com
04 개발 하면서 > Git,Versioning




http://www.syntevo.com/smartgithg
04 개발 하면서 > Git,Versioning




   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




 http://nvie.com/git-model
04 개발 하면서 > Git,Versioning
04 개발 하면서 > Git,Versioning



    Git,Versioning
      싞기술을 쓰면 학습
       비용도 생각하자
목차
1. 모바읷 그리고 스타트업   1) 메타데이터
2. 빠르게 개발하려면
                  2) 다양핚 요구사항
3. codebone
4. 개발 하면서         3) 서버와 모바일을 핚방에
5. 과연 나에게는?       4) Git, Versioning
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 직접 만드려면
06 직접 만드려면

Q : Netty를 어떻게 시작하셨나요?
 업무를 하면서 필요로 했고
 원래 라이브러리에 관심이 많았으며
 회사에서 개발시 반복되는 업무가
 있어 그게 계기가 되어 시작
 그 필요핚 라이브러리를 오픈소스로
 하면 좋겠다 생각하여 짂행
06 직접 만드려면
목차

1. 모바읷 그리고 스타트업
2. 빠르게 개발하려면
3. codebone
4. 개발 하면서
5. 과연 나에게는?
6. 자동화 도구를 만들자!
7. 정리
07 정리




        반복적인 코드를
 codebone으로 손쉽게!
07 정리




 자싞만의 자동화 도구를
  오늘부터 만들어 보자
Q&A
질의응답


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


짂성주
Twitter : http://twitter.com/geekbeast
Blog : http://softwaregeeks.org
감사합니다

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

More Related Content

What's hot

O/Rマッパーによるトラブルを未然に防ぐ
O/Rマッパーによるトラブルを未然に防ぐO/Rマッパーによるトラブルを未然に防ぐ
O/Rマッパーによるトラブルを未然に防ぐkwatch
 
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」Takuto Wada
 
Amazon DynamoDB(初心者向け 超速マスター編)JAWSUG大阪
Amazon DynamoDB(初心者向け 超速マスター編)JAWSUG大阪Amazon DynamoDB(初心者向け 超速マスター編)JAWSUG大阪
Amazon DynamoDB(初心者向け 超速マスター編)JAWSUG大阪崇之 清水
 
負荷分散だけじゃないELBのメリット
負荷分散だけじゃないELBのメリット負荷分散だけじゃないELBのメリット
負荷分散だけじゃないELBのメリットTakashi Toyosaki
 
マルチテナントのアプリケーション実装〜実践編〜
マルチテナントのアプリケーション実装〜実践編〜マルチテナントのアプリケーション実装〜実践編〜
マルチテナントのアプリケーション実装〜実践編〜Yoshiki Nakagawa
 
マルチテナント化で知っておきたいデータベースのこと
マルチテナント化で知っておきたいデータベースのことマルチテナント化で知っておきたいデータベースのこと
マルチテナント化で知っておきたいデータベースのことAmazon Web Services Japan
 
20210526 AWS Expert Online マルチアカウント管理の基本
20210526 AWS Expert Online マルチアカウント管理の基本20210526 AWS Expert Online マルチアカウント管理の基本
20210526 AWS Expert Online マルチアカウント管理の基本Amazon Web Services Japan
 
SaaS テナント毎のコストを把握するための「AWS Application Cost Profiler」のご紹介
SaaS テナント毎のコストを把握するための「AWS Application Cost Profiler」のご紹介SaaS テナント毎のコストを把握するための「AWS Application Cost Profiler」のご紹介
SaaS テナント毎のコストを把握するための「AWS Application Cost Profiler」のご紹介Amazon Web Services Japan
 
AWS Black Belt Online Seminar 2018 Amazon DynamoDB Advanced Design Pattern
AWS Black Belt Online Seminar 2018 Amazon DynamoDB Advanced Design PatternAWS Black Belt Online Seminar 2018 Amazon DynamoDB Advanced Design Pattern
AWS Black Belt Online Seminar 2018 Amazon DynamoDB Advanced Design PatternAmazon Web Services Japan
 
明日から使えるPostgre sql運用管理テクニック(監視編)
明日から使えるPostgre sql運用管理テクニック(監視編)明日から使えるPostgre sql運用管理テクニック(監視編)
明日から使えるPostgre sql運用管理テクニック(監視編)kasaharatt
 
[NDC18] 야생의 땅 듀랑고의 데이터 엔지니어링 이야기: 로그 시스템 구축 경험 공유
[NDC18] 야생의 땅 듀랑고의 데이터 엔지니어링 이야기: 로그 시스템 구축 경험 공유[NDC18] 야생의 땅 듀랑고의 데이터 엔지니어링 이야기: 로그 시스템 구축 경험 공유
[NDC18] 야생의 땅 듀랑고의 데이터 엔지니어링 이야기: 로그 시스템 구축 경험 공유Hyojun Jeon
 
MySQL 5.7にやられないためにおぼえておいてほしいこと
MySQL 5.7にやられないためにおぼえておいてほしいことMySQL 5.7にやられないためにおぼえておいてほしいこと
MySQL 5.7にやられないためにおぼえておいてほしいことyoku0825
 
Amazon Redshift パフォーマンスチューニングテクニックと最新アップデート
Amazon Redshift パフォーマンスチューニングテクニックと最新アップデートAmazon Redshift パフォーマンスチューニングテクニックと最新アップデート
Amazon Redshift パフォーマンスチューニングテクニックと最新アップデートAmazon Web Services Japan
 
[AWSマイスターシリーズ] Amazon ElastiCache
[AWSマイスターシリーズ] Amazon ElastiCache[AWSマイスターシリーズ] Amazon ElastiCache
[AWSマイスターシリーズ] Amazon ElastiCacheAmazon Web Services Japan
 
IAM Roles Anywhereのない世界とある世界(2022年のAWSアップデートを振り返ろう ~Season 4~ 発表資料)
IAM Roles Anywhereのない世界とある世界(2022年のAWSアップデートを振り返ろう ~Season 4~ 発表資料)IAM Roles Anywhereのない世界とある世界(2022年のAWSアップデートを振り返ろう ~Season 4~ 発表資料)
IAM Roles Anywhereのない世界とある世界(2022年のAWSアップデートを振り返ろう ~Season 4~ 発表資料)NTT DATA Technology & Innovation
 
[Cloud OnAir] Apigee でかんたん API 管理 2019年12月12日 放送
[Cloud OnAir] Apigee でかんたん API 管理 2019年12月12日 放送[Cloud OnAir] Apigee でかんたん API 管理 2019年12月12日 放送
[Cloud OnAir] Apigee でかんたん API 管理 2019年12月12日 放送Google Cloud Platform - Japan
 
BigQueryの課金、節約しませんか
BigQueryの課金、節約しませんかBigQueryの課金、節約しませんか
BigQueryの課金、節約しませんかRyuji Tamagawa
 

What's hot (20)

はじめよう DynamoDB ハンズオン
はじめよう DynamoDB ハンズオンはじめよう DynamoDB ハンズオン
はじめよう DynamoDB ハンズオン
 
Amazon DynamoDB Advanced Design Pattern
Amazon DynamoDB Advanced Design PatternAmazon DynamoDB Advanced Design Pattern
Amazon DynamoDB Advanced Design Pattern
 
O/Rマッパーによるトラブルを未然に防ぐ
O/Rマッパーによるトラブルを未然に防ぐO/Rマッパーによるトラブルを未然に防ぐ
O/Rマッパーによるトラブルを未然に防ぐ
 
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
 
Amazon DynamoDB(初心者向け 超速マスター編)JAWSUG大阪
Amazon DynamoDB(初心者向け 超速マスター編)JAWSUG大阪Amazon DynamoDB(初心者向け 超速マスター編)JAWSUG大阪
Amazon DynamoDB(初心者向け 超速マスター編)JAWSUG大阪
 
負荷分散だけじゃないELBのメリット
負荷分散だけじゃないELBのメリット負荷分散だけじゃないELBのメリット
負荷分散だけじゃないELBのメリット
 
マルチテナントのアプリケーション実装〜実践編〜
マルチテナントのアプリケーション実装〜実践編〜マルチテナントのアプリケーション実装〜実践編〜
マルチテナントのアプリケーション実装〜実践編〜
 
マルチテナント化で知っておきたいデータベースのこと
マルチテナント化で知っておきたいデータベースのことマルチテナント化で知っておきたいデータベースのこと
マルチテナント化で知っておきたいデータベースのこと
 
20210526 AWS Expert Online マルチアカウント管理の基本
20210526 AWS Expert Online マルチアカウント管理の基本20210526 AWS Expert Online マルチアカウント管理の基本
20210526 AWS Expert Online マルチアカウント管理の基本
 
SaaS テナント毎のコストを把握するための「AWS Application Cost Profiler」のご紹介
SaaS テナント毎のコストを把握するための「AWS Application Cost Profiler」のご紹介SaaS テナント毎のコストを把握するための「AWS Application Cost Profiler」のご紹介
SaaS テナント毎のコストを把握するための「AWS Application Cost Profiler」のご紹介
 
AWS Black Belt Online Seminar 2018 Amazon DynamoDB Advanced Design Pattern
AWS Black Belt Online Seminar 2018 Amazon DynamoDB Advanced Design PatternAWS Black Belt Online Seminar 2018 Amazon DynamoDB Advanced Design Pattern
AWS Black Belt Online Seminar 2018 Amazon DynamoDB Advanced Design Pattern
 
明日から使えるPostgre sql運用管理テクニック(監視編)
明日から使えるPostgre sql運用管理テクニック(監視編)明日から使えるPostgre sql運用管理テクニック(監視編)
明日から使えるPostgre sql運用管理テクニック(監視編)
 
[NDC18] 야생의 땅 듀랑고의 데이터 엔지니어링 이야기: 로그 시스템 구축 경험 공유
[NDC18] 야생의 땅 듀랑고의 데이터 엔지니어링 이야기: 로그 시스템 구축 경험 공유[NDC18] 야생의 땅 듀랑고의 데이터 엔지니어링 이야기: 로그 시스템 구축 경험 공유
[NDC18] 야생의 땅 듀랑고의 데이터 엔지니어링 이야기: 로그 시스템 구축 경험 공유
 
SpringBootTest入門
SpringBootTest入門SpringBootTest入門
SpringBootTest入門
 
MySQL 5.7にやられないためにおぼえておいてほしいこと
MySQL 5.7にやられないためにおぼえておいてほしいことMySQL 5.7にやられないためにおぼえておいてほしいこと
MySQL 5.7にやられないためにおぼえておいてほしいこと
 
Amazon Redshift パフォーマンスチューニングテクニックと最新アップデート
Amazon Redshift パフォーマンスチューニングテクニックと最新アップデートAmazon Redshift パフォーマンスチューニングテクニックと最新アップデート
Amazon Redshift パフォーマンスチューニングテクニックと最新アップデート
 
[AWSマイスターシリーズ] Amazon ElastiCache
[AWSマイスターシリーズ] Amazon ElastiCache[AWSマイスターシリーズ] Amazon ElastiCache
[AWSマイスターシリーズ] Amazon ElastiCache
 
IAM Roles Anywhereのない世界とある世界(2022年のAWSアップデートを振り返ろう ~Season 4~ 発表資料)
IAM Roles Anywhereのない世界とある世界(2022年のAWSアップデートを振り返ろう ~Season 4~ 発表資料)IAM Roles Anywhereのない世界とある世界(2022年のAWSアップデートを振り返ろう ~Season 4~ 発表資料)
IAM Roles Anywhereのない世界とある世界(2022年のAWSアップデートを振り返ろう ~Season 4~ 発表資料)
 
[Cloud OnAir] Apigee でかんたん API 管理 2019年12月12日 放送
[Cloud OnAir] Apigee でかんたん API 管理 2019年12月12日 放送[Cloud OnAir] Apigee でかんたん API 管理 2019年12月12日 放送
[Cloud OnAir] Apigee でかんたん API 管理 2019年12月12日 放送
 
BigQueryの課金、節約しませんか
BigQueryの課金、節約しませんかBigQueryの課金、節約しませんか
BigQueryの課金、節約しませんか
 

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

왜 레진코믹스는 구글앱엔진을 선택했나
왜 레진코믹스는 구글앱엔진을 선택했나왜 레진코믹스는 구글앱엔진을 선택했나
왜 레진코믹스는 구글앱엔진을 선택했나소리 강
 
웹사이트기획 및 관리
웹사이트기획 및 관리웹사이트기획 및 관리
웹사이트기획 및 관리봉조 김
 
Open source engineering - 0.1
Open source engineering - 0.1Open source engineering - 0.1
Open source engineering - 0.1YoungSu Son
 
Lost smart tag 소개
Lost smart tag 소개Lost smart tag 소개
Lost smart tag 소개ssuser9f76db
 
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용프로그래밍 패러다임의 진화 및 Spring의 금융권 적용
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용중선 곽
 
좋은 개발자 되기
좋은 개발자 되기좋은 개발자 되기
좋은 개발자 되기Sunghyouk Bae
 
중고나라 거래 통계 서비스 1차 개발 완료 보고
중고나라 거래 통계 서비스 1차 개발 완료 보고중고나라 거래 통계 서비스 1차 개발 완료 보고
중고나라 거래 통계 서비스 1차 개발 완료 보고embian
 
웹기술 이해 (프론트엔드 기초)
웹기술 이해 (프론트엔드 기초)웹기술 이해 (프론트엔드 기초)
웹기술 이해 (프론트엔드 기초)JoonHee Lee
 
2조 프로젝트 보고서 김동현
2조 프로젝트 보고서 김동현2조 프로젝트 보고서 김동현
2조 프로젝트 보고서 김동현kdh24
 
제 5회 D2 CAMPUS SEMINAR - Swift로 만든 serverframework 개발기
제 5회 D2 CAMPUS SEMINAR - Swift로 만든 serverframework 개발기제 5회 D2 CAMPUS SEMINAR - Swift로 만든 serverframework 개발기
제 5회 D2 CAMPUS SEMINAR - Swift로 만든 serverframework 개발기NAVER D2
 
VSTS와 Azure를 이용한 팀 프로세스 관리
VSTS와 Azure를 이용한 팀 프로세스 관리VSTS와 Azure를 이용한 팀 프로세스 관리
VSTS와 Azure를 이용한 팀 프로세스 관리Gyuwon Yi
 
삶이편해지는_백엔드_개발자_지식.pdf
삶이편해지는_백엔드_개발자_지식.pdf삶이편해지는_백엔드_개발자_지식.pdf
삶이편해지는_백엔드_개발자_지식.pdfSeung kyoo Park
 
[우리가 데이터를 쓰는 법] 모바일 게임 로그 데이터 분석 이야기 - 엔터메이트 공신배 팀장
[우리가 데이터를 쓰는 법] 모바일 게임 로그 데이터 분석 이야기 - 엔터메이트 공신배 팀장[우리가 데이터를 쓰는 법] 모바일 게임 로그 데이터 분석 이야기 - 엔터메이트 공신배 팀장
[우리가 데이터를 쓰는 법] 모바일 게임 로그 데이터 분석 이야기 - 엔터메이트 공신배 팀장Dylan Ko
 
모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트
모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트
모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트Dae Kim
 
학교에서는 배울 수 없는 스타트업 엔지니어링 (연세대 특강)
학교에서는 배울 수 없는 스타트업 엔지니어링 (연세대 특강)학교에서는 배울 수 없는 스타트업 엔지니어링 (연세대 특강)
학교에서는 배울 수 없는 스타트업 엔지니어링 (연세대 특강)Lab80
 
2021년 4월 10일 개발자 이야기
2021년 4월 10일 개발자 이야기2021년 4월 10일 개발자 이야기
2021년 4월 10일 개발자 이야기Jay Park
 
2014 공개소프트웨어 대회 소프트웨어 개발 트렌드의 변화
2014 공개소프트웨어 대회 소프트웨어 개발 트렌드의 변화2014 공개소프트웨어 대회 소프트웨어 개발 트렌드의 변화
2014 공개소프트웨어 대회 소프트웨어 개발 트렌드의 변화Terry Cho
 
Meetup tools for-cloud_native_apps_meetup20180510-vs
Meetup tools for-cloud_native_apps_meetup20180510-vsMeetup tools for-cloud_native_apps_meetup20180510-vs
Meetup tools for-cloud_native_apps_meetup20180510-vsminseok kim
 

Similar to 반복적인 코드 작업 자동화, Codebone으로 손쉽게 (20)

왜 레진코믹스는 구글앱엔진을 선택했나
왜 레진코믹스는 구글앱엔진을 선택했나왜 레진코믹스는 구글앱엔진을 선택했나
왜 레진코믹스는 구글앱엔진을 선택했나
 
웹사이트기획 및 관리
웹사이트기획 및 관리웹사이트기획 및 관리
웹사이트기획 및 관리
 
Open source engineering - 0.1
Open source engineering - 0.1Open source engineering - 0.1
Open source engineering - 0.1
 
Lost smart tag 소개
Lost smart tag 소개Lost smart tag 소개
Lost smart tag 소개
 
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용프로그래밍 패러다임의 진화 및 Spring의 금융권 적용
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용
 
좋은 개발자 되기
좋은 개발자 되기좋은 개발자 되기
좋은 개발자 되기
 
중고나라 거래 통계 서비스 1차 개발 완료 보고
중고나라 거래 통계 서비스 1차 개발 완료 보고중고나라 거래 통계 서비스 1차 개발 완료 보고
중고나라 거래 통계 서비스 1차 개발 완료 보고
 
웹기술 이해 (프론트엔드 기초)
웹기술 이해 (프론트엔드 기초)웹기술 이해 (프론트엔드 기초)
웹기술 이해 (프론트엔드 기초)
 
2조 프로젝트 보고서 김동현
2조 프로젝트 보고서 김동현2조 프로젝트 보고서 김동현
2조 프로젝트 보고서 김동현
 
제 5회 D2 CAMPUS SEMINAR - Swift로 만든 serverframework 개발기
제 5회 D2 CAMPUS SEMINAR - Swift로 만든 serverframework 개발기제 5회 D2 CAMPUS SEMINAR - Swift로 만든 serverframework 개발기
제 5회 D2 CAMPUS SEMINAR - Swift로 만든 serverframework 개발기
 
VSTS와 Azure를 이용한 팀 프로세스 관리
VSTS와 Azure를 이용한 팀 프로세스 관리VSTS와 Azure를 이용한 팀 프로세스 관리
VSTS와 Azure를 이용한 팀 프로세스 관리
 
삶이편해지는_백엔드_개발자_지식.pdf
삶이편해지는_백엔드_개발자_지식.pdf삶이편해지는_백엔드_개발자_지식.pdf
삶이편해지는_백엔드_개발자_지식.pdf
 
[우리가 데이터를 쓰는 법] 모바일 게임 로그 데이터 분석 이야기 - 엔터메이트 공신배 팀장
[우리가 데이터를 쓰는 법] 모바일 게임 로그 데이터 분석 이야기 - 엔터메이트 공신배 팀장[우리가 데이터를 쓰는 법] 모바일 게임 로그 데이터 분석 이야기 - 엔터메이트 공신배 팀장
[우리가 데이터를 쓰는 법] 모바일 게임 로그 데이터 분석 이야기 - 엔터메이트 공신배 팀장
 
모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트
모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트
모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트
 
7. html5 api
7. html5 api7. html5 api
7. html5 api
 
Portfolio
PortfolioPortfolio
Portfolio
 
학교에서는 배울 수 없는 스타트업 엔지니어링 (연세대 특강)
학교에서는 배울 수 없는 스타트업 엔지니어링 (연세대 특강)학교에서는 배울 수 없는 스타트업 엔지니어링 (연세대 특강)
학교에서는 배울 수 없는 스타트업 엔지니어링 (연세대 특강)
 
2021년 4월 10일 개발자 이야기
2021년 4월 10일 개발자 이야기2021년 4월 10일 개발자 이야기
2021년 4월 10일 개발자 이야기
 
2014 공개소프트웨어 대회 소프트웨어 개발 트렌드의 변화
2014 공개소프트웨어 대회 소프트웨어 개발 트렌드의 변화2014 공개소프트웨어 대회 소프트웨어 개발 트렌드의 변화
2014 공개소프트웨어 대회 소프트웨어 개발 트렌드의 변화
 
Meetup tools for-cloud_native_apps_meetup20180510-vs
Meetup tools for-cloud_native_apps_meetup20180510-vsMeetup tools for-cloud_native_apps_meetup20180510-vs
Meetup tools for-cloud_native_apps_meetup20180510-vs
 

Recently uploaded

MOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution DetectionMOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution DetectionKim Daeun
 
캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차캐드앤그래픽스
 
A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)Tae Young Lee
 
Console API (Kitworks Team Study 백혜인 발표자료)
Console API (Kitworks Team Study 백혜인 발표자료)Console API (Kitworks Team Study 백혜인 발표자료)
Console API (Kitworks Team Study 백혜인 발표자료)Wonjun Hwang
 
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...Kim Daeun
 
Merge (Kitworks Team Study 이성수 발표자료 240426)
Merge (Kitworks Team Study 이성수 발표자료 240426)Merge (Kitworks Team Study 이성수 발표자료 240426)
Merge (Kitworks Team Study 이성수 발표자료 240426)Wonjun Hwang
 

Recently uploaded (6)

MOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution DetectionMOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution Detection
 
캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차
 
A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)
 
Console API (Kitworks Team Study 백혜인 발표자료)
Console API (Kitworks Team Study 백혜인 발표자료)Console API (Kitworks Team Study 백혜인 발표자료)
Console API (Kitworks Team Study 백혜인 발표자료)
 
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
 
Merge (Kitworks Team Study 이성수 발표자료 240426)
Merge (Kitworks Team Study 이성수 발표자료 240426)Merge (Kitworks Team Study 이성수 발표자료 240426)
Merge (Kitworks Team Study 이성수 발표자료 240426)
 

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

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