洪民憙 (홍민희) 블로그

내가 Wand 같은 것을 다시 만든다면 ImageMagick 바인딩은 재고하게 될 것 같다. 기능이 많은 것이 정말 뿌리치기 힘든 유혹이고, 실제로 그 때문에 그런 결정을 했지만, 여러가지 난점이 존재한다.

  1. 기능이 많다고 해도 결국 바인딩 API에 노출이 안되면 없는 기능이나 다름 없다.

  2. ImageMagick은 처음에 라이브러리로 개발된 것이 아니라 주로 convert, identity 명령어 도구로 개발되었고 나중에 그 기능을 C API로 노출한 것이기 때문에 API 디자인이 썩 좋지 못하다.

  3. 개발이 여전히 활발하고 업데이트가 잦은 것(늦어도 보름에 한 번은 새 버전이 올라온다)은 분명 장점이나, 그만큼 환경마다 버전이 파편화되어있다는 뜻도 된다. 바인딩 입장에서는 이 때문에 어떤 기능을 추가하고 싶어도 그 기능이 처음 추가된 ImageMagick 버전이 아직 널리 퍼져있지 않으면 쉽게 추가하기 힘들다.

  4. 생각보다 잔 버그가 많다. ImageMagick이 물론 성숙한 편이긴 하지만, 결국 기능이 많은 소프트웨어는 버그도 그만큼 많을 수밖에 없다. 게다가 3번 상황과 함께 조화되면 바인딩에서 ImageMagick의 특정 버전대에 나타나는 버그를 우회하기 위한 코드가 하나둘 추가되게 된다. 이런 것들이 많아지면 Twisted가 각 운영체제의 네트워크 스택 버그를 우회하기 위한 버전별 마스킹을 하는 것처럼 해야할 판. (그 정도로 심하지는 않지만.)

  5. ImageMagick 자체도 의존성이 어마어마하다. 결코 쉽게 설치할 수 있을만한 라이브러리는 아니다. Debian에서 아무 것도 없는 상태에서 apt-get install libmagickwand-dev로 설치를 하려고 하면 생각보다 시간이 걸린다. 게다가 ImageMagick은 이런 의존성을 선택적으로 해놨기 때문에 버전 파편화와 별개로 런타임에 링크 가능한 라이브러리 집합으로도 파편화가 되기 시작한다.

그렇다고 Wand 그만둔다는 얘기는 아니고.