성장에 목마른 코린이

[DB] 데이터베이스의 필요성, 관련 명령어 본문

데이터베이스

[DB] 데이터베이스의 필요성, 관련 명령어

성장하는 코린이 2022. 4. 7. 18:36
728x90

데이터베이스의 필요성

파일에 데이터를 저장하거나, 인메모리 형태로 데이터를 임시 저장하는 방법을 이용할 수 있지만

굳이 데이터베이스를 사용할 필요가 있는 이유

  • 데이터가 필요할 때마다 전체 파일을 매번 읽어야 합니다.
    • 파일의 크기가 커질수록 이 작업은 버겁고, 비효율적이어서 File I/O 방식의 큰 단점입니다.
  • 파일이 손상되거나 여러 개의 파일들을 동시에 다뤄야 하는 등 복잡하고 데이터량이 많아질수록 데이터를 불러들이는 작업이 점점 힘들어집니다.

1. In-Memory

JavaScript에서 변수를 만들어 저장한 경우, 프로그램이 종료될 때 해당 프로그램이 사용하던 데이터도 사라집니다.

예기치 못한 상황으로부터 데이터를 보호할 수 없고, 프로그램이 종료된 상태라면 데이터를 원하는 시간에 받아올 수 없으며, 데이터의 수명이 프로그램의 수명에 의존하게 됩니다.

2. File I/O

파일을 읽는 방식으로 작동하는 형태를 말합니다. 엑셀 시트나 CSV 같은 파일의 형태는 In-Memory에 비해 데이터를 저장하는 방식으로 적절해 보입니다. 그러나 한계가 분명히 존재합니다.

 

반면에 관계형 데이터베이스에서는 하나의 CSV 파일이나 엑셀 시트를 한 개의 테이블로 저장할 수 있습니다. 한 번에 여러 개의 테이블을 가질 수 있기 때문에 SQL 을 활용해 데이터를 불러오기 수월합니다. 또한, 엑셀 시트와 CSV 파일 등처럼 특정 형태의 파일은 대용량의 데이터를 저장하기 위한 목적이 아닙니다.

 

데이터베이스 관련 명령어

데이터베이스 생성

CREATE DATABASE 데이터베이스_이름;

데이터베이스 사용

데이터베이스를 이용해 테이블을 만들거나 수정하거나 삭제하는 등의 작업을 하려면,

먼저 데이터베이스를 사용하겠다는 명령을 전달해야 합니다.

USE 데이터베이스_이름;

테이블 생성

USE 를 이용해 데이터베이스를 선택했다면, 이제 테이블을 만들 수 있습니다. 다음은 user라는 테이블을 만드는 예제입니다. 테이블은 필드(표의 열)와 함께 만들어야 합니다. 다음과 같은 필드 조건이 있다고 가정합니다.

필드 이름필드 타입그 외의 속성

id 숫자 Primary key이면서 자동 증가하도록 설정
name 문자열 (최대 255개의 문자)  
email 문자열 (최대 255개의 문자)  
CREATE TABLE user (
  id int PRIMARY KEY AUTO_INCREMENT,
  name varchar(255),
  email varchar(255)
);

SQL 콘솔에서 Enter 키를 이용해 여러 줄의 코드를 입력할 수 있습니다. 위와 같이 입력하고, 다음에서 설명할 DESCRIBE 명령어를 이용해 테이블 정보를 확인합니다.

테이블 정보 확인

다음의 명령어를 통해 테이블 정보를 확인할 수 있습니다.

DESCRIBE user;

다음과 같이 user 테이블의 정보를 확인할 수 있습니다.

mysql> describe user;
+-------+--------------+------+-----+---------+----------------+
| Field | Type         | Null | Key | Default | Extra          |
+-------+--------------+------+-----+---------+----------------+
| id    | int          | NO   | PRI | NULL    | auto_increment |
| name  | varchar(255) | YES  |     | NULL    |                |
| email | varchar(255) | YES  |     | NULL    |                |
+-------+--------------+------+-----+---------+----------------+
3 rows in set (0.00 sec)
Comments