### : 목차 구분 기호
--- : 목차 내에 항목 구분 기호
@@@ : 태그 용도
--- : 목차 내에 항목 구분 기호
@@@ : 태그 용도
,,, : 같은 목차 내에 구분 기호
목차
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-M11.0-M2...
4) RC(Release Candidate) - 정식 판의 후보, 문제가 없으면 정식판이 됨
1.0-RC1
1.0-RC2
5) GA(General Availability) - 정식 버전
1.0 -GA
-----------------------------------
###################################
2. 설정 및 그 밖에
2. 설정 및 그 밖에
-----------------------------------
* Maven 다운
https://maven.apache.org/download.cgi
Binary zip archive
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. 소스코드 또는 실습
-----------------------------------
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");
}
}
}
4. 과제
-----------------------------------
-----------------------------------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
볼륨 일련 번호가 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 첫 수업 시간 상담으로 인해서 제대로 수업을 못들음
Maven 첫 수업 시간 상담으로 인해서 제대로 수업을 못들음
-----------------------------------
###################################
5. 과제 해결
-----------------------------------
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 |