[Openstack Swift] swift 소스코드 다운로드 및 구조 설명

안녕하세요! 이번 포스트에서는 swift 소스코드 다운로드 방법과 간단하게 코드 구조에 대해 소개하도록 하겠습니다.

swift는 github을 통해 소스코드를 공개하고 있지만, github은 mirror 용도로 쓰고 있기에 contribution을 할 수 없습니다. contribution을 위해서는 Openstack의 code review 시스템인 gerrit을 이용하여야합니다. contribution을 하는 방법에 대해서는 나중에 따로 글을 쓸 예정이지만 어떻게 하는지 방법이 궁금하신 분들은 여기를 참고해주시면 됩니다.

이 문서에서는 github을 통해 소스코드를 다운로드 받아보도록 하겠습니다.

유용한 사이트 소개

코드를 받기 전에 swift와 관련된 공식 & 유용한 사이트들을 소개해드리겠습니다.

위 사이트들을 주기적으로 탐험하면 Openstack Swift 의 개발과정과 현재 무엇이 논의되고 있고 개발 중 인지 집에서 편안히 follow up 할 수 있습니다.

코드 다운로드

코드를 받기 전 git이 설치되어있는지 먼저 확인해주시기 바랍니다. GUI가 편하다면, SourceTree를 이용하여도 됩니다.

코드를 받았다면, 기본적으로 master 브랜치가 받아집니다. swift는 각 버전별로 브랜치를 생성해두었습니다. 우리는 이 글을 작성하는 시점에서의 최신 버전인 kilo 버전의 코드를 사용하도록 하겠습니다.

IDE를 이용하여 코드 분석

코드를 분석하기 위한 도구로 개인의 취향을 존중하지만, 저는 PyCharm을 추천합니다. 코드 추적에도 편하고, 나중에 디버깅을 할 경우에도 아주 유용하게 사용되기 때문입니다. 반드시 PyCharm을 사용할 필요가 없지만, 추천을 합니다. ( 방긋 )

코드 구조

코드도 다운로드 받았으니, 한번 코드 구조에 대해 알아보도록 하겠습니다. 다음은 swift 코드의 최상위 부분에 있는 내용입니다.

  • bin/ : swift 서버 및 데몬의 실행파일이 들어있습니다.
  • doc/ : swift 공식 홈페이지에 있는 document 와 동일한 내용입니다.
  • etc/ : swift 서버 및 데몬의 예제 설정파일이 들어있습니다.
  • examples/ : swift 서버들에 대한 apache, wsgi 예제 설정파일이 들어있습니다.
  • swift/ : 실제 swift  코드가 들어있습니다.
  • test/ : swift unit test가 들어있습니다.

다음은 실제 swift코드가 들어있는 swift 디렉토리의 내용입니다.

  • account : account 서버 및 관련 데몬들의 코드들이 있습니다.
  • cli : ring_builder, recon 과 같은 swift 운영에 필요한 tool 이 있습니다.
  • common : 전체 swift 코드들이 공통적으로 사용하는 라이브러리 코드들이 들어있습니다.
  • common/middleware : proxy/a/c/o 서버들의 wsgi pipeline에 들어가는 middleware 코드가 들어있습니다.
  • common/ring : swift에서 제일 중요한 ring을 생성/관리 하는 코드가 들어있습니다.
  • container : container 서버 및 관련 데몬들의 코드들이 있습니다.
  • locale : swift 코드들 중 에러/안내 메세지에 쓰이는 문장의 locale 값이 들어있습니다.
  • obj : object 서버 및 관련 데몬들의 코드들이 있습니다.
  • proxy : proxy 서버 코드가 있습니다.
  • proxy/controller : proxy 서버에서 요청에 따라 account / container / object 별로 처리를 진행하는 코드가 있습니다.

여기까지 swift 소스코드 구조에 대해 간단히 알아봤습니다. 각 세세한 부분은 나중에 관련 컴포넌트들을 소개하면서 차근차근 분석해나가도록 하겠습니다.

다음 포스트에서 뵙겠습니다~!

그럼 2만!


Leave a Reply

Your email address will not be published. Required fields are marked *