관리 메뉴

클라이언트/ 서버/ 엔지니어 "게임 개발자"를 향한 매일의 공부일지

실전용 SQL 미리 맛보기 3 - 데이터베이스 객체 본문

알고리즘 및 자료 관리/SQL

실전용 SQL 미리 맛보기 3 - 데이터베이스 객체

huenuri 2024. 10. 9. 18:48

이번 단원에서는 앞으로 다루는 데이터베이스 개체, 즉 테이블을 제외한 인덱스, 뷰, 스토어드 프로시저 등에 대해 간단히 알아볼 것이다. 내용이 많이 어렵지만 책과 함께 공부하다 보면 어느새 이해할 수 있을 거라 생각한다. 실무에서는 테이블뿐 아니라 데이터베이스 개체를 함께 활용해서 데이터베이스를 운영한다.

 

시작하기 전에

테이블은 데이터베이스의 핵심 개체이다. 하지만 데이터베이스에서는 테이블 외에 인덱스, 뷰, 스토어드 프로시저, 트리거, 함수, 커서 등의 개체도 필요하다.

인덱스는 데이터를 조회할 때 결과가 나오는 속도를 획기적으로 빠르게 해 주고, 뷰는 테이블의 일부를 제한적으로 표현할 때 주로 사용한다. 스토어드 프로시저는 SQL에서 프로그래밍이 가능하도록 해주고, 트리거는 잘못된 데이터가 들어가는 것을 미연에 방지하는 기능을 한다.


 

 

 

인덱스

데이터를 조회할 때 테이블에 데이터가 적다면 결과가 금방 나오지만 데이터가 많아질수록 결과가 나오는 시간이 많이 소요된다. 인덱스는 이런 경우 결과가 나오는 시간을 대폭 줄여 준다.

 

인덱스 개념 이해하기

인덱스란 책의 제일 뒤에 수록되는 '찾아보기'와 비슷한 개념이다. 찾아보기를 통해 먼저 해당 단어를 찾고 바로 옆에 적혀 있는 페이지로 이동하는 효율적인 방법을 사용한는 것이다.

 

지금 우리가 실습하는 데이터들은 양이 많지 않기 때문에 인덱스의 필요성을 느끼지 못할 수도 있다. 하지만 실무에서 많게는 수천만 ~ 수억 건 이상의 데이터를 처리할 때 인덱스 없이 전체 데이터를 찾아본다는 것은 상상조차 할 수 없는 일이다. 실제로 인덱스를 잘 활용하지 못해 시스템의 성능이 전체적으로 느려지는 일이 흔하게 발생한다.


 

 

 

인덱스 실습하기

실습을 통해 인덱스를 익혀보자.

 

1. 새 쿼리창을 열고 SQL 문 입력 및 실행하기

스키마 패널의 shop_db를 더블 클릭하여 선택한다.

 

 

 

 

 

회원 테이블에는 아직 인덱스를 만들지 않았다. 여기서 '아이유'를 찾을 때는 회원 테이블의 1행부터 끝까지 전체를 살펴봐야 한다. 다음의 SQL 문을 입력하고 실행해본다.

 

 

현재는 회원 테이블의 데이터가 워낙 적어서 속도 차이를 느끼지 못하겠지만, 실제로 회원 테이블에 몇억 건이 있더라도 지금 실습하는 것과 동일하게 작동한다.


 

 

 

 

2. 전체 테이블 구성 살펴보기

어떻게 아이유를 찾았는지 확인하기 위해 실행 계획 탭을 클릭하면 Full Table Scan이 나온다.

 

 

이 단계에 따라 처음부터 검색을 했다는 뜻이다.


 

 

 

3. 인덱스 생성하기

이제 회원 테이블에 인덱스를 만들어보겠다. 다음 SQL을 실행하면 인덱스가 생성된다. 인덱스는 열에 지정한다. 

 

 

마지막에 On member(member_name)의 의미는 member 테이블의 member_name 열에 인덱스를 지정하라는 의미이다. 결과는 특별히 눈에 보이지 않는다.


 

 

 

 

4. 인덱스 검색하기

앞에 1번에서 사용한 SQL 문을 다시 실행해 본다. 결과는 동일하지만 찾는 방법이 달라졌다. Execution Plan 탭을 보면 Non-Unique Key Lookup이라고 나온다. 이것은 인텍스를 통해 결과를 찾았다는 의미이다. 이러한 방법을 인덱스 검색이라고 부른다.

 

 

인덱스에서 한 가지 더 기억할 점은 인덱스 생성 여부에 따라 결과가 달라지는 것은 아니라는 것이다. 시간을 단축하는 효과가 있지만 결과는 동일하다.


 

 

 

 

뷰는 테이블과 상당히 동일한 성격의 데이터베이스 개체이다. 뷰를 활용하면 보안도 강화하고, SQL 문도 간단하게 사용할 수 있다.

 

뷰 개념 이해하기

뷰를 한마디로 정의하면 '가상의 테이블'이라고 할 수 있다. 일반 사용자 입장에서는 테이블과 뷰를 구분할 수 없다. 즉, 일반 사용자는 테이블과 동일하게 뷰를 취급하면 된다. 다만 뷰는 실제 데이터를 가지고 있지 않으며, 진짜 테이블에 링크된 개념이다.

뷰는 윈도우즈 운영 체제의 '바로 가기 아이콘'과 비슷한 개념이다. 바탕 화면의 바라 가기 아이콘을 더블 클릭해서 실행하지만, 실제로 실행되는 파일은 다른 폴더에 있다. 뷰도 비슷한 개념으로 실체는 없으며 테이블과 연결되어 있다. 사용자가 뷰를 테이블처럼 생각해서 접근하면 알아서 테이블에 연결해 준다.

 

그렇다면 뷰의 실체는 무엇일까? 뷰의 실체는 SELECT 문이다. 


 

 

 

뷰 실습하기

뷰도 SQL 문을 통해 MySQL 워크벤치에서 생성할 수 있다.

 

1. 기본적인 뷰 만들기

회원 테이블과 연결되는 회원 뷰를 만들기 위해 다음 SQL을 실행한다. 

 

 

패널 창에 초록색으로 체크 표시가 나타나면 SQL이 제대로 실행되었다는 의미이다.


 

 

 

2. 회원 뷰에 접근하기

회원 테이블이 아닌 회원 뷰에 접근해 보겠다. 뷰에 접근하는 테이블에 접근하는 것과 동일하다. 다음 SQL을 실행하면 회원 테이블에 접근했을 때와 동일한 결과가 나온다. 

 

 

그렇다면 테이블을 사용하지 않고 굳이 뷰를 사 용하는 이유는 무엇일까? 다음과 같은 이유로 뷰를 주로 사용한다.

  • 보안에 도움이 된다.
  • 긴 SQL 문을 간략하게 만들 수 있다.

 

 

 

 

스토어드 프로시저

스토어드 프로시저를 통해 SQL 안에서도 일반 프로그래밍 언어처럼 코딩할 수 있다. 비록 일반 프로그래밍보다는 좀 불편하지만, 프로그래밍 로직을 작성할 수 있어서 때론 유용하게 사용된다.

 

스토어드 프로시저 개념 이해하기

스토어드 프로시저란 MySQL에서 제공하는 프로그래밍 기능으로, 여러 개의 SQL 문을 하나로 묶어서 편리하게 사용할 수 있다. SQL을 묶는 개념 외에 C, 자바, 파이썬과 같은 프로그래밍 언어에서 사용되는 연산식, 조건문, 반복문 등을 사용할 수도 있다.

 

 

스토어드 프로시저 실습하기

MySQL 워크벤치에서 SQL 문을 사용해서 생성할 수 있다.

 

1. SQL 입력 및 실행하기

새로운 쿼리 창을 열고 다음 두 SQL을 입력하고 한꺼번에 실행한다. 

 

 

이 두 SQL이 앞으로도 자주 사용된다고 가정했을 때, 매번 두 줄의 SQL을 입력해야 한다면 상당히 불편할 것이다. 또한 이 문법을 잊어버리거나 오타를 입력할 수도 있다. 지금은 두 줄 뿐이지만 훨씬 긴 SQL이라도 마찬가지이다.


 

 

2. 스토어드 프로시저로 만들기

두 SQL을 하나의 스토어드 프로시저도 만들어보겠다. 다음 SQL을 입력하고 실행해 본다.

 

 

첫 행과 마지막 행에 구분 문자라는 의미의 DELEMITER // ~ DELIMITER ; 문을 쓴다. 이것은 스토어드 프로시저를 묶어주는 약속이다. 이때 //와 ;를 쓸 때 띄어쓰기를 한 칸 해주어야 한다. 그리고 BEGIN과 END 사이에 SQL 문을 넣으면 된다.


 

 

 

3.  CALL 문 실행하기

이제부터는 두 줄의 SQL 문을 실행할 필요 없이 앞에서 만든 스토어드 프로시저를 호출하기 위해 CALL문을 실행하면 된다. 결과를 보면 두 SQL을 실행한 것과 동일한 것을 확인할 수 있다.

 

 


 

CREATE 문과 DROP 문

테이블, 인덱스, 뷰, 스토어드 프로시저 등의 데이터베이스 개체를 만들기 위해서는 CREATE 개체_종류_이름 ~~ 형식을 사용한다. 반대로 데이터베이스 개체를 삭제하기 위해서는 DROP 개체_종류_이름 형식을 사용한다. 위의 실습에서 생성한 스토어드 프로시저를 삭제하려면 DROP PROCEDURE myProc를 사용한다.

 

스키마 패널의 빈 곳에서 마우스 우클릭하고 Refresh All을 선택해서 새로 고침 한다. 

 

 

 

 

 

 

그런 다음 생성, 삭제할 데이터베이스 개체에서 마우스 우클릭을 하고 생성하려면 CREATE를 , 삭제하려면 DROP을 선택한다.

 

 

 

 

 

이렇게 삭제가 되었다.


 

 

 

단원 마무리하기

 

 

 

 

 


 

 

 

학습을 마치고

드디어 2장의 단원을 모두 마쳤다. 3개의 소단원이나 되어서 분량이 정말 많았다. 마이SQL 정말 할만하고 이제 어떻게 하는지 감이 잡혔다. 

다음 단원에서는 SELECT 문부터 SQL의 기본 문법을 학습하게 된다.