개발환경 선정에 대한 고민

레거시 환경

서비스 환경

  • 웹호스팅
  • PHP 4.x
  • Mysql 4.0
  • Zeroboard 4

개발 환경

  • 윈도우
  • Apmsetup

빌드 환경

  • 없음

배표

  • FTP

현재의 환경

서비스 환경

  • Centos 6.x
  • PHP 7.x
  • Mysql 5.7

개발 환경

  • Ubuntu 16.04
  • Docker

빌드 환경

  • Jenkins
    • 1개의 마스터
    • 3개의 슬레이브
  • Test
    • PHPUnit with codeception
    • Selenium with codeception

배포

  • Git

변경된 스택별 선정 사유

각 스택은 아래의 기준에 의해서 결정되었습니다. 만약 기준이 변경되거나 기준에 부합하는 새로운 서비스가 나올 경우 스택은 변경됩니다

Ubuntu 16.04

  • LTS
    • 특별한 이유가 없다면 스택 변경의 주기는 최신 LTS 버전을 기준으로 변경되며 다음 버전의 경우 18.04입니다
  • 많은 조작없이 빠른시간내에 개발 환경 셋팅 가능하다
    • 표준 개발환경을 쉘스크립트로 유지중
    • 이후 개인에 맞게끔 커스텀
  • Centos가 선정되지 않은 이유
    • 현재 개발자의 컴퓨터의 경우 처음부터 OS를 리눅스로 설치하고 있습니다
    • 이는 서버개발환경과의 불일치를 최소화하고 평소에 개발자에게 리눅스 환경 자체를 친숙하게 하기 위함도 있습니다
    • GUI적인 편의 요소가 낮아서 리눅스에 친숙하지 않은 개발자의 러닝커브가 높아짐을 방지합니다
  • 윈도우에 대한 대응
    • 현재 개발팀은 모든 업무를 우분투용 툴에 맞춰서 사용중입니다
    • 굳이 윈도우용 프로그램을 사용한다든가 하는 부분은 가상머신을 통해서 처리중입니다
    • 윈도우용 사내메신저는 로그인만 하며 바로 응대를 하지 않습니다
      • 타 부서에서 이에 따른 불만이 나왔었지만 현재는 안정화 단계(서로의 업무를 이해해줌)
    • 개발팀은 슬랙으로 메신저를 대체합니다
  • 호스트 OS를 굳이 리눅스로 제약하는 이유
    • 윈도우 개발의 경우 실제 서버와 동일한 동작을 보장하기 위해 OS를 별도로 가상머신에 띄우고 개발해야 합니다
      • 이 경우 오히려 문제가 발생했을 경우 디버깅을 위해 가상머신에 계속하여 접근하게 되므로 오히려 리눅스에서 개발하는 것이 더 편리해집니다
    • Docker로 개발환경을 분할 할 수도 있지만 가상화단계가 늘어남으로 인해 디버깅의 단계가 늘어납니다
      • 이는 초기 러닝커브가 높아져서 오히려 생산성의 하락이 발생합니다
      • 이미 리눅스나 docker에 충분히 익숙해진 개발자의 경우 자신만의 개발 환경을 따로 구축해도 제약하지 않습니다
      • 현재 저는 호스트에서 개발, docker에서 테스트 등 여러가지 환경을 복합적으로 사용합니다

Apache 2.4

  • 현재 한개의 서버 내에서 여러개의 서비스가 운영되고 있습니다
    • 각 서비스별로 환경설정을 커스터마이징 하기 위해 .htaccess를 통한 제어를 한 것이 있습니다
  • 일부 서버 변수의 경우 nginx에서 사용하기 위해서는 별도의 환경설정을 추가 해줘야합니다
    • 이부분을 nginx로 이전하기 위해 다 고쳐야 할 만큼 nginx를 써야 할 이유가 없었습니다
  • 2.2 버전에서는 http2가 적용되지 않습니다

PHP 7.x

  • 5.x 대와의 성능차
  • php의 경우에는 항상 최신버전을 유지하기 위해 노력하고 있습니다
    • error_reporting을 all 로 해두고 모든 메세지에 대응하고 있습니다
    • 다만 워닝, 노티스의 경우 즉각까지는 하지 않고 보이는대로 계속해서 줄여나가는 중입니다

Mysql 5.7

  • 현재 최신버전
    • 8 버전이 정식릴리즈 되면 넘어갈 계획 검토중
    • AWS RDS의 전환시기와 8 버전 지원 시기에 따라 변동 계획
  • Mariadb 제외 사유
    • 현재 사내 표준 sql 툴은 mysql workbench
      • mariadb와의 궁합이 좋지 않음
    • Mariadb를 꼭 써야만 하는 주요 사유가 없음

CodeIgniter 3

  • 현재 기준 최신버전
    • 제로보드4 베이스 코드 -> CI2 -> CI3 전환
    • 중간 과정에 거쳐가는 프레임워크로 더 나은 대안을 찾기 어려웠음
    • 낮은 러닝커브로 신규 직원의 교육 용이성
  • CI4에 대한 생각
    • 예정 없음
    • 현재 작성된 구조를 봤을때 기존 소스의 마이그레이션 작업이 적지 않음
    • 정식 릴리즈 이후에 코드 개선이 많이 필요할 경우 그대로 3유지 또는 라라벨로 전환

Jenkins

  • 무료
    • 현재 기업규모 대비 많은 프로젝트
    • 각 프로젝트가 격리된 환경에서 동작하도록 셋팅
    • 에이전트가 많아야 할 경우 가격 격차가 벌어짐
      • 현재 기준 에이전트 4
  • Bamboo와 비교
    • Bamboo도 충분히 좋음
    • 작은 기업에서 사용하기에는 비싼 라이센스비용
    • https://ko.atlassian.com/software/bamboo/pricing

Docker

  • 한 서버내에서 격리된 여러가지 환경을 실행시키기에 적합
    • 현재 개발은 ubuntu 16.04
    • 메인 서비스는 centos 6.8에서 동작
    • 일부 프로젝트의 경우 ubuntu 16.04
  • 적은 작원에 여러가지 환경을 동작시키기에 적합
    • 호스트를 깨끗한 상태로 유지 가능