Laravel

[Laravel 기초] 03. 마이그레이션

drizzle0925 2021. 3. 1. 16:58
728x90

마이그레이션(migration)

마이그레이션은 팀에서 애플리케이션의 데이터베이스를 수정하고 데이터베이스 스키마를 공유할 수 있도록 해주며 데이터베이스를 위한 버전 컨트롤과 같은 역할을 한다.

 

오늘의 목표 :  테이블에 컬럼을 추가하는 마이그레이션을 만들어보자

 

마이그레이션을 학습하기 앞서서 간단하게 MySQL로

  1. 명령 프롬프트로 MySQL 접속
  2. 데이터 베이스 검색
  3. 데이터 베이스 만들기
  4. 테이블 만들기

를 진행하고나서 마이그레이션을 만들어 보자


MySQL 접속하기

1. 명령 프롬프트로 MySQL 접속

window키 + R > cmd 입력 > 확인

 

-h : 호스트주소, -u : 로그인할 사용자 이름, -p : 패스워드

아래 커맨드를 입력하고 확인

1
mysql -hlocalhost -uroot -p
cs

 

password를 입력하라고 나오면 password를 입력하고 엔터

 

정상적으로 로그인에 성공하면 아래와 같은 화면이 출력된다.


MySQL DATABASE 만들기

모든 데이터 베이스를 확인하는 명령어

1
SHOW DATABASES;
cs

그럼, 데이터베이스를 생성해 보자

CREATE DATABASE [생성할_데이터베이스_이름];

데이터베이스 이름은 practice로 한다.

1
CREATE DATABASE practice;
cs

 

제대로 생성됐는지 확인

1
CREATE DATABASES;
cs

데이터 베이스 생성완료

 

데이터베이스 사용 선언

USE [데이터베이스_이름];

1
USE practice;
cs

 


MySQL 테이블 만들기

현재 사용 중인 데이터 베이스의 모든 테이블 확인하는 명령어

1
SHOW TABLES;
cs

현재는 데이터베이스를 만든 직후라서 테이블이 하나도 없는 모습이다.

 

테이블을 추가하자

CREATE TABLE [테이블_이름];

CURRENT_TIMESTAMP는 now()와 동일한 값이 입력되는 키워드이다.

DB에서 테이블을 생성할 때 하나 또는 그 이상의 항목을 기본키(Primary Key)로 설정할 수 있습니다.

Auto_Increment 속성으로 insert문을 보낼때 마다 자동으로 id값을 증가되게 저장할 수 있다.

1
2
3
4
5
6
7
CREATE TABLE fruit (
    id int(11) NOT NULL AUTO_INCREMENT, 
    name varchar(20) NOT NULL, 
    price int(10) NOT NULL,
    created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY(id)
);
cs

 

테이블이 정상적으로 생성되었는지 확인

1
SHOW TABLES;
cs

 

테이블의 구조를 확인하는 명령어

DESC [테이블_이름];

1
DESC fruit;
cs

데이터베이스와 테이블의 등록이 끝났습니다.

그런데 fruit 테이블에 amount라는 수량을 셀 수 있는 컬럼(column)을 추가하고 싶습니다.

컬럼추가를 Laravel의 마이그레이션을 이용해서 추가해보겠습니다.


Laravel DB 연결 셋팅

config > database.php의 mysql 부분에 값을 설정해준다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
'mysql' => [
            'driver' => 'mysql',
            'url' => env('DATABASE_URL'),
            // 'host' => env('DB_HOST', '127.0.0.1'),
            'host' => env('DB_HOST''localhost'), // host주소
            'port' => env('DB_PORT''3306'), // port 번호
            'database' => env('DB_DATABASE''practice'), // 연결할 database
            'username' => env('DB_USERNAME''root'), // user 이름
            'password' => env('DB_PASSWORD''111111'), // 비밀번호
            'unix_socket' => env('DB_SOCKET'''),
            'charset' => 'utf8mb4',
            'collation' => 'utf8mb4_unicode_ci',
            'prefix' => '',
            'prefix_indexes' => true,
            'strict' => true,
            'engine' => null,
            'options' => extension_loaded('pdo_mysql') ? array_filter([
                PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
            ]) : [],
        ],
cs

 

.env 파일에도 값을 설정해준다

1
2
3
4
5
6
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=practice
DB_USERNAME=root
DB_PASSWORD=111111
cs

 

아직 실행된 적 없는 모든 마이그레이션을 실행시키리면, migrate artisan 명령어를 실행하면 된다.

1
php artisan migrate
cs

가장 최근에 마이그레이션 작업을 되돌리려면 rollback 명령어를 사용하면 된다.

이 명령어는 가장 최근에 실행된 마이그레이션의 "모음(batch)", 즉 여러 개의 마이그레이션 파일을 되돌릴 수 있다.

1
php artisan migrate:rollback
cs

 

새로운 마이그레이션 파일 만들기

1
php artisan make:migration add_amount_to_fruit
cs

 

생성된 마이그레이션 파일은 database > migrations 폴더 안에 위치한다.

마이그레이션 클래스는 up과 down, 두 개의 메소드를 가지고 있다.

up 메소드는 데이터베이스에 테이블, 컬럼, 인덱스를 추가하는데 사용되고, 이와 반대로 down 메소드는 up 메소드의 동작을 취소한다.

이 두 메소드 안에서 모든 라라벨 스키마 빌더가 실행되며 테이블을 다양한 방법으로 생성하고 변경할 수 있다.

 

up 메소드에 컬럼을 추가하는 코드를 작성하자

1
2
3
4
5
6
7
<?php
public function up()
    {
        Schema::table('fruit'function (Blueprint $table) {
            $table->integer('amount')->after('price')->commnet('수량을 표시하는 컬럼');
        });
    }
cs

 

마이그레이션(migration) 실행하기

1
php artisan migrate
cs

 

추가한 마이그레이션 정상적으로 실행되었다.

컬럼이 정상적으로 등록되었는지 확인해보자

수량을 기록하는 amount 필드가 정상적으로 추가되었다.

이와 같은 방식으로 Laravel의 migration 기능을 이용하여 데이터베이스의 형상관리를 할 수 있다.

형상 관리는 소프트웨어의 변경사항을 체계적으로 관리하는 것을 말한다.

728x90

'Laravel' 카테고리의 다른 글

[Laravel 기초] 04. Laravel Breeze 사용하기  (0) 2023.08.06
[Laravel 기초] 02. Hello World  (0) 2021.03.01
[Laravel 기초] 01. 서버구동하기  (0) 2021.03.01