본문 바로가기
멘토씨리즈 자바/이론

[부록 1] JDBC와 데이터베이스 프로그래밍

by Hwanii_ 2023. 6. 11.
728x90

01. 데이터베이스와 DBMS

1.

프로그램을 사용하기 위해서는 데이터가 필요하다.

 

데이터들을 파일 또는 문서화여 저장해서 사용할 때, 

파일 관리 시스템(File Management System) 을 사용할 수 있다.

 

근데,

이 파일 관리 시스템은 프로그램마다 별도의 파일을 만들어서, 독립적으로 데이터를 관리하므로

같은 내용의 데이터가 서로 다른 업무의 파일에서 중복으로 저장되어서

프로그램 간의 데이터 공유가 어렵다는 단점이 있다.

 

2.

데이터베이스 (Database, DB)는 이러한 위의 단점을 보완하여,

서로 데이터를 공유해 사용할 목적으로 데이터를 한곳에 통합하여,

관리하는 데이터의 집합을 의미 한다.

 

이러한 데이터베이스를 효율적으로 관리하고 운영할 수 있도록 만든 소프트웨어 시스템을

DBMS (Database Management System) 이라고 부른다.

== 데이터베이스 관리 시스템.

 

3.

다양한 데이터가 저장되어 있는 데이터베이스는

기존의 파일 관리 시스템이 갖는 데이터의

종속성과 중복성의 문제를 해결하기 위해 제안된 시스템으로,

사용자나 프로그램 간의 공유 및 접근이 동시에 가능하다는 장점을 가진다.

 

DBMS의 장점은 다음과 같다.

 

1) 데이터의 중복 최소화

2) 데이터 공유

3) 일관성, 무결성, 보안성 유지

4) 최신 데이터 유지

5) 데이터의 표준화

6) 데이터의 독립성

7) 데이터 저장 공간 절약

 

4.

데이터베이스를 사용하기 위해서는 DBMS 소프트웨어를 설치 해야 한다.

대표적인 DBMS의 종류와 특징은 다음과 같다.

 

DBMS 제작사 운영체제 특징
MySQL MySQL >> Oracle 인수 유닉스, 리눅스, 윈도우, 맥 오픈 소스이나,
무료 사용에 제약이 있다.
중소 규모에서 주로 사용.
MariaDB Monty Program AB 윈도우, 리눅스, 유닉스, 등 MySQL 초기 개발자들이
독립해서 개발 했다.
MySQL을 대체하는 오픈소스.
중소 ~ 대규모에서 주로 사용.
Oracle Oracle 윈도우, 리눅스, 유닉스, 등 상용 시장 점유율 1위.
비공개 소스이고 가격이 높다.
대량의 데이터를 처리하여
대규모에서 주로 사용.
DB2 IBM 윈도우, 리눅스, 유닉스, 등 메인 프레임 시장 점유율 1위.
MS_SQL Microsoft 윈도우에 특화 상업용 데이터베이스.
중소규모에서 주로 사용.
비공개 소스
(리눅스 버전은 오픈소스)

 

 

이처럼 DBMS 는 다양한 프로그램들이 존재 한다.

각각의 사용 방법과 특징은 다르지만, 어떤것을 사용해도 괜찮다.

처음 시작한다면, 비교적 쉬우면서 관리 도구를 제공하는 MySQL 도 나쁘지 않다.

 

 

 

02. JDBC란 ?

 

1.

JDBC (Java Database Connectivity) 는 자바 프로그램에서 다른 기종 간의

데이터베이스를 표준화된 방법으로 접속할 수 있도록 만든 API 규격으로써,

자바와 외부 데이터베이스 간의 연결을 지원 한다.

 

2.

JDBC는 Driver Manager를 통해 각각의 데이터베이스에 접근할 수 있는

Driver 객체를 관리하고,

데이터베이스를 변경해야 하는 경우가 생길 때 별도의 코드 수정 없이 드라이버만 변경하면 된다.

 

해당 클래스는 각 DBMS 제조사에서 제공한다.

 

이렇게 제공되는 것을 Connector library 라고 한다.

 

 

 

03. MariaDB

 

1.

MariaDB는 오픈소스 관계형 DBMS 이다.

MySQL 기반으로 개발되어 현재 현업에서 가장 많이 사용하는 시스템 들 중 하나이다.

 

2.

DBMS는 데이터를 관리하는 구조의 특징에 따라

계층형, 망형, 관계형, 객체형 등으로 분류 된다.

 

그중에서 MariaDB를 비롯해 대부분의 DBMS가 관계형 데이터베이스로 사용 된다.

RDBMS 라고 부르며, 데이터를 테이블 단위로 관리한다.

 

테이블은 하나 이상의 열(column) 과 행 (row) 으로 이루어져 있다.

 

3.

스키마 (Schema) 란 ?

 

데이터베이스의 구조와 제약 조건에 대하여 전반적인 명세를 기술한 것을 의미.

즉, 데이터베이스를 구성하는 자료 개체의 성질, 관계, 조작, 자료값 등의 정의를 총칭.

 

각 스키마는 기본적으로 간섭 또는 공유되지 않는다.

 

 

 

04. SQL

 

1.

SQL (Structured Query Language) 은 DBMS에서 데이터를 관리하고 처리하기 위해

설계된 언어이다.

질의어 (Query) 라고도 한다.

대부분의 DBMS에서 표준 언어로 선택되어 사용하고 있다.

이러한 SQL 문법으로 작성된 내용을 SQL이나 SQL Query 또는 간편하게 Query 라고 부른다.

 

2.

SQL의 특징

 

1) 대소문자의 구분이 없다.

DBMS 종류나 환경에 따라 대소문자를 구분하는 경우도 있으나,

기본적으로 SQL은 대소문자를 구별하지 않는다.

 

2) 자바와 마찬가지로 문장의 마지막은 세미콜론( ; ) 으로 끝난다.

 

3) 문장의 구별은 띄어쓰기로 한다. 띄어쓰기가 명령어 또는 문장을 구별하는 기준이 된다.

 

 

 

3.

SQL 명령어

SQL에서 사용하는 명령어를 분류하면 크게 아래와 같이 분류한다.

 

데이터 정의 언어 : DDL (data define language)

DDL은 데이터베이스를 정의하는 언어이며,

데이터를 저장하는 테이블의 생성, 수정, 삭제와 같은 관리 기능을 수행하는 언어이다.

 

데이터 조작 언어 : DML (data manipulation language)

DML은 데이터베이스에 등록된 데이터를 조회하거나 수정, 삭제하는 등의 기등을 수행하는 언어이다.

주로 프로그램 안에서 사용하게 되며, 개발자가 가장 많이 사용하는 언어이다.

 

데이터 제어 언어 : DCL (DCL : data control language)

DCL은 데이터베이스에 접근하거나 사용자 권한을 부여하는 등의 기능을 수행하는 언어이다.

 

1) DDL

CREATE : 스키마, 테이블 등의 생성.

ALTER : 테이블 수정.

DROP : 테이블 삭제.

TRUNCATE : 테이블 초기화.

 

2) DML

SELECT : 데이터 조회.

INSERT : 데이터 추가.

UPDATE : 데이터 수정.

DELETE : 데이터 삭제. 

 

3) DCL

GRANT : 특정 사용자에게 데이터베이스에 대한 권한 부여.

REVOKE : 특정 사용자에게 데이터베이스에 대한 권한 박탈.

COMMIT : 데이터 조작에 대한 기능 수행.

ROLLBACK : 데이터 조작에 대한 기능 취소.

 

 

 

05. 데이터 저장

 

1.

데이터베이스에서 데이터를 저장하기 위해서는 원하는 데이터를 저장할 테이블을 만들어야 한다.

DDL과 DML을 사용해 테이블을 만들고, 데이터를 수집, 수정, 삭제, 출력 등을 제어한다.

 

2.

데이터 테이블 ?

데이터베이스는 데이터를 저장하는 방법으로 테이블 형식을 사용한다.

데이터베이스가 데이터를 저장하는 저장소이면,

테이블은 데이터를 어떤 형식으로 저장할지 결정한다.

 

테이블은 흔히 액셀표라고 생각하면 된다.

하나의 문서에서 여러 개의 표를 작성할 수 있는 것 처럼,

데이터베이스도 여러 개의 테이블이 존재할 수 있다.

 

학번 이름 나이 학년 성별
20211001 홍길동 17 1 남자
20211002 김영희 19 2 여자

 

상단에 보이는 학번, 이름, 나이, 학년, 성별은 데이터의 의미를 나타낸다.

자바로 따지면 변수에 해당한다.

이렇게 테이블을 구성하는 기본 속성 (attribute) 를 가진 데이터를 Column(칼럼) 이라고 부른다.

 

그리고,

Column에 해당하는 데이터를 가지고 있는 하나의 데이터 정보를 Record 또는 row (row Data) 라고 부른다.

 

3.

자료형 ?

데이터베이스도 자바의 변수처럼 데이터들을 저장하기 위한 여러 가지 자료형이 존재 한다.

데이터를 정확하게 식별하기 위한 데이터 유형으로 정수형, 실수형, 문자형 등이 있다.

DBMS마다 사용하는 자료형의 이름에는 차이가 있을 수 있다.

 

1) 문자형 데이터 타입

 

종류 역할
CHAR(크기) 고정 길이 데이터 타입 (최대 255byte)
입력된 데이터의 길이와 상관없이 지정된 크기만큼 공간 생성
VARCHAR(크기) 가변 길이 데이터 타입 (최대 255byte)
지정된 길이보다 작은 데이터가 입력될 경우,
입력된 데이터 크기만큼만 저장.
TEXT(크기) 문자열 데이터 타입 (최대 65535byte)

 

2) 숫자형 데이터 타입

 

종류 역할
INT(길이) 정수 타입 데이터.
BIGINT(길이) 정수 타입 데이터.
길이의 제약이 거의 없음.
FLOAT(길이, 소수자릿수) 실수 타입 데이터.
근사값을 나타냄.
DOUBLE(길이, 소수자릿수) 실수 타입 데이터.
근사값을 나타냄.
DECIMAL(길이, 소수자릿수) 실수 타입 데이터.

 

3) 날짜형 데이터 타입 (데이터베이스에서 날짜를 저장하고 표현하기 위한 자료형)

 

종류 역할
DATE 날짜 표현.
TIME 시간 표현.
DATETIME 날짜와 시간 표현.
TIMESTAMP 날짜를 숫자 형태로 저장하고 표현.

 

4.

데이터베이스의 Key

데이터를 테이블에 저장하여 필요시 사용할 경우,

우리는 데이터를 구별할 수 있어야 한다.

만약 학생 정보를 저장했다고 가정했을때, 학번이 없다면 ?

학생이 똑같은 이름이라면 데이터를 불러올 때 같이 불러와지게 될것이다.

 

학번을 부여하면 ?

학번은 학생이 고유하게 부여받는 PK에 해당하므로, 중복이 없는 데이터 이다.

모든 정보가 일치한다고 하더라도 학번은 절대로 중복이 없기 때문에,

특정 학생을 식별할 수 있게 된다.

 

이렇게 중복되지 않고 데이터를 고유하게 식별할 수 있는 Column을 고유 식별자 라고 한다.

이를 기본 키 == Primary Key 라고 한다.

 

5.

기본 키 (Primary Key, PK)

 

기본키, 또는 PK 라고 하며, 데이터를 식별할 수 있는 역할을 한다.

데이터 테이블이 가진 여러 칼럼 중에서 데이터를 식별할 수 있고,

유일한 데이터를 지닌 Column을 지정하여 기본 키를 설정 한다.

 

기본키의 특징으로는 다음과 같다.

 

>> 중복되지 않는 유일한 데이터를 가진 칼럼.

>> 데이터를 식별할 수 있어야 한다.

>> 기본 키는 하나 또는 여러 개의 칼럼을 묶어서 지정할 수 있다.

 

6.

외래 키 (Foreign Key, FK)

 

관계형 데이터베이스 에서, 데이터를 지닌 테이블 간의 연관성을 부여해 관리 한다.

각 테이블은 독립된 데이터를 가지고 필요 시 서로 연계하여 종합적으로

데이터를 생산할 수 있는 구조의 특징을 지닌다.

 

이러한 테이블 간의 관계를 설정하기 위해 사용하는 키를 외래 키 라고 한다.

 

보통 메인 << >> 서브 테이블 구조를 만들 때 사용하며,

부모 테이블 << >> 자식 테이블 이라고 말할 수 있다.

 

외래키는 자식 테이블이 지니게 된다.

이때, 외래키는 메인 테이블의 기본 키를 사용하여 지정 한다.

 

예시)

 

[ 학생 정보 테이블 ]

학번 이름 나이 학년 성별
20211001 홍길동 17 1 남자
20211002 홍길동 18 1 남자

 

위와 같이 학생 정보 테이블에는 학생 정보를 식별할 수 있는 학번이 있다.

이를 기본 키로 설정 한다.

 

[ 학생 점수 테이블 ]

보관번호 학번 연도 학기 국어 영어 수학
2021001 20211001 2021 1 90 90 100
2021002 20211002 2021 1 85 90 99
2021003 20211003 2021 2 88 85 100
2021004 20211004 2021 2 90 90 95

 

학생 점수 테이블도 학번이 존재하므로 학번을 기본 키로 설정 할 수 있지만,

학생 정보 테이블 에서 사용된 기본 키는 사용하지 않는 것이 원칙이기에,

 

연관 관계가 있는 학번을 학생 점수 테이블의 외래 키로 사용 한다. 즉, FK로 사용 한다.

 

외래 키의 특징으로는 다음과 같다.

 

>> 다른 테이블의 기본 키

>> 연관 관계가 있는 칼럼

>> 외래 키가 지정된 테이블의 데이터를 삭제해야 기본 테이블 데이터를 삭제할 수 있다.

>> 외래 키를 지정한 테이블은 해당 키를 기본 키로 하는 테이블에 종속된다.

>> 메인 데이터를 지우기 위해서는 종속 데이터를 먼저 삭제 해야 한다.

 

 

 

06. 데이터베이스 활용

 

1.

테이블 생성 CREATE

테이블 생성은 CREATE 명령어를 사용한다.

 

CREATE TABLE 테이블_이름 ( ... );

 

만약 테이블 이름이 2음절 이상이다 ?

자바의 카멜식 표기 방법이 불가능 하다 >> 대소문자 구별이 안되므로..

 

그래서 이럴때는 음절 사이에 언더바 ( _ ) 를 사용해서 테이블을 생성 한다.

 

테이블 이름이 예를들어, studentInfo 이면,

student_info 로 짓는것 이다.

 

2.

테이블 생성 옵션

데이터베이스에서 테이블을 생성할 때 데이터를 저장하는 변수를 칼럼이라고 한다.

해당 칼럼 (변수)를 설정할 때는 여러 가지 옵션을 사용할 수 있다. == 제약조건

 

옵션 명 의미 설명
auto_increment 자동증가 1부터 차례대로 자동증가.
null null 허용 옵션값.
(데이터 삽입이 없어도 허용)
not null null 불가 필수값.
(데이터 삽입이 반드시 있어야함)
default 기본값 부여 데이터 삽입이 없으면 설정된 값 삽입.
기본값은,
칼럼의 데이터 타입과 동일 해야 한다.
comment 설명 부여 테이블 / 칼럼의 설명을 부여.

 

3.

테이블 생성

 

예시)

 

CREATE TABLE STUDENT_INFO (

STD_ID VARCHAR(100) NOT NULL,

STD_NAME VARCHAR(100) NOT NULL,

STD_AGE INT NOT NULL,

STD_GRADE INT NOT NULL,

STD_GENDER VARCHAR(50) NOT NULL,

STD_PHONE VARCHAR(100) DEFAULT     ' '     ,

 

PRIMARY KEY(STD_ID)

);

 

MySQL은 칼럼명 만들때 언더바 쓰면 오류나는 듯 ?

 

 

 

DEFAULT 값은 타입에 맞게 부여 한다.

INT 타입이면 숫자로,

VARCHAR 타입이면 문자로.

 

4.

데이터 삽입 INSERT

테이블을 생성하면 위의 예시와 같이 데이터를 삽입해야 한다.

데이터 삽입은 INSERT 명령어를 사용해 작성 한다.

 

INSERT INTO 테이블 이름 (칼럼명1, 칼럼명2, 칼럼명3, ...) VALUES (데이터1, 데이터 2, ...)

 

예시)

 

INSERT INTO STUDENT (ID,NAME,AGE,GRADE,GENDER,PHONE)

VAULES ('20230611','아무무',5,3,'남자','010-1234-5678') ;

 

5.

데이터 조회 SELECT

SELECT 구문은 테이블에서 데이터를 조회하기 위한 명령어 이다.

즉, 원하는 데이터를 출력하는 문법이며 개발자가 가장 많이 사용하는 구문중에 하나 이다.

효율적인 조회를 위해서는 여러 테이블의 데이터를 조합하거나 데이터 정렬이나 집계 등의

다양한 작업이 함께 이루어져야 한다.

 

SELECT 칼럼1,칼럼2,칼럼3, ...

FROM 테이블 이름

WHERE 조건 1

AND 조건 2 ...

 

데이터 검색 명령은

SELECT 키워드로 시작하고, 검색을 원하는 칼럼들은 그 뒤에 나열 한다.

FROM 키워드 뒤에는 검색을 원하는 테이블 이름을 기입 한다.

 

조건을 부여할 때는 WHERE절로 시작하고,

이후에 추가 조건이 있으면

AND로 조건을 이어 붙힌다.

 

조건부는 상세하게 검색할 수 있는 필터 기능이라고 생각 하면 된다.

 

예시)

 

SELECT ID,NAME,AGE,GRADE,GENDER,PHONE FROM STUDENT ;

 

6.

데이터 수정 UPDATE

UPDATE 구문은 테이블에서 데이터를 수정하기 위한 명령어 이다.

 

UPDATE 테이블 이름

SET

칼럼 1 = 새로운 데이터1,

칼럼 2 = 새로운 데이터2,

칼럼 3 = 새로운 데이터3,

...

WHERE 조건1

AND 조건 2 ...

 

데이터 업데이트 명령은 SET 키워드와 함께 수정될 칼럼과 값을 매칭하여 나열한다.

이후 데이터의 조건을 부여하는데,

조건을 부여하지 않을 경우 전체 데이터가 수정될 위험이 있으므로 주의 해야 한다.

 

예시)

 

UPDATE STUDENT

SET

AGE = 10,

GRADE = 3;

 

을 해버리면 어떤일이 발생 하냐면,

칼럼명이 AGE인 열과

칼럼명이 GRADE인 열의

모든 데이터 값들이 각각 10과 3으로 변경 된다.

 

그래서 조건을 잘 달아줘야 한다.

 

예시 2)

 

UPDATE STUDENT

SET

AGE = 10,

GRADE = 3

WHERE ID = 20221001;

 

위와 같이 하면, 칼럼명이 ID인 열에서 20221001 이라는 row (행)에 해당하는,

AGE와 GRADE만 변경 하게 된다.

 

7.

데이터 삭제 DELETE

DELETE 구문은 테이블에서 데이터를 삭제하기 위한 명령어 이다.

데이터가 삭제되면 다시 복구하기 어려운 만큼 삭제 시에는 주의를 기울여야 한다.

 

DELETE FROM 테이블 이름 WHERE 조건1 AND 조건2 .. ;

 

삭제 또한 대상을 특정하지 않으면 전체 데이터에 영향을 주기 때문에

반드시 조건을 명시하여 한정적으로 동작하도록 해야 한다.

 

예시)

 

DELETE FROM STUDENT WHERE ID = 20221001;

 

이러면 칼럼명이 ID인 열에서 row값이 20221001인 행을 지우는 것이다.

 

 

 

07. 자바와 연동

1.

DBMS 드라이버 로드

데이터베이스와 연동하기 위해서는 메모리에 DBMS 드라이버를 등록해야 한다.

 

Class.forName("드라이버 클래스") 명령어를 사용하여 등록 한다.

해당 기능은 try-catch와 함께 필수적으로 사용된다.

 

2.

DBMS Connection 생성

드라이버를 메모리에 올린 후에, 데이터베이스와 연동하는 커넥션 객체를 생성해야 한다.

커넥션을 연결하기 위해서는 경로, 아이디, 패스워드가 필요하기 때문에

매개변수로 해당 값들을 넣어준다.

 

3.

SQL 실행

커넥션이 연결되면 실행할 SQL 문법을 작성한다.

 

만약 작성된 SQL 데이터를 읽어오는 문법이면 Statement 객체를 이용해 실행된다.

실행된 결과는 ResultSet 클래스를 통해 전달된다.

 

예시)

 

String sql_SELECTALL = "SELECT * FROM STUDENT";

>> SQL 문법 작성

 

Statement statement = connection.createStatement();

>> 데이터베이스에 전송할 문서 객체 생성

 

ResultSet resultSet = statement.executeQuery(sql_SELECTALL);

>> 선택된 결과를 받음

 

while(resultSet.next()) {
	
    String id = resultSet.getString("ID");
    String name = resultSet.getString("NAME");
    int age = resultSet.getInt("AGE");
    int grade = resultSet.getInt("GRADE");
    String gender = resultSet.getString("GENDER");
    String phone = resultSet.getString("PHONE");
    
    StudentVO sdata = new StudentVO(id,name,age,grade,gender,phone);
    sdatas.add(sdata);
}

 

resultSet.next()는 반환할 데이터가 있으면 true, 없으면 false 로 출력한다.

 

4.

해당 객체들의 메모리 해제가 자동으로 이루어지지 않으므로

데이터베이스 관련 객체들도 사용 후에는 수동으로 사용 종료를 해준다.

 

예시)

 

resultSet.close();     //     statement.close();     //     connection.close();

 

반응형

'멘토씨리즈 자바 > 이론' 카테고리의 다른 글

[핵심정리] 컬렉션 프레임워크  (0) 2023.06.04
[핵심정리] 예외처리  (0) 2023.06.04
[핵심정리] 다형성과 타입 변환  (0) 2023.06.02
[핵심정리] 상속  (0) 2023.06.02
[핵심정리] 생성자  (0) 2023.06.02