개발 Q&A

제목 데이터베이스 개발 환경 만들기
카테고리 DB
글쓴이 Woong 작성시각 2019/07/26 17:56:32
댓글 : 4 추천 : 0 스크랩 : 0 조회수 : 9191   RSS

안녕하세요

현재 개인프로젝트를 진행중인데 gitlab을 사용하여

dev, live 서버로 나누어 개발환경을 구축하였는데요,

데이터베이스 컬럼 등을 새로 만들고 적용시킬 때에 어떤식으로 추가, 수정하고 적용시키는지

도무지 감이 잡히질 않아서 문의 드립니다 감사합니다.

 다음글 배열 foreach. 안녕하세요, 수고들 많으십니다. ... (6)
 이전글 이럴땐 어떻게 해야 하나요? (3)

댓글

kaido / 2019/07/26 18:12:26 / 추천 0

보편적인 방법은 ENVIRONMENT 상수값으로 체크 합니다

web_root 폴더에 index.php 파일을 열어 보시면 바로 나와있습니다.

development, testing, production 

약 3가지 종류로 설정이 가능 하며, 서버 환경을 인식하고 해당 값을 상수로 세팅해서 설정합니다.

 

confing/database.php 파일을 보시면 접속 그룹을 설정이 가능 합니다.

저는 mysql과 sqlite3 를 번갈아 가면서 사용해보려고 설정했습니다.

 

$db['default'] = array(
	'dsn'	=> '',
	'hostname' => 'mysql57',
	'username' => 'root',
	'password' => 'example',
	'database' => 'kaleido',
	'dbdriver' => 'mysqli',
	'dbprefix' => '',
	'pconnect' => FALSE,
	'db_debug' => (ENVIRONMENT !== 'production'),
	'cache_on' => FALSE,
	'cachedir' => '',
	'char_set' => 'utf8',
	'dbcollat' => 'utf8_general_ci',
	'swap_pre' => '',
	'encrypt' => FALSE,
	'compress' => FALSE,
	'stricton' => FALSE,
	'failover' => array(),
	'save_queries' => TRUE
);

$db['sqlite3'] = array(
    'dsn'	=> '',
    'hostname' => '',
    'username' => '',
    'password' => '',
    'database' => FCPATH.'/sqlite3/database.sqlite',
    'dbdriver' => 'sqlite3',
    'dbprefix' => '',
    'pconnect' => FALSE,
    'db_debug' => (ENVIRONMENT !== 'production'),
    'cache_on' => FALSE,
    'cachedir' => '',
    'char_set' => 'utf8',
    'dbcollat' => 'utf8_general_ci',
    'swap_pre' => '',
    'encrypt' => FALSE,
    'compress' => FALSE,
    'stricton' => FALSE,
    'failover' => array(),
    'save_queries' => TRUE
);

ENVIRONMENT  상수 보이시죠? 보편적으로는 index.php 파일에서 설정해서 여기저기 사용 합니다.

물론 꼭 상수로 안하시고 env 파일이든 프로퍼티 파일이든 설정 하시면 됩니다.

 

대개의 업체들은 dev 인지 live 인지 구분해서  조건문으로 나눠서 호출하여 사용하고 있습니다.

Woong / 2019/07/26 18:16:32 / 추천 0

감사합니다!

알려주신 방법은 DB를 서버 환경별로 구별하는 방법같은데

제가 알고싶었던건 예를들어 로컬에서 DB컬럼을 추가하여 새로운 컬럼을 만들어 개발했을 때,

dev서버와 live서버에 새로운 DB를 적용하려면 어떻게 해야하는지 감이 잡히질 않습니다!

설명이 부족하여 죄송합니다ㅜㅜ

kaido / 2019/07/26 18:20:24 / 추천 0

로컬에서 dev 까지는 괜찮은데 live까지 적용되는건 위험할것 같습니다.

보통은 역순으로 설정 합니다.

개발하다 실수로 잘못 설정한게 곧장 live까지 올라가면 대형사고이기 때문이죠.

역순으로 live에서 들어온 데이터를 개발에도 동기화 하는 이유는...

실제 데이터로 테스트 하기 위함인데... 최근엔 이런 방법으로 개발을 지양하고 있습니다.

개인정보가 포함되는 경우가 있어서 개발에는 임시데이터로 해야하거든요.

 

mysql의 경우에는 리플리케이션 설정이 있습니다.

원리는 쿼리를 날리면 그대로 복사해서 다른 서버의 mysql에 쿼리를 실행시켜주는 방식입니다.

서버에따라서 별도의 동기화 옵션을 제공해 주기도 합니다. 

 

기본적으로 이 복제 기능은 데이터 동기화를 위해 사용을 합니다.

구조 변경을 자동화 했다가 무슨 일이 일어날지... 후덜덜 합니다.

 

좀더 자세한 정보를 얻기 위해서는 DB 이중화 관련으로 찾아보시면 원하시는 답이 나오실것 입니다.

변종원(웅파) / 2019/07/26 18:50:52 / 추천 0
매뉴얼에서 마이그레이션 찾아보시면 됩니다. 데이터를 날릴 수도 있어서 잘 사용하셔야 합니다.