APMSETUP은 톰캣과 MySql을 동시에 편리하게 제어할 수 있어 쉽게 쓰인다.

그러나 APMSETUP의 PhpMyadmin은 내장되어 있는 MySql의 버전이 최신이 아니기 때문에 사용할 경우 최대 5.xx까지만 가능하다.(개발하는데 문제는 없음)

 

MySql의 버전을 5.xx 이상으로 사용하고 싶을 때에는 MySql Workbench를 따로 설치하여 연결해서 사용하면 된다.

 

 

1. 홈페이지 접속

- http://www.apmsetup.com/download.php 접속 > 다운로드 > APMSETUP7 DOWNLOAD 클릭

페이징을 사용할 때 쿼리 select 문에 LIMIT를 사용하여 select로 뜨는 결과를 제한, 페이징을 구현할 수 있다.

 

1. 의미

LIMIT a, b

a번 인덱스 쿼리부터 b개 만큼 출력하겠다는 의미.

(ex. LIMIT 3, 3 : 3번 인덱스 컬럼부터 3개만 select 한다.)

 

 

2. 예제

 

 

book 테이블을 출력하는 쿼리 SELECT * FROM book; 을 입력했을 때에는

 

 

컬럼 book_code가 b00001부터 b00010까지인 book 테이블의 모든 정보를 보여준다.

 

여기서 응용하여 book_code가 b00003 ~ b00007까지 select 한다고 하면 쿼리를 어떻게 입력해야 할까?

 

 

답은 간단하다. 뒤에 LIMIT만 붙여주면 된다.

단, 컬럼의 인덱스는 0부터 시작하기 때문에 LIMIT 2, 5로 적어줘야 b00003인 도서부터 select 해줄 수 있다.

 

아래는 그 결과이다.

 

phpMyAdmin이나 developer 프로그램 이외에 command 창에서 mysql을 다루기 위한 기본적인 명령어들을 정리해봤다.

 

 

 

- cd.. : 상위 경로로 빠져나가는 명령어

- mysql -u user -p : user 부분에는 생성했던 user명을 입력하면 된다. Enter password 부분에는 해당 user의 패스워드를 입력한다.

 

mysql 폴더가 위치한 C드라이브로 경로를 옮긴다.

 

 

 

- show databases : 해당 user와 연동되어 있는 DB 목록을 보여준다.

- use DB명 : 입력한 DB를 사용한다는 뜻이다. 입력한 데이터베이스로 이동한다.

- show tables : 해당 데이터베이스 내에 만든 테이블들을 조회한다.

 

 

- select * from table : 테이블 내 데이터들을 조회한다.

데이터베이스 내에 있는 여러 테이블들 중 book이라는 테이블을 조회했는데, 한글이 꺠져서 나오는 문제가 발생했다.

 

 

 

- set character set euckr : command mysql 상에서 한글 깨짐을 방지하는 명령어이다.

다시 테이블 내용을 조회하니 잘 나온다.

 

 

 

- desc table : 테이블 구조를 보여준다. 필드명, 타입 등을 확인할 수 있다.

 

 

 

- show create table table_name : desc table과 비슷한 명령어이다.

   비슷하지만 ENGINE과 CHARSET 속성도 확인할 수 있는 장점이 있다.

(ENGINE을 InnoDB로 설정하여 테이블을 생성해야 외래키를 설정할 수 있다.)

오라클은 mysql보다 한 단계 더 업그레이드 된 데이터베이스이다.

 

1. http://www.oracle.com 홈페이지로 들어간다.

 

downloads > oracle datebase express edition 11g release 2 > accept 버튼을 클릭한 뒤 각 컴퓨터 사양에 맞는 exe 파일을 다운받는다.

 

 

2. 다운 받은 exe 파일을 실행

- next > I accept > next > (defalt 사용) C:\oraclexe\ > id : system / pw : oracle > next > install > finish.

 

 

3. 자동 시작 방지 설정

- 제어판 > 관리 > 서비스 > OracleServietXE / OracleXETNSListener 속성 > 시작 유형 : 수동으로 설정

 

 

4. sql developer을 다운받는다.

 

 

5. Oracle Start database /  stop database 시작 메뉴에 고정

 

 

6. Oracle Start database

a. OracleServiceXE 실행중

b. OracleXETNSListenr 실행중

2개가 실행되면 정상

 

 

7. Oracle Stop > Oracle 다시 시작

 

 

8. 오라클 포트 변경

톰캣이 8080 포트를 쓰는데, 오라클도 8080 포트를 기본으로 쓰기 때문에 충돌 방지를 위해 오라클 포트를 8090으로 변경해야 함. 바꾸지 않으면 톰캣 실행이 되지 않아서 이클립스 에러가 난다.

근본적인 해결책 : 오라클 포트를 8090으로 변경한다.

 

a. sql developer 실행

 

b. 테이블 스페이스 생성

- dba > 저장 영역 > 테이블 스페이스 > 새로만들기

- 이름 : 파일명 뒤에 반드시 .DBA를 붙일 것

- 디렉토리 : DBA 파일들이 위치한 경로

- 파일 크기 : byte 단위. K(B), M(B), G(B), T(B)

 

(테이블 스페이스를 따로 두고 싶지 않을 때에는, 데이터베이스를 생성할 때 default로 system이나 다른 공간으로 테이블 스페이스를 지정한다.)

 

c. 사용자 추가

- dba > 보안 > 사용자 > 새로만들기

 

- 아이디, 비밀번호는 임의로 만들어 작성.

- 기본 테이블 스페이스 : 테이블 스페이스에서 생성했던 DBA명 클릭, 임시 테이블 스페이스 : TEMP 클릭

 

d. db 추가

- 접속 > 새접속

 

- 접속 이름 : 임의로 생성.

- 사용자 이름, 비밀번호 : 사용자를 생성했을 때 기입했던 아이디와 비밀번호 그대로 기입.

- 비밀번호 저장 체크할 것.

- 테스트 버튼을 눌러 접속이 원활하게 되는지 테스트한 뒤, 접속 버튼을 누른다.

 

e. 오라클 포트 변경

- 생성한 db에 접속한 뒤 SELECT DBMS_XDB.GETHTTPPORT() FROM DUAL 이라고 입력한 후 현재 오라클 포트를 확인한다.

- EXEC DBMS_XDB.SETHTTPPORT(8090) 을 입력하여 오라클 포트를 8090으로 변경한다.

 

f. 톰캣 테스트

- 오라클 포트를 8090으로 변경한 상태에서 이클립스에 접속, 실행시켜 톰캣이 제대로 작동하는지(포트 충돌 없는지) 다시 한 번 확인한다.

1. phpMyAdmin에 root로 접속한다.

 

 

 

 

2. (생성한 user와 연동할) db를 먼저 생성한다.

 

 

 

db를 생성하면 이렇게 db를 생성했다는 화면이 뜬다.

 

 

3. user를 생성한다.

 

 

왼쪽 메뉴 부분에 mysql > user > 삽입 을 클릭한다.

 

* Host : localhost(본인 컴퓨터에서 접속하므로 왠만하면 localhost로 입력)

  User : 아이디

  Password : 비밀번호, password 함수를 선택하여 암호화를 시킨다.

 

 

4. 계정과 db 연동

 

 

db > 삽입 을 클릭한 뒤,

 

* Host : localhost

  Db : (생성되어 있는 연동할 db 이름)

  User : db와 연동할 계정 id

권한은 전부 Y를 클릭한다.

 

 

5. mysql 재시작

 

 

 

6. 연동한 계정으로 로그인

 

 

1
2
3
4
5
<insert id="insert" parameterType="com.vo.Member" useGeneratedKeys="true" keyProperty="id">
        INSERT INTO members
        (password) 
        VALUES (password(#{password}));
</insert>
cs

 

password나 주민등록번호 같은 경우 암호화를 하여 저장해야 할 때가 있다.

INSERT INTO 테이블명 컬럼명 VALUES password(암호화할 문자열); 을 하면 된다.

1. export

phpAdmin에 접속한 뒤 export할 해당 테이블의 위에 있는 '내보내기'버튼을 누르고,

 

 

단에 있는 '파일로 저장' 부분에서 zip 압축을 클릭한 뒤 '실행' 버튼을 누르고 저장 경로를 설정 후 다운받는다.

설정한 경로에 가보면 sql 텍스트 파일로 안에 있는 테이블 정보를 확인할 수 있다.

 

 

2. import

import를 하기 전에, 데이터베이스 내에 동일한 이름으로 된 테이블이 존재하면 안 된다.

 

1) phpMyAdmin에서 import

 

 

데이터베이스를 클릭 >  'Import' > SQL 텍스트파일의 위치 찾아보기 > 압축을 푼 sql 파일 선택 > 업로드 > 실행 

 

 

성공적으로 import 되었음을 확인할 수 있다.

 

 

2) 명령 프롬프트 창에서 import

 

압축을 푼 sql 파일을 특정 경로에 놓고 명령 프롬프트에서 sql 파일이 있는 경로로 이동한다.

그 후 mysql -u 계정이름 -p 데이터베이스명 < 파일명.sql 을 하면 원하는 테이블을 import할 수 있다.

1. 정의

sql 묶음

하나의 논리적 작업 단위로 수행되는 일련의 연산 집합. DB 작업의 단위

다양한 데이터 항목들을 액세스하고 갱신하는 프로그램 수행의 단위가 됨

 

단일 쿼리로는 해결할 수 없는 로직을 처리할 때 필요한 기술

2개 이상의 퀴리를 하나의 Connection으로 묶어 DB에 전송하고 에러가 발생할시 원상태로 복구함 (All or Nothing)

 

한 개 이상의 쿼리에서 동일한 Connection 객체를 공유하게 되는데, 자바에서는 DB 연결시 java.sql.Connection 객체를 이용했던 반면 트랜잭션에서는 Connection autoCommit() 이라는 메소드가 존재하여 개발자가 직접 커넥션에 대해 커밋을 수동으로 관리할 수 있음 (autoCommit default : true)

=> 개발자가 직접 commit과 rollback을 자유자재로 조절 가능

 

commit() : 해당 커넥션 요청을 완료한 후 에러가 없으면 그 결과를 DB에 반영하는 것

  rollback() : 해당 커넥션을 수행 중 에러가 발생할 시 모든 과정을 취소하고 DB를 커넥션 수행 전 상태로 변경하는 것

 

* Spring framework는 다이나믹 프록시 + AOP 기술을 사용하기 때문에 크게는 인터페이스 단위까지 트랜잭션을 컨트롤할 수 있음. 거기에 애노테이션 기술로 @Transaction을 설정하는 것 만으로 트랜잭션 설정을 가능하게 함

 

트랜잭션은 ACID 성질이라고 하는 4가지 조건으로 설명됨

 

 

2. 트랜잭션의 필수 조건 4가지 (ACID)

 명칭

 설명

 원자성(Atomic)

 - 더이상 분류할 수 없는 작업 단위여야 함

 - 모든 데이터 수정 작업이 수행되거나, 하나도 수행되지 말아야 함

 일관성(Consistency)

 - 완료된 트랜잭션의 모든 데이터는 일관적이어야 함

 - 관계형 DB에서는 트랜잭션 수정에 모든 규칙을 적용하여 모든 데이터 무결성을 유지해야 함

 - 트랜잭션 마지막에는 B-tree 인덱스 또는 이중 연결 목록 등 모든 내부적 데이터 구조를 반드시 수정해야 함

 독립성(Isolation)

 - 동시 트랜잭션에 의한 수정은 다른 동시 트랜잭션에 의한 수정과 격리되어야 함

 - 트랜잭션에서 다른 동시 트랜잭션이 수정하기 전 상태의 데이터를 보거나, 두번쨰 트랜잭션이 완료된 후의 데이터를 볼 수는 있으나 중간 상태는 볼 수 없음

 => 결과적으로 시작 데이터를 다시 로드하고 일련의 트랜잭션을 재생하여 원래 트랜잭션이 수행된 후의 상태로 데이터를 되돌릴 수 있는데, 이를 순차성이라고 함

 지속성(Durabillity)

 - 트랜잭션 완료 후 그 영향이 영구적으로 시스템에 적용되어야 함

 - 수정은 시스템에 오류가 발생한 경우에도 지속됨

 

 

3. DBMS 구성

ㄱ. 질의 처리기 (Query Processor) : 상부 구성.

ㄴ. 저장 시스템 (Storage System) : 하부 구성. MySQL의 경우 InnoDB/MyISM 등과 같이 여러 하부 저장 시스템

선택 가능

 

* MySQL : 상부의 질의 처리기와 하부의 저장 시스템이 명확하게 구분되는 계증 구조에 해당됨

 

 

4. 트랜잭션이 종료되는 경우

ㄱ. 쿼리가 정상으로 수행되어 commit을 통해 종료되는 경우

ㄴ. 잘못된 입력 or 일관성 제약 조건 위배 등 사용자 요청에 의해 철회되는 경우

ㄷ. time out or 교착 상태 등 시스템이 감지하는 문제로 DBMS가 철회되는 경우

 

DB 시스템은 비휘발성 저장 장치인 디스크에 데이터를 저장하며, 전체 DB의 일부분을 메인 메모리에 유치시킴

DBMS는 데이터를 고정 길이의 페이지로 저장하며 디스크에서 읽거나 쓸 때 페이지 단위로 입출력이 이루어짐

 

메인 메모리에 유치되는 페이지들을 관리하는 모듈을 페이지 버퍼(Page buffer) 또는 관리자 버퍼라 부르는데, DBMS의 주요 모듈 중 하나임

 

 

5. 트랜잭션 복구시 버퍼 관리 정책

 종류

 설명

 UNDO 복구

 - 해당 트랜잭션이 어떤 이유든 정상적으로 종료할 수 없게 되면 트랜잭션이 변경했던 페이지들이 그 이전 상태로 원상 복구되는 것

 - STEAL / -STEAL 2가지가 존재함

 REDO 복구

 - UNDO 복구의 반대

 - 커밋한 트랜잭션 수정은 어떤 경우에도 유지되어야 함

 - 이미 commit한 트랜잭션의 수정을 재반영하는 복구 작업

 - FORCE / -FORCE 2가지가 존재함

DBMS는 버퍼 관리 정책으로

UNDO 복구의 STEAL : 수정된 페이지를 언제든지 디스크에 쓸 수 있음

REDO 복구의 -FORCE : 수정했던 페이지를 트랜잭션 commit 시점에서 디스크에 반영하지 않음

두 개를 채택하고 있어 UNDO + REDO 복구 두 가지가 모두 다 필요함

 

 

6. 로그 (Log)

UNDO 복구와 REDO 복구를 사용하기 위해 가장 널리 쓰이는 구조

로그는 로그 레코드의 모음으로 이루어짐. DB의 모든 갱신 작업을 기록함. 이론적으로는 가장 안정적인 저장 매체에 기록됨

 

로그는 덧붙이는(append) 방식으로 기록되며, 각 로그 레코드는 고유 식별자를 가짐

항상 뒤에 덧붙이는 방식으로 쓰이기 때문에 로그 식별자는 단조 증가함

 

* 레코드 고유 식별자 : LSN (Log Sequence Number) or LSA (Log Sequence Address)로 불림

 

기록할 Object 타입에 따라 물리적 / 논리적 로깅으로 분류됨

 

* 물리적 상태 로깅 (Physical State Logging) : DBMS에서 가장 널리 쓰이는 기본적인 로깅 방법

* 로그 버퍼 : DBMS가 로그 레코드 관리를 위해 유지하는 별도의 버퍼

성능을 위해 로그 버퍼에 로그 레코드를 모았다가, block 단위로 로그 파일에 출력함

 

* 더티 페이지 (Dirty Page)

- 데이터 캐시에서는 변경되었지만 데이터 파일 (*.mdf)에서는 아직 변경되지 않은 데이터(페이지)

- 더티 페이지가 데이터 파일에 성공적으로 적용된 후 체크포인트가 설정됨

MySql을 쓰기 위해서는 현재 사용하고 있는 이클립스에서(이클립스를 사용하고 있다면) 연동을 시켜줘야 한다.

 

 

 

 

1. MySql 사이트( www.mysql.com ) 접속 > Downloads > Community(오픈소스) > MySql Connectors > Download Connector/J > Platform Independent 다운로드한다.

 

 

 

 

 

2. 다운로드한 .zip 파일의 압축을 풀어준다.

 

* .tar : 리눅스 압축 포맷

* .zip : 윈도우 압축 포맷

* 보통 압축을 풀 때에는 c:\temp 파일 안에 풀어놓는다고 함

 

 

 

 

 

 

3. connector 압축 파일에 있는 connector.jar 파일만 Java7 > lib으로 이동시키고 나머지 connector 압축 파일은 삭제해도 된다 

 

 

 

4. 이클립스 console 창의 Data Source Explorer 오른쪽 마우스 버튼 > New 클릭

 

 

 

 

 

5. MySql > Next 클릭

 

 

 

 

6. MySQL JDBC Driver 오른쪽에 동그라미로 된 플러스 버튼을 누르면 Name/Type이 뜬다. 거기서 자신에게 맞는 드라이버를 클릭한다.

 

 

 

 

7. JAR List 목록에서 원래의 드라이버 파일이 없다면 Add Jar/Zip 버튼을 클릭하여 Java7\lib 폴더에 있었던 connector.jar를 추가하고, 이미 있다면 remove한 뒤 다시 추가한다.

 

 

8. URL과 User name, Password 부분은 mybatis 프레임워크에서 mapping을 하는 파일인 config.xml에 들어갈 데이터베이스 정보와 똑같이 적어야 한다.

   적은 뒤 바로 Finish를 누르지 말고 Test Connection 버튼을 눌러 연결이 원활한지 체크해볼 것.

- 특정 레코드에 대한 조건을 설정

  (ex. where id = 1 은 id가 1인 레코드)

 

* where 컬럼명 <> 값 : ~이 아닌 나머지

* 여러 조건식을 포현할 경우는 AND나 OR로 연결

 (WHERE A AND B : 두 조건 동시 만족 / WHERE A OR B : 두 조건중 하나만이라도 만족시)

 

1. LIKE

- 해당 패턴에 포함되는 레코드들(ex. 문자열, 날짜, 시간 etc) 선별시 사용

 (ex. SELECT 컬럼명 FROM 테이블명 WHERE 컬럼명 LIKE '%특정문자열%';) => WHERE 컬럼에서 %특정문자열%이 포함된 SELECT 컬럼을 FROM 테이블에서 출력

ㄱ. %특정문자열% : 특정 문자열이 포함된

ㄴ. %특정문자열 : 특정 문자열로 끝나는

ㄷ. 특정문자열% : 특정 문자열로 시작하는

 

- 응용 : SELECT * FROM project WHERE address LIKE '서울시%' ORDER BY name DESC;

=> project 테이블 address에서 '서울시'로 시작하는 name 컬럼을 오름차순으로 정렬

 

와일드카드

 내용

 %

 문자가 0개 이상인 문자열

 _

 단일 문자

 []

 지정 범위(ex. [ㄱ-ㄷ])나 집합(ex.[ㄱㄴㄷㄹㅁ])에 속하는 한 개의 문자

 [^]

 지정 범위(ex. [^ㄱ-ㄷ])나 집합(ex.[^ㄱㄴㄷㄹㅁ])에 속하지 않는 한 개의 문자

 

2. IN

- 해당 컬럼이 어떤 값들의 집합에 속할 경우

(ex. WHERE city IN ('seoul', 'pusan', 'jeju') => city가 서울, 부산, 제주일 경우

 

3. BETWEEN

- 컬럼 값이 BETWEEN ~ AND 범위값 안에 들 경우

(ex. WHERE a BETWEEN 80 AND 90) => 컬럼 a의 범위값이 80이상 90 이하의 경우

 

4. IS NULL

- 컬럼값이 NULL인 경우를 체크하기 위해

- 반대 : IS NOT NULL

+ Recent posts