Qt 모듈화 프로젝트 진행 현황

이 글은 Qt Labs Blogs 의 "Status of Qt modularization" 을 번역한 것입니다.

이 글은 지난해 시월에 포스팅했던 "Qt의 모듈화 프로젝트" 에 대한 업데이트 입니다. 작업은 순조롭게 진행되었고, 대부분의 큰 모듈로 나눌 수있었습니다.

아래의 그림을 보면 현재 모듈이 분할된 상태를 보실 수 있습니다. 원래의 Qt에 포함되지 않은 모듈들은 그림에 표현되지 않았습니다.

分割された Qt のモジュール

모듈화 설계에 대한 의사 결정들 :

  • 모듈 사이의 소스 의존은 금지되어 있습니다. 헤더의 의존만 허용 됩니다.
  • QtKernel 리포지토리에는 아직도 많은 모듈이 포함되어 있습니다. 이것은 기술적으로 이러한 모듈을 따로 분리하는 것이 어렵기 때문입니다. 아직 많은 수의 모듈이 서로 의존성을 갖고 있으며 (특히 QtCore와 QtGui의 경우), 또한 그 의존성이 상당하기 때문에 현재와 같은 구조에서 QtKernel 모듈들을 각기 다른 리포지토리에 따로 구분 하는 것은 의미가 없습니다. QtKernel 모듈을 소스 코드 레벨까지 분할하려면 오래 걸릴 것입니다. 그것보다 지금은 Qt의 다른 모듈을 분리하는 것이 중요합니다. QtKernel은 이후의 프로젝트에서 모듈화를 추진해도 문제가 없겠습니다.
  • 각 클래스의 문서는 각각의 모듈로 분할됩니다. 이것은 그 문서가. cpp 파일에 설명되어있어 그대로 모듈에 속하는 것 이기 때문입니다. Qt 전체에 관한 문서나 qdoc 도구 자체에 대해서는 별도의 저장소로 구분됩니다.
  • 샘플 프로그램과 데모는 각각 관련 모듈로 분할됩니다. qtdemo와 같이 여러 모듈에 의존하는 프로그램은 예외로 doc 리포지토리에 속합니다.
  • 각 플랫폼 기능 확인은 그것이 다른 모듈에 필요한 기능이기는 하지만, QtKernel의 configure 스크립트 통해 실행 됩니다. 이는 각 프로젝트에서 소요되는 시간을 줄여 줄 수 있습니다. Qt의 모듈화가 완료되면 각 모듈의 새로운 관리자가 자체 configure 스크립트 (또는 기타의 방법) 로 옮겨가는 것이 목표입니다. 예를 들어, QtWebKit에 이미 자체 "build - webkit" 스크립트가 존재합니다.
  • "git submodule"를 사용하여 모든 분할된 모듈을 포함한 master 리포지토리를 제공합니다.

진행 현황 :

Qt의 대부분은 모듈로 분할되어 Linux에서 빌드를 확인하고 있습니다. 현재 실시하고있는 작업은 크게 세가지입니다. 그것은 Linux 이외의 플랫폼에서 빌드, 자동 테스트 실행, 모듈화 프로세스를 Qt master (현재 Qt 4.7 기반) branch에 적용 하는 것입니다.

모듈화 변환 시점에 생기는 일들

모듈화는 아주 중요한 프로젝트이기 때문에 가능한 한 빨리 그것을 끝내고, 모듈화 변경을 종료하고자합니다. 왜냐하면, 모듈화가 개발에 영향이 없을 때까지 일부 개발이 연기 될 수 있기 때문입니다. 정확한 일정은 정해져 있지 않지만, 앞으로 1 ~ 2 개월 정도는 걸릴 것으로 예상 됩니다. 구체적인 일정이 잡히게 되면, 관련하여 많은 뉴스들이 공지 될 겁니다.

모듈화가 진행 되면, Qt 기존 리포지토리에 대한 개발은 모두 close됩니다. commit 역시 모두 금지됩니다. 그런 다음 위의 모듈화 그림과 같은 새 Qt 리포지토리를 사용한 개발이 시작됩니다. 이전 Qt 리포지토리는 보관된 "Git graft"를 사용하여 로그 확인용으로만 남게 됩니다. 새로운 모듈화된 리포지토리는 history 로그 전혀없는 새로운 상태에서 시작합니다. QtWebKit은 이미 원래 WebKit 리포지토리에서 개발되고 있기 때문에, 예외로 로그가 있습니다.

이제 병합 요청(Merge Request)은 각 모듈마다 개별적으로 진행 될 것입니다. 아쉽지만, 기존의 병합 요청은 새로운 모듈의 설계에 따라 다시 제출되어야 합니다.

첫 단계에서 분명히 몇몇 어려움이 발생할 것입니다. 그것을 극복할 때, Qt 리포지토리는 보다 사용하기 쉽고, 작업하기 편한 구조가 될 것입니다.


Blog Topics:

Comments