데이터베이스 공부/인프런 이고잉 DATABASE 1&2 - MySQL 노트정리

5. DATABASE 2 - 더 배워보기

모항 2023. 3. 28. 01:03

관계형 데이터베이스의 필요성

데이터를 저장할 때는 분산해서 저장하고, 불러올 때는 합해서 불러오는 것이 이번 회차에서 보여준 관계형 데이터베이스의 중심적인 특징이다. 이 점 덕분에 데이터의 유지보수가 훨씬 용이해진다.

 

예시를 들어서 설명해주셨는데, 요약하자면 다음과 같다.

 

강의 정보를 저장한 table이 있다고 하자.

 

강의 테이블

강의 id 과목명 교수명 정원
1 컴퓨터구조 김교수 30
2 이산수학 이교수 100
3 인공지능 박교수 50
4 데이터베이스 김교수 40

 

어느날, 김교수가 '김고수'로 개명을 하였다.

그럼 우리는 위의 표에서 1번 항복과 4번 항목 총 두 개 데이터의 교수명 값을 바꾸어줘야 한다.

만약 김교수가 더 많은 수업을 맡고 있었다면 수정해야 하는 데이터도 더 많았을 것이다.

 

관계형 데이터베이스를 잘 이용하면 이러한 번거로움을 해결할 수 있다.

 

다음과 같은 테이블을 추가로 만든다.

 

 

교수 테이블

교수 id 교수명
1 김교수
2 이교수
3 박교수

 

그리고 강의 table은 다음과 같이 작성한다.

 

 

강의 테이블

강의 id 과목명 교수 id 정원
1 컴퓨터구조 1 30
2 이산수학 2 100
3 인공지능 3 50
4 데이터베이스 1 40

 

1번 강의의 교수명을 알고 싶다면, 교수 테이블에서 id가 1인 교수를 찾아내 참조하면 된다.

 

이렇게 데이터를 두 개의 테이블로 쪼개놓은 상태에서, 김교수가 '김고수'로 개명을 했다고 생각해보자.

그럼 우리는 강의 테이블에서는 아무것도 수정할 필요가 없다.

교수 테이블의 값 '김교수'만 '김고수'로 바꾸면 끝이다.

 

쪼개져있는 데이터를 합쳐서 조회하는 데에는 JOIN이 쓰인다.

JOIN에 대한 자세한 내용은 후에 실습에서 살펴볼 것이다.

 

 

 


 

 

테이블 분리하기

이번 회차는 그냥 저번에 만들었던 topic 테이블, 즉 모든 데이터가 한 테이블에 다함께 들어있는 테이블 대신

두 개의 테이블을 새로 만들어 그 안에 데이터를 분산해 저장하는 과정이다.

다음 회차인 JOIN에서 합쳐보기 위해 준비물을 마련하는 회차인 듯 하다.

 

나는 내가 위에서 예시로 쪼개본 두 개의 테이블, 즉 강의 테이블과 교수 테이블을 만들어보겠다.

 

강의 테이블을 다음과 같이 생성하였다.

 

교수 테이블을 다음과 같이 생성하였다.

 

데이터도 추가해주었다.

 

 

 


 

 

JOIN - 관계형 데이터베이스의 꽃

쪼개놓은 두 테이블을 가지고 JOIN을 실제로 써보는 회차이다.

 

다양한 형태로 JOIN을 시켜보기도 하고,

한 테이블의 값을 update시킬 경우 JOIN의 결과 테이블은 어떻게 다르게 출력되는지도 확인한다.

 

강의에서 본 바를 바탕으로, 아래와 같이 lecture 테이블과 prof 테이블을 JOIN해보았다.

기본적인 JOIN
일부 컬럼만 표시하는 JOIN
AS를 사용하여, 칼럼의 표시명을 바꾼 JOIN

 

이번엔 김교수가 '김고수'로 개명했을 때를 가정하고 prof 테이블의 정보를 바꾼 뒤 JOIN해보자.

prof 테이블의 데이터 변경

구 김교수 현 김고수가 맡은 모든 수업의 교수 이름이 "김고수"로 잘 출력된다.

 

 


인터넷과 데이터베이스

인터넷과 데이터베이스의 관계를 살피는 회차이다.

 

인터넷은 기본적으로 어떻게 작동하는가?

인터넷이 동작하는 데에는 최소 두 개의 주체가 필요하다.

둘 중 한 쪽이 어떠한 정보를 달라고 요청하면, 다른 한 쪽이 응답으로서 해당하는 정보를 제공한다.

이렇게 정보를 교환하는 것이 인터넷의 본질이다.

 

 

서버란 무엇인가?

위에서 말했듯이 인터넷에서 어떤 기기는 요청을 하고 어떤 기기는 응답을 한다.

여기서 요청을 하는 쪽을 클라이언트, 응답을 하는 쪽을 서버라 한다.

 

그렇다면 데이터베이스 클라이언트, 데이터베이스 서버란 무엇일까?

우리는 지금까지 이러한 창에 명령어를 입력하여 데이터베이스 작업을 요청했다.

잘 보면, Welcome to the MySQL monitor 라는 문구가 보인다. 우리가 지금까지 써온 데이터베이스 클라이언트의 이름이 바로 MySQL monitor였던 것이다.

반대로, 이 MySQL monitor로 보낸 요청에 우리가 원하는 답을 보내주는 쪽은 데이터베이스 서버가 된다.

우리가 한 실습은 local 저장소를 이용하였기 때문에 클라이언트와 서버가 한 컴퓨터에 위치한다.

 

 


 

 

MySQL 클라이언트

명령어 기반의 클라이언트와 GUI 기반의 클라이언트를 간단히 비교해보는 시간이다.

명령어 기반 (예: MySQL monitor)

  • GUI가 아닌 명령어를 기반으로 작동한다. 이 점 덕분에 빠르고 효율적이지만, 명령어를 기억하거나 알고 있어야만 사용할 수 있다는 점은 단점이라 할 수 있다.
  • MySQL을 설치하면 함께 설치되기 때문에 언제나 기본적으로 사용할 수 있다는 장점이 있다.

GUI 기반 (예: MySQL workbench)

  • GUI를 기반으로 작동한다. 명령어를 몰라도 된다는 장점이 있으나, 이미 명령어를 잘 알고 있는 사람의 입장에서는 일일이 버튼을 클릭하고 불필요한 과정을 거쳐야 하므로 오히려 비효율적이다.

 

 


 

 

MySQL Workbench

GUI 기반 클라이언트인 MySQL Workbench를 설치하고 사용해보는 회차이다.

 

이번 회차의 핵심 내용은, 아무리 GUI 기반 클라이언트를 사용한다고 하더라도 결국 마지막에는 SQL 명령문을 통해 요청을 보내게 된다는 것이다.

 

영상에서와 동일하게 workbench 데이터베이스를 만들고, GUI를 이용해 테이블 정보를 지정한 뒤 Apply를 눌렀다.

그랬더나 아래와 같이, 내가 GUI로 지정한 내용에 맞는 SQL 명령이 표시된다.

즉 GUI는 SQL문을 대신 만들어줌으로써 우리가 명령문을 '직접' 치지 않아도 되게 해주는 것일 뿐이다. 결국 요청은 SQL 명령문을 통해 이루어진다.

 

 


 

 

추가 과제

아래는 이 강의로 함께 스터디를 진행하는 동아리에서 제시한 추가 과제의 실행 과정 및 결과이다.

 

1. passenger 테이블 생성 및 값 넣기

 

테이블 생성
값 추가 SQL 명령문(상단) 및 아웃풋(하단)
select 문으로 내용물을 확인한 모습

 

 

2. plane 테이블 생성 및 값 넣기

테이블 생성
값 추가 SQL 명령문(상단) 및 아웃풋(하단)
select 문으로 내용물을 확인한 모습

 

 

3. JOIN 사용