본문 바로가기
코딩과 알고리즘

MYSQL 이 뭐여? [ 마이에스큐엘은 서류철이다! ]

1. 오토셋 APM 인스톨러 ( apache + php7.2 + mariadb ) 설치 | https://itadventure.tistory.com/93

2. 코드이그나이터 4 ( codeigniter 4 ) 설치 | https://itadventure.tistory.com/95

3. 비주얼 스튜디오 코드 에디터 설치 & 한글 설정 | https://itadventure.tistory.com/96

4. 폴더열기 / 웹페이지 편집(1) | https://itadventure.tistory.com/97

5. 웹페이지 편집(2) | https://itadventure.tistory.com/101

6. 코드이그나이터4의 URL 규칙 | https://itadventure.tistory.com/105

7. php, 네임스페이스 [ namespace ] ?! | https://itadventure.tistory.com/118

8. 코드이그나이터의 네임스페이스, 그리고 모델 | https://itadventure.tistory.com/122

9. 코드이그나이터 뷰의 파라미터 전달 | https://itadventure.tistory.com/147

10. 코드이그나이터 뷰를 나눠 볼까요? | https://itadventure.tistory.com/174

♣ 11. MYSQL 이 뭐여? [ 마이에스큐엘은 서류철이다! ] ♣


MYSQL 이라고 들어보셨나요?
이미 알고 계신 분도 계시고, 생소한 분도 계실텐데요.
한글로는 스펠링 그대로 "마이에스큐엘"이라고 보통 읽습니다.
오늘은 MYSQL의 이해에 대한 부분까지만 다뤄보고
다음 강좌부터 코드이그나이터에서 MYSQL을 사용하는 법을 점차 알아가겠습니다.

MYSQL 은 데이터베이스 중 한가지 언어로서, 프로그래밍 언어 세계에서
데이터베이스 한가지 정도를 익히는 건 필수입니다.
왜 그럴까요? 그 이유는 천천히 알아보고 한 이야기를 시작하겠습니다.

어느 도서관이 있다고 생각해보지요.
과거 컴퓨터가 없던 시절에 회원들에게 도서를 별려주는 도서관에서는
도서를 관리하기 위해 무엇을 했을까요?

아마도 여러가지 장부를 관리했을 겁니다.
도서마다 책의 기본적인 정보,
예를 들면 책제목과 책의 간략한 소개, 저작자와 페이지, 도서 보관위치 등을 도서 장부에 기록하고,
회원이 책을 빌려가려고 하면 먼저 회원번호를 발급하고 회원장부에 이름, 연락처 등을 회원 장부에 기재함과 동시에
책을 빌리는 순간 그 사람 회원번호와 빌려가는 책, 날짜 등을 기록,
반납할 때도 반납확인 등을 대여 장부라는 곳에 기록할 겁니다.

이 외에도 여러가지가 장부가 존재할 수 있겠지요.
도서를 꽃는 서재마다 코드번호를 두는 서재 장부라든가,
회원의 정보 변경이력을 관리하는 회원정보변경이력 장부,
도서의 구매예산/지출 장부, 분실도서 장부, 폐기도서 장부 등등..

종류가 엄청나게 많기 때문에 생각만 해도 아찔합니다.
게다가 이 많은걸 사람이 다 했을거라고 하니 매우 할 일이 많았겠지요.

글씨 또한 알아볼 수 있게 썼어야 했기에 글씨를 잘 쓰는 사람이 아마도 매우 필요했을 거라 생각됩니다.

컴퓨터가 도입되면서부터 과거(도스라는 OS 가 사용되던 시절)에는 로터스라는 프로그램이,
그리고 윈도우 시대에 접어들면서 엑셀이란 프로그램이 등장했습니다.

로터스도 훌륭하지만 엑셀은 더욱 훌륭한 프로그램입니다.
모든 장부를 컴퓨터로 관리할 수 있도록 해주는 프로그램이기도 하니까요.

전에는 손으로 써야 했던 모든 기록들을 엑셀에서는 키보드를 타이핑하는 것으로,
훨씬 빠르고 정확한 글씨체로 컴퓨터에 저장할 수 있게 되었습니다.

처음 키보드를 연습하는 시기에는,
타이핑하는 것이 손으로 글씨를 쓰는 것보다 매우 느리지만,
익숙해지게 되면 아마도 10배 정도는 빨라질 수 있습니다.

게다가 엑셀은 찾는 것도 쉽습니다.
장부에서 자료를 찾으려면 눈으로 일일히 흝어봐야 하지만 엑셀에서는 어떤가요?
Ctrl + F 키를 눌고 단어를 입력하면 순식간에 1초도 되지 않는 순간에 자료를 찾아 줍니다.

이를 한마디로 표현하면 '전산장부'라고 할 수 있습니다.

하지만 문서장부와 엑셀장부는 공통점이 있습니다.
바로 사람의 수고을 거쳐야 하는 것이지요.
사람이 확인해서 엑셀에 자료를 입력하고, 검색해서 찾아주고 등등
속도는 좀 빨라졌겠지만 직원을 대면해서 무언가를 해야 합니다.

현 시대에 그보다 더 나은 방법이 있을까요?
네, 있습니다. 게다가 매우 보편화되어 있습니다.

한가지 예를 들어보면, 네이버에 회원가입을 할 때 네이버 직원을 만나본 일이 있나요?
아마도 없을 겁니다 :)
네이버페이로 상품을 구매할 때 판매직원에게 설명을 듣고 직접 돈을 주어 물건을 사지도 않지요.

분명 이 모든 기록들은 네이버 회사에 장부로 기록에 남겨야 하고 실제로 남습니다.
옥션이나 지마켓, 11번가 등에서도 물건을 살 때 직접 방문하거나 직원을 만나지 않습니다.

하지만 분명 그 회사들도 모든 기록을 장부에 남깁니다. 회원가입, 탈퇴, 구매기록, 게시판 문의 내역 등등을요.
어떤 장부에 남기는 것일까요? 그것은 바로 데이터베이스라는 장부입니다.

데이터베이스는 높은 기술 수준의 전산장부입니다.
대단히 많은 자료를 엑셀처럼 담을 수 있고 체계적으로 관리할 수 있는 반면,
일반인이 다루기는 그 기술 수준이 높은 편이라 꽤 어려운 편입니다.
그 자료를 다룰 수 있는 사람은 DBA(데이터베이스 관리자) 또는 프로그래머입니다.

데이터베이스를 이용하여 프로그래머가 자동화 기능을 개발하면
사람이 대면해야 하는 대부분의 일을 컴퓨터가 자동으로 할 수 있습니다.
이 것이 데이터베이스를 사용하는 가장 큰 매력이지요.

오토셋을 설치하면 기본적으로 MYSQL 이라고 불리는 데이터베이스가 자동 설치됩니다.
이를 이용해서 다음 번에는 실제 자료를 다루는 방법을 살펴보도록 하겠습니다.

프로그래머분께서 필요에 따라 이 글을 방문하셨다는 가정하에,
예제가 없어 실망하지 않도록 하기 위해 코드이그나이터용 DB 연결 예제를 하나 남깁니다.

설명드리는 소스가 아니라서 전문지식 없이 바로 이해하실 수 있는 용도는 아닙니다.
그냥 앞으로 이런 방향으로 갈 것이라고만 생각해 주세요 :)


< 테이블 생성 쿼리 >

CREATE TABLE book (
	number int(11) NOT NULL AUTO_INCREMENT,
	title varchar(128) NOT NULL,
	body text NOT NULL,
	totalpage int NOT NULL,
	author varchar(128) NOT NULL,
	PRIMARY KEY (number)
) ENGINE=InnoDB CHARACTER SET=utf8;


< App/Config/Database.php >

데이터베이스 연결 소스입니다. 소스 내용이 매우 길기 때문에 일부분만 기록합니다.
test 데이터베이스에 book 테이블이 있다고 가정했을때 소스인데, 테이블을 생성해야 오류가 안 납니다.

	public $default = [
		'DSN'      => '',
		'hostname' => 'localhost',
		'username' => 'root',
		'password' => 'autoset',  // 오토셋은 기본 DB 패스워드가 autoset
		'database' => 'test',
		'DBDriver' => 'MySQLi',
		'DBPrefix' => '',
		'pConnect' => false,
		'DBDebug'  => (ENVIRONMENT !== 'production'),
		'cacheOn'  => false,
		'cacheDir' => '',
		'charset'  => 'utf8',
		'DBCollat' => 'utf8_general_ci',
		'swapPre'  => '',
		'encrypt'  => false,
		'compress' => false,
		'strictOn' => false,
		'failover' => [],
		'port'     => 3306,
	];


<App/Models/BookModel.php>
서적 테이블 관리용 모델 소스

<?php namespace App\Models;

use CodeIgniter\Model;

class BookModel extends Model
{
    public function get_query()    
    {
        $db = \Config\Database::connect();
        $sql = "select * FROM book";
        return $db->query($sql);
    }
}


<App/Controllers/Dbsample.php>
서적을 불러와 화면에 표시해주는 소스, 뷰는 없습니다.

<?php namespace App\Controllers;
use CodeIgniter\Controller;
use App\Models\BookModel;
use App\Models\Americano;

class Dbsample extends Controller
{
    public function index()
    {
        $booktable = new BookModel();
        $qry = $booktable->get_query();
        foreach($qry->getResult() as $row)
        {
            echo $row->number . "<br/>";
            echo $row->title . "<br/>";
            echo $row->body . "<br/>";
            echo $row->totalpage . "<br/>";
            echo $row->author . "<br/>";
            echo "<hr/>";
        }
    }
}


출력예시

1
크레이의 LSL 스크립트 북
LSL 스크립트에 대한 안내가 있습니다.
70
크레이

수고하셨습니다!

도움이 되셨다면, 그리고 이후로도 도움이 되실것 같다 생각되시면
공감과 구독해 주세요~
감사합니다 :)