- 학습 목표 달성 확인 목록
- [] DBMS가 등장한 이유와 애플리케이션 구조 변화를 설명할 수 있는가?
- [] Oracle 등장 배경과 Assembly 언어와 C 언어의 차이점을 이해하는가?
- [] DBMS와 SQL의 역할을 설명할 수 있는가?
- [] DBMS와 통신할 때 사용하는 Vendor API(Native API)를 설명할 수 있는가?
App과 DBMS를 연결을 해주는 것인데
이는 DBMS 제조사에 따라 다른 프로그램이다 그렇기에 특정 DBMS에 종속된다는 특징이 있다
윈도우에서는 .dll,.lib의 확장자이며 유닉스계열에서는 .so,.lib의 확장자로 이루어져있다
이 파일 안에는c/c++ 언어로 이루어져 있기때문에
java app에서 사용하기 어렵다.

- [] ODBC API의 등장 이유와 목적을 이해하는가?
MS사 만든 규격으로 특정 DBMS에 종속되지 않는 c/c++ API 규격을 정의한다
그 규격에 따라 각 DBMS 제조사가 구현한다
그래서 개발자는 DBMS 종류에 상관없이 일관된 방식으로 프로그래밍이 가능하다

- [] ODBC API와 ODBC Driver를 설명할 수 있는가?
쉽게 말하면 API는 재료 Driver는 요리사를 예로 들면된다
그렇기에 요리사들은 각자 역량에 따라 사용하는 재료가 다를수 있다.
다시 프로그래밍으로 돌아오면 Driver는 API를 모두 구현하는것은 아니다 Driver마다 구현률이 다를 수 있다
오라클로 예를 들자면 오라클에서 호출할 수 있었던 함수가
MS-SQL에서는 호출할 수 없는 경우가 있다 이렇기에 개발시에 고려해서 프로그래밍을 해야 한다.
- [] C 언어를 예를 들어 컴파일과 링킹 과정을 설명할 수 있는가?

x.lib 처럼 사용한 함수나 클래스 코드기 그대로 포함된다==>statically linked library
y.dll 처럼 사용한 함수나 클래스의 위치 정보만 포함된다==>dynamic link library
- [] 동적 라이브러리(.dll, .so)와 정적 라이브러리(.lib)를 설명할 수 있는가?

- [] JDBC API와 JDBC Driver의 역할을 설명할 수 있는가?

- [] MariaDB를 설치하고 설정할 수 있는가?
[mac]
mariadb 설치
> brew install mariadb
mariadb 설치 후 root 암호 변경
> sudo mysql_secure_installation
mariadb 실행
> brew services start mariadb
> brew services stop mariadb
또는
> mysql.server start
> mysql.server stop
## mysql 서버에 접속하기
로컬 MySQL 서버에 접속
> mysql -u root -p
> Enter password: 암호입력
## root 사용자 접근 거부 오류 발생시(linux)
일단 권한 검사를 하지 않는 모드로 MariaDB를 실행한다.
$ sudo mysqld_safe –skip-grant-tables
원격 MySQL 서버에 접속
> mysql -h 서버주소 -u root -p
> Enter password: 암호입력
## mysql root 암호 변경
> alter user 'root'@'localhost' identified by '1111';
## MySQL 사용자 추가
> CREATE USER '사용자아이디'@'원격호스트주소' IDENTIFIED BY '암호';
로컬에서만 접속할 수 있는 사용자를 만들기:
> CREATE USER 'study'@'localhost' IDENTIFIED BY '1111';
=> 이 경우 study 사용자는 오직 로컬(서버를 실행하는 컴퓨터)에서만 접속 가능한다.
=> 다른 컴퓨터에서 실행하는 MySQL 서버에 접속할 수 없다는 것을 의미한다.
원격에서만 접속할 수 있는 사용자를 만들기:
> CREATE USER 'study'@'%' IDENTIFIED BY '1111';
=> 이 경우 study 사용자는 원격에서만 접속 가능하다.
## MySQL 사용자 목록 조회
> select user, host from 데이터베이스명.테이블명;
> select user, host from mysql.user;
## MySQL 사용자 삭제
> DROP USER '아이디'@'원격호스트주소';
> DROP USER 'study'@'localhost';
## MySQL 데이터베이스 생성
mariadb에서는 default 키워드를 사용하지 않는다.
> CREATE DATABASE 데이터베이스명 CHARACTER SET utf8 COLLATE utf8_general_ci;
> CREATE DATABASE studydb CHARACTER SET utf8 COLLATE utf8_general_ci;
## MySQL 데이터베이스 삭제
> DROP DATABASE 데이터베이명;
> DROP DATABASE studydb;
## MySQL 사용자에게 데이터베이스 사용 권한 부여
> GRANT ALL ON 데이터베이스명.* TO '사용자아이디'@'서버주소';
> GRANT ALL ON studydb.* TO 'study'@'localhost';
## 데이터베이스 목록 조회
> show databases;
## 사용자 교체
> quit or exit (프로그램 종료 후)
> mysql -u study -p (다시 실행)
## 기본으로 사용할 데이터베이스 지정하기
> use 데이터베이스명
> use studydb;
## 데이터베이스의 전체 테이블 목록 조회
> show tables;