개발 Q&A

제목 ci4) 환경별, 다중DB를 구성하고싶은데 어떻게 진행해야 할까요?
카테고리 DB
글쓴이 ci4어린이 작성시각 2023/08/11 15:15:27
댓글 : 2 추천 : 0 스크랩 : 0 조회수 : 5824   RSS

.env파일에서 product와 development환경으로 나눠둔 후 어떤식으로 다중DB를 구성해서 나눠줘야할까요?

구상했던 방법은 이러합니다.

 

상수 ENVIRONMENT 의 값을 확인하여 config/database.php의 __construct에서 

if (ENVIRONMENT === 'production'){

    $this->defaultGroup = 'aProd';

    $this->hostingGroup = 'bProd';

}elseif(ENVIRONMENT === 'development')){

    $this->defaultGroup = 'aDev';

    $this->hostingGroup = 'bDev';

}

 

이후 controller에서 테스트 연결 진행결과

$db = \Config\Database::connect('bDev');

를 사용해야 bDev에 접근할 수 있더군요..!

환경별로 나누었을시 이점이 product와 developmemt의  설정을 간단하게 변경하며, 서로 접근 불가침하게 설정하려하는 이유인데

db연결시마다 하나하나 설정해줘야 하니 여간 불편한게 아니더군여!

 

그래서  service나 repository패턴을 사용할때에 생성자에서 db연결을 진행해볼 예정입니다!

if (ENVIRONMENT === 'production'){  

    $this->db1 = $this->load->database('a', true);
    $this->db2 = $this->load->database('b', true);

}elseif(ENVIRONMENT === 'development')){

    $this->db1 = $this->load->database('a', true);
    $this->db2 = $this->load->database('b', true);

}

이런느낌으로 진행할 예정인데 혹시 괜찮은 방법일까요?

그리구 service/repository어느쪽에서 db연결을 하면 좋을까요?

 다음글 php mysql 버전이 다른경우 프로그램 관리 (3)
 이전글 같은 도메인 주소에 php프로젝트와 노드 프로젝트 연동... (1)

댓글

kaido / 2023/08/11 15:33:37 / 추천 1

ENVIRONMENT 으로만 구분 짓는 방법은 사실 그리 좋은 방법은 아닙니다.

이유가 몇가지 있는데 ENVIRONMENT 값은 누군가 건들수도 있는 값입니다. [물론 허락없이 건들면 혼내줘야합니다 !]

간혹 테스트 서버에 git 올리려다 실수로 라이브에 development 값으로 올라가 버리면 대참사가 일어납니다 !

ENVIRONMENT를 갑자기 변경 해야 하는 경우 또한 생길수 있기 때문에 절대 값으로 구분 하기에는 좋은 방법은 아닙니다.

급하게 라이브에서 디버깅을 해야하는데 production 으로는 디버그 출력이 안잡혀서 바꿔야 하는데  DB랑도 맞물리는 상태라면...?

생각지 못한 경우의 수는 많습니다.

보통은 서버 네임인 도메인을 따라가게 해서 만드는 경우도 있긴 하나, 폭 넓게 경우의 수를 두면 DB 프로바이더는 각각 설정 해주는게 좋습니다. [모델별, 함수별]  이유는 테이블별로 DB user를 나눠서 접속 할수도 있습니다. 대표적으로 ISMI 를 하면 결제 정보는 분리된 데이터베이스를 사용합니다.

ci4어린이 / 2023/08/11 15:39:20 / 추천 0
답변감사합니다! 제가 후속처리의 경우의수를 생각하지못했네요!!