1. Database
- 데이터베이스는 데이터의 집합체를 의미한다.
- 대용량의 데이터 집합을 체계적으로 구성해 놓은 것.
- 이런 데이터의 집합체는 당연히 관리가 필요하다. 프로그램으로 관리하게 된다.
- 이런 프로그램들의 집합체를
DBMS(Database Management System)
이라고 한다.
- DBMS 종류
- Oracle(제품명) - Oracle(제작사) - 유료(상용시장 점유율 1등)
- MySQL(제품명) - Oracle(인수함) - 유료, 무료
- MariaDB(제품명) - MariaDB(MySQL 제작자와 동일) - 무료
- PostgreSQL(제품명) - PostgreSQL - 무료
- DB2(제품명) - IBM - 메인 프레임 시장 1등
- SQL Server(제품명) - MS
2. DBMS의 특징
- Integrity(무결성) : 데이터 안에 오류가 생기는 것을 막아준다. 이런 결함을 방지하기 위해서 당연히 사용자가 제약사항(constraints)을 걸어줘야 한다.
- 독립성 : 데이터베이스를 변경해도 기존 프로그램에는 영향이 없어야 한다.
- 보안
- 데이터 중복의 최소화
3. DBMS의 종류
- 계층형 데이터베이스
- 네트워크형 데이터베이스 → 계층형 데이터베이스의 단점을 극복하기 위해서 등장했지만 망했다.
- (1970년대) E.F.Codd라는 사람이 등장함. (IBM에 근무하던 수학자) → Relational Model 논문을 발표했다.
- IBM에서 prototype으로 만든다. ⇒ 현재의 DB2로 이어져 내려오고 있다.
- 모든 vendor들이 관계형 데이터베이스를 만들고 이걸 사용하게 된다.
- (1990년~) 객체지향 데이터베이스가 등장 ⇒ 큰 흥행을 하지 못했다. 하지만 객체지향 개념은 중요하다.
- 현재는 관계형 데이터베이스에 객체지향 개념을 섞었다. ⇒ 객체-관계형 데이터베이스 ⇒ Oracle
- 아주 최근에는 정형 데이터가 아닌 비정형 데이터가 많아졌다.
- 이런 비정형 데이터인 경우 NoSQL 계열의 데이터베이스를 사용한다.
4. MySQL
- MySQL community server 설치
- 여러가지 Database Client 프로그램들을 활용한다.
- 대표적인 유료 툴 : DataGrip(JetBrains), DBeaver(현업에서 많이 사용)
- MySQL 무료 툴을 하나 제공해 준다. ⇒ WorkBench
4.1 데이터베이스 생성
- WorkBench에서 확인해 보자.
- 테이블 : 데이터가 실제로 저장되어 있는 객체
- views : 가상의 테이블(실제 데이터를 가지고 있는 테이블이 아니라, 테이블을 이용한 가상의 테이블, 주로 회사에서도 뷰로 작업함.)
- Stored Procedure : 자주 사용되며 효율이 필요한 쿼리들을 함수로 만들어서 프로그래머나 일반 사용자에게 함수로 제공하는 것.
5. JDBC 개요
- JDBC는 Java Database Connectivity의 약자로 Java로 데이터베이스에 있는 값을 활용하기 위해서 사용되는 class와 interface의 집합이다.
- 데이터베이스 vendor들은 각자 자신의 데이터베이스 운영시스템(DBMS)를 가지고 있고 이 데이터베이스를 Program 언어가 사용할 수 있도록 무엇인가를 제공해야 한다.
- 당연히 Java인 경우는 class와 interface로 제공해준다.
- 이렇게 제공되는 클래스 중에 DBMS와 직접적으로 통신하는 class가 있는데 이를
Driver
라고 한다.
package jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
public class BasicJDBCConnect {
public static void main(String[] args) throws ClassNotFoundException {
try {
Class.forName("com.mysql.cj.jdbc.Driver");
System.out.println("드라이버 로딩 성공");
String myId = "root";
String myPW = "jiyun9163!";
String JDBC_URL = "jdbc:mysql://localhost:3306/employees?characterEncoding=UTF-8&serverTimezone=UTC&useSSL=false&allowPublicKeyRetrieval=true";
Connection con = DriverManager.getConnection(JDBC_URL, myId, myPW);
System.out.println("데이터베이스 접속 성공");
String sql = "select * from employees where gender='F'";
PreparedStatement pstmt = con.prepareStatement(sql);
ResultSet rs = pstmt.executeQuery();
rs.next();
String firstName = rs.getString("first_name");
System.out.println(firstName);
rs.next();
firstName = rs.getString("first_name");
System.out.println(firstName);
rs.close();
pstmt.close();
con.close();
} catch (Exception e) {
System.out.println("오류");
}
}
}
6. VO, DO, Entity, DTO
- DO(Domain Object) : 연관성이 있는 데이터 객체 1개를 지칭하는 용어
- 예를 들면 학사 관리 프로그램 → 학번, 이름, 학과, 나이, 학년, 학점, …
- (1000, 홍길동, 철학, 20, 1, 3.5), (홍길동, 철학, 20, 1, 3.5)
- VO(Value Object) : DO인데 값에 초점을 맞춘 객체
- Entity : DO인데 반드시 primary key가 포함되어 있다.
- DTO(Data Transfer Object) : DO인데 데이터 전달에 목적이 있다.
- 하지만 결과적으로 다 비슷하게 생겼고, 큰 차이를 두고 사용하지 않는다. 혼용해서 사용한다.
- 가장 대표적인 용어는 VO이다.