그누보드 개발환경 구축 1 - 서비스별 환경변수 설정 > 그누보드5 팁자료실

그누보드5 팁자료실

그누보드 개발환경 구축 1 - 서비스별 환경변수 설정 정보

그누보드 개발환경 구축 1 - 서비스별 환경변수 설정

본문

그누보드엔 서비스별로 환경변수 설정이 없습니다.

운영 서비스, 베타 서비스, QA 서비스, 개발 환경 으로 구분되지 않고, 동일한 변수값으로 사용합니다.

1인 개발환경이고, 개발중에 오류 화면이 좀 보여도 상관없다면, 나쁜 방식은 아닙니다. 

소스 배포와 관련된 고민을 안해도 되고, 소스 수정과 적용된 내용이 바로 확인이 가능하니까요.

 

문제는 개발환경이 없다보니, 운영서비스에 오류 화면이 자주 노출되게 된다는 것입니다. 조심스럽게 수정 작업을 하고, 파일명을 바꿔서 작업후 원파일에 덮어쓰기를 하더라도 실수를 하게 마련입니다.

결과적으로 개발서버를 구축하게 됩니다. 면접시 최소한 개발서버를 쓰는지, GIT으로 소스관리가 되는지 확인하세요.(안한다면???) 

개발서버를 별도로 구축하면, 이제 소스가 달라지는 상황이 생깁니다. 개발에만 테스트 하다가 운영에는 적용 안한 코드, 운영에만 적용이된 코드.. 개발자 머리속에만 이런것들이 남아 있고, 퇴사하게 되면 신임 개발자는 헬에 빠지게 됩니다. (도망가시면 됩니다.) 

핵심 원칙은 "개발 서비스와 베타서비스 그리고 운영서비스 소스는 모두 동일해야 한다"이고, git과 같은 버전관리툴로  관리가 되어야 합니다. 그래야 배포를 자동으로 할수 있게 됩니다.

이 원칙이 지켜지지 않으면, 배포를 수동으로 하게 되고, 수동 배포의 불편함으로 인해  개발서버를 점점 안쓰게 되겠죠. 다시 예전 방식으로 돌아가게 됩니다.(운영서비스에 또 오류 화면들 보이고, 사장님 잔소리를 듣게 되겠네요.ㅠ)

 

사설이 좀 길었는데, 이 글을 쓰게된 목적은 그누보드에서 위의 문제점들을 해결하기 위해 서비스 환경별로 설정파일을 어떻게 분리할것인가에 대한 글입니다. 이전 회사의 경험과 개인적으로 고민하던 부분을 정리해 보았습니다.

 

common.php 상단에 아래 코드를 추가합니다. 30라인 이후 g5_path() 함수 상단에 넣으시면 됩니다.

 



/**
 * 개발서버인지 확인한다.
 * 구분하는 방법은 호스트명, 개발서버 아이피, 개발서버 도메인등이다.
 * 이중에 개발 서버임을 구분할수 있는 값으로 지정
 *
 * @return bool
 */
function is_development() {
    $host = gethostname();
    $server_ip = $_SERVER['SERVER_ADDR'];
    if(is_production()) return false;
    if(is_beta()) return false;
    if ($host === '개발서버 hostname' || $server_ip === '개발용 서버 아이피') {
        return true;
    }
    return false;
}

/**
 * 베타 서버인지 확인
 * 구분하는 방법은 호스트명, 개발서버 아이피, 개발서버 도메인등이다.
 * 이중에서 베타 서버임을 구분할수 있는 값으로 지정타
 * 개발서버와 베타서버를 동일서버에서 서비스한다면, 도메인명으로 구분하는게 바람직하다.
 *
 * @return bool
 */
function is_beta() {
    if (strtolower($_SERVER['HTTP_HOST']) === "beta.domain.com" || strtolower($_SERVER['HTTP_HOST']) === "beta2.domain.com") {
        return true;
    }
    return false;
}

/**
 * 운영서버인지 확인
 * 개발서버와 베타서비스 운영서비스를 동일한 1대의 서버에서 서비스중이라면, 도메인으로 분리하는게 좋다.
 * @return bool
 */
function is_production() {
    $host = gethostname();
    if (strpos($host, "운영서버서버 hostname") === 0) {
        if (strtolower($_SERVER['HTTP_HOST']) === "your_service_domain.com") {
            return true;
        }
    }
    return false;
}

/**
 * 관리권한이 있는 아이피인지 확인
 * @return bool
 */
function is_manager_ip() {
    $addr = $_SERVER['REMOTE_ADDR'];
    switch (true) {
        case (strpos($addr, "192.168.1.") !== false) : // 개발팀 내부 아이피
        case ($addr === "192.168.2.100") : // 운영팀
        case ($addr === "192.168.2.101") : // 그외 매니저들이 사용하는 아이피들을 죽 써준다.
            return true;
            break;
        default :
            return false;
            break;
    }
}

//서비스 환경별로 상수값 설정, 코드에서는 G5_ENVIRONMENT 따라 분기처리 
if(is_production()) {
    define('G5_ENVIRONMENT', 'PRODUCTION');
} else if(is_beta()) {
    define('G5_ENVIRONMENT', 'BETA');
} else if(is_development()) {
    define('G5_ENVIRONMENT', 'DEV');
}


 

코드에 포함된 is_manager_ip() 는 자주 쓰는 함수라서 추가해봤습니다. 미리 운영환경 테스트나, 점검 페이지를 미리 테스트 할때 자주 쓰게 됩니다.

 

위의 코드는 분기용 코드이고, 실제 환경 변수에 따른 분기코드 예제입니다.

common.php 200 라인쯤 db접속 관련 코드가 있습니다. connect하는 부분 바로 위에 아래 코드가 위치합니다.



$dbconfig_file = G5_DATA_PATH.'/'.G5_DBCONFIG_FILE;

/**
 * 서비스 환경별로 달라지는 값을 설정한다.
 * DB 접속 정보가 다른 경우
 * e.g) db
 */
switch(G5_ENVIRONMENT) {
    case "DEV" :
        //개발용 db설정을 다르게 사용한다면,
        if (file_exists(G5_DATA_PATH.'/dbconfig.dev.php')) {
            $dbconfig_file = G5_DATA_PATH.'/dbconfig.dev.php';
        }

        //개발용 db 정보가 다르게 설정되어 있다면,
        define('G5_MYSQL_HOST', 'localhost');
        define('G5_MYSQL_USER', 'dev_user');
        define('G5_MYSQL_PASSWORD', 'dev_pass');
        define('G5_MYSQL_DB', 'dev_db');

        break;

    case "BETA" :
        if (file_exists(G5_DATA_PATH.'/dbconfig.beta.php')) {
            $dbconfig_file = G5_DATA_PATH.'/dbconfig.beta.php';
        }

        //베타용 db 정보가 다르게 설정되어 있다면,
        define('G5_MYSQL_HOST', 'localhost');
        define('G5_MYSQL_USER', 'beta_user');
        define('G5_MYSQL_PASSWORD', 'beta_pass');
        define('G5_MYSQL_DB', 'beta_db');

        break;

    case "PRODUCTION" :
        //운영 환경에 디버깅 해야 하는 특별한 상황이 있다면, 아래 코드를 활성화 후 테스트한다.
        //매니징 아이피에서만 활성화 되도록 한다. 긴급상황에서만 사용할것

        if(is_manager_ip()) {
            //운영서비스 테스트를 위한 설정값이나 코드를 분기처리
            //$g5['debug_mode'] = true; //다른 테스트 환경에서 테스트 적용.

            //매니저인 경우는 운영서비스에 아이피 기록을 남기지 않겠다면
            //$_SERVER['REMOTE_ADDR'] = "0.0.0.0";

        }

        break;

    default :
        break;
}

 

개발 / 베타 / 운영시 달라지는 설정값은 모두 저 위에 기술하거나, 해당 페이지에서 위의 환경변수에 맞춰 분기해두면 됩니다.

 

 

다음에는 개발자가 2인 이상인 경우 개발서버 설정에 대해서 쓸까 합니다.

 

추천
4

댓글 11개

원래 REMOTE_ADDR에 네부 아이피가 잡히던가요?
저같은 경우 DeveMode = 공인 아이피 처리해서 소스 부분 부분 처리하고 sentry로 오류 수정중이네요 ㅎㅎㅎ
사내에 개발서버 구성하게 되면, 이방식으로 개발서버와 베타서버(이것도 사내망에 있다면..)를 구분할수 있게 됩니다.

sentry 느리지 않나요? 이거 느린거 패치할수 있는 방법이 있을것 같은데. 잘 모르겠네요.
에러가 너무 많아서 느려진건지..
그누보드에는 1~2개정도 해놨는데 그렇게 느리다 할정도로 디버프 받은적이 없는듯합니다.

아... 참고로 sentry가 self hosted상태입니다.
컴포저 https://packagist.org/packages/sentry/sentry 1.10.0

extend/sentry.php

<?php
// 작업 에러 확인
include_once(G5_PATH.'/vendor/autoload.php');

Raven_Autoloader::register();
$client = new Raven_Client('센트리주소');
$client->install();
Git 도 얼른 배워요.
개발팀에 소스 관리 책임자가 1명은 있어야 하고, 관리책임자는 Git을 사용할줄 알아야 합니다.
감사합니다.
다행인지 제위 사수가 있어 사수가 Git을 그리 달갑게 생각하진 않는듯하네요
개인적으로 공부를 해야하는데.. 짬이 ㅠ.ㅠ
전체 2,427 |RSS
그누보드5 팁자료실 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT