1. 데이터베이스(Database)란?
데이터베이스(Database)는 개념적으로는 '일정한 기준을 가지고 데이터를 모아놓은 것(집합)'으로, 물리적으로는 '테이블(table)을 담는 저장 공간'으로 간단하게 정의할 수 있다. 데이터베이스를 다루면서 주로 사용되는 개념들 몇 개를 정리하고 넘어가자.
테이블(Table, 표)
: 실제 데이터들이 저장되는 공간, 행(row)와 열(column)으로 구성된다.
컬럼(Column, 열)
: 테이블에 저장되는 항목을 컬럼으로 구분한다.
로우(Row, 행, 줄)
: 데이터가 입력/출력/삭제되는 최소 단위, 레코드(record)하고도 한다.
2. DB를 관리/운영해주는 소프트웨어: DBMS
DBMS(Database Management System)은 앞서 언급한 데이터베이스를 관리하고 운영하는 소프트웨어로, 대량의 데이터를 체계적으로 관리하고, 사용자가 원하는 정보를 효과적으로 검색할 수 있도록 돕는다.
DBMS의 장점 및 특징은 다음과 같다.
1. 트랜잭션과 무결성 제약 조건을 통하 데이터 일관성 유지
2. 접근 제어와 권한 관리를 통한 데이터 보안
3. 쿼리와 인덱싱을 통한 효율적인 데이터 접근
4. 여러 사용자가 동시에 데이터를 사용할 수 있음(데이터 공유)
5. 데이터 손실에 대비해 데이터의 백업과 복구 기능을 제공
DBMS의 종류는 구조와 데이터 모델에 따라 관계형, 비관계형, 객체지향형 DBMS 등으로 분류된다. 이중 가장 대표적인 데이터베이스인 관계형 DBMS와 비관계형 DBMS, 객체지향형 DBMS의 특징을 간략하게 이해하고 넘어가자.
관계형 DBMS(RDBMS, Relational DBMS)
- 데이터를 테이블 형식으로 저장, 스키마를 사용하여 데이터를 구조화하고, 테이블 간의 관계 정의
- 스키마(Schema): DB에서 데이터의 구조와 조직을 정의하는 설계도. 테이블, 열, 데이터 타입, 제약조건, 인덱스 등을 포함한다.
- SQL을 사용하여 데이터 접근/조작
- 정형 데이터(ID, password, 주소, 전화번호) 등을 관리
- 대표적인 DBMS: Oracle, MS-SQL, MySQL/MariaDB ...
비관계형 DBMS(Non Relational DBMS, Non SQL DBMS)
- 데이터를 테이블 구조가 아닌 다양한 형식으로 저장
- 대용량 비정형 데이터(SNS 데이터, IoT, 실시간 분석) 등을 관리
- 대표적인 DBMS: MongoDB, HBase, Cassandra, Redis ...
객체지향 DBMS(OODBMS, Object Oriented DBMS)
- 객체지향 프로그래밍 개념을 데이터베이스에 적용한 방식, 객체를 저장하고 관리
- 대표적인 DBMS: db4o, ObjectDB
우리가 흔히 데이터베이스 또는 DBMS라고 지칭하는 것들은 대부분 관계형 데이터베이스/DBMS인 경우가 많다. 따라서 이번 포스팅을 포함하여 데이터베이스에 관련된 포스팅들은 관계형 데이터베이스를 다루도록 하겠다.
DBMS에서는 SQL(Structured Query Language)를 사용하여 데이터를 접근/조작한다(SQL은 '에스큐엘' 또는 '시퀄'이라는 이름으로 읽는다). SQL은 데이터를 다룰 때 사용되는 구조화된 질의어로, 국제표준화기구에서 지정한 표준 SQL을 대다수의 데이터베이스 회사들에서는 기준으로 삼고, 제품에 특성에 맞게 변경하여 사용한다.
SQL에는 DDL(Data Definition Language), DML(Data Manipulate Language), DCL(Data Control Language)가 있는데 다음 언어들의 특징을 간략하게 정리하면 다음과 같다(다음 포스팅에서 각 언어에 대해 더 자세히 다룰 예정이다).
DDL(Data Definition Language)
- 데이터 정의 언어
- 데이터를 담을 객체(테이블, 데이터베이스, 컬럼..)을 생성/삭제/변경할 때 사용
- CREATE, ALTER, DROP
DML(Data Manipulate Language)
- 데이터 조작 언어
- 객체에 데이터를 추가/삭제하거나, 객체 내의 데이터를 읽고, 수정하는 데 사용
- INSERT, SELECT, UPDATE, DELETE
DCL(Data Control Language)
- 데이터 제어 언어
- 데이터에 대한 접근을 통제할 때 사용
- GRANT, REVOKE
3. MariaDB 설치 및 접속
나중에 진행할 DB 학습을 MariaDB에서 진행할 예정이므로, Linux에 MariaDB 서비스 패키지를 다운받아야 한다. rpm과 dnf 중 한 방법으로 받으면 되지만, rpm으로 설치할 경우 의존성 문제가 생기므로, dnf 방식을 추천한다.
rpm -ivh mariadb-server-버전-아키텍쳐.rpm
//rpm을 사용한 방법(의존성 문제가 뜰거다
dnf install mariadb-server
//dnf를 사용한 방법
설치가 완료됐다면 데몬 상태와 포트 상태까지 확인해주자.
systemctl status mariadb
netstat -anpt | grep mariadb
설치가 완료됐다면, 최초 Root 계정으로 접속해보자. 최초 접속 시에는 다음과 같이 비밀번호가 설정돼있지 않다.
mysql -u root // 최초 접속 시
mysql -u [MariaDB계정명] -p // 비밀번호가 설정된 후 접속 방법
select version(); // MariaDb의 버전을 확인할 수 있다
정상적으로 접속이 된다면, Root 계정의 비밀번호를 다음과 같은 방법으로 설정해주도록 하자.
use mysql;
//mysql: MySQL(MariaDB)를 관리하는데 필요한 정보를 담아놓는 특수목적DB
//mysql 이라는 db를 사용한다
alter user 'root'@'localhost' identified by '1234';
//root@localhost 계정의 비밀번호를 1234로 변경
flush privileges;
//변경사항 적용. !! 비밀번호 변경 시 반드시 실행
exit;
//로그아웃
mysql -u root -p
//root 재 로그인. 비밀번호를 입력해야 로그인 가능
힘들지만 오늘도 해낸 나를 위한 한 마디,
"작은 일에 충실해라, 큰 일은 저절로 이뤄질 것이다", 마더 테레사
'DB > MariaDB(SQL)' 카테고리의 다른 글
[DB] 집합 연산자(Set operator) / 조인(JOIN) (0) | 2024.10.15 |
---|---|
[DB] Character Set(문자 집합) (1) | 2024.10.14 |
[DB] SQL(DCL) / 원격 접속 도구(MySQL WorkBench) (3) | 2024.10.14 |
[DB] SQL(DML) / Python 스크립트 적용 방법 (2) | 2024.10.14 |
[DB] SQL(DDL) (5) | 2024.10.10 |