0. 들어가며
현재 학부생 2학년인 나는 선배님들께 2학년 2학기가 첫 고비라는 이야기를 듣게 되고,,, 이를 위해선 예습이 답이라는 생각에 혼공단과 함께 SQL을 시작해보려 한다.
또한 지금 생각하는 진로로는 빅데이터 쪽을 생각하고 있는게 커서, 이번 기회를 통해 제대로 배워보고 진로를 확실하게 생각해보는 것도 좋은 기회라 생각하여 시작해보고자 한다!
또 이참에 개발 블로그를 시작해보는 계기가 되기를 바라며 🤭🤭
1. 데이터베이스와 DBMS
본격적인 코딩을 하기에 앞서 데이터베이스가 무엇인지 알아보자.
'데이터베이스'란 쉽게 말해 데이터의 집합이라 할 수 있다. 데이터가 있다면 우리가 수정하고, 불러오고, 삭제하고, 추가할 수 있어야 하지 않은가? 이를 도와주는 소프트웨어가 바로 `DBMS(Database Management System)`인데, 데이터베이스를 관리하고 운영하는 역할을 한다. DBMS는 대용량 데이터에 대해 다수의 사용자나 응용 프로그램이 공유하고 동시에 접근할 수 있도록 도와준다.
DBMS에는 여러 종류가 있는데, 대표적으로 MySQL, SQL 서버, Maria DB 등이 있다. 혼공단을 진행하는 중에는 MySQL을 사용할 예정이다. MySQL은 `관계형 DBMS`이다. MySQL 이외에도 대부분의 DBMS는 관계형 DBMS 형태로 사용된다.
그렇다면 관계형 DBMS란 무엇일까?
관계형 DBMS
데이터 베이스를 테이블이라는 최소 단위로 구성하며, 이 테이블은 열과 행으로 이루어져 있다.
관계형 DBMS는 줄여서 RDBMS (Relational DBMS)라고도 한다.
DBMS는 공통적으로 `SQL`이라는 언어를 사용한다. SQL은 특정 회사에서 만드는 것이 아니라 국제표준화기구에서 SQL에 대한 표준인 `표준 SQL`을 정한다. 그러나 각 회사에서 이를 모두 포용하기엔 어려움이 있기 때문에, DBMS를 제공하는 회사들은 표준 SQL을 지키는 선에서 각 제품의 특성을 반영한 SQL을 사용한다.
2. MySQL 설치
MySQL 설치 링크 : https://dev.mysql.com/downloads/windows/installer/8.0.html
MySQL :: Download MySQL Installer
Note: MySQL 8.0 is the final series with MySQL Installer. As of MySQL 8.1, use a MySQL product's MSI or Zip archive for installation. MySQL Server 8.1 and higher also bundle MySQL Configurator, a tool that helps configure MySQL Server.
dev.mysql.com
내가 MySQL을 다운 받는 시점에서 가장 최신 버전은 8.0.37이다. 그러나 나는 혼공스 책에 맞춰 8.0.21 버전을 다운 받았다. 다운로드 과정은 다른 블로그 혹은 혼공스에 잘 나와있기 때문에 건너뛰기 하도록 하자,,,😶
한 가지만 짚고 넘어가자면, 나는 다운로드 과정에서 에러가 발생했다. apply configuration에서 execute를 하던 중 initializing database에서 에러가 발생한 것이다.

다음과 같이 말이다...
찾아보니 노트북 내 저장된 사용자의 이름이 한국어로 되어 있으면 저 과정에서 오류가 난다고 한다. 해결방법은 노트북 내 들어있는 MySQL에 대한 파일을 모두 지운 후 노트북의 이름을 영어로 수정하고 재부팅한 후 다운로드 과정을 처음부터 다시 하면 된다.
이리도 간단한 것을 나는 처음이라 헤메서 MySQL을 다운받았다 지웠다를 무한 반복••• 이걸 보는 모든 사람들은 나같은 실수를 하지 않길 바란다.
우여곡절 끝에 다운을 모두 받고 실행을 시키면 다음과 같은 화면이 뜬다.

드디어 우리는 데이터베이스를 다룰 수 있는 몸이 된 것이다 ( •̀ ω •́ )y
3. 데이터베이스 모델링
'데이터베이스 모델링'이란 테이블의 구조를 미리 설계하는 것으로, 데이터베이스를 잘 구축하기 위해선 데이터베이스 모델링을 잘 하는 것이 중요하다. 가장 대표적인 모델링 방법은 '폭포수 모델'로, 각 단계가 폭포가 떨어지듯 진행되기 때문에 붙여진 이름이다.
폭포수 모델의 순서는 다음과 같다.
1. 프로젝트 계획
2. 업무 분석
3. 시스템 설계
4. 프로그램 구현
5. 테스트
6. 유지보수
이러한 폭포수 모델은 진행 단계가 명확하여 전체 과정을 이해하기에 용이하다는 장점이 있지만, 문제가 발생할 경우 이전 단계로 돌아가기 어렵다는 단점도 존재한다.
(그러나 요즘에는 문제가 발생할 경우 이전 단계로 돌아가기도 한다고 한다.)
4. 데이터베이스 다루기
데이터베이스가 무엇인지에 대해 알았다면, 직접 만들어보도록 하자. 우리는 MySQL 내에서 직접 데이터베이스를 생성하기도 하고, 데이터를 삽입하기도 하고 없애기도 하며, 수정할 수도 있다.
책의 2장에서는 SQL 내에서 데이터를 입력하면 자동으로 테이블을 만들어주는 방식을 사용했지만, 실무에서는 명령어를 사용하는 경우가 더 많기 때문에 블로그에서는 명령어를 위주로 설명하도록 하겠다.
(이번 주차는 SQL의 기본에 대해 배우는 주차이기 때문에, 자세한 문법은 다음 주차에 다시 설명하도록 하겠다.)
4-1. 테이블 생성
가장 먼저, 테이블을 만들기 위해선 `create`라는 명령어를 사용하면 된다.
CREATE TABLE {schema}.{table_name}
(
{column_name1} {data_type} {nullability}
{column_name2} {data_type} {nullability}
{column_name3} {data_type} {nullability}
...
PRIMARY KEY(column_name2));
먼저 `CREATE TABLE` 명령어는 내가 데이터베이스에 테이블을 만들겠다는 뜻이다. 이때 명령어는 SQL에서 제공하는 문법으로, SQL 상에서 대소문자를 구분하지는 않지만, 가독성 및 제공 문법을 구분하기 위하여 대문자로 표시해주는 것이 좋다.
다음으로 괄호 내부에서는 테이블의 열 이름과 데이터 형식을 정해줄 수 있다. 하나의 열에 대하여 띄어쓰기를 통해 열의 이름, 열의 데이터 형식, null 값 허용 여부를 입력할 수 있고, 여러 개의 열은 쉼표로 구분한다. 또한 기본 키를 설정한다면 다음의 코드와 같이 마지막에 `PRIMARY KEY`를 입력해주면 된다.
4-2. 데이터 입력
테이블에 데이터를 입력하기 위해선 `INSERT`를 사용해주면 된다.
INSERT INTO {schema}.{table_name} ({column_name1}, {column_name2}, {column_name3})
VALUES ({data1}, {data2}, {data3});
INSERT INTO {schema}.{table_name} VALUES ({data4}, {data5}, {data6});
위의 명령어는 특정 데이터베이스 내에 있는 테이블에 한 행의 정보를 입력하겠다는 의미이다. 만일 모든 열에 데이터를 넣는 경우에는 두번째 명령어처럼 열의 이름을 생략할 수도 있다.
4-3. 데이터 수정
테이블 내에 있는 데이터를 수정하기 위해선 `UPDATE`를 사용해주면 된다.
UPDATE {schema}.{table_name};
SET {column_name2} = {new data} WHERE {serch_condition};
위의 명령어는 테이블 내 특정 열에서 search condition에 만족하는 데이터를 새로운 데이터로 수정하겠다는 의미이다.
4-4. 데이터 삭제
테이블 내에 있는 데이터를 삭제하기 위해선 `DELETE`를 사용해주면 된다.
DELETE FROM {schema}.{table_name} WHERE {condition};
위의 명령어는 테이블 내에서 특정 조건에 맞는 데이터를 삭제하겠다는 의미이다. 뒤에 붙는 조건을 활용하여 행 전체를 삭제할 수도 있고, 한 셀에 해당하는 데이터만 삭제할 수도 있다.
4-5. 데이터 조회
마지막으로, 테이블 내에 있는 데이터를 조회하기 위해선 `SELECT ... FROM`을 사용해주면 된다.
SELECT * FROM {table_name};
SELECT {column_name1}, {column_name2} FROM {table_name};
위의 명령어는 테이블 내에서 특정 열에 저장되어 있는 데이터를 모두 조회하겠다는 의미이다. 이때 `*`은 모든 열을 의미하는 것으로, 첫번째 명령어를 실행하면 테이블의 모든 정보를 조회할 수 있다.
5. 데이터베이스 개체
데이터베이스에는 테이블이라는 개체 이외에 다양한 개체들이 존재한다. 이 테이블을 잘 다루기 위해선 추가적으로 개체들이 필요한데, 이에 대해 알아보고자 한다.
5-1. 인덱스
`인덱스`는 데이터를 조회할 때 빠르고 효율적이게 조회할 수 있도록 도와준다. 우리가 기존에 썼던 `SELECT` 문법의 경우, 테이블을 전부 훑은 뒤 우리가 찾고자 하는 데이터를 조회하기 때문에 굉장히 많은 시간이 걸린다. 그러나 인덱스를 사용하면 특정 인덱스를 통해 검색하기 때문에 빠르게 데이터를 조회할 수 있다.
테이블 내에서 인덱스를 설정하는 방법은 다음과 같다.
CREATE INDEX {index_name} ON {table_name}(column_name);
위의 명령어를 실행시키면 입력한 하나의 열이 인덱스가 된다. 인덱스는 테이블이 작을 경우 효율성을 판단하기엔 어려울 것이다. 그러나 대용량의 데이터를 다룰 때 그 능력을 확인할 수 있을 것이다.
5-2. 뷰
`뷰`는 쉽게 말해 실제 테이블과 링크로 연결되어 있는 '가상의 테이블'이다. 즉, 뷰는 실질적인 데이터를 가지고 있는 것이 아닌, 실제 테이블에 대한 링크를 담고 있다.
뷰를 생성하는 방법은 다음과 같다.
CREATE VIEW {view_name}
AS
SELECT {column_name} FROM {table_name};
또한 생성한 뷰에 접근하기 위해선 다음의 코드를 작성하면 된다.
SELECT * FROM {view_name};
그렇다면 우리가 뷰를 사용하는 이유는 무엇일까? 먼저, 뷰는 우리가 보여주고자 하는 부분만 한정지어 보여줄 수 있기 때문에 보안이 용이하다. 또한 복잡한 쿼리를 단순화시킬 수 있으며, 데이터를 관리하기에 용이하다.
5-3. 스토어드 프로시저
`스토어드 프로시저`는 SQL 내에서 프로그래밍이 가능하도록 도와준다. 일반적인 프로그래밍 언어와 동일하게 연산식, 조건문, 반복문 등을 지원하며, 우리가 자주 사용하는 명령들을 하나로 묶어두면 나중에 편하게 사용할 수 있다.
스토어드 프로시저를 사용하는 방법은 다음과 같다.
DELIMITER //
CREATE PROCEDURE {procedure_name}()
BEGIN
--command
--command
END //
DELIMITER;
먼저, `DELIMITER // ~ DELIMITER`는 스토어드 프로시저임을 나타낸다. 이 사이에 스토어드 프로시저의 이름과 명령어들을 작성해주면 된다. `CREATE PROCEDURE` 뒤에는 스토어드 프로시저의 이름을 적어주면 된다. 그 뒤에 `BEGIN ~ END //` 사이에 넣고자 하는 명령어를 쭉 작성해주면 된다.
이렇게 만들어진 스토어드 프로시저를 사용하고 싶다면 다음과 같이 명령어를 작성해주면 된다.
CALL {procedure_name}();
6. 1주차 숙제
1주차 기본 숙제는 혼공스 예제에서 사용한 shop_db에서 '아이유' 회원에 대한 정보만을 추출하는 것이다. 나는 인덱스를 사용하지 않고 조회하는 방법과 사용하는 방법 두 가지로 해보았다.
<인덱스 사용 X>

<인덱스 사용 O>

+ 추가 숙제는 어쩌다보니 위에서 다 설명해버렸다 ,,,🤭🤭
7. 1주차를 마치며
티스토리는 처음, 개발 블로그도 처음이라 모든게 엉성하고, 뒤죽박죽이지망,,, 앞으로 발전해나가는 멋찐 개발자가 되고 싶다 !!! 그리고 다행히 아직은 1주차라 SQL이 재밌게 느껴진다. 시간이 지날수록 어려워지겠지만, 재밌다는 이 감정을 잃지는 않았으면 하는게 나의 작은 바람이다 ㅎㅎ
혼공단 열시미 해보께용 🤭
'SQL' 카테고리의 다른 글
| [혼공s] 4주차 학습 내용 정리 (0) | 2024.07.27 |
|---|---|
| [혼공s] 3주차 학습 내용 정리 (0) | 2024.07.18 |
| mySQL workbench와 git hub 연동 방법 (0) | 2024.07.13 |
| macOS mySQL 및 workbench 설치 방법 (1) | 2024.07.10 |
| [혼공s] 아직은 재밌는 2주차 🥴 (0) | 2024.07.08 |
댓글