리소스설정치환에 관한 글에서 얘기했듯이 개발소스와 빌드결과물은 여러 서버를 거치면서 생성,이동,배치됩니다.

개발자 로컬PC -> (소스저장소) -> 빌드서버(CI서버) -> 개발서버 -> 테스트서버 -> 스테이징서버 -> 운영서버

1차원적으로 일렬로 나열하니까 간단해보이지만 실상 어플리케이션의 이동경로는 2차원적으로 설계됩니다. 마치 수학자 오일러가 최단코스를 찾기 위해 고민한 것처럼 우리는 각각의 서버를 거점으로 하는 배포 코스를 그려가야 합니다.(배포의 위상수학? 배포 아키텍처? 음.. 배포 아키텍처가 맘에 드는군요.)

하지만 너무나 다양하고 특이한 개발환경이 많이 존재하기 때문에 배포코스에 관한 뚜렷한 공식은 없는것 같습니다. 아래에 저의 경험과 동료들의 의견 그리고 온라인상의 자료 등을 종합해서 크게 3가지의 대표적인 코스를 그려보았습니다. 어떤게 베스트 프랙티스다라고 딱부러지게 말씀은 못드리겠군요.
(코스에서 테스트서버는 포함하지 않았습니다. 솔직히 제가 겪었던 모든 프로젝트에서는 개발서버가 테스트서버,스테이징서버의 역할을 모두 겸하고 있었습니다.)

1.빌드서버 중심 코스
-개발서버용, 스테이징서버용, 운영서버용 어플리케이션(빌드산출물)을 모두 빌드서버에서 생성
-어플리케이션은 빌드서버에서 각각의 서버로 전송되어 배포됨


-또는 스테이징 서버에 전송된 어플리케이션을 다시 운영서버로 전송하기도 함



 

2.소스저장소 중심 코스
-개발서버, 스테이징서버, 운영서버가 개별적으로 소스장소로부터 전체 개발소스를 취합하여 각각의 환경에 맞는 어플리케이션을 빌드하여 배포

 

3.혼합된 코스
-개발서버용 어플리케이션은 빌드서버에서 생성하여 개발서버로 전송되어 배포
-스테이징서버용은 스테이징 서버가 소스저장소로부터 전체 개발소스를 취합하여 빌드하고 배포
-스테이징서버에서 빌드된 어플리케이션을 운영서버로 전송

자, 어떤 코스를 타시렵니까?

Posted by 에코지오
,

흔히 개발서버나 테스트서버에 웹어플리케이션을 배포할 때는 프로젝트의 모든 빌드된 파일(class,jsp,html,...)을 한꺼번에 배포한다.

그러나 운영서버 반영은 상황이 다르다. 운영서버에는 전체 어플리케이션 파일을 한꺼번에 배포하지 않고 테스트가 통과된 검증된 파일만 반영해야 하기 때문이다. 또한 대개 업무팀에서 특정 기능 또는 화면을 골라서 운영에 반영해달라고 요청이 들어온다.

전체 프로젝트 소스에서 일부만 운영에 반영하기 위해 어떻게 하는게 최선일까?

1. FTP 프로그램 등에서 그냥 반영할 파일을 골라서 업로드하는 방법.
난 지금껏 이 방법을 써왔다. 물론 시스템오픈 전에 막바지 구축단계에서.

2. 무조건 최신 소스를 받아서 반영.
소스저장소의 중심개발축(HEAD, Trunk)에 소스를 받아서 빌드하고 그냥 전부 일괄로 반영. 배째라식.

3. 중심개발축 소스를 태깅하고 태깅된 소스를 받아서 반영.
태깅은 전체소스에 다 태그를 붙이기 때문에 반영할 소스가 아닌 것도 반영될 수 있다. 정말로 반영을 원하는 것만 가져오려면 운영에 반영할 소스들만 커밋하게 해야 하는데 이게 쉽지 않다.

4. 운영 반영용 브랜치(릴리스브랜치)를 따서 반영하는 방법
릴리스 브랜치를 만들고 중심개발축에서 운영에 반영할 소스만 골라서 릴리스 브랜치에 병합한 뒤
릴리스브랜치 소스를 커밋한다. 이후 운영반영용 빌드는 릴리스 브랜치의 소스만 취합해서 빌드,테스트하고 운영서버에 반영하는 식이다.

관련 책이나 자료를 보면 4번 방법을 많이 적용하는 것이 정석이라고 나온다.
그러나 내 경험도 그렇고 내 주위에는 1,2번 방법으로 흔히 처리한다. 내가 SM 경험이 없고 SI만 해봐서 그런 걸수도 있고...

시스템 오픈 전에는 그냥 1,2번 방식으로 하고 오픈 후 안정화되고 나면 4번 적용하는게 맞는걸까?

Posted by 에코지오
,