목차

소스관리도구 서버환경 운영

개요

전자정부 표준프레임워크는 개발환경의 소스관리도구로 오픈소스인 Subversion을 사용한다.
Subversion(SVN, 버전관리 시스템)은 시스템의 콘솔을 통한 직접적인 사용 이외에 사용자의 PC에서 편리하게 사용할 수 있도록 GUI를 가진 다양한 클라언트가 존재한다.

Subversion은 프로젝트 전반적으로 사용하는 파일들을 관리하기 위한 시스템이다.
Subversion은 다수의 개발자가 프로그램을 개발할 때 버전 관리를 통해 히스토리를 관리하고, 전체 팀의 공통 모듈을 일관성 있게 유지할 수 있도록 한다.

설명

Subversion은 실제의 작업용 디렉터리(작업공간) 이외에, 저장소(repository)라고 하는 영역에 최초의 데이터와 그 이후의 갱신 이력이나 변경 내역을 저장한다.
버전관리 개요

Subversion의 아키텍처

저장소(Subversion Repository)는 버전화된 모든 데이터를 관리하며, 클라이언트 프로그램은 로컬 환경에서 복사된 데이터를 관리한다. 이들은 다양한 저장소 액세스(RA) 층을 통해 통신한다.
Subversion 아키텍처

Subversion의 구성요소

사용법

주요 기능

  1. 디렉터리의 버전 관리
    • 디렉터리 트리 전체의 변경을 추적할 수 있는 가상적 버전 관리 시스템 구현
    • 디렉터리에도 버전 정보가 추가됨
  2. 버전 이력 관리
    • 파일 및 디렉터리에 대해 추가, 삭제, 복사, 명칭 변경 가능
    • 신규 추가되는 모든 파일은 독립적인 변경 이력을 가짐
  3. Atomic Commit(원자적 커밋)
    • 변경 사항은 모두 적용되거나, 전혀 반영되지 않음
    • Commit 대상 내용의 일부만 저장소에 반영되는 문제 방지
  4. 메타데이터 버전 관리
    • 파일과 디렉터리 속성은 Key-Value 조합임
    • 속성도 버전 관리됨
  5. 네트워크 엑세스 방식 선택
    • HTTP 서버 확장 모듈로로서, 서버가 제공하는 기능(인증, 인가, 데이터 압축 등)을 곧바로 활용 가능
    • 독립 실행형 서버로 SSH를 이용한 터널 통신 지원
    • 저장소 내 액세스용 추상 레어어를 활용하여 새로운 네트워크 프로그램 구현이 비교적 간단함
  6. 데이터 처리의 일관성
    • 동일한 알고리즘을 사용하여 텍스트 및 바이너리 데이터 변경 사항 관리
  7. 효율적인 브랜치 및 태그 생성
    • 하드 링크와 유사한 방식을 사용하여, 프로젝트 복사시 자동으로 브랜치 및 태그 생성 (시간과 공간 효율적)
    • 브랜치와 태그를 작성하는 비용이 프로젝트 크기에 비례하지 않는다.
  8. 확장성
    • API 기반으로 구현되어 유지보수 및 타 시스템과 연동 용이

주요 명령어

  1. 체크아웃 (check-out)
    • 저장소에서 로컬 작업 복사본을 생성
    • 최신 버전 이외에 원하는 버전으로 checkout하는 것도 가능함
  2. 커밋 (commit)
    • 변경 사항을 저장소에 반영
    • 커밋 시 프로젝트 전체 리비전이 증가
  3. 업데이트 (update)
    • 저장소의 최신 변경 사항을 로컬 작업 공간으로 반영
    • 최우선 원칙 : 파일을 변경하기 전에 언제나 갱신을 수행
  4. 임포트 (import)
    • 최초로 저장소에 소스를 등록하는 작업
  5. 익스포트 (export)
    • 버전 관리 파일 없이 순수한 소스 파일만 가져오기
    • 오픈소스 프로젝트의 경우 소스를 압축하여 릴리즈 할 때 사용함
  6. 충돌 (conflict)
    • 동일한 파일을 여러 사용자가 수정할 경우 발생
  7. 리비전 (revision)
    • 변경 사항이 커밋될 때마다 증가하는 저장소의 버전 번호
    • 여러개의 파일 중 하나만 변하여 commit 하더라도 모든 파일의 버전은 올라가며, 버전은 프로젝트 단위로 증가함
  8. 트렁크 (trunk)
    • 프로젝트의 메인 개발 브랜치
    • trunk 디렉터리 아래에는 바로 소스들의 파일과 디렉터리가 들어가게 됨
  9. 브랜치 (branches)
    • 특정 기능을 개발하거나 테스트할 때 트렁크를 분기하여 사용하는 공간
  10. 태그 (tag)
    • 특정 시점의 프로젝트 소스를 저장하는 공간
    • 태깅은 기본적으로 개정판 번호(Revision Number)와 상관없이 각 파일에 라벨을 붙이는 것이며, 이 작업은 작업 사본에 할 수도 있고 저장소 자체에 할 수도 있음
  11. 후크 (hook)
    • 저장소 이벤트(새로운 개정판의 생성이나 버전 관리가 되지 않은 속성의 수정 등) 발생 시 실행되는 스크립트
    • 그 이벤트가 무엇인지, 어떤 목표로 작동하는지, 이벤트를 실행한 사람의 사용자 이름이 무엇인지 알려줌
  12. 잠금 (lock)
    • 파일의 수정 권한을 특정 사용자에게 할당
  13. 병합 (merge)
    • 한 브랜치의 변경 사항을 다른 브랜치에 적용

서버 운영관리 - CLI 방식

  1. 저장소 만들기
    Subversion repository는 향후 repository의 추가와 관리가 용이하도록 복수 개의 repository 구성을 추천한다.
    • Root Repository 를 위한 directory를 생성한다.
      > mkdir repository
    • 각각의 Repository를 생성한다.
      > cd repository
      > svnadmin create --fs-type fsfs repo1
      > svnadmin create --fs-type fsfs repo2
  2. 인증/권한 정보 설정 (conf/svnserve.conf)
    • 각 repository conf 폴더(또는 디렉토리)의 svnserve.conf 파일에서 해당 repository의 사용권한을 설정한다.
    • anon-access (익명사용자), auth-access (인증된 사용자)에 대한 설정을 하지 않는 경우, default로 익명사용자는 읽기권한, 인증된 사용자는 쓰기권한이 부여된다.
    • 다음은 svnserve.conf 작성의 예이다.
      [general]
      ### These options control access to the repository for unauthenticated
      ### and authenticated users.  Valid values are "write", "read",
      ### and "none".  The sample settings below are the defaults.
      # anon-access = read
      # auth-access = write
      # 익명 사용자는 접근을 허용하지 않고 인증된 사용자만 쓰기 권한을 부여한다.
      anon-access = none
      auth-access = write
      ### The password-db option controls the location of the password
      ### database file.  Unless you specify a path starting with a /,
      ### the file's location is relative to the conf directory.
      ### Uncomment the line below to use the default password file.
      # 패스워드 파일은 기본값인 conf/passwd 파일을 사용한다.
      password-db = passwd
      ### The authz-db option controls the location of the authorization
      ### rules for path-based access control.  Unless you specify a path
      ### starting with a /, the file's location is relative to the conf
      ### directory.  If you don't specify an authz-db, no path-based access
      ### control is done.
      ### Uncomment the line below to use the default authorization file.
      # 리포지토리의 디렉토리별, 사용자 그룹별 권한관리를 하지 않는 경우, 추가적인 권한
      # 설정을 사용하지 않는다.
      # authz-db = authz
      ### This option specifies the authentication realm of the repository.
      ### If two repositories have the same authentication realm, they should
      ### have the same password database, and vice versa.  The default realm
      ### is repository's uuid.
      # 이 리포지토리의 인증 시 나타나는 타이틀을 지정한다.
      realm = eGovFrame SVN Repository
  3. 저장소 만들기
    각 repository conf 폴더(또는 디렉토리)의 passwd 파일에서 사용자를 등록한다. 형식은 사용자 'id = 패스워드'이며, 패스워드는 현재 평문 형식이다.
    ### This file is an example password file for svnserve.
    ### Its format is similar to that of svnserve.conf. As shown in the
    ### example below it contains one section labelled [users].
    ### The name and password for each user follow, one account per line.
    [users]
    # harry = harryssecret
    # sally = sallyssecret
    developer01 = 123qwe
    developer02 = 123qwe
  4. 백업 및 복구
    • Dump : 표준 입출력을 통해서 저장소의 내용을 파일로 생성한다. svnadmin dump 명령을 사용하며 이 명령은 저장소 디렉토리 바깥에서 사용해야 한다.
      > ls
       repository
      > svnadmin dump repository > repository.dump
    • Load : 저장소 백업 파일을 이용해서 저장소를 복구한다. svnadmin load 명령을 사용하며, 빈 저장소를 생성한 뒤 백업 파일을 이용해서 복구 한다.
      > svnadmin create repository
      > ls
       repository   repository.dump    
      > svnadmin load repository < sample.dump

서버 운영관리 - GUI 방식

GUI 방식은 현재 Windows 운영체제만 지원한다.

서버 개발환경 설치 가이드[표준프레임워크] CI 및 Nexus 환경구축 가이드 v4.3을 활용하여 SVN을 설치 및 구성한다.

참고자료