단백질 접기 게임 fold.it의 배경 이야기

요즘 인터넷에서 단백질을 접는 게임 fold.it이 아주 인기입니다. 단백질 접기(protein folding)는 구조생물정보학의 가장 큰 문제이기도 하지만, 제가 있는 연구실의 주요 주제이기도 해서, 단백질 접기에 관한 몇 가지 얘기를 해 볼까 합니다. :)

단백질 구조가 뭔가?

단백질은 생물을 구성하는 주요 분자구조 중의 하나인데, 20가지 아미노산이 일렬로 실처럼 쭉 연결되는 것이 기본 구조입니다. (현재 22번째 자연계 아미노산까지 발견되긴 했지만 사람은 20개만 사용하고 있습니다.) 20가지면 컴쟁이가 생각하기에 바로 생각할 수 있는게 알파벳으로 커버하고 남는다 그거죠. 그래서 실제로 아미노산은 알파벳으로 표시하고 있는데 각각의 이름을 따서 BJOUXZ 여섯개를 빼고 나머지로 표현하는 문자열로 많이 씁니다.

그런데, 각 아미노산은 성질이 있어서 자기들끼리 모이려고 하는 것도 있고, 서로 떨어지려고 하는 것도 있고 크기가 커서 부딪히지 않으려고 하는 것도 있고, 기타 등등 여러 성질이 있어서 안정적인 몇 가지 기본적인 구조(나선형, 판형 등..)을 지역적으로 이루는데, 이걸 2차구조라고 부릅니다.

역시 인간관계도 상당히 복잡하듯, 2차구조를 이룬 다음에도 자기들끼리 꼬이면 그나마 남은 관계까지도 복잡하게 얽여서 굉장히 안정적인 구조를 만들 수 있는데요, 이렇게 모인 것을 3차구조라고 부릅니다. 그리고 여러 단백질 가닥이 모여서 큰 단백질을 만들면 4차구조라고 부릅니다.

구조는 뭐에 쓰는가?

단백질은 생화학적 작용의 가장 기본적이고 유용한 분자이기 때문에, 생화학 작용에서 단백질을 빼면 거의 남는게 없습니다. 물론 핵산이나 탄수화물 등도 매우 중요하긴 하지만, 생화학 회로를 그린다 하면 거의 대부분 단백질이 주인공이죠. 그런데, 단백질이 상대를 만나서 반응을 하는 기준이 대부분 단백질에 있는 구멍의 특정 모양이나 아미노산들이 배치된 패턴과 상대의 특징들 같이 단백질과 생분자간의 모든 관계가 구조를 빼면 설명하기 힘듭니다.

그래서 단백질의 구조를 밝히는 것이 분자생물학, 세포생물학의 기본 원리를 밝히는 데 뿐만 아니라, 새로운 단백질을 디자인하고 약을 만드는 데 매우 중요한 도구입니다. 90년대 말의 히트작 항암제인 글리벡도 구조를 연구해서 기막히게 구멍을 메우는 약이죠.

구조를 그냥 보면 안 되나?

웬만하면 구조는 그냥 현미경으로 보면 가장 좋겠죠. 그런데, 단백질은 빛의 파장보다 짧은 구조를 하고 있기 때문에, 가시광선으로는 볼 수 없어서 현미경으로 볼 수 없고, 전자현미경이나 다른 원리를 쓰는 현미경들도 (적어도 아직은) 단백질 구조까지 보기에는 한참 힘듭니다. 그래서 사용하는 것이 일반인들에게 MRI로 유명한 NMRX레이 구조결정 두 가지 방법이 쓰이는데요, 보통 X레이가 여러 이유로 더 많이 쓰입니다.

X레이로 그냥 다 찍으면 보이면 좋은데, 이게 결정을 만들어야하다보니, 같은 분자를 다량 정제하는 것도 힘들고 결정으로 만들기도 힘든 고분자를 결정으로 만드는 것도 상당히 경우에 따라 다른 기술이 필요합니다. 그래서, 대량으로 찍고 싶다고 다 나온다기 보다는 관심이 많은 단백질들의 구조에 집중되어 있는 편입니다. 또한, 단백질 구조가 항상 같은게 아니라 꿈틀꿈틀 움직이기도 하고 아예 훽훽 움직이기도 하는데 그 움직임이 중요한 경우도 있어서 원하는 걸 다 얻기도 힘들고, 막 사이에 끼여있는 단백질 같은 경우엔 아예 원래 구조로 결정으로 만드는게 너무너무너무 힘들어서 지금까지 찍힌 것이 손으로 꼽을 정도가 되기도 합니다.

계산적 구조 예측

그래서 하는 것이 컴퓨터를 이용한 구조 예측입니다. 기본적으로 원자의 움직임은 물리역학적 특성을 따르기 때문에, 움직임이나 안정적 구조를 컴퓨터로 당연히 이론적으로 예측할 수 있습니다. 대표적으로 사용되는 방법은 분자동역학 시뮬레이션이나 몬테카를로 같은 것들을 쓰는데, 전자의 경우에는 계산량이 엄청나게 많아서 수십나노초(ns)가 넘으면 예측이 거의 불가능해집니다. 그리고 몬테카를로법이나 다른 변종들도 한계가 있습니다. (시작점을 잡기 위한 방법이나 지속적인 움직임을 보기 위한 다른 방법을 도입할 필요가 있죠.)

그 결과 결국 구조 예측의 주축은, 유사성 모델링이 되었는데, 기존의 비슷한 단백질의 구조를 가져다가 여기 저기 비슷한 부분을 잘라 붙인 다음에, 그걸 기존 방법으로 에너지 안정화 시뮬레이션을 좀 거치는 방법입니다. 기존 단백질 구조를 이용해서 완전 바닥이 아니라 벌써 한참 진행된 것을 가지고 하기 때문에 아주 효율적이고 비교적 정확한 결과를 얻을 수 있지만, 기존의 비슷한 단백질이 없으면 구조를 예측하지 못하는 한계가 있습니다. 그렇지만, 데이터베이스가 점점 커져서, 최근에는 단백질 예측에서 유사성을 이용하지 않는 것은 상상할 수 없을 정도가 되었고 데이터베이스 크기가 예측의 품질과 매우 밀접한 관계를 가지게 되었습니다.

구조 예측 대회 CASP!

이렇게 단백질 구조 예측이란게 아주 정의가 잘 된 계산 문제가 되다보니, 그 다음에 당연히 나올 수 있는 것은 초밥만들기 대회처럼 세계대회가 생기는 것이겠죠. 그 중 가장 큰 것은 단연 CASP입니다. 1994년부터 격년으로 하고 있는데 올해 대회는 얼마 전에 참가접수가 끝나고, 지금 한참 대회가 진행 중입니다.

요즘 유행하는 fold.it도 이 구조 예측 대회를 타겟으로 나온 것인데, fold.it을 만든 워싱턴대학(시애틀) 생화학과의 David Baker 연구실은 한동안 CASP을 휩쓸었던 먼치킨 그룹입니다. 여기는 애플과 비슷한 점이 많은데, 남들이 다 뻔히 될 것 같다고 생각하고는 있지만 실제로는 여러 이유로 안 해보는 것들을 아주 기발하고 멋진 해결책을 들고서 짠! 하고 만들어서 그걸로 굉장한 결과물을 만들어냅니다. 유사성 모델링에서 에너지 계산방법도 그렇고, 구조 데이터베이스 탐색법, 분산계산(Rosetta@Home)등 여러 가지가 그런데요, 이번에 fold.it도 종종 컨퍼런스에서 구조는 역시 사람이 보고 끼워맞추는게 최고다 그런 농담이 자주 나오는 걸 진짜로 게임으로 만들어서 수만명이 달려들게 만들어버렸습니다.

-ㅇ-; 그 결과 지금 fold.it에 슬슬 CASP문제가 나오기 시작했고, 올해 CASP 문제를 게임에서 수만명 플레이어가 여러가지를 아직 알고리즘으로 나오지도 않은 여러 직관을 써서 풀어놓으면 거기서 나온 구조로 CASP 답안으로 제출한다고 합니다. 물론 컴퓨터로 찾는 것 보다 완전 샅샅히 뒤지는 것은 안 되겠지만, 그래도 사람의 직관이 수만명이 모이면 그 힘이 어떻게 될 지는 상상도 안 가네요. 아마도 상당히 상위권에 들어갈 수 있지 않을까 싶습니다.

실제로 게임 안에 나오는 구조는 진짜 단백질 구조인가?

많은 분들이 물어보셔서 덧붙이자면, 게임 안에서 쓰이는 용어는 모두 실제 생물학에서 사용하는 용어이고, 구조에 큰 영향을 주는 요소들은 상당 부분이 게임 안에서 자세히 표현되어 있습니다.

앞으로 이런 게임이 어떤 것이?

직관으로 풀면 훨씬 간단한 NP-hard 문제들을 재미있는 퍼즐로만 만들 수 있다면 이렇게 잘 표현한 게임으로 만드는게 수천개 CPU 동원한 클러스터보다 효율적일 수도 있을 것 같습니다. 단백질 구조 외에도 계통 분류 최적화RNA 구조, 단백질-단백질/라이간드 도킹 예측/디자인, 단백질 유도 진화 등 재미있는 게 많이 있을 것 같은데 게임으로 과연 만들 수 있을지는 모르겠네요. ㅎㅎ;

댓글 6 개 | 트랙백 0 개 (보낼곳) | 태그 life computer


파이썬 문법을 내 맘대로 python4ply

그동안 파이썬은 조건 표현과 과 with절같이 문법을 바꿔달라는 수 많은 사용자들의 요청을 받아들여 문법을 추가한 사례가 여럿 있기는 했지만, switch-case나 for-from-to 같이 디자인 상의 일관성 문제로 인해서 받아들여지지 않은 문법도 많이 있었습니다.

요즘 계속 영역-특정적 언어(Domain-specific Language)에 대한 사용처가 늘고 있는데 파이썬을 특정 목적에 쓰자면 종종 대형 프로젝트에서는 문법을 고치는 게 득이 될 경우도 많이 생각할 수 있습니다. 그래서 전처리기를 사용해서 쓰는 방법도 있지만, python4ply는 이걸 좀 더 깔끔한 방법으로 처리하기 위해 등장했습니다. 나온지는 꽤 오래되었지만, 갈 수록 중요한 변환점을 찍은 모듈로 지속적으로 언급되고 있습니다.

원래 PLY는 파이썬에서 lex/yacc를 지원하기 위한 파서 제너레이터인데, python4ply는 PLY에서 파이썬을 파싱하고 그걸로 파이썬 바이트코드를 생성해서 직접 파이썬 코드 파싱/컴파일을 만들었기 때문에 그 부분을 직접 조절할 수 있도록 했습니다.

예를 들면 튜토리얼에서 예제로 들고 있는 것에서 이런 문법도 보여주고 있습니다.

# 2진법으로 끊어쓰기 amount = 0b1_0011_0001_0010_1101_0000_0001 print "You owe me", amount, "dollars"

# 펄식 정규식 연산자 for line in open("nucleosome.pdb"): if line =~ m/(ATOM |HETATM)/: count += 1

파싱과 컴파일을 모두 건드리고 있으니 문법은 원한다면 얼마든지 바꿀 수 있는데, python4ply는 소스 구조도 아주 깔끔하게 잘 정리되어 있는 편이라, DSL을 만들어야 하는 상황이라면 언제나 유용하게 쓸 수 있을 듯 합니다.

사실 python4ply가 나온 이후로 python-dev 메일링에 누군가 새로운 문법 뭔가 좀 넣어달라, 또는 파이썬 3에 2.x호환성 좀 넣어달라 요청만 올라오면 python4ply URL을 누군가 덥썩 던져주고서는 그 다음부터는 무시하는 분위기가 됐지요. :> 누구나 어렵지 않게 할 수 있을 거라고 생각하고 있던거지만, 실제로 구현이 되고나니 영향을 꽤 많이 미치고 있는게 역시 가능하다고 생각만 하고 있는 것과 실제 구현체가 나온 것은 영향력이 차이가 좀 있군요.

댓글 1 개 | 트랙백 0 개 (보낼곳) | 태그 python


블로그 프로그램을 바꾸었어요~

처음 pyblosxom으로 블로그를 시작했던 게 벌써 5년 전인데, 그 후에 Zope 기반인 COREBlog로 바꿨다가, 오늘 드디어 시대의 주류 Django로 갈아탔습니다. 으흣. 항상 비주류 도구를 쓰다가, Markdown같은 호사스러움도 누려보고 기분이 상큼하네요. ^_^;

블로그 애플리케이션

이번 블로그 프로그램은 Blogmaker라는 Django프로그램을 가지고 다른 사람이 수정한 Trespams를 다시 수정해서 사용했습니다. 최근 댓글 목록이나, 댓글 양식같은 기존 부분을 가급적이면 그대로 유지하려다보니 수정한 부분이 많이 있었구요. 이번에는 django도 이제 주류이니 저변을 좀 더 넓혀보자는 의미에서 제 블로그를 돌리고 있는 그대로 소스를 공개합니다. 누구든 받으시면 똑같이 오픈룩을 하나 돌리실 수 있게 -ㅇ-;; 수정한 부분을 구분하기 위해서 수정을 많이 했다는 의미에서 이름은 "수정"입니다. 역사 속의 블로그 프로그램 soojung과 혼동을 막으려고 sujung으로 씁니다 --; (소스 다운로드는 mercurial 깔으시고 hg clone http://openlook.org:20311/ sujung 하시면 됩니다. -- allieus님 감사!)

디자인

디자인은 제가 요새 감각이 날로 떨어지고 있어서 OSWD 에서 잘 나가는 템플릿 하나를 가져와서 적용했습니다. ^^;; 혹시나 디자인 하신 분 한글을 읽을 줄 안다면, 고마워요~ (;;)

그런데, 역시 우리말 사이트는 제가 꼭 지키고 싶은 두 가지 조건을 가지고는 MSIE에서 예쁘게 보이게 하는 것이 거의 불가능하더군요. (1) 그림 파일은 되도록 안 쓴다. (2) 글자는 11포인트 이상. 그래서 가급적이면 MSIE사용자분들은 그냥 RSS리더로 읽으시기 바랍니다(?);;;;;;;

블로그 외의 다른 내용

그 동안 "오픈룩에 뭔가 올라왔던 것 같은데 개똥도 약에 쓰려니 못 찾겠어요" 하는 분들을 많이 뵈어서, 받아갈 만한 뭔가가 있는 것들은 따로 페이지에 정리했습니다. 오래돼서 도움이 될 지는 모르겠지만 그래도 없는 것 보다는 낫기를.. 그리고 프로필도 업데이트 했습니다. ^_^;

기존 블로그 URL

전에 쓰던 COREBlog에서의 URL 중 다른 URL은 보존이 사실 좀 어렵고, 글에 대한 직접 링크는 모두 새 블로그로 리다이렉트 하도록 했습니다. 기존에 제 블로그에 링크하셨던 분들은 수정하지 않으셔도 그냥 연결됩니다.

댓글과 트랙백

Blogmaker는 스팸방지 장치를 몇 가지 도입하고 있는데, 댓글 쓰기 양식에서 안 보이는 상자나 단추를 누르시면 스패머로 등록돼서 그 다음부터는 같은 IP에서는 댓글을 못 쓰게 됩니다. (정상적인 웹 브라우저를 쓰신다면 그럴 일은 없습니다.) 그리고 트랙백은 반드시 트랙백 본문 안에 오픈룩 글의 URL이 일부 포함되어 있어야지만 받게 되어 있습니다만, 언급이 안 돼 있다고 스패머로 등록하지는 않으니 안심하시고 보내주세요~

버그를 발견하시면..

지금도 이 Django 프로그램은 디버그모드로 돌고 있으니 언제든 희한한 문제가 발견됐다 싶으시면 이 글 밑에 댓글로 달아주세요! :)

댓글 14 개 | 트랙백 0 개 (보낼곳) | 태그 openlook


생활 속의 프로그래밍

예전에 블로그에서 알려드린 적 있는 생활 속의 프로그래밍 동영상이 얼마 전에 올라왔습니다. 이미 보신 분도 계시겠지만, 기록의 의미로 여기도 하나 링크해 둡니다. :)

생활 속의 프로그래밍은 프로그래밍으로 먹고 사는 분들이 일상 생활에서 프로그래밍을 활용해서 재미도 있고 편하기도 하고 배울 것도 있는 여러 놀이를 떠올리는 계기가 되게 제가 그동안 오픈룩에서 썼던 여러 사례들을 소개해 드리는 세션이었습니다. 오픈마루 WoC 스노우캠프와 NHN 네이버토크에서 따로 2번 진행했었는데, 둘 다 비디오 촬영은 되었지만 오픈마루 WoC 것은 아직 공개되지 않았고, NHN 것이 얼마 전에 공개되었습니다.

화면이 잘 안 보이는 편이니, 발표자료를 따로 받아서 보시면 잘 보일 것 같습니다~

사실 제가 말이 좀 느리고 중언부언하는 경향이 있어서 3배속으로 보면 딱 맞을 것 같긴 한데, 아쉽게도 속도 조절은 못 하는군요 -ㅇ-;

댓글 6 개 | 트랙백 0 개 (보낼곳) | 태그 computer


오픈룩 복귀!

그동안 약 1달 10일 정도 서버가 죽어 있었는데, 오늘 티이님의 도움으로 서버 복구가 끝났습니다. ^_^

한 동안 블로그에 글을 못 쓰니까 막 글 쓰고 싶어서 근질근질 했었는데 막상 열리니 쓸 게 없네요 -ㅇ-;;; 조만간 재미있는 글 많이 올리도록 할게요~ :)

댓글 13 개 | 트랙백 0 개 (보낼곳) | 태그 openlook