### : 목차 구분 기호
--- : 목차 내에 항목 구분 기호
@@@ : 태그 용도 
,,, : 같은 목차 내에 구분 기호

목차
1. 이론 및 정보
2. 설정 및 그 밖에
3. 소스코드 또는 실습
4. 과제

###################################
1. 이론 및 정보
-----------------------------------
* Android DB는 별도 다운로드 받게 해주는게
마켓에 올리기 좋음
----------------------------------- 
* Android 공부하는데 책보다 인터넷에 노하우가 많음
----------------------------------- 
@@@ 안드로이그 끝, android end
----------------------------------- 
@@@ 스프링 시작, spring start
----------------------------------- 
* 프레임워크 vs 라이브러리

라이브러리는 내 코드가 주가 되어 특정 기능을 도움 받는 것이 라이브러리
그에 비해서
프레임워크는 전체 틀이 짜여있고 그 틀에 내가 넣은 코드를 끼워 넣는 것임

장점 매우 빠름
단점 익히는데 시간이 걸림, 원리 이해를 하기 힘듬
-----------------------------------
* Spring vs EJB

EJB는 J2EE 기술 - 자바로 할 수 있는 거의 모든 기술이 들어가 있음

EJB는 어마어마한 기능, 무게를 가지고 있는 클래스(컴퍼넌트)를 가지는 평범한 플랫폼
Spring은 평범한 기능을 가진 클래스(컴퍼넌트, POJO)를 가지는 어마어마한 플랫폼

같은 결과를 내는 거라면 적은 비용이 드는 스프링을 씀
-----------------------------------  
* Struts
미리 MVC 패턴으로 만들어 놓은 웹 프로젝트

스프링과 스트러츠를 같이 쓰다가
요즘은 스프링을 더 쓰는 추세
이유는 스트러츠를 웹에서만 쓰이는 한정성
그리고 스프링이 워낙 치고 올라와서 
-----------------------------------  
* 스프링을 쓰는 대표적인 이유
전자 정부 프레임워크로 스프링으로 하라고 함

이유는 정부 입장에서 제각각 프로젝트를 하는 것을 막기 위해서
방식을 제공하는데 적합한게 스프링이었음
-----------------------------------  
* Maven
프로젝트 관리 도구, 버전 관리 등등
Ant는 빌드 전용

프로젝트를 제대로 관리는 하는 회사인지 아닌지
확인이 가능한 도구가 됨

Maven을 추격하는 Gradle
구글에서 적극 지원하는 안드로이드 스튜디오에서 Gradle을 씀

1) 빌드 절차를 간소화 ( Ant도 가지는 특징)
2) Best Practice (노하우 제공)
3) 모듈간의 의존성을 관리 *** 
     - 알아서 라이브러리를 자동 다운로드 해줌
     - 중복되는 라이브러리 없게 통합 저장소를 씀
4) 소스코드의 디렉토리 구조를 표준화 
     - 디렉토리 구조의 틀을 유지할 수 있음
...
앞으로는 Maven으로 모든 프로젝트를 만듬

Maven 사용법
1. 명령어
2. Eclipse 내장 되어있음

goal이 콜론 다음에 나오는 단어
mvn archetype:generate -DgroupId=com.myproject1 -DarchetypeArtifactId=maven-archetype-quickstart 


* 명령어 lifecycle - 여러개의 goal을 합친 것임
...
1) compile
...
2) test - 테스트 코드를 실행
3) package - 개발이 끝나고 고객에게 넘겨줄때, 패키징(jar, war, apk)
...
4) install - local repository에 올려놓고 서버에 올릴 준비
5) deploy - 원격 서버에 올릴 때 많이 씀
6) clean - 기존의 프로젝트를 지울 때 , 타겟이 없어지고 원본 소스만 남음

숫자가 커질수록 그 전에 있는 모든 명령어가 실행됨
예를 들어 test 명령어를 넣으면 그전 compile 명령어를 한 뒤에 test 명령을 함

자주쓰는 명령어
mvn clean package
-----------------------------------  
* 버전 용어
1) Alpha Version - 개발자끼리 테스트 해보기 위한 버전
2) Beta Version - 테스터들에게 테스트 하기 위한 버전
3) M(Milestone) 특정 기능을 했을 때마다 하나씩 붙음
     1.0-M1
     1.0-M2
     ...
4) RC(Release Candidate)  - 정식 판의 후보, 문제가 없으면 정식판이 됨
               1.0-RC1
               1.0-RC2
5) GA(General Availability) - 정식 버전
               1.0 -GA
-----------------------------------    
###################################
2. 설정 및 그 밖에
----------------------------------- 
* Maven 다운

https://maven.apache.org/download.cgi
Binary zip archive
http://mirror.apache-kr.org/maven/maven-3/3.3.3/binaries/apache-maven-3.3.3-bin.zip
압축 풀기
~\apache-maven-3.3.3\bin
를 path 걸어 주면 됨


변수이름 : M2_HOME
변수 값 : F:\study\utils\apache-maven-3.3.3

PATH에 %M2_HOME%\bin; 추가

다 되면 cmd에서 mvn 되는지 확인
-----------------------------------
* Maven 핵심 - pom.xml

이 파일이 있는 곳에서 mvn 이라는 프로그램을 실행 할 수 있음
pom.xml을 알면 maven의 70%를 알 수 있음
----------------------------------- 
###################################
3. 소스코드 또는 실습 
-----------------------------------
3-1
WorkSpace : ~\study\AndroidWork  
/DBApp/src/com/example/dbapp/SecondActivity.java 

package com.example.dbapp;

import android.app.Activity;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;

public class SecondActivity extends Activity {
     private TextView tvResult;
     private SQLiteDatabase database;

     @Override
     public void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.activity_first);
          tvResult = (TextView) findViewById(R.id.tvResult);
     }

     public void onBtnDb(View v) {
          // 마지막 인자가 버전 번호라서 버전 번호를 바꾸면
          // public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) 메서드가 호출 됨
          DbHelper dbhelper = new DbHelper(this, "testdb2.db", null, 3);
          database = dbhelper.getWritableDatabase();
     }

     public void onBtnTable(View v) {
          String sql = "Create Table if not exists tbltest1(id integer, name text,age integer)";
          database.execSQL(sql);
          tvResult.append("table is created successful!\n");
         
          database.execSQL("insert into tbltest1 values(1, 'tom', 20)");
          database.execSQL("insert into tbltest1 values(2, 'jane', 22)");
          database.execSQL("insert into tbltest1 values(3, 'jerry', 23)");
          tvResult.append("insert data successful!\n");
     }

     public void onBtnSelect(View v) {
//          String sql = "select * from tbltest1 where age >= ?";
//          String[] args = {"21"};
//          Cursor cursor = database.rawQuery(sql, args);
         
          // 조회할 컬럼
          String colums[] = {"id","name","age"};
          String[] args = {"21"};
          // 필요한 부분만 전달 가능, 조립하는 느낌
          Cursor cursor = database.query("tbltest1",colums,"age >= ?",args,null,null,null);
         

          if (cursor != null) {
               int count = cursor.getCount();
               tvResult.append("count : " + count + "\n");
               for(int i = 0; i<count;i++){
                    cursor.moveToNext();
                    String msg = cursor.getInt(0) + ", " +cursor.getString(1);
                    tvResult.append(msg+"\n");
               }
          }
     }
    
     class DbHelper extends SQLiteOpenHelper{

          // 생성자를 호출해야지만 DB가 생성 됨
          public DbHelper(Context context, String name, CursorFactory factory,
                    int version) {
               super(context, name, factory, version);
          }

          @Override
          public void onCreate(SQLiteDatabase db) {
               // 생성 될때 호출 되는 메서드 , 한번만 호출 되는 듯
               tvResult.append("Database is Created successful!\n");              
          }


          @Override
          public void onOpen(SQLiteDatabase db) {
               super.onOpen(db);
               tvResult.append("Database is Connected successful!\n");    
          }
         
          @Override
          public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
               // DB에 버전이 바뀔 때 사용 할 수 있음 ,
               // DB 스키마 변경 가능
               // 시나리오
               // 기존 DB 삭제하고 새로 들어갈 수 있도록 준비 해보겠음
               tvResult.append("Database is upgrade : "+oldVersion+" , "+newVersion+"\n");
              
              
               // DB 삭제, 존재 할 때에만 삭제
               db.execSQL("drop table if exists tbltest1");
              
               String sql = "Create Table if not exists tbltest1(id integer primary key autoincrement, name text,age integer)";
               db.execSQL(sql);
               tvResult.append("table is created successful!\n");
              
               db.execSQL("insert into tbltest1(name, age) values('tom', 20)");
               db.execSQL("insert into tbltest1(name, age) values('jane', 22)");
               db.execSQL("insert into tbltest1(name, age) values('jerry', 23)");
               tvResult.append("insert data successful!\n");
          }
     }
}
----------------------------------- 
3-2
MavenWork 폴더 만들고 아래 명령 실행 해봄
mvn archetype:generate -DgroupId=com.myproject1 -DartifactId=myproject1 -DarchetypeArtifactId=maven-archetype-quickstart 

C:\Users\jhta\.m2\repository
안에 다운받은 라이브러리가 있음
----------------------------------- 
3-3
F:\study\maven>tree
로컬 디스크 볼륨에 대한 폴더 경로의 목록입니다.
볼륨 일련 번호가 00000200 9E60:D826입니다.
F:.
└─myproject1
    └─src
        ├─main
        │  └─java
        │      └─myproject1
        └─test
            └─java
                └─myproject1

내가 작성한 코드를 테스트 하기 위한 테스트 코드가 test에 있음
Junit을 이용해서 테스트를 수월하게 해주는데 필요한 폴더

groupId가 자동으로 패키지 이름으로 넘어감
----------------------------------- 
3-4
~\maven\myproject1\src\main\java\myproject1\App.java
수정

컴파일도 maven이 해줌
해당 프로젝트의 pom.xml이 있는 폴더로 가서 
mvn compile 명령어로 컴파일 됨
target 폴더가 생김
배포시에는 target 폴더를 쓰면 됨
----------------------------------- 
3-5 
mvn package

target 안에 jar가 만들어짐
----------------------------------- 
3-6
mvn install 하면
C:\Users\jhta\.m2\repository\myproject1\myproject1
안에 로컬 repository가 생김
여기까지가 내 컴퓨터에서 하는 작업
----------------------------------- 
3-7 
mvn site
라이프 사이클에 맨 마지막에 부분에 존재함

F:\study\maven\myproject1\target\site
----------------------------------- 
3-8 
pom.xml
version 에 snapshot은 개발하는 동안에만 씀
-----------------------------------
###################################
4. 과제
-----------------------------------
4-1
Maven 첫 수업 시간 상담으로 인해서 제대로 수업을 못들음
-----------------------------------
###################################
5. 과제 해결
-----------------------------------
-----------------------------------
###################################
6. 기타
----------------------------------- 
----------------------------------- 

'OpenFrameWork' 카테고리의 다른 글

오픈프레임워크_Day85  (0) 2015.07.14
오픈프레임워크_Day84  (0) 2015.07.13
오픈프레임워크_Day82  (0) 2015.07.09
오픈프레임워크_Day81  (0) 2015.07.08
오픈프레임워크_Day80  (0) 2015.07.07
,