메뉴 바로가기 검색 및 카테고리 바로가기 본문 바로가기

한빛출판네트워크

IT/모바일

CVS로 웹 응용 프로그램 개발을 쉽게하기

한빛미디어

|

2002-02-15

|

by HANBIT

11,346

저자: Oktay Altunergil, 역 한동훈

웹 응용 프로그램을 정의한다면 사용자에게 기본적인 인사말을 보여주는 것에서부터 복잡한 트랜잭션을 처리하는 것과 같은 다양한 작업들을 수행하기 위해 웹 서버를 중심으로 작업하는 응용 프로그램을 말한다. 대부분의 복잡한 웹 응용 프로그램들은 정보를 저장하기 위해 데이터베이스를 사용한다.

웹 응용 프로그램을 개발하는 것도 전통적인 독립 실행(standalone) 응용 프로그램을 개발하는 것과 근본적으로 다른 것은 없으므로 웹 응용 프로그램 개발자는 전통적인 오프라인 응용 프로그램 개발을 위해 고안된 CVS 사용을 고려해볼 수 있다. 실제로 필자는 웹 개발에 CVS를 어떻게 적용할 것이며, 그것이 실제로 얼마나 유용한지를 깨닫기 전에는 이와 같이 생각하지 않았었다.

독립 실행 응용 프로그램과 웹 응용 프로그램간의 가장 중요한 차이점은 "작업 복사본(working copy)" 개념이다. 일반적으로 독립 실행 응용 프로그램 개발자는 자신의 PC로 일련의 소스 파일들을 전송하고, 컴파일하고, 그것을 갖고 작업한다. 여기에는 새로운 버전의 소스를 사용할 때마다 필요한 최소한의 설정만 있으면 된다. 그러나 웹 개발에서는 웹 응용 프로그램이 클라이언트/서버 특성을 갖고 있기 때문에 독립 실행 응용 프로그램과는 다르다. 웹 응용 프로그램은 일정한 환경을 필요로한다. 이 환경은 서버에 있는 환경 변수, 웹 서버 응용 프로그램 변수, 사용하는 데이터베이스와 같은 것들로 구성된다. 다시 말해서, 이들중에는 독립 실행 응용 프로그램에 적용할 수 있는 것도 있으며 그렇지 않은 것들도 있다. 또한 독립 실행 응용 프로그램에 비해 웹 응용 프로그램 환경이 보다 시각적이다.

CVS가 제공하는 기능들을 사용하여 생산성을 높이고, 웹 개발을 보다 빠르게 할 수 있다. 이 케이스 스터디는 웹 응용 프로그램 개발에서 CVS를 사용하는 방법에 대한 것이다. 여기서는 모든 가능한 시나리오를 다루지도 않을 것이며, CVS 서버를 설정하거나 CVS 명령을 사용하는 것에 대해서도 다루지 않을 것이다. 이에 대한 문서들은 충분히 많다.(관련 자료 참고) 따라서 여기서는 웹 응용 프로그램 개발에 필요한 환경을 구축하는 것에 대해서 설명할 것이다.

시나리오:

PHP와 MySQL 웹 응용 프로그램을 개발하는 윈도우 & 유닉스 상점. 각각의 종업원은 윈도우, 리눅스, FreeBSD, 또는 이 세가지 모두에 액세스할 수 있다.

어떤 개발자들은 전문적인 텍스트 편집기와 그래픽하게 보여주는 diff 뷰어(viewer)와 같은 윈도우 툴에 익숙하고, 이들은 일반적으로 윈도우 전용 웹 브라우저에서 코드를 테스트한다. 이러한 개발자들은 계속해서 자신이 선호하는 개발 환경을 사용할 수 있다. 반면에 다른 개발자들이 Unix 시스템에서 개발하더라도 문제없이 작업을 할 수 있도록 할 수 있다. 개발자들은 최소한의 노력으로 집이나 다른 사무실에서도 일할 수 있기를 원한다.

준비사항
  • CVS 서버(레포지토리 제공). 이 서버는 SSH를 실행하고 있어야한다.
  • 윈도우 사용자가 직접 액세스할 수 있도록 하기 위해 개발 서버에는 삼바(Samba)가 설치되어 있어야한다.
  • 개발 서버에는 FTP나 SSH가 있어야하고, 윈도우 PC에서 이용할 수 있는 FTP 클라이언트나 FTP/SSH
작업 환경 준비하기

모든 개발자가 작업하고, 변경사항을 테스트할 수 있는 개발환경을 갖도록 하기 위해 각각의 개발자를 위해 개별적인 작업 환경을 생성하기로 결정했다. 이렇게 결정한 이유는 다음과 같다. 웹 서버에서 별도의 가상 호스트를 생성하는 것은 매우 쉬우며, 한 개발자의 작업 복사본과 다른 개발자의 작업 복사본을 별도로 유지해야한다.

웹 개발의 특성상 웹 개발은 각각의 단계에 대해서 많은 테스트를 수행해야한다. 심지어 페이지를 올바르게 표시되도록 하는데에도 상당히 많은 양의 코딩, 테스팅, 재코딩이 필요하다. 개발자에게 별도의 환경을 주게되면 다른 개발자의 작업과 충돌하는 것과 같은 어떤 문제 없이 원하는 데로 할 수 있다.

우리의 프로젝트에서는 코드가 데이터베이스에 있는 실제 데이터와 거의 무관하기 때문에 데이터베이스의 동일 인스턴스를 사용하기로 했다. 데이터베이스 구조가 같기 때문에 우리의 프로젝트에서는 코드가 데이터베이스에 있는 실제 데이터와 거의 무관하기 때문에 데이터베이스에 대한 동일 인스턴스를 사용하기로 했다. 데이터베이스에 들어 있는 데이터가 테스트 데이터이기 때문에 데이터베이스 구조가 같은 문제없이 같은 데이터베이스를 공유할 수 있다. 필요하다면 가장 최근의 데이터베이스를 가져오고, 두 개의 데이터베이스에 대한 MySQL 구조 덤프(dump)에 있는 차이점을 조사하여 변경사항을 적용할 수도 있다.

레포지토리

레포지토리는 웹 서버가 설치되지 않은 다른 서버에 둘 수도 있고 웹 서버에 둘 수도 있다. 여기서는 개발 서버와 CVS 서버를 동일 머신에서 돌리기로 했다. CVS 레포지토리는 개별적인 것이기 때문에 동일 머신에서 돌리는 것이 영향을 주지는 않는다.

CVS Pocket Reference
개발자들중에 몇몇이 개발서버에서 작업하더라도 필자의 리눅스 데스크톱에 작업 디렉터리를 두었으며, 윈도우 데스크톱에서는 삼바를 사용해서 액세스 액세스한다. 이렇게 함으로써 개발 시스템을 가질 수 있었으며, 윈도우와 리눅스 툴 모두에 대한 네이티브 액세스를 할 수 있었다. 필자의 리눅스 데스크톱에도 MySQL 데이터베이스와 Apache, PHP를 설정했다.

여러분이 CVS 서버와 동일한 서버에서 작업하고 있다면 모든 것들이 조금 더 단순하다. 작업 디렉터리에서 한 번만 소스 코드를 체크 아웃하기만 하면 된다. 그 다음에는 적절한 CVS 명령을 사용하여 로컬에서 소스 코드를 update, add, commit 하면 된다.

그러나 여러분이 필자처럼 다른 서버에 작업 디렉터리가 있다면 CVS를 사용하기 전에 몇 가지 설정을 더 해야한다.

CVS 서버와 파일을 주고 받는데 가장 좋은 최적의 해결책이라고 생각한 것은 SSH를 사용하는 것이다. CVS 서버와 파일을 주고 받기 위해 SSH를 사용하려면 먼저 SSH 클라이언트를 설치해야한다. SSH 클라이언트는 윈도우와 리눅스 모두 실행되지만 여기서는 리눅스에서 설정하는 것에 대해서만 설명할 것이다. SSH 클라이언트를 설치한 후에는 CVS 서버에 들어갈 때마다 CVS 명령을 설정하지 않도록 몇 가지 환경 변수를 설정해야한다. 첫번째는 CVS가 사용하는 전송 프로토콜을 지정하는 CVS_RSH 변수를 설정하는 것이다. 배시(BASH) 쉘을 사용하고 있는 시스템에서는 다음과 같이 설정한다.

export CVS_RSH="ssh"
다음은 CVS 서버에 등록되어 있는 사용자 이름, 호스트, CVS 레포지토리에 대한 경로와 같은 정보를 지정하는 CVSROOT 변수를 설정하는 것이다.

export CVSROOT=":ext:username@cvsrepos_hostname_or_IP:/path/cvs_project"
위와 같은 환경 변수를 rc.local과 같은 초기화 스크립트나 .bash_profile과 같은 각 사용자별 로그인 스크립트에 넣을 수도 있다.

이러한 환경 변수 설정은 윈도우 시스템에서도 동일하다(아래 관련 자료 참고). SSH 클라이언트와 환경 변수를 설정했으면 소스 코드의 작업 본사본을 저장할 디렉터리로 가서 다음과 같이 실행한다.

cvs checkout module_name
여기서 SSH 서버에 호스트 기반 인증 방법을 설정하지 않았다면 비밀번호를 물어볼 것이다.

호스트 기반 SSH 인증을 설정하는 것은 쉽다. Ssh-keygen 명령으로 여러분에 대한 키를 생성하고 CVS 서버에 authorized_keys 파일에 생성한 공개키를 추가한다. authorized_keys나 authorized_keys2 파일(사용하는 프로토콜에 따라 다르다)은 CVS 서버의 ~username/.ssh/에 저장한다.

환경 설정과 호스트 기반 인증이 모두 적절하게 되었으면 원격으로 CVS를 사용하는 것은 로컬에서 CVS 서버를 사용하는 것과 동일하다.

위와 같은 작업 환경을 설정했다면 윈도우나 리눅스에서 코드를 편집할 수 있고, 로컬 CVS 서버와 동일한 명령을 사용하여 CVS 레포지토리에 변경사항을 적용할 수 있다. 윈도우 머신에서도 개발 환경을 실행할 수 있지만 필자의 경우에는 프로덕션 서버가 FreeBSD를 운용하기 때문에 그와 같이 하지 않았다.(꼭, 이게 유일한 이유는 아니지만 윈도우에서도 CVS 서버를 돌릴 수 있다)

"왜 귀찮은걸 해야하지? 왜 CVS 없이 개발하면 안되지?"라고 생각할 수도 있을 것이다. 이러한 질문에 대한 몇 가지 답변이 있다.
  • 몇명의 개발자든지 간에 어떤 시간에 어떤 파일이든 작업할 수 있다. 한 명 이상의 개발자가 같은 파일을 변경했다면 CVS가 변경사항들을 합쳐줄 것이며, 같은 파일의 같은 라인이 변경된 경우에는 여러분에게 수작업으로 변경할 것을 요청할 것이다. 여러분이 FTP를 사용하는 경우처럼 다른 사람의 변경사항을 덮어쓰는 일은 절대로 일어나지 않는다.

  • 파일에 적용된 모든 변경사항은 기록되며 특정 상태의 코드로 되돌릴 수 있다.

  • 재택근무를 하기로 했다면 집에서 비슷한 환경을 설정하고 cvs update를 실행해서 다른 개발자들이 CVS 레포지토리에 업로드한 최근 버전의 코드를 가져올 수 있다. 변경사항도 마찬가지로 쉽게 제출할 수 있다. FTP를 사용해서 일일이 파일을 전송하지 않아도 된다.

  • 레포지토리에 액세스하기 위해 SSH를 설정하기 때문에 트랜잭션은 항상 안전하게 보호된다.

  • 여러분의 실수가 다른 개발자에게 영향을 주지 않기 때문에 보다 더 자유롭게 코드를 작성할 수 있다. 마찬가지로 다른 개발자로인해 여러분에게 문제가 생기지도 않을 것이다. 뿐만 아니라 이러한 경우가 일어나더라도 레포지토리에서 코드를 깨끗한 상태(clean state)로 복원할 수 있다.

  • CVS를 사용하면 코드 작성을 보다 편하게 할 수 있다. cvs commit 외에는 특별히 해야할 게 없으며, 여러분의 변경 사항이 모두 기록된다. 필자는 이러한 긍정적인 효과를 필자와 다른 개발자에게서도 관찰할 수 있었다.

  • 코드를 출판(publishing)하는 것이 더 쉬워진다. 네이티브 CVS 명령을 사용하여 웹 응용 프로그램을 출판할 수도 있다.

  • 여러분이 사용하는 고유의 개발 환경을 바꾸지 않아도 된다. 작업 복사본에 있는 코드를 편집하기 위해 삼바(SAMBA), FTP, SSH, SFTP를 사용할 수 있으며, CVS 레포지토리와 작업 복사본간에 파일을 전송하기 위해 사용할 수 있는 많은 다양한 방법들이 있다.

  • CVS를 사용하면 개발자들간에 페이지를 나누는 것과 같이 작업을 나눌 필요가 없으며 다른 사람들에게 "수정중이니 손대지마"라고 알리지 않고 어떤 파일이든 작업할 수 있다.
CVS에 대해서 자세히 알고 싶다면 몇 가지 관련 자료를 참고하기 바란다.

CVS 설정과 사용 윈도우에서 CVS와 SSH 액세스 설정
TAG :
댓글 입력
자료실

최근 본 상품0