마이그레이션(migration)
마이그레이션은 팀에서 애플리케이션의 데이터베이스를 수정하고 데이터베이스 스키마를 공유할 수 있도록 해주며 데이터베이스를 위한 버전 컨트롤과 같은 역할을 한다.
오늘의 목표 : 테이블에 컬럼을 추가하는 마이그레이션을 만들어보자
마이그레이션을 학습하기 앞서서 간단하게 MySQL로
- 명령 프롬프트로 MySQL 접속
- 데이터 베이스 검색
- 데이터 베이스 만들기
- 테이블 만들기
를 진행하고나서 마이그레이션을 만들어 보자
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 기능을 이용하여 데이터베이스의 형상관리를 할 수 있다.
형상 관리는 소프트웨어의 변경사항을 체계적으로 관리하는 것을 말한다.
'Laravel' 카테고리의 다른 글
[Laravel 기초] 04. Laravel Breeze 사용하기 (0) | 2023.08.06 |
---|---|
[Laravel 기초] 02. Hello World (0) | 2021.03.01 |
[Laravel 기초] 01. 서버구동하기 (0) | 2021.03.01 |