2017년 12월 18일 월요일

독서 기록 - 통계의 힘(니시우치 히로무 지음/신현호 옮김)

2014년 12월에 구입해서 거의 다 읽었다가 마지막에 집중력이 흐려져서 독서를 마무리하지 못했던 책을 다시 붙들고 처음부터 꼼꼼하게 읽었다. 책의 정식 제목은 '통계의 힘'이지만 부제를 붙이면 '빅테이터를 지배하는 통계의 힘'이다. 요즘은 AI(인공지능)·4차 산업혁명에 약간 가리워진 느낌이 없지는 않으나 방대한 데이터로부터 의미를 추출하는 과정에서 통계의 중요성은 말할 나위가 없다.


이 책은 통계학 입문서나 교재가 절대로 아니다. 일반 독자에게 통계한 이런 것임을 보여주기 위한 교양 서적이다. 그럼에도 불구하고 회귀분석, 일반화 선형모델(generalized linear model), 빈도론자와 베이즈론자의 대립 등 그동안 피상적으로만 이해했던 중요한 개념들을 알기 쉽게 설명하였다. 특히 현대 통계학의 기반을 마련한 로널드 피셔와 그의 유명한 밀크티 일화가 소개되어 흥미를 돋우고 있다. 밀크티를 만들 때 홍차에 우유를 넣었는지, 혹은 그 반대로 우유에 홍차를 넣었는지를 정확하게 알아맞힌다는 어떤 부인의 주장을 검증하기 위하여 피셔는 세계 최초의 임의화 비교실험을 수립하였다. 그 과정은 피셔가 1935년에 쓴 책 <실험계획법(The Design of Experiments)>에 잘 소개되었다고 한다. 피셔는 비료가 작물의 생산성이 효과를 주는지를 알아보기 위하여 경작지를 어떻게 구획하고 각각 어떻게 처리를 해야 하는지를 상세하게 연구하였다고 한다. 말하자면 현대 통계학은 생물통계학의 역사와 그 뿌리가 같은 셈이다. 통계학이 먼저 확립되고 난 다음에 생물학 분야에 적용된 것이 아니라는 뜻이다.

55쪽의 도표 5에서는 빅데이터 관련 전문용어를 설명하고 있는데, 맨 마지막 칸에 보인 R언어에 대한 설명이 재미있다. '오픈소스의 통계해석용 언어'. 유료 소프트웨어를 살 수 없는 비교적 가난한 학자들이 사용하는 언어인데, 최근 갑자기 주목을 받고 있다. 엑사데이터나 그린플럼, 나아가 SPSS로부터도 직접 R 라이이브러리를 호출할 수 있게 되었다.'

이 책의 결론은 다음의 도표 한 장으로 나타낼 수 있다. 설명변수가 몇개인지 여부에 상관없이 일반화 선형모델을 사용하여 (거의) 모든 통계적 분석을 감당할 수 있다는 것이다.


문맹(文盲)보다 더 무서운 것이 통계맹이라는 말도 있다. 요즘은 새로운 주장을 하기 위한 근거로서 여러 수치 자료를 제시하는 경우가 많은데, 통계학적 관점에서 볼 때 오류가 있거나 심지어는 의도적으로 자료의 의미를 왜곡하는 일이 벌어지고는 한다. 오죽하면 '세상에는 두 가지 거짓말이 있으니 하나는 새빨간 거짓말이요, 나머지는 통계'라는 말까지 있지 않은가. 통계는 정확히 쓰여야 하고 어떤 주장을 일방적으로 지지하기 위한 목적으로 악용되어서도 안된다. 또한 단순한 집계와 통계를 구별할 줄 알아야만 한다. 수학적 리터러시(literacy - 읽고 쓰는 능력 또는 특정 분야의 지식), 특히 통계 리터러시가 있어야 이러한 근거를 이용한 잘못된 주장을 제대로 파악하고 대처할 수 있는 것이다.

데이터가 말하려는 것은 무엇인가? 이것을 정확하게 파악하는 것이 통계학의 중요한 목표 중 하나라고 본다. 데이터가 말하는 바를 귀담아 듣고 판단을 내리는 것은 결코 쉬운 노릇은 아니다. 그래서인지 지금은 이 과정 자체를 AI가 하도록 내버려 두는 것 같다. 가까운 예로 각종 인터넷 구매 사이트에서 내 구매 성향을 파악하여 쇼핑할 거리를 제안하는 서비스가 그렇다. 이렇게 판단 자체를 인공지능에 맡기고 남는 시간에는 더 가치있는 일을 하겠다는 멋진 전제와 함께 말이다. 그런데 과연 미래는 커즈와일이 예측한 대로 그렇게 장미빛으로만 돌아갈까? 최근에 읽은 소설 <밈:언어가 사라진 세상>(독후감은 곧 블로그에 쓸 예정)과 니콜라스 G. 카의 주장(IT doesn't matter (2003) - 하바드 비즈니스 리뷰, 2016년 블로터의 논평; 2014년 <유리 감옥, 자동화와 우리> 출간 직후의 인터뷰)을 보면 걱정이 밀려온다.
이 책(유리 감옥)은 소프트웨어 개발자를 포함 많은 직종이 '디스킬(Deskill, 일을 처리하는데 필요한 숙련도 수준이 낮아짐)' 될 수 있다고 경고한다. 업무 프로세스의 상당 부분이 기계로 넘어간다는 이유에서다.
그렇다고 러다이트(Luddites, 신기술 반대자)를 옹호하는 책은 아니다. 이보다는 우리를 대체할 시스템이 초래할 결과와 파장을 훌륭히 탐구하고 있는 책이다. 연방 항공청(FAA)의 항공 자동화에 대한 경고, 전자 의료 기록이 초래할 수 있는 비용 상승과 건강 악영향 등에서 카가 우려하는 부분을 확인할 수 있다.

통계학 자체는 가치 중립적인 도구이다. 이 점은 명심해야 한다. 통계적 결론을 악용하는 것, 그리고 최종 판단을 내리는 주체 역할을 하지 않으려는 것, 이 두가지를 경계해야 할 것이다.

Statistics for Biologists

과학잡지 Nature에서는 생물학자를 위한 통계학 정보 콜렉션을 운영한다.


Statistics in biology, practical guides, points of significants 및 other resources로 구성되어 있으니 통계학 입문서 단행본을 읽다가 지루해지면 종종 방문해 보도록 하자.

2017년 12월 15일 금요일

DataCamp의 온라인 데이터 과학 강좌

해들리 위컴의 강의를 온라인으로 들으라고? R 관련 강좌를 웹에서 둘러보다가 DataCamp라는 곳을 발견했다. R, python, ggplot2, machine learning 등 총 98개의 강좌가 서비스되는 중이다. 한 달에 29 달러를 내면 모든 강좌를 무제한으로 수강할 수 있으며, 연 단위로 결제하면 한 달에 25달러로 할인이 적용된다. 영어 수강에 자신이 있다면 충분히 들을 만한 강좌가 아닐까 한다.


늘어나는 데이터 과학자의 수요에 맞춘 유용한 서비스라고 생각된다.

대표적인 MOOC 서비스로 잘 알려진 Coursera에서도 데이터 과학 분야 아래에 data analysis, machine learning 및 probability & statistics 소분야로 나누어서 261개 강좌를 서비스한다. 존스홉킨스대에서는 Coursera 내에 총 10개 강좌로 구성된 Data Science Specialization를 제공한다.

MOOC에 대해서는 2015년 내 블로그에 작성한 글이 있다.

UST 교수법 워크숍을 다녀와서 - MOOC와 Flipped learning

한국형 MOOC를 표방하는 K-MOOC에서도 비슷한 성격의 강좌를 다수 서비스한다. 2015년 10개 대학이 참여하여 27개 강좌로 시작하여 2017년 12월 현재 개설된 강좌는 총 570개로 꽤 큰 규모로 성장하였다. Coursera는 2,000개가 넘는 강좌를 제공하고 있다. K-MOOC의 강좌 분류는 Coursera와 약간 달라서 '데이터 과학'과 같이 트렌디한 분류명은 없다.


데이터 과학에 해당하는 K-MOOC의 강좌는 어떤 대분야에 속해 있을까? 몇 가지를 조사해 보았다. 생각보다 다양한 대분야로 분산된 모습을 볼 수 있다.

  • [A.I. Series] R을 이용한 통계학개론 -> 자연
  • Machine learning for data science -> 공학
  • 인공지능 및 기계학습 -> 공학
  • 빅데이터의 세계, 원리와 응용 -> 사회과학
  • 빅데이터 첫걸음 -> 공학
  • 통계학의 이해 -> 자연
  • 데이터 과학을 위한 Python 입문 -> 공학
  • 바이오헬스 빅데이터 마이닝 -> 인문과학
  • 텍스트 마이닝 실전 및 분석 -> 공학
이제는 학교나 학원에 다니지 않고서도 이렇게 학습을 할 수 있는 기회가 널리 제공되고 있으니 기초 통계학이나 스크립트 언어 사용법을 배울 기회가 없었다고 변명을 하기는 점점 곤란해질 것이다. 앞으로 KOBIC의 차세대생명정보강좌에서도 이러한 점을 감안해야 할 것이다. 그리고 기존에 IT나 통계 실무 분야에서 교육 서비스를 제공하던 회사와의 상생 방안도 마련되어야 할 것으로 보인다.

2017년 12월 14일 목요일

[하루에 한 R] 매트릭스에서 특정 값을 갖는 row 추출하기

[작성 후 추가한 글] 제목이 잘못되었다. 엄밀히 말해서 매트릭스가 아니라 데이터프레임이다.

해들리 위컴(Hardley Wickham)은 뉴질랜드의 통계학자 및 데이터 사이언티스트이자 저명한 R 개발자이다. RStudio의 Chief Scientist이기도 한 그는 ggplot2(), dplyr 등 데이터 처리와 시각화에 탁월한 R 패키지를 다수 개발하였고 활발한 저술과 강연활동도 펼치고 있다. 그가 개발한 패키지들은 GitHub 사이트에서 볼 수 있다. Quora에는 이런 질문도 있었다. '어떻게 해들리 위컴은 패키지 개발을 통해 그렇게 R에 많이 기여할 수 있었나요?'

이 질문에 대해서 위컴 자신이 답을 달았다. 다른 사람이 쓴 답이 무슨 소용이 있으랴.

  • 나는 많이 씁니다. 침대에서 일어나자마자 매일 아침 60-90분 정도를 씁니다(코드? 아티클?)
  • 나는 많이 읽습니다. 300개 정도의 블로그를 팔로우하고, 트위터와 스택 오버플로우에서 R이라는 태그가 달린 글을 계속 봅니다. 물론 모든 글을 깊이있게 읽지는 못하고 훑어보는 수준이지만 나에게 큰 도움이 됩니다.
  • Chunking(덩이 짓기?). '컨텍스트 스위칭'은 비용이 많이 듭니다(여기에서 context switching이란 소프트웨어 개발에 관한 용어가 아니라 어떤 일을 하다가 다른 일로 전환하는 것을 의미하는 것으로 보인다). 동시에 여러 패키지를 작업하면 아무것도 되지 않습니다. 새로운 기능에 대한 문제점과 아이디어를 꾸준히 축적하고 있다가 임계 질량에 다다르면 이 패키지에 며칠을 보내는 식으로 일을 합니다.
한마디로 말해서 참 멋진 사람이다. dplyr 패키지에 대한 국문 소개는 양우성님의 웹사이트를 참조하면 좋다. 내가 여기까지 흘러들어오게 된 것은 인하대 유동현 교수님 덕분이다.

오늘은 데이터프레임에서 특정 조건에 맞는 행을 뽑아오는 방법에 대해 공부해 보려고 한다. 숫자를 가지고 조건에 맞는 행을 뽑는 것이 아니라, 캐릭터 값을 가지고 일을 하려는 것이다. 몇 천 유전자에 대한 blast 결과를 테이블로 출력하여 R로 읽어들여 데이터프레임으로 만든 다음 내가 관심을 갖고 있는 몇십, 혹은 몇백개의 유전자에 해당하는 hit row를 쏙 빼내려는 것이다. Genes of interest는 별도의 벡터에 저장된 상태라고 가정하자. Perl에서는 hash를 사용하여 if (exists $seen{$item}) {...}으로 늘 하던 일이다. 여담이지만 내가 Perl애소 이 기법을 처음 접한 것은 phred/phrap/consed 패키지의 phredPhrap 스크립트를 뜯어보면서였다.

dplyr 패키지를 쓰면 오늘 논하는 것을 포함하여 더욱 정교한 작업을 할 수 있을 것이다. 그러나 이 글을 작성하는 목적은 R base package의 기본 기능을 최대한 활용해 보자는 것이다. 핵심이 되는 것은 which() 함수와 %in% 연산자이다. 이 특수 연산자에 대한 도움말을 띄워 보자. 함수에 대한 도움말을 찾을 때만 help() 또는 ? 명령어를 쓰라는 법은 없다.
> ?"%in%"   # 또는 help("%in%")
a %in% b라고 입력하면 a 벡터의 모든 원소에 대해서 이 값이 b 벡터에도 존재하는지를 TRUE or FALSE로 출력하는 것이다. 실제 사례를 보자.
> a = c("A","B","C","D","E")
> b = c("C","D","E","F","G")
> a %in% b
[1] FALSE FALSE  TRUE  TRUE  TRUE
which() 함수를 이용하면 a 벡터의 원소 중 b에도 있는 것, 그리고 a에만 있는 것을 다음과 같이 출력할 수 있다.
> a[which(a %in% b)]
[1] "C" "D" "E"
> a[-which(a %in% b)]
[1] "A" "B"
벡터에 대하여 방법을 알아보았으니 어제 글에서 활용한 샘플, 즉 blast 결과 파일을 파싱한 데이터프레임에 대해서 이 일을 해 보자. 'd'라고 명명한 데이터프레임의 구조는 다음과 같다. head() 함수를 이용하여 앞부분만 발췌하였다.


추출할 유전자는 벡터 e(for extract)에 넣어두었다. 몇 개 되지 않으면 손으로 입력해도 되지만, 그 수가 많다면 파일로부터 읽어들이는 것이 현명할 것이다.
> e
[1] "BfmR" "CsuB" "PgaB" "EntA" "PlcD"
d$V1 컬럼의 값 중 e 벡터에 존재하는 것을 찾아서 그 row를 추출하면 된다. 코드는 다음의 한 줄이다.
> d[which(d$V1 %in% e), ]
실제 실행 화면을 보자.


너무나 간단해서 내가 다 미안할 지경이다. 다음에는 데이터프레임의 row 혹은 column을 그룹 단위로 조작하는 방법에 대해서 공부해 보련다.

2017년 12월 13일 수요일

독서 기록 - 1코노미 외 4 권


1코노미(부제: 1인 가구가 만드는 비즈니스 트렌드)

이준영 지음. 1인 가구가 보편화하면서 나타날 새로운 비즈니스 기회에 대하여 쓴 책이다. 나는 이에 대해서는 다소 부정적이다. 1인 가구 구매력의 국가적 총합은 과연 과거 다인 가구의 그것을 월등히 초과할 수 있을까? 주택 구매나 육아 및 교육에 돈을 쓰지 않으니 '나'를 위해서 더 많은 지출을 할 수 있을까? 인구가 줄면 경제 전반에 활력이 떨어지고 소득 자체가 늘어나기 힘들다. 더군다나 사회 구성원이 재생산되지 않음으로 인해 획기적인 경제 체질 개선이 일어나지 않으면 더욱 밝은 전망을 하기 어렵다. 1인 가구가 늘어나는 것은 자발적인 선택도 있지만 가정을 꾸릴 경제적 여건이 되지 못하여 불가피하게 이를 선택하는 면도 있다. 이러한 현상을 골고로 고려하지 않고 지나치게 낙관적으로 쓴 책이라는 생각이 들었다. 그리고 지나치게 많은 신조어를 소개함으로써 책을 읽는 것이 아니라 인터넷 기사를 넘기는 느낌이었다.

고독력, 관태기(관계권태기), 자뻑, 포미족, 탕진잼, 0.5가구, 혼행, DD(Do not Disturb족), 혼놀족...

커피가 죄가 되지 않는 101가지 이유

로잔느 산토스, 다르시 리마 지음. 김정운 옮김. 커피(카페인)만큼 건강에 미치는 긍정적 효과와 부정적 효과에 대한 상반되는 연구 결과가 꾸준히 발표되는 기호식품도 없을 것이다. 커피 수십 잔 분량에 해당하는 카페인을 갑자기 섭취하면 당연히 좋을 리가 없다. 카페인은 인체에 가벼운 흥분을 일으키는 물질임은 분명하지만, 커피에는 폴리페놀의 일종인 클로로겐산(chlorogenic acid) 등 유익한 성분은 더욱 많다. 커피 원산지의 농부들이 과연 합당한 노동의 댓가를 받고 있는지는 좀 더 고민해 봐야 되겠지만, 커피를 마시는 것이 그들에게 도움이 됨은 분명하다. 즐겨 마시자! 단, 탄산음료나 에너지 드링크 등에 합성 카페인을 지나치게 많이 넣는 것은 법으로 규제를 하면 좋겠다.

어떤 경제를 만들 것인가(지금의 시대정신은 '행복한 경제 만들기'다)

김동열 지음. 34개 OECD 회원국 중 우리나라 국민의 행복감은 꼴찌 수준이다. 경제 규모는 세계 11위 수준이라고 하지만 고용 불안, 노후 불안, 소득 불평등이 우리를 짓누르고 있다. 한국 경제가 추구해야할 새로운 모델을 알아본 책이다. 이에 대한 방안으로서 통일 대비, 한일 FTA, 연금의 확충, 주택연금,세금 마일리지 등을 예로 들었다.

정서적 협박에서 벗어나라(부제: 내 마음을 옭아매는 영혼의 감옥)

저우무쯔 지음, 하은지 옮김. '네가 어떻게 나한테 이럴 수 있어!' 가장 가까운 사이에서 오히려 흔한 정서적 협박은 개인을 파멸에 이르게 한다. 일단 그 상황을 벗어나고, 거절할 줄 알아야 한다. 호의를 마땅한 권리라고 여기는 사람들에게 정서적 경계선을 세우고 단호하게 대해야 한다.

리얼리스트를 위한 유토피아 플랜(부제: 우리가 바라는 세상을 현실에서 만드는 법)

뤼트허르 브레흐만 지음, 안기순 옮김. 단연코 이번 독서의 하이라이트, 먼저 지난 10월 한겨레 신문 인터뷰 기사를 보자("주 15시간 일한다는 게 왜 비현실적인 거죠?"). 1988년 생으로 이제 서른살도 안된 젊은이가 그동안 우리가 굳건하게 믿어왔던 자본주의의 토대 - 가난은 나태·노력 부족에서 기인한다 - 를 허무는 급진적인 주장을 한다면 우리 사회에서는 이를 과연 받아들일까? 인류가 경험한 많은 실험 사례에서 기본 소득은 충분히 긍정적 효과가 있음이 입증되었다. '돈을 이리저리 옮기면서' 돈을 버는 금융 부문은 과감히 개혁하고, 노동 시간을 줄이고, 가치 있는 직업을 갖도록 노력하고, 기본 소득 지급을 통해서 현실 세계에서의 유토피아에 다가갈 수 있을 것으로 저자는 내다보고 있다. 다시 한번 더 읽고 싶은 책이다.

[하루에 한 R] BLAST tabular output에서 best hit 뽑아내기

BLAST+(최신 버전)가 완전히 정착된 것이 언제인데 나는 아직도 'legacy' BLAST(v2.2.26)를 즐겨 사용한다. blastall 커맨드 라인 사용법에 너무나 길들여져 있기 때문이다. BLAST+의 옵션 설명서를 인쇄하여 책상 앞에다 붙여놓아야 겨우 익숙해질까?

예전, 하지만 그렇게 오래 전도 아니던 시절, 미생물 유전체의 functional annotation을 하려면 Swiss-Prot이나 NCBI NR 데이터베이스를 로컬 컴퓨터에 받은 다음 수천 개의 query를 blastp로 날리는 일을 수시로 했었다. 요즘은 RAST server에 올려 버리거나, 로컬 머신을 쓴다 하여도 Prokka를 쓰면 단 몇 분에 해결이 되이 큰 용량의 공개 단백질 서열 DB에 대해서 BLAST를 직접 돌릴 일이 많지 않다. 또 그럴 일이 있으면 유료 서비스에 가입한 Blast2GO에서 검색을 수행하면 된다.

그래도 간혹 연구 목적을 위해 특별한 목적으로 만든 서열 데이터베이스에 대해서 BLAST를 실행할 일이 있다. 그 결과물을 파싱하는 프로그램을 직접 구현하는 것이 예전에는 매우 보편적인 생명정보학 실습 과제이기도 했다. 누가 그랬더라? 이제 제발 그런 거 하지 말라고...

사람의 눈으로만 보기 편한 BLAST 결과물을 컴퓨터에게 읽히려고 하니 프로그래밍으로 처리하기에 얼마나 불편하겠는가? 사실 내가 tabular output format(blastall -m 8 또는 -m 9; BLAST+에서는 -outfmt 6)에 관심을 가진 것도 얼마 되지 않았다. 이를 엑셀로 불러들이면 완벽하지는 않더라도 대량의 결과를 처리하기에 좋으니까 말이다. 엑셀의 귀재라면 각 query에 대한 hit 중에서 best를 골라내는 방법을 함수로 구현할 수 있을지도 모른다.

R을 사용하면 BLAST의 tabular format output으로부터 각 query에 대한 best hit을 쉽게 뽑을 수 있을 것이라는 생각을 오랫동안 하고 있었다. 사실 R 환경 자체에서 BLAST를 실행할 수 있는 rBLAST라는 패키지가 있으니 이 환경 안에서 best hit을 찾을 수 있을 것이고 또 더 검색을 해 보면 다른 도구가 있을 것이다. 범위를 좀 더 넓힌다면 reciprocal best hit을 찾아주는 유틸리티도 있을 것이다. 하지만 나는 좀 더 '하등한' 수준의 해결 방법을 알고 싶었다.

[SEQanswers] How to output only best-hit result using standalone blast <= 심지어 sort 명령어를 사용한 방법도 있다. one-liner를 즐기는 사람에게는 좋은 소일거리가 될 것이다.

그러면 본론으로 들어가서, blastall -m 9(tabular with comment lines; #으로 시작) 명령으로 작성한 결과물을 R에서 읽어들여서 best hit을 찾는 방법을 공부해 보자. 예전에 마이크로어레이 자료 분석을 공부하면서 control spot 때문에 한 유전자에 대한 형광 측정값이 여럿 존재하는 경우 이것의 median 값을 취하도록 R 코드를 짰던 것 같은데 도저히 기억이 나질 않는다. 아마 apply() 혹은 by() 계열의 함수를 쓰지 않았었나 생각한다.

그런데 구글링을 계속 해 보니 base R만을 이용한 아주 원초적인 방법을 제시한 글이 있어서 소개하고자 한다. 이 안에는 외부 패키지와 함수를 이용한 복잡한 방법도 포함되어 있다. 공부를 위해서 나머지 방법도 따라서 해 보아야 한다.

[Stack Overflow] Extract the maximum value within each group in a dataframe

blastall -m 9 옵션을 사용하여 출력 파일(tblastn.m9,.txt)을 만든 뒤 각 query에 대한 best hit을 뽑아보자.
> d = read.table("tblastn.m9.txt",sep="\t",comment.char="#",header=F)
> d
             V1   V2     V3  V4 V5 V6  V7  V8   V9  V10      V11    V12
1          BfmR bfmR 100.00 238  0  0   1 238    1  714 8.0e-156  423.0
2          BfmR bfmS  30.56  36 25  0  21  56 1437 1330  2.3e-01   22.3
3          BfmS bfmS  99.82 549  1  0   1 549    1 1647  0.0e+00 1083.0
4          BfmS bfmS  27.78  54 39  1 133 186  658  533  7.1e+00   18.9
5          BfmS  nfu  38.46  13  8  0 117 129  442  480  8.1e+00   18.5
6          CsuA csuA 100.00 192  0  0   1 192    1  576 2.0e-129  353.0
7          CsuA csuE  43.75  16  9  0 177 192  970 1017  4.5e-01   20.8
8          CsuB csuB 100.00 172  0  0   1 172    1  516 4.0e-114  312.0
...중간 생략
> do.call(rbind, lapply(split(d,d$V1), function(x) {return(x[which.max(x$V12),])}))
                       V1   V2     V3  V4 V5 V6 V7  V8 V9  V10    V11  V12
BfmR                 BfmR bfmR 100.00 238  0  0  1 238  1  714 8e-156  423
BfmS                 BfmS bfmS  99.82 549  1  0  1 549  1 1647  0e+00 1083
CsuA                 CsuA csuA 100.00 192  0  0  1 192  1  576 2e-129  353
CsuB                 CsuB csuB 100.00 172  0  0  1 172  1  516 4e-114  312
CsuC                 CsuC csuC 100.00 277  0  0  1 277  1  831  0e+00  568
CsuD                 CsuD csuD 100.00 832  0  0  1 832  1 2496  0e+00 1650
CsuE                 CsuE csuE 100.00 339  0  0  1 339  1 1017  0e+00  666
EntA                 EntA entA 100.00 256  0  0  1 256  1  768  0e+00  502
EpsA                 EpsA epsA  99.73 366  1  0  1 366  1 1098  0e+00  727
NfuA                 NfuA  nfu 100.00 212  0  0  1 212  1  636 2e-162  438
OmpA_partial OmpA_partial ompA 100.00 315  0  0  1 315  1  945  0e+00  592
pgaA                 pgaA pgaA 100.00 747  0  0  1 747  1 2241  0e+00 1544
PgaB                 PgaB pgaB  99.80 510  1  0  1 510  1 1530  0e+00  980
PgaC                 PgaC pgaC 100.00 392  0  0  1 392  1 1176  0e+00  805
PgaD                 PgaD pgaD 100.00 154  0  0  1 154  1  462 6e-101  278
PlcD                 PlcD plcD 100.00 487  0  0  1 487  1 1461  0e+00 1018
Ptk                   Ptk  ptk 100.00 727  0  0  1 727  1 2181  0e+00 1372
V1(query)의 값이 동일한 hit group에 대해서 V12(bit score)가 최대인 것을 출력하는 것이다. 어떻게 이보다 더 간단명료할 수 있겠는가?

[하루에 한 R] order() 함수의 이해

어떤 벡터가 있을 때 sort() 함수를 적용하면 그 원소들을 다음과 같이 오름차순으로 정리하여 출력한다. 내림차순으로 정동하고 싶으면 decreasing=T를 설정하면 된다.
> x = c(1,5,3,2,4)
> sort(x)
[1] 1 2 3 4 5
order() 함수는 벡터의 원소를 이 인덱스 번호순으로 놓으면 값이 정렬된다는 것을 의미한다. Character 타입의 벡터를 사용하여 설명하는 것이 이해하기 쉬울 것이다. 이를 이해한다면 아래에서 보인 마지막 명령이 무엇을 뜻하는지도 납득할 수 있다.
> y = c("a","c","e","b","c")
> sort(y)
[1] "a" "b" "c" "c" "e"
> order(y)
[1] 1 4 2 5 3ㅁㄴㅇ
> y[order(y)]
[1] "a" "b" "c" "c" "e"
order(y)를 사용하여 알 수 있는 것은 벡터 y의 원소를 값에 따라서 순서대로 나열하려면 첫번째, 네번째, 두번째, 다섯번째, 그리고 세번째 원소의 순서대로 놓으면 된다는 것이다.

order() 함수를 이용하면 행이나 열을 name에 따라서 정렬하는 것도 가능하다. 연습용 4x3 매트릭스를 만들고 colnames()로 각 열에 이름을 붙인 뒤 이것에 따라서 컬럼을 정렬하는 연습을 해 본다. 컬럼의 위치만 바뀔 뿐 각 컬럼 내의 값은 원래의 행 번호를 그대로 지킨다.
> z =  matrix(c(4:1,12:9,5:8),4,3)
> z
     [,1] [,2] [,3]
[1,]    4   12    5
[2,]    3   11    6
[3,]    2   10    7
[4,]    1    9    8
> colnames(z) = c("A","C","B")
> z
     A  C B
[1,] 4 12 5
[2,] 3 11 6
[3,] 2 10 7
[4,] 1  9 8
> z[, order(colnames(z))]
     A B  C
[1,] 4 5 12
[2,] 3 6 11
[3,] 2 7 10
[4,] 1 8  9
apply()와 join() 계열의 함수를 잘 써야 하는데... 아직도 멀었다!

2017년 12월 12일 화요일

Pseudomolecule을 만들 때 사용할 space sequence

Pseudomolecule 혹은 pseudo-molecule이란 contig sequence의 사이에 적당한 spacer sequence를 넣어서 이어 붙인(concatenation) 염기서열을 말한다. 말하자면 가상의 염색체에 해당하는 염기서열인 셈이다. Contig들의 연결 순서는 reference sequence와 비교했거나 혹은 pair end sequencing read의 alignment를 이용하여 사실에 가깝게 결정해 놓은 다음 연결하는 것이 가장 바람직할 것이다. Spacer의 길이는 실제 sequence gap을 반영하도록 설계하면 더 좋을 것이다. 그러나 항상 이러한 행운이 따르는 것은 아니라서, 연결 정보가 마련되지 않은 contig 서열을 그냥 이어 붙이는 경우도 종종 있다. Contig의 순서는 어떻게 할 것인가? 특별히 따라야 할 규칙은 없지만 가장 긴 서열을 앞에 오도록 정렬한 다음 붙이기도 한다.

가장 바람직한 spacer sequence는 무엇일까? 이것에 대해서 특별히 심각하게 생각해 본 일은 없다. Pseudomolecule이 필요할 때 그저 50~100개 정도의 N을 삽입하여 연결하는 것이 다반사였다. 하지만 컴퓨터를 이용하여 pseudomolecule로부터 gene prediction을 하게 되면 spacer를 내부에 갖는 무의미한 유전자가 예측될 수도 있다.

논문을 읽다가 6개 프레임 전부에서 stop codon을 만나게 되는 36-bp 서열을 spacer sequence로 쓴 사례를 보게 되었다. 대단히 현명하다. 이렇게 pseudomolecule을 만들면 최소한 spacer를 사이에 두고 양 contig를 가로지르는 무의미한 유전자는 나타나지 않을 것이다. 이 방법을 인용한 다른 논문도 최소한 두 편을 확인하였다(아르헨티나 국적의 동일 저자 논문임).
The contig sequences of each strain were concatenated with the sequences NNNNNCACACACTTAATTAATTAAGTGTGTGNNNNN, which puts stop codons in all six reading frames...
[출처] Pyrosequencing-based comparative genome analysis of the nosocomial pathogen Enterococcus faecium and identification of a large transferable pathogenicity island. BMC Genomics 2010 11:239 https://doi.org/10.1186/1471-2164-11-239. Pan-genome 개념을 창시한 H. Tettlin이 이 논문의 공저자이다.

하지만 실제로 해당 genome에 존재하지 않는 서열을 spacer sequence로 사용한다는 점이 약간 불편하다. N을 제외한 중간 염기서열(palindromic 26 bp)을 NCBI BLAST site에서 검색해 보았다. DB는 RefSeq Genome으로 택하였다. 이 서열과 100% 동일한 것을 보유한 genome이 54개였고, Cronobacter의 어느 스트레인을 시퀀싱한 것에는 여러 차례 출현한다. 이 서열을 spacer로 사용하여 이어 붙인 pseudomolecule을 NCBI에 등록했을 가능성이 크다. 실제로 하나를 클릭하여 GenBank record에서 match가 일어나 서열을 보니 좌우에 N이 5개씩 존재한다.

대규모의 comparative genomic analysis를 하는 사람은 이것을 기억해 두는 것이 좋겠다.

2017년 12월 9일 토요일

어서와, 갤럭시 S6 엣지+는 처음이지?

3 년 동안 사용한 팬택 팝업노트에 이어서 이번에는 삼성 갤럭시 S6 엣지+(2015년 10월 2일 최초 통화)를 쓰게 되었다. 지인이 중고로 처분하려고 액정과 배터리를 교체하여 놓은 것을 호의로 그냥 얻게 된 것이다. 이것은 LG U+용 단말기이지만 최근의 모델들은 타 통신사의 유심을 꽂아도 된다는 정보를 확인하였기에 별 주저함이 없었다. 주말 외출하러 나가는 길에 동네 휴대폰 판매점에 들러서 팝업노트에 사용하던 SKT용 유심을 잘라서 꽂았다. 재부팅을 하는 것으로 완벽하게 작동이 되었다.



내가 처음으로 접한 삼성 갤럭시는 아래에서 보인 갤럭시A(SHW-M100S, 2011년 8월 제조)이다. 2013년에 중고나라에서 구입하여 잠시 사용한 일이 있다. 오른쪽은 오늘 젤리 케이스를 끼운 갤럭시 S6 엣지+. 제조연도는 고작 4 년밖에 차이가 나지 않지만 IT 기기에게 이는 엄청난 시간이 아닐 수 없다.

삼성 갤럭시A와 S6엣지+.
돌이켜보면 나는 휴대폰에는 그렇게 큰 투자를 하지 못했다. 공짜로 풀리는 기계나 출시된지 오래된 마이너 브랜드의 공기계를 구입하여 개통하여 쓰는 것이 다반사였기에, 팬택 팝업노트는 일종의 사치나 다를 바가 없었다. 그러다가 비록 중고이지만 한때는 플래그쉽 모델이었던 것을 처음 쓰게 된 셈이다.

팝업노트의 불편한 점은 회사가 완전히 몰락하면서 사후 서비스를 받을 길이 없다는 것이다. 아직 교체용 배터리는 구입이 가능하지만 안드로이드 버전을 업그레이드하는 것은 불가능하다. 그리고 카메라 모듈에 문제가 있다는 것을 초반에 미처 발견을 하지 못해서 한쪽 1/4 정도의 초점이 매우 불량한 사진을 찍어야만 했었다. 액정이 깨져서 사설 업체에서 수리를 한 일도 있었다.

이전 단말기에서 쓰던 앱들을 새로 설치하면서 공인인증서와 관련한 미스테리에 빠지고 말았다. 직장에서는 USB 보안이 매우 까다와서 공인인증서를 설치한 USB 메모리를 외부의 컴퓨터에 쓰는 것이 더욱 힘들어졌다(사실 바람직한 것은 아니다). 그래서 최근에는 휴대폰인증서비스인 유비키를 이용하여 공인인증서를 휴대폰에 담아서 쓰고 있었다. 우리나라 공인인증서 서비스의 문제점에 대해서는 너무나 잘 알려져 있으니 이 글에서 재차 강조하지는 않겠다. 월 990원의 요금이 나가는 것도 사실은 큰 불만이다. 앱 내 저장과 토큰(USIM) 저장은 또 무엇이 다른가?

나는 아직 스마트폰에서 은행 업무를 보지는 않는다. ISP/페이북을 이용하여 간혹 카드 결제는 하는 편이다. 이렇게 된 이유는, 휴대폰과 관련한 공인인증서 저장 시스템이 도대체 이해가 되지를 않기 때문이다. 유비키를 이용하여 휴대폰에 공인인증서를 재발급해 둔 것은 사실이나, 이것은 PC 뱅킹만을 위한 것 같다. 모바일 뱅킹용 앱인 KB스타뱅킹을 실행하면 저장된 인증서가 하나도 없다고 나온다.

  • 재발급을 받아야 하나?
  • 가져오기를 해야 하나? 어디서? PC에는 이미 없다.


그래서 새로 발급을 하면 되나 싶어서 해당 메뉴를 들어갔더니...


아휴, 이게 다 뭐란 말인가. 이중에서 뭘 써야 하나? 공인인증서가 아닌 것을 택하면 타행용 모바일 뱅킹 앱에서는 같이 쓰지 못할 것만 같다. 그러면 이렇게 발급받은 공인인증서는 유비키 앱과는 또 무슨 관계란 말인가? 도대체 뭘 이렇게 어렵게 만들어 놓은 것인지...

모바일 뱅킹 앱의 인증센터 기능을 이용하여 공인인증서를 만들어 보았다. 그랬더니 이젠 PC 뱅킹에서는 접속이 안된다. 폐기된 공인인증서라는 것이다. 도대체 이건 어떻게 되는 건지 알 수가 없다...

민감도와 특이도(sensitivity and specificity)

민감도(sensitivity)와 특이도(specificity)는 양성 또는 음성과 같이 두 가지 결과가 나오는 분류 방법(테스트 또는 검사 방법이라고 불러도 좋음)의 정확성을 평가하는 지표이다. 실제 상황에서는 양성이지만 검사 결과 음성으로 나오는 경우(위음성, false negative, FN)와 음성이지만 검사 결과 양성으로 나오는 경우(위양성, false positive, FP)가 있다. 따라서 검사 대상자는 다음과 같이 4 가지 구획 중 어느 하나에 놓이게 된다.

출처 http://blog.minitab.com/blog/the-statistics-of-science/getting-fit-and-proving-it

나는 이것을 조금 다른 방법으로 그림을 그려서 설명해 보고자 한다. 위의 그림같이 완벽한 2x2 매트릭스 그림으로 설명하는 것보다 나는 이게 더 마음에 든다. 인터넷을 아무리 뒤져보아도 이렇게 그림을 그려서 설명하는 사례는 본 적이 없었다.

어떤 도시에 신종 감염병이 유행하게 되었다. 이를 감별하기 위한 새로운 검사 방법이 개발되어서 그 정확성을 평가하려고 한다.


이 상황에서 민감도와 특이도를 계산하는 식은 다음과 같다. 원칙에 충식한 식이라서 내 그림 방식에서 수식이 달라질 일은 없다.

그러면 좋은 검사 방법과 나쁜 검사 방법의 실례를 내 방식의  그림을 이용하여 그려 보겠다.


가장 정확한 검사 방법은 E에 해당한다. 실제 병에 걸린 사람과 테스트 상으로 양성이 나온 집단이 거의 일치한다. 민감도와 특이도는 약 1이다. 가장 나쁜 검사 방법은 A이다. 실제 음성인 사람을 정반대인 양성으로 판정하는 것이다. 극단적인 결과, 즉 전 조사대상이 양성이라고 판정하는 경우(B)와 전체가 음성이라고 판정하는 경우(D)도 있을 수 있다.

만약 이 감염병이 대단히 위험한 병이라면, 과다 치료를 하는 문제가 있다 하더라도 민감도가 최대가 되는 테스트가 낫다. 심지어 검사를 하지도 않고 집단 전체에 다 치료제를 투여하는 것이 안전할 수도 있다. 통계학적 용어를 빌어서 말하자면 귀무가설(H0)은 '모든 시민은 이 감염병에 걸리지 않았다'임에도 불구하고 감염병에 걸린 것으로 간주하는(즉 대립가설 (H1)을 받아들임) 검사 방법을 택하는 것이 나을 수도 있다는 것이다. 즉, 제1종 오류가 좀 높은 검사 방법을 택하는 것도 가능하다는 것이다.

보통은 제1종 오류를 최소화하는 방법을 택하는 것이 정석이다. 형사 재판을 흔히 그 예로 든다. 즉 '피고인은 무죄다'라는 귀무가설이 옳음에도 불구하고 피고인에게 유죄 판결을 내리는 제1종 오류가 발생하는 일을 대단히 위험한 것으로 보는 것이다. 증거를 통해서 입증되기 전에는 피고인에게 죄가 없다는 기본 가정을 받아들이자는 것이다. 심각한 질환 여부를 검사하는 방법에 있어서는 제1종 오류보다는 제2종 오류, 즉 병이 있음에도 불구하고 정상으로 판정하는 상황을 더 위험한 것으로 간주하여 검사 시 유의 수준을 매우 높게 설정하는 것이 일반적인 가설의 검정과는 다르다. 밑줄을 친 부분은 내 독자적인 의견이 아니라 어느 자료에서 읽은 것인데 도대체 출처를 기억해내지 못하겠다.

민감도와 특이도 수치는 검사법 자체의 특징이 될 수 있다.

민감도가 유난히 높은 검사법이라면

  • 음성 판정을 받았다면 안심해도 좋다.
  • 양성으로 판정이 나왔다고 해도 너무 걱정은 하지 마라. 위양성(FP)으로 판정된 정상인일 수도 있으니까.

특이도가 유난히 높은 검사법이라면 

  • 양성 판정을 받았다면 진짜 환자일 가능성이 크다.
  • 테스트 결과 음성이라고 해도 너무 안심하지 마라. 위음성(FN)으로 판정된 진짜 환자일 수도 있으니까.
마지막으로... 민감도와 검출 한계(detection limit)는 분명히 다른 개념이다. 검출 한계는 얼마나 작은 신호값까지 잡아낼 수 있는지를 나타내는 지표이다.

오늘 블로그에 쓴 자료는 통계학자인 인하대학교 유동현 교수의 감수를 받은 것이다. 물론 유 교수는 제1종 오류를 범하는 위험성이 더 크다고 보았다. 

2017년 12월 8일 금요일

NCBI에 유전체 서열 올리다가 고생한 경험담

매번 미생물 monoisolate의 유전체 정보만 등록을 하다가 이번에는 동일 환경에서 분리된 두 종류의 미생물을 multiisolate로 등록하게 되었다. 이는 BioProject 등록 단계에서 multiisolate임을 지정하는 것으로 시작된다. 등록할 미생물 두 종은 어떤 곤충의 애벌레 장에서 분리한 것으로, PacBio RS II로 유전체 해독을 완성하였다. 미생물 한 종의 유전체는 완성된 염색체, 나머지 하나는 완성된 염색체와 플라스미드로 구성된 것이다.

등록 웹사이트에서 genome sequence를 올리면 파일 업로드가 끝난 후 자동으로 서열 ID를 보여주면서 어느 것이 염색체고 어느것이 플라스미드인지를 기입하라는 폼이 나온다. 그런데 이번에는 그런 것이 없이 그냥 지나가는가 싶더니 곧바로 에러 메시지가 뜨는 것이었다.

Error: ********.fna: File didn't pass validation for option 1 (non-wgs genomes)
Level    Message
ERROR    Location of sequence ''>chromosome\n'' is not defined
FATAL    Chromosome sequence was not found

Error: ********.fna: File didn't pass validation for option 1 (non-wgs genomes)
Level    Message
ERROR    Location of sequence ''>chromosome\n'' is not defined
ERROR    Location of sequence ''>plasmid\n'' is not defined
FATAL    Chromosome sequence was not found

이건 처음 보는 오류였다. 도무지 이해가 가지 않아서 genomes @ ncbi로 문의 이메일을 보냈다. 언제나 친절하게 문제를 해결해 주는 Leigh A. Riley 박사로부터 답장이 왔다.


웹사이트를 아무리 둘러봐도 IMPORTANT: Additional... 에 해당하는 링크는 보이지 않았다. 그러나 두번째 단락의 설명대로 업로드할 염기서열 FASTA file에 해당되는 정보를 넣으면 될 것 같았다. 예전에 tbl2asn으로 sequin(asn.1) 파일을 만들 때 많이 하던 일이다. 그래서 이 지시에 따라서 필요한 정보를 서열 description 라인에 삽입하여 수정한 파일을 다시 업로드하였다.

염색체는 이제 제대로 처리가 되기 시작하였다. 그런데 plasmid는 여전히 오류를 토해낸다.

ERROR: valid [SEQ_DESCR.BioSourceInconsistency] Plasmid location set but plasmid name missing. Add a plasmid source modifier with the plasmid name. Use unnamed if the name is not known. DESCRIPTOR: BioSrc: ******** BIOSEQ: gnl|NCBIFILE|SUB********/unnamed: raw, dna len= 70706

https://www.ncbi.nlm.nih.gov/sites/genbank/genome_validation 웹사이트를 참조해 보라고 나왔지만 여기에는 SEQ_DESCR.BioSourceInconsistency라는 메시지에 해당하는 설명이 없다. 나는 Leigh가 시키는대로 [plasmid=name]을 추가한 죄밖에 없는데? 물론 name은 적절한 플라스미드 이름으로 바꾸었었다. >name으로 해 보아도 에러가 발생하고,  [plasmid=unnamed]로 해도 에러가 멈추질 않는다. Plasmid 서열의 description line을 계속 이리저리 바꾸어 가면서 여덟번 정도를 제출해 보았지만 계속 에러 메시지가 나왔다.

으으윽... 도대체 어디가 잘못된 것일까. 도저히 모르겠다고 다시 이메일을 보내 놓은 다음 Prokaryotic and Eukaryotic Genomes Submission Guide 페이지를 샅샅이 뒤지기 시작하였다. non-WGS, 즉 완성 수준의 유전체 서열을 batch submission할 때 plasmid 이름을 지정하는 것과 관련된 다른 지시사항이 있는지를 알아보기 위해서였다.

아하! 이 웹사이트 안에 Leigh가 알려준 IMPORTANT: Additional requirements for batch submission이라는 섹션이 있었다. 이걸 클릭하여 펼치니 비로소 플라스미드 또는 세포내 소기관의 유전체 서열에 대한 설명이 나타났다.


Leigh의 실수는 1) IMPORTANT... 정보가 있는 페이지의 주소를 알려주지 않은 것 2) [plasmid-name=pBR322]라고 써야 정확한 것을 [plasmid=name]으로 잘못 알려준 것이었다. 이를 설명에 맞게 고친 뒤 다시 업로드를 하였다. 비로소 문제없이 잘 프로세싱이 된다.

단일 유전체를 올릴 때에는 각 서열이 염색체 또는 플라스미드 중 어느것에 해당하는지 웹사이트 안의 양식에 직접 기입하게 하면서 왜 batch submission에서는 업로드하는 FASTA file의 서열 description 라인에 쓰게 하는 것일까? 아마도 샘플이 많을 경우를 대비한 배려가 아닌가 싶다.

이것 말고도 RNA-seq raw data와 관련한 BioProject 및 SRA 등록과 관련한 오류를 고쳐 나가는 중이다. GEO에는 고전적인 microarray data를 올려본 경험밖에 없어서 제출을 위한 processed file(read count data, raw 및 normalized)을 준비하기 전에 내 나름대로 genome sequencing을 위한 것과는 별도의 BioProject를 등록하고 SRA에 raw sequencing read 파일을 먼저 올려 두었었다. 그런데 정작 SRA에 processed file을 올렸더니 GEO와 연관된 raw data file은 GEO team에서 등록을 해 준다는 것이었다. 그리고 내가 이와 관련하여 등록한 BioProject 역시 잘못되었다고 알려주었다. 이것은 어떤 남세균의 두 가지 morphotype에서 각기 확보한 RNA-seq data를 등록하기 위함이었는데, GEO에서는 이를 두 개의 BioSample로 구분하라는 것이었다.

밥 먹듯이 하는 서열 데이터 등록이지만 이렇게 매번 새로울 수가 없다. 등록을 위한 웹사이트는 매번 조금씩 진화한다. 그것도 조금씩 나은 방향으로 말이다. 이메일로 질문을 하면 거의 항상 하루 안에 답장이 온다. 그리고 담당자 역시 변동 없이 일정하다. 우리나라처럼 3년 주기로 부서를 바꾸거나, 승진을 하여 더 이상 실무를 맡지 않거나, 혹은 이직을 하는 일이 그렇게 많지 않은 것 같다. 이러니 안심을 하고 편안하게 등록을 하는 것 아니겠는가? 데이터 등록자의 열린 마음(정보를 공유하고자 하는), 그리고 서비스 제공자의 신뢰성이 한데 어우러져서 공공 유전체 DB가 점점 성장한다. 수치로 나타나는 실적·성과와는 큰 관계가 없지만 분명한 것은 데이터 규모는 꾸준히 성장하고 있으며 그 유용성에 대해서도 말할 나위가 없다.

늘 이런 고민을 하고는 한다. 우리나라 연구자가 우리나라 연구비(곧 우리나라 국민의 지갑에서 세금으로 지원된 것이다)로 생성한 유전체 관련 정보를 꼭 우리나라 웹사이트에 등록을 하는 것이 옳은가? 그리고 이것이 얼마나 활용되고 있는지를 수치화한 성과로 보고하는 일이 그렇게 중요할까? 나는 그래야 한다고 주장해야 하는 조직에 근무하고는 있지만 이에 대해서는 늘 회의스러울 때가 많다.

2017년 12월 6일 수요일

BLASTX보다 20,000 배나 빠른 DIAMOND?

블로그에 LS-BSR에 관한 글(링크)을 쓰면서 프로그램을 설치하고 테스트 데이터를 돌리기 위해 매뉴얼을 보는 중에 diamond라는 프로그램을 발견하였다. 다이아몬드? 이건 뭐하는 프로그램인가?

Fast and sensitive protein alignment using DIAMOND. Nature Method (2015)

어이쿠, 2015년에 나온 논문이었다. 나의 게으름을 탓하자... 저자는 독일 튀빙겐 대학(튀빙엔? University of Tübingen) 소속이다. 튀빙겐 대학교는 1477년에 설립된 대학으로서 1869년 Friedrich Miescher가 처음으로 DNA를 분리한 곳이 아닌가! 당시에는 이를 고름에서 분리한 백혈구의 핵에서 추출하였으므로 nuclein이라고 불렀다. 이것이 유전물질이라는 것은 몰랐지만, 획기적인 연구 성과가 아닐 수 없다. 생명과학의 역사에서는 매우 유명한 이야기인데, 논문화된 자료가 있어서 인용해 본다.

Friedrich Miescher and the discovery of DNA. Developmental Biology (2005)

이야기가 옆으로 많이 새고 말았다. 새로운 sequence search program이 지속적으로 나오는 것도 참으로 놀랍다. NGS로 인하여 워낙 많은 서열 조각이 생산되고 있으니 새롭고 빠른 프로그램의 개발 수요는 여전한 모양이다. 논문을 읽어보자. DIAMOND는 double index alignment of next-generation sequencing data의 약간 억지스러운 acronym이다. Double indexing이 무엇인지는 모르겠지만, 대용량의 sequence read를 단백질 reference database에 대하여 검색하는 프로그램이라 하니 shotgun metagenomic sequence read의 분석에 매우 유용할 것으로 생각된다.

DIAMOND 공식 웹사이트: http://ab.inf.uni-tuebingen.de/software/diamond/

할 일도 많은데 왜 새로운 프로그램은 계속 나오는가!

BLAST score ratio(BSR)을 이용한 유전체 비교 분석

BLAST score ratio(BSR)는 2005년에 논문을 통해 소개된 개념으로서 생물학적 서열의 계산에서 활용되는 매우 고전적인 방법이라 할 수 있다(Rasko 등, Visualization of comparative genomic analyses by BLAST score ratio, BMC Bioinformatics doi:10.1186/1471-2105-6-2). 당시의 논문을 보면 BSR을 이용한 사례로서 박테리아 세 종(겨우!)의 비교를 들었으니 그 사이에 일어난 기술의 발전은 실로 놀랍기만 하다. 서열 사이의 관계를 알아보고 싶을 때 아직까지도 가장 널리 쓰이는 것은 BLAST이다. 그러면 data parsing을 위하여 사용할 지표, 즉 hit를 줄세우기할 때에는 무엇을 참조하는 것이 가장 좋겠는가? E-value는 database의 크기와 match 길이에 영향을 받는다. 이러한 bias는 BLAST raw score를 씀으로써 해결되지만, 이것 역시 정렬된 서열의 길이의 similarity에 따라 달라진다. Rasko 등은 이 문제를 해결하기 위해 BSR라는 개념을 도입하였다.

그 방법을 간단히 설명하자면 이러하다. 세 종류의 박테리아에서 유래한 단백질 서열의 집합(proteome)을 각각 Reference, Query1, 및 Query2라고 가정한다. Reference peptide을 자신에게 BLAST하였을 때 산출되는 raw score를 reference score라 부르자. 그 다음 reference peptide를 Query1, 및 Query2에 대하여 BLAST를 실시하여 query score를 얻는다. BSR은 각 peptide에 대한 query score를 reference peptide로 나눈 것이다. Query 집합이 두 개이므로, 각 reference peptide에 대하여 (BSR1, BSR2)의 값을 얻게 된다. 모든 peptide에 대해서 이렇게 얻은 값을 plotting하면 결국 세 개의 proteome을 구성하는 개별 단백질들이 공유 관계에 따라 어떻게 분포하는지를 파악할 수 있다.

출처: http://www.biomedcentral.com/1471-2105/6/2 (그림 1)

지금 기준으로 본다면 대단히 소박한 시각화 방법이다. 상식적으로 3개 집합을 비교한 벤 다이어그램을 그리면 7개의 구획이 나와야 한다. BSR을 이용한 위 그림에서는 3 개 집합 중에서 어느 하나를 "Reference"로 놓았기 때문에 마치 단백질 집합이 4 개의 구획으로 나오는 것처럼 여겨진다. 하지만 여기에서 중요한 것은 시각화 방법이 아니라 BSR이라는 개념 자체이다. 즉 방금 생성된 대용량의 미생물 유전체 조립물이 있을 때, 어떠한 reference protein set이 각각의 유전체 샘플에 존재하는지의 여부를 적절한 BSR cutoff 값(0.5? 0.6?)으로 결정할 수 있다는 것이다. (O, X)의 문제로 환원하는 것이 부담스럽다면 [0, 1] 사이에 분포하는 BSR 값을 가지고 heatmap을 그려서 시각화를 하면 샘플 유전체 전체를 꿰뚫는 insight를 주는데 도움이 될 것이다. 2005년도 논문의 저자들은 전부 TIGR(The Institute for Genomic Research)  소속이었고, 제1저자인 David A. Rasko는 많은 TIGR 과학자들이 그러했듯이 매릴랜드 의대로 소속을 옮겼다(현재 Rasko 소개 웹사이트). 2005년의 BSR 논문에 쓰인 펄 스크립트와 데이터파일은 여기에 남아있다.

BSR을 계산하는 파이썬 패키지인 blast-score-ratio 1.0.6이라는 것도 있어서 흥미를 끈다.

Large-scale blast score ratio(LS-BSR)

요즘 '뜨는' 다제내성 감염균의 하나인 Acinetobacter baumannii의 병원내 분리균주에 대한 대용량 유전체 비교 분석 논문(무려 254종의 isolate를 다루었고, 그 중에 203개가 A. baumannii였음)을 보다가 LS-BSR을 이용한 그림을 접하였다. Rasko는 이번에는 공저자로서 'The large-scale blast score ratio (LS-BSR) pipeline: a method to rapidly compare genetic content between bacterial genomes'(PeerJ 2016)라는 논문을 발표하였고, 여기에 소개된 프로그램(LR-BSR; GitHub)이 A. baumannii 논문에 쓰인 것이다. 대용량 유전체 데이터를 이루는 모든 CDS의 연관성을 일목요연하게 보일 수 있도록 매트릭스 형태의 LS-BSR을 계산하는 파이프라인으로 확장이 된 것이다. 2005년 논문과 비교하여 달라진 점이 있다면 단백질을 query로 하여 유전체 서열을 검색하는 것이 일반적인 상황이므로 TBLASTN을 적용하고, BLAST raw score가 아니라 bit score를 쓴다는 점이다. 시각화 도구로는 Multiple Experiment Viewer(이 또한 고전적!)이나 R을 쓰면 된다.

LS-BSR의 특징은 ortholog의 clustering, pan-genome의 계산의 용도로도 쓰일 수 있다는 것이다. 즉 pan genome analysis tool로 내가 애용하는 Roary와 많은 부분이 겹친다. 2016년 논문의 제1저자이자 LS-BSR 개발자인 Jason W. Sahl(링크; 머리카락이 좀 덜 빠지고 약간 야윈 제이슨 스테이섬을 떠오르게 하는...)은 GitHut의 위키 페이지에서 Roary와 LR-BSR을 비교한 글 "Some thoughts on comparing Roary to LS BSR"을 기고하였다. 두 소프트웨어는 활용 목적이 분명히 다르고, 기본 알고리즘도 역시 상이하다. 따라서 어느 것이 더 빠르고 정확하다고 쉽게 단정지어 이야기하는 것은 바람직하지 않다. 내가 이해하는 수준에서 말하자면 LS-BSR은 적극적인 클러스터링 도구는 아니다. 또한 Roary는 genome annotation 정보가 있어야만 돌아간다.

마침 논문을 통해서 찾은 virulence gene의 존재 여부를 100여개 미생물 유전체에서 확인하여 시각화하는 방법을 고민하는 중이었다. 이것이 LS-BSR의 첫 경험이 될 것이다. Reference protein은 genome level이 아니라 20개 남짓한 수준의 것을 별도로 준비한다는 점이 LS-BSR의 기본 전제 조건과는 약간 다르다.

2017년 12월 5일 화요일

나에게 주는 선물 - 시계 'Maverick'

블랙 프라이데이를 맞아서 국외 사이트에서 세일 중인 시계를 구입하였다. 아내 것과 내 것으로 각각 하나씩. 왼쪽의 것이 이번에 구입한 시계이고 오른쪽의 것은 비교를 위하여 같이 찍은 시계이다. 요즘 손목시계가 과거와 비교하여 얼마나 커졌는지를 알 수 있다. 오른쪽 시계는 여성용이 결코 아니다! 직경이 거의 1 cm나 차이가 난다.


블랙 프라이데이에만 세일을 하는 줄 알았더니, 미국 시간으로 금요일이 지난 후에도 '사이버 먼데이' '사이버 위크' 등의 이름으로 며칠간 더 이어지다가 지금은 원래 가격으로 돌아간 것 같다. 모델명은 Victorinox Swiss Army Classic Maverick GS Dual Time 241441이다. 배송료를 포함하여 시계를 두 개나 사고도 관세·부가세 한도인 200 달러를 넘기지 않았으니 무척 싸게 산 셈이다. 직접 시계줄을 줄이다가 약간의 흠집을 내고 말았지만 손톱 광택용 버퍼로 문질러서 없앴다. 생물학 전공자라서 buffer라고 하면 자꾸 완충용액, 완충기가 떠오른다. 제법 무겁지만 내가 좋아하는 diver's watch 스타일로서 매우 마음에 든다. 세일 가격을 생각하면 이 가격에 이렇게 마감이 좋은 시계를 앞으로 사는 것은 불가능할 것이다.

구글 검색창에 'maverick 뜻'이라고 치면 다음과 같이 나온다. 오래 전에 나도 이 낱말의 뜻을 독수리로 알고 있었다. Maverick에 정말로 '독수리'라는 뜻이 있는가?


그런데 'maverick meaning'이라고 치면, 그 어디에도 독수리라는 뜻은 나오지 않는다.


나무위키를 찾아보면 원래 매버릭이란 미국 서부에서 낙인이 찍히지 않아 누구의 소유인지 알 수 없는 가축을 뜻하는 낱말이라고 하였다. 여기에서 '이단아', '독불장군'이라는 의미가 파생되었을 것이다.  바로 생명공학계에서 Craig Ventor를 종종 매버릭이라고 부르기도 하였다. 1987년도 영화 탑건에서 톰 크루즈가 매버릭이란 별명으로 나왔었다.

도대체 왜 구글 검색에서조차 maverick이 독수리라고 번역이 되는 것일까? 다른 그 어떤 사이트에서도 이렇게 번역할 근거를 찾지 못하였다.

2017년 12월 4일 월요일

EzBioCloud 제대로 사용하기

[참고] 쉽게 쓴 원핵생물(prokaryote)의 종 동정 이야기

천랩의 대표적 서비스인 EzTaxon은 16S rRNA 유전자 서열을 이용하여 원핵생물(prokaryote = bacteria and archaea)의 종을 동정하는데 매우 널리 쓰이고 있다. 우리나라에서 개발된 생명공학/생물정보학 웹사이트 중에서는 가장 활용도가 높은 것이라 해도 과언이 아닐 것이다. 유전체 시대를 맞이하여 EzTaxon은 잘 선별되고 가공된 16S rRNA 유전자와 유전체 서열을 통합한 EzBioCloud(논문, 웹사이트)로 확장되기에 이르렀다. 현재 종 동정은 표준 균주(type strain)와 시험용 균주의 유전체 서열 비교를 통해서 이루어지는 것이 표준 방법으로 여겨지고 있기 때문이다. 두 원핵생물 유전체 서열 사이의 ANI, 즉 average nucleotide identity가 일정 cutoff(보통 95~96%) 이상이면 동일 종으로 간주한다.

하지만 아직까지는 EzBioCloud 안에서 유전체 서열을 다루는 방법에 익숙하지 않아서 천랩이 제공하는 튜토리얼(Identifying a bacterial strain using a genome sequence, 튜토리얼 전체 모음 페이지)과 이메일 상담을 통해서 이를 익혀나가는 중이다. 두 차례에 걸쳐 꼼꼼하게 답변을 보내준 천랩 학술사업부 이혜원님에게 고맙다는 뜻을 전하고 싶다. 천랩이 제시하는 방법을 요약하면 다음과 같다.

  1. Genome FASTA file를 ContEst16S(논문웹사이트)에 업로드하여 오염 여부를 점검(raw sequencing read가 아니라 contig 서열을 업로드해야 함)
  2. ContEst16S 오염이 발견되지 않았다면, 여기에서 예측한 16S rRNA sequence를 복사함. ContEst16S를 사용하지 않았다면 Prokka 등의 다른 genome annotation 방법을 통해서 16S rRNA gene을 뽑아냄
  3. 이를 EzBioCloud의 Identify에 제출하여 분석을 실시함. Similarity 계산식은 여기를 참조
  4. Identify 결과 중에서 similarity ≥98.8%인 것의 유전체 서열을 다운로드하여 샘플 genome fasta file과 함께 orthoANI에 업로드
  5. 샘플과 type strain의 유전체 서열 사이에서 계산된 ANI 값이 95~96% cutoff를 넘으면 같은 종으로 판정
ContEst16이 자동 생성한 16S rRNA gene fragment의 ML tree.
4번 과정은 약간의 설명이 필요하다. 내가 천랩에 직접 이메일을 보내서 상세한 방법을 문의한 것도 바로 이 과정이었다. 전형적인 Identify의 결과표는 다음과 같다(너무 길어서 오른쪽 컬럼은 잘라냄).


Hit taxon name이 일반적인 학명이 아닌 CP017181_s로 표시된 것이 보인다. 이것은 천랩에서 NCBI의 유전체 서열을 점검하면서 이름이 잘못 붙은 것에 따로 매긴 taxon 이름이다. 즉 완성된 유전체 서열이지만 알려진 type strain의 유전체 서열과 비교하여도 OrthoANI > 97%로 매치하지 않아서 이런 임시 taxon 명칭을 붙인 것이다. 여기에서 보인 사례는 genome accession이 CP017181인 바로 자신이 나와주었지만, 이것과 동일 종으로 엮인 CP017181_s는 오늘 날짜 기준으로 총 60개나 된다(링크). 이들의 original label을 보면 잘못된 명칭이 붙은 유전체가 얼마나 많은지를 알 수 있다. CP017181_s가 종(species) level의 putative taxon의 이름으로 선택된 것은 CP017181의 assembly status가 'complete'였기 때문이다.

OrthoANI에 업로드할 genome의 서열을 다운로드하는 방법은 다음 중 하나를 따라가면 된다.
  1. Identify 결과창 왼쪽 컬럼 'Task' 중 동그라미('View genomes') 클릭 -> Browse EzBioCloud public genome database가 열리면 Browse 클릭 -> 오른쪽 Download 탭 클릭 -> CLG, contig FASTA, CDS 중에서 원하는 것을 클릭하여 다운로드
  2. Identify 결과창에서 Hit taxon name 클릭하여 다음 그림이 나오면 genome(빨강색 박스) 클릭 -> Browse EzBioCloud public genome database가 열리면 Browse 클릭, 이하는 (1)번 경로와 같음


NCBI에서 미생물 유전체 서열을 받을 때면 늘 이 균주가 type stain인지의 여부를 명쾌히 알려주지 않아서 논문을 일일이 찾아보아야 했었다. 그런데 EzBioCloud를 사용하면 type 균주 여부는 물론이거니와 16S rRNA 유전자와 genome sequence 측면에서 정확한 종 명칭이 부여되었는지를 확인한 유전체 서열을 손쉽게 다운로드할 수 있어서 얼마나 편리한지 모르겠다. 이렇듯이 EzBioCloud 데이터베이스에서는 16S rRNA 유전자 검색을 통한 접근뿐만 아니라 검색창에 균주 명칭을 입력하면 공개된 유전체 서열 중 천랩의 점검을 통해서 해당 종으로 판정된 것들의 목록이 얻어지고 다운로드 기능까지 이어진다.

키워드 검색을 통하여 EzBioCloud를 이용한 사례를 살펴보자. 검색창에 'Paenibacillus polymyxa'를 입력하면 다음과 같은 결과가 얻어진다. 기본으로 보여지는 것은 taxonomy이고 genome과 16S rRNA를 클릭하여 각각에 대한 상세한 정보를 얻을 수 있다.

다음으로는 'E681'을 입력해 보자. 이 균주는 처음에 Paenibacillus polymyxa로 동정된 뒤Sanger 기술을 이용하여 유전체 해독을 완료하였던 것이다(CP000154.2). Paenibacillus polymyxa의 type strain인 ATCC 842의 유전체 서열을 나중에 해독하여 서로 비교를 해 보니 E681은 Paenibacillus polymyxa가 아닌 다른 신종으로 다루어야 함을 알게 되었다. 하지만 균주의 특성에 대한 다른 실험이 수반되어야 하는 관계로 새로운 종을 제안하고 E681을 여기에 type strain으로서 재분류하는 일을 아직 하지는 못한 상황이다. EzBioCloud의 검색창에 'E681'을 넣어 보았다. CP000154_s라는 putative taxon의 대표(reference) 서열로 등록이 되어 있었다. 


CP000154_s로 분류된 유전체 정보는 총 21건(링크)로서 original label은 Paenibacillus polymyxa, Paenibacillus peroriae 및 Paenibacillus sp.였다.


2017년 11월 27일 월요일

쉽게 쓴 원핵생물(prokaryote)의 종 동정 이야기

가능한 한 쉽게 풀어서 쓰려고 노력해 보겠다. 이러한 글을 블로그에 남기는 것은 다른 사람이 이를 읽어보고 유용하게 활용하라는 뜻보다 나 자신의 공부를 위한 목적이 더 크다.

박테리아의 종(species) 개념에 대해서 알고 싶다면 천랩 BIOiPLUG help center의 글을 먼저 읽어보기를 권한다.

Bacterial species concept explained

이에 의하면 가장 최신의 phylo-phenetic species concept는 이러하다.

“A monophyletic and genomically coherent cluster of individual organisms that show a high degree of overall similarity in many independent characteristics, and is diagnosable by a discriminative phenotypic property.”

실제 세계에서는 각 스트레인이 다닥다닥 모여서 하나의 종을 구성하는 이상적인 일이 흔하게 벌어지지는 않는다. 각 스트레인 간의 거리를 어떻게 계산할 것인가? 이를 위해서 주로 유전체 서열을 이용하는 여러 방법이 존재한다, 상세한 것은 이 글의 뒷부분을 참조하라. 표준 균주, 즉 type strain은 species를 이루는 strain들의 cluster에서 가장 중심이 되는 위치에 존재하게 된다.

DNA-DNA hybridization (DDH)

실제로 DDH 실험을 하는 모습을 한 번도 본 일이 없으면서 툭하면 이 실험 기법과 종 구분의 기준 수치(70%)에 대해서 논하는 것은 좀 우습다. 70% DDH라는 표현을 아주 쉽게 하는데, 정확히 말하자면 이는 DNA-DNA relatedness 혹은 percentage reassociation similarity의 수치를 말한다. 이 수치는 1960년대부터 두 미생물이 얼마나 유사한지를 가늠하는 척도로 널리 쓰여왔다(왜? 미생물의 형태적 특징은 우리가 늘 접하는 동물이나 식물처럼 변별력이 높지 않으므로...). 그러다가 이것이 종을 구분하는 척도로 쓰이게 된 것은 Report of the Ad Hoc Committee on Reconciliation of Approaches to Bacterial Systematics라는 1987년도 논문(링크)에서 어떤 기준점을 공식적으로 제안하면서 부터이다.
DNA-DNA relatedness가 70%와 같거나 그보다 크면 두 박테리아는 같은 종이다.  비교 균주가 공인된 특정 종의 type strain이라면, 내 샘플이 그 종에 해당한다고 판정할 수 있다. 그러나 70%보다 작으면 서로 다른 종이다.
"with 5°C or less ΔTm of reassociated DNA strands"라는 조항도 있었지만 앞의 기준만이 보편적으로 사용된다. 잘 기억해 두자. DDH value ≥ 70%이면 동일 종, DDH value < 70%이면 다른 종이다.

16S rRNA gene sequence의 이용

DDH 실험은 숙달되기가 매우 어려워서 이를 제대로 수행하는 랩이 많지 않다고 한다. 그래서 누구나 하기 쉬운 PCR을 이용하여 16S rRNA gene의 일부를 PCR로 증폭한 뒤 이를 Sanger sequencing으로 읽어서 sequence similarity(%)를 산출, 이를 두 균주의 유사도를 측정하는 지표로 사용하는 방법이 급속하게 대중화되었다.

나는 개인적으로 DNA 서열을 비교할 때 similarity라는 표현을 쓰는 것을 별로 좋아하지는 않는다. ATGC 오직 4개의 염기로만 구성된 DNA의 서열 정렬에서는 같으면 같은 것이고 다르면 다른 것이다. 그러므로 여기에서 두 서열을 가지고 계산하여 나오는 수치는 sequence identity라고 하는 것이 더 정확하다고 생각한다. 아미노산처럼 생화학적 특성이 유사한 것끼리 그룹을 지을 수 있는 거대분자의 서열을 정렬할 때에나 identity와 similarity가 각각 다르게 나올 것이고, 그 나름대로의 의미가 있다고 본다. 

70% DDH에 해당하는 기준이 16S rRNA gene 서열의 similarity에도 존재할까? 1994년 Stackebrandt 등은 Taxonomic Note: A Place for DNA-DNA Reassociation and 16S rRNA Sequence Analysis in the Present Species Definition in Bacteriology라는 논문(링크)에서 16S rRNA gene sequence similarity < 97% 이면 두 균주는 서로 다른 종이고, 이 값이 ≥ 97%이면 정확한 구분이 어려우니 DDH 실험이 필요하다고 하였다. 
16S rRNA similaity가 97%보다 작으면 두 박테리아는 다른 종이다. 97%보다 같거나 크면 같은 종일 수도, 아닐 수도 있다.
많은 미생물학자들은 새로운 종을 발견하기를 원한다. 따라서 자연계에서 어떤 세균을 분리하여 16S rRNA gene 서열을 읽은 다음, type strain의 그것과 비교하여 similarity가 97%보다 적으면 새로운 종이 발견될 희망을 안고서 후속 연구를 진행하고, 이보다 높으면 제껴둔다고 하였다. 즉, 75% DDH와는 입장이 조금 다른 기준치인 것이다. 

최근에는 97%라는 기준치를 98.7-99%로 올려야 한다는 주장이 설득력을 얻고 있다. 관련 기사(Stackebrandt and Ebers 2006, Microbiology Today 33:152-155)를 찾아보니 2006년에 발표된 것이라서 최근은 아니었다. 쉽게 말하자면 예전에는 16S rRNA gene sequence가 98% 같았다면 비교 균주와 동일 종인지의 여부를 판별하기 어려우므로 DDH 실험이 필수적이었지만, 이제는 동일 종이 아니라고 말할 수 있다는 것이다. 즉, 수고스런 DDH 실험을 덜 하고도 novel species라고 말할 수 있게 되었음을 뜻한다. 이렇게 말할 수 있게 된 것은 - 모든 데이터셋에 대하여 분석을 한 것은 아니지만 - 98.7% gene sequence similarity 문턱값에 미치지 못하는 데이터 쌍의 경우 DNA reassociation value는 항상 70% 미만이었음을 알았기 때문이다.



실제로 어떤 프라이머를 사용하여 16S rRNA의 어느 영역을 증폭하는지에 대해서는 BIOiPLUG help center의 도움말을 참고하자.

16S rRNA and 16S rRNA gene

Genomics 시대에 걸맞는 종 동정 방법

NGS가 보편화된 요즘, genome sequencing은 가장 쉽게 얻을 수 있는 데이터가 되었다. 따라서 type strain과 내 샘플의 유전체 서열을 서로 비교하여 어떤 수치를 내놓으면, 이것을 70% DDH처럼 기준치와 비교하여 같은 종인지의 여부를 판별할 수 있지 않겠는가? 가장 보편적으로 쓰이는 수치는 바로 ANI(average nucleotide identity)이다. 이를 산출할 때 유전체 서열을 절단하여 그대로 쓰는 방법, 혹은 상동 유전자를 추출하여 사용하는 방법 등 실제 계산 프로그램은 몇 가지가 존재한다. BIOiPLUG help center에서는 OrthoANI를 사용한다. 전체적인 절차는 다음의 튜토리얼을 참고하자.


이 튜토리얼에서는 다음과 같은 순서를 따른다.

  1. 16S rRNA gene sequence를 이용하여 "Identify"를 실행한다. 
  2. 98.7% 이상으로 나타난 것의 type strain으로부터 genome sequence를 얻는다.
  3. OrthoANI를 계산하여 95~96% cutoff를 넘으면 해당되는 종으로 동정한다.

구글 검색창에 ANI calculator를 넣으면 다양한 계산 도구가 나온다. 나는 개인적으로 JSpecies를 주로 쓰다가 요즘은 많은 다루면서 heatmap까지도 그려주는 pyani를 애용하고 있다. 천랩의 OrthoANI는 유전체 서열을 일정 길이로 잘라서 reciprocal blastn을 먼저 수행하여 orthologous pair를 결정한 다음, 이것들에 대한 ANI를 계산한다는 것이 특징이다. 2015년에 발표된 논문 Microbial species delineation using whole genome sequences(링크)에서는 protein-coding gene을 염기서열 수준에서 비교하여 얻은 genome-wide Average Nucleotide Identity(gANI)와 aligned fraction(AF)을 같이 사용하는 방법을 제안하기도 하였다. 이 방법은 MiSI(Microbial Species Identifier)라는 멋진 이름이 붙어서  Integrated Microbial Genomes(IMG)에 구현되어서 쓰이고 있다(링크).

유전체 서열을 이용하여 디지털화한 DDH 값을 계산하는 도구도 있다. 이는 GGDC(Genome-to-Genome Distance Calculator)라는 것으로, 사용자가 입력한 두 유전체 서열(accession number를 넣어도 됨)에 대하여 DDH 값과 신뢰구간을 예측하여 준다.

또 다른 방법, specI

앞에서 소개한 방법들은 전부 두 개의 strain에서 유래한 서열(16S rRNA gene or genome)을 주었을 때 이들이 동일 종인가 아닌가를 판별해 주는 것이다. 즉, species demarcation tool인 것이다. 내 샘플에 어떤 종의 명칭을 붙일 수 있는가의 문제는 비교 대상이 되는 균주가 type strain인가 아닌가에 달려있다. 

이와 달리 specI(웹서비스 링크, Nature Methods 2013년도 논문)는 1:1로 비교할 균주 정보를 제공하지 않고 단지 내 미생물의 유전체 서열에서 예측한 유전자 정보(cds 및 아미노산 서열 파일이 각각 있어야 함)를 입력하여 40개의 single copy, universal phylogenetic marker gene에 대한 identity를 계산하여 어느 유전체와 가장 가까운지를 표시해 준다. 이론적으로는 매우 만족스럽지만 2013년에 3,496개의 유전체 서열(이 중에서 type strain은 836개)을 가지고서 개발된 것이라 업데이트가 시급하지만 아직 별다른 변화는 없다. 

specI에서 사용하는 40개 마커 유전자의 목록은 Supplementary Table 3(링크)에 나와 있다. 대부분 ribosomal protein으로서, phyloSift의 마커 유전자(링크)와도 상당히 겹친다. specI의 universal marker gene 목록 작성에 참고가 된 논문은 Toward automatic reconstruction of a highly resolved tree of life(Science 2006, 링크)이다. Phylogenetic marker gene과 minimal gene set은 약간 다른 개념이니 혼동해서는 안된다.

2017년 11월 26일 일요일

카시오 G-SHOCK DW5600E 설정 중 잊어버리기 쉬운 것

전자식 디스플레이를 갖춘 스포츠·아웃도어용 손목시계로서 현실적인 가격대를 갖춘 것의 대명사는 아마 카시오 G-SHOCK이 아닐까 싶다. 그 중에서도 '빅페이스'라고 불리는 모델은 전통적인 둥근 케이스에 시계바늘이라는 아날로그적 감성을 갖추고 있어서 더욱 인기를 끄는 것 같다. 나도 지난 여름 방수가 잘 되는 카시오의 시계를 알아보던 중에 바늘로 시간을 가리키는 빅페이스에 잠시 관심을 가진 일이 있었다. 그러나 시인성이 좋지 않고 표시되는 정보가 너무 작은데다가 케이스가 너무 커서 포기하였다. 이제는 노안이라서 잔 글씨를 보는 것이 어렵기 때문이다. 그래서 택한 것이 G-SHOCK의 클래시컬 모델인 DW-5600E이었다.


설정 및 기능용 버튼은 총 4개이다. 많다면 많고, 적다면 적은 수이다. 사실 손목시계와 같은 작은 기기에서 화면을 통한 터치 입력이 불가능한 상태라면 결국 하드웨어 버튼을 통해서 착용자의 지시를 전달할 수밖에 없다. 버튼을 4개보다 더 많이 장착하는 것이 불가능할 것은 아닐지라도 방수기능과 내구성 등의 면에서 불리해질 것은 자명하다. 따라서 제한된 버튼을 이용하여 기기를 쉽게 제어할 수 있게 설계하는 것이 매우 중요한 일이 될 것이다. 타이맥스 시계 중에서는 전면부쪽에 START/SPLIT 버튼을 따로 두어서 총 5개나 되는 버튼을 장착한 것도 있다. 달리기를 하거나 자전거를 타는 중에 조작을 하려면 어쩔 도리가 없다.

이 시계를 가끔 쓰면서 시각 표시를 24시 모드로 바꾸고 싶을 때가 있다. 그런데 자주 차지를 않으니 종종 그 방법을 잊어버리고는 한다. 이렇게 블로그에 기록을 하는 이유도 잊어버리지 않기를 바라는 마음에서다. 방법은 간단하다. A(Adjust) 버튼을 눌러서 숫자가 반짝거리는 동안 D(Light) 버튼을 누르면 된다. 반짝거리는 숫자가 시, 분, 초 중에서 어느 것인지는 관계가 없다. 그러면 시 표시 바로 위에 24H라는 표시가 나타난다.

전자시계가 좋은 점은 언제든지 타이머와 스톱워치를 쓸 수 있다는 점이다. 그런데 두 기능은 비슷해 보이면서도 다르다. 타이머는 정해진 시간이 끝나면 알람을 울리는 것이고, 스톱워치는 0에서 시작하여 경과한 시간을 나타내는 것이다. C(Mode) 버튼을 눌러서 모든 숫자가 0으로 표시된 상태라면 B(Start/Stop) 버튼을 눌러서 바로 시간을 측정할 수 있을 것으로 생각하기 쉽다. 하지만 이 상태가 타이머 모드(TR로 표시)인지 혹은 스톱워치 모드(ST로 표시)인지를 정확히 알고 있어야 한다. 타이머 모드에서 Start를 누르면 24시간부터 거꾸로 시간이 감소하기 시작한다. 디스플레이가 전부 0으로 된 상태라서 당연히 카운트 업 스톱워치일 것으로 생각하고 시간을 재려다가 낭패를 경험한 적이 많았다. 그래서 아예 타이머 모드에 5분을 입력해 두었다. 이제부터는 타이머 모드에서는 0:05'00이 표시되므로 스톱워치 모드(기본 표시는 00"00'00)와 혼동할 염려가 없다.

카시오 전자손목시계의 모듈은 뒷면에 4자리 숫자로 새겨져 있다. 이 시계는 3229 모듈을 사용한다. 카시오 매뉴얼 다운로드 사이트(링크)에 가서 적절한 언어를 선택한 뒤 3229를 넣으면 PDF 파일을 다운로드할 수 있다. 한글 매뉴얼은 없어서 영문 매뉴얼을 받아야 한다.



2017년 11월 24일 금요일

URL shortener

주말 공연 정보를 찾다가 대전지역에서 열리는 공연 예매를 대행해주는 아르스노바 웹사이트를 오랜만에 방문하였다. 이번 일요일, 그러니까 11월 26일에는 KAIST 오케스트라가 공연을 하는데 무료 공연이지만 이 사이트를 통해서 예약을 해야 된다. 예약을 위한 웹사이트의 주소가 bit.ly로 시작하는 짧은 주소로 표현된 것을 발견하였다.

http://bit.ly/2zWZ0V0 (http://www.arsnova.co.kr/perform/?idx=10000004587)

이와 같이 긴 웹주소를 줄여서 짧게 표현하는 것을 URL shortener라고 한다. 가만히 생각해 보니 구글 블로거와 구글 플러스 등의 서비스를 처음 이용하면서 goo.gl(Google URL Shortner)로 시작하는 짧은 웹주소를 만든 적이 있었다. 분명히 이에 대한 글을 블로그에 남겼을 터인데... 검색창에 goo.gl을 넣어서 찾아보았다. 무려 5년 전에 쓴 글이 여기에 있다. 단축 주소를 내가 직접 쓸 일은 거의 없으니 만들어 놓고도 까맣게 잊어버린 것이었다. gplus.to라는 단축 URL 서비스는 현재 작동을 하지 않는 것 같다.

그러면 나도 bit.ly를 이용해 보자. goo.gl은 긴 주소를 하나 넣어서 단축 주소를 얻어내는 방식이지만 bit.ly는 회원으로 가입하여 여러 주소를 관리할 수 있게 하였다. http://bit.ly/2jUqaYJ가 나의 구글 플러스로 연결되는 주소이다. 이렇게 만든 짧은 주소를 BitLink라 부르고, 지역과 국가에 따른 접속 통계도 만들어 준다. 생각보다 제법 쓸모가 많은 서비스이다.

웹사이트 주소는 bit.ly이지만 회사 이름은 Bitly이다. 이 회사는 일반 회원을 대상으로 어떻게 수익을 창출하는 것일까? 구글처럼 광고를 이용하는 것도 아닐텐데 말이다. 이 서비스가 생겨난지는 꽤 되었지만 갑자기 모든 것이 새롭게 느껴진다.

2017년 11월 20일 월요일

'어서와 한국은 처음이지?'가 불편한 이유

나는 요즘 인기를 얻고 있는 MBC 에브리원의 <어서와 한국은 처음이지>를 별로 좋아하지 않는다. 내가 싫어하는 TV 프로그램의 요건을 골고루 갖추고 있기 때문이다.


리얼리티 프로그램, 과연 대본이 없을까?

요즘 너무나 많은 프로그램이 비슷한 형식을 갖추고 있다. 생활 주변 곳곳에 카메라를 설치하고, 출연진은 마치 대본이 없는 일상 생활을 하듯이 촬영을 한다. 편집된 화면을 현장에 없었던 다른 여러명의 진행자가 보면서 양념을 더한다. 뉴스 독자들이 이제는 해설 기사에 더 관심을 갖듯이, 이러한 진행자는 마치 촬영된 내용에 대한 객관적인 시각을 더하는 것과 같은 착각을 불러 일으킨다. 대부분의 출연자는 연예인과 그 가족이다. 사전 기획인지 PPL인지 알 수 없는 소재와 장소, 이벤트가 넘쳐난다. 만들어진 리얼리티 속에서 어디부터가 진실인지를 알 도리가 없다. <어서와...>의 출연자는 일반인을 표방하고 있지만 정말 제작진의 사전 개입은 없을까? 재미를 유도하기 위해 의도적인 편집은 없는 것일까?

우리나라가 외국인에게 어떻게 보이는 것이 그렇게 중요한 것일까?

안타깝게도 한국은 중국이나 일본만큼 외국에 널리 알려져 있지 못하다. 우리가 세계 10위권의 경제 수준을 이룬 나라가 되면서, 한국을 더 알리고 싶어하는 욕구가 생기는 것은 당연하다. 그러나 안타까운 것은 유럽에 수출된 고급 문화인 중국의 도자기가 그러했고 인상파 사조의 시작에 자극을 주었던 일본의 그림이 그러했듯이 문화적인 측면에서 한국에 대한 깊이 있는 이해가 이루어지지 못한 것은 사실이다. 현재의 '한류'가 그 역할을 하고 있다면 인정을 해야 되겠지만.

진정 이 프로그램이 성공하려면, 출연자의 나라에 이 프로그램을 수출해서 방송이 되게 만들어야 한다. 식당을 찾은 손님들이 그 식당을 평가했다고 하자. 이것을 식당 주인들만 공유하면서 즐기는 것과 무엇이 다른가? 아직 이 식당을 찾지 않은 사람들에게 식당 평이 널리 전달되는 것이 당연하지 않은가? 외국인들이 낯선 한국을 처음 찾아서 '한국이 이렇게 역사가 유구한 나라였어?' '한국 음식이 이렇게 맛있었어?' '한국에 이렇게 볼 거리가 많았어?'하며 놀라는 것을 우리가 보고 얕은 만족감 또는 우월감을 느끼며 자부심을 소비하는 것 같아서 나는 이 프로가 영 불편하다. 아마 출연자들의 항공료나 체제비는 제작사 측에서 부담할 것이 당연한데, 그러한 여행에서 어떻게 여행자가 불편을 이야기할 수 있겠는가? 물론 자비로 한국을 올 가능성도 없겠지만 말이다.

오락 프로램이라면 다큐멘터리 흉내를 내지 말고, 다큐멘터리라면 좋은 그림, 재미있는 장면을 위해 제작자가 개입하는 것을 최소화해야 한다. 웃음을 유발하기 위한 불필요한 자막은 줄이고 - 자막이 유용할 때가 있는 것은 인정한다. 청각 장애인이나 소리를 크게 내기 어려운 공공장소에서 TV를 재생할 때에는 도움이 된다 - 시청자로 하여금 생각할 여지를 없애는 프로그램을 만들어서는 안된다고 본다. 그리고 경제 수준이나 피부 색깔을 가지고 알게 모르게 외국인들을 줄세우는 일이 있어서도 안된다.

이쯤에서 대중문화평론가 이문원의 기고를 소개한다.

'어서와 한국은 처음이지?', '국뽕'이라도 괜찮다.

이번 평창 동계올림픽의 개막식 중계에서는 입장하는 국가의 국민소득을 소개하는 어리석은 일이 없었으면 한다.

새 도메인 구입(.xyz)

개인 용도로 사용하고자 .xyz로 끝나는 새로운 도메인을 등록하였다. 무척 생소한 도메인이지만 gTLD(generic top-level domain)로서 처음 도입된 것은 2014년이다. xyz는 알파벳을 이루는 마지막 문자이니 그 나름대로의 의미를 부여할 수 있겠다. 특히 구글의 지주회사인 Alphabet Inc.가 abc.xyz를 웹사이트로 등록하면서 더욱 인기를 끌게 되었다고 한다. 위키피디아에 따르면 2016년 6월 현재 .xyz는 .com, .net, .org에 이어서 네 번째로 등록이 많이 된 gTDL라고 한다.

그래서 내가 등록한 도메인은 도대체 무엇인가? 그것을 여기에 공개할 생각은 없다. 특히 도메인 등록 기관에서 약간의 서비스 요금을 더 내면 ICANN에 등록자 정보를 보내지 않게 만들어 주니 그것도 더욱 흥미롭다. 반사회적인 운동이나 음흉한 비즈니스를 도모하는 사이트를 만드는 것은 아니니 이를 당장 여기에 공개하지 않는다고 해서 무엇이 문제이랴. 관리하는 도메인과 웹사이트의 갯수가 늘면서 유지 비용도 그에 따라서 약간씩 늘어나는 것은 감수해야 되겠지만. 앞으로 일년 정도 운영해 본 뒤 과감하게 통폐합을 하는 것도 고려해 보자.

웹사이트를 구성하는 CMS(content management system)으로는 드루팔을 사용해 보기로 하였다. 도메인 등록 대행 기관에서 호스팅 서비스도 제공을 하는데, 자동 설치 기능이 있어서 별로 어렵지는 않았다. 처음에는 가장 인기가 있다는 워드프레스를 써 보려고 했는데 작동이 너무 느려서 두어번 깔았다 지웠다를 반복하다가 결국 드루팔로 최종 결정하였다.

드루팔은 다른 사람이 만든 사이트를 조금 사용해 본 일은 있지만 관리자 입장에서는 처음이다. Drupal 8 documentation을 보면서 개념을 잡아나가 보련다. 테마는 드루팔 7부터 기본 제공되는 Bartik theme이다. 아래 그림을 기준으로 설명하자면 맨 위의 로고와 제목/표어가 있는 곳은 header, 중간은 사이드바(주황색)와 기본 내용, 맨 아래는 footer이다. 기본적인 각 region(구역)의 색깔은 주소/admin/appearance/settings/bartik에서 설정을 고치면 된다.


구역의 개념은 간단하지만 그 내부에 조성되는 블록은 한층 복잡하다. 다음 그림을 보라! 주소/admin/structure/block/demo/bartik을 선택하면 보이는 block layout의 설명 그림이다. 이 그림과 위 그림의 내부가 각각 어떻게 연결되는지를 알아보려면 이것저것 매만지면서 시행착오로 알아보는 수밖에는 없겠다.


<탭>에 해당하는 것은 Primary menu였다. 여기에는 internal path(예: /node/add)나 external URL을 연결할 수 있다. 특정 카테고리에 해당하는 글 묶음을 연결할 수는 없을까? 블로그처럼 시간 순서대로 단순하게 글을 써 나가는 용도로는 현 상태로도 불편함이 없는데, 이를 메뉴와 연결하는 방법을 아직 잘 모르겠다.

찾기는 기본적으로 3글자 이상만 가능하다. 두 글자로 이루어진 한글 낱말 검색을 위해서 2글자로 설정을 바꾸어 보았다. 인덱싱 작업에 약간의 부담을 줄 가능성도 있겠다. 

에혀~ 내가 왜 이걸 시작했을까.



새 만년필 구입(파커 IM 프리미엄 배큐매틱 핑크)

지난 10월 말, 주력으로 사용하던 워터맨 필레아(Waterman Phileas Green Marble) 만년필을 깨끗이 세척하여 잠시 서랍에 넣은 다음 파커 벡터 스탠다드(Parker Vector Standard) 만년필을 꺼내들었다. 예전에 쓰다가 남은 파커 잉크 카트리지를 다 써버리고자 함이었다. 그러나 약 한 달 가까이가 지난 지금, 역시 적응에 실패하였다. 파커 벡터 스테인레스 스틸 제품과 레진 몸체의 스탠다드를 전부 써 보았지만 약간 가늘고 굴곡이 없이 완벽한 원기둥 모양의 몸체는 내 손에서 도저히 익숙하게 잡히지를 않는다. 짧게 쥐면 자꾸 미끄러지면서 헛도는 느낌이고, 길게 쥐어서 레진 바디쪽을 잡으면 너무 어색하고...  파커의 최저가 라인인 Jotter의 만년필도 이보다는 나았었다.

벡터보다는 상급의 만년필을 써 보기로 하였다. 카트리지를 소모하기 위해 만년필을 사는 꼴이라니! 집에서 멀지 않은 삼화문구몰의 만년필 매장을 방문하였다. 평소에 눈여겨 보았던 파커 어반은 가격대가 생각보다 높았고 꽤 묵직하였으며, 쥐는 느낌이 좋고 적당이 가벼워서 가장 마음에 들었던 소네트는 그보다 더욱 비쌌다. 최종적으로 선택한 것은 IM Premium Vacumatic Pink(링크) 만년필이었다. CT(chrome trims), 즉 크롬으로 마무리를 한 제품이다. 단종이 되었는지 이 제품의 링크는 파커 공식 홈페이지에서 찾아내기는 어렵다. 닙 규격은 F(fine). 사진을 찍어 보았는데 분홍색을 원래대로 재현하기 위해 포토스케이프에서 약간의 후보정을 하였다. 실제에 거의 가까운 색상이 표현되었다.



이 만년필은 선물로 받은 워터맨 필레아를 제외하면(새 것은 아니었음) 내가 직접 구입한 것 중에서 가장 비싼 것이다. 외양도 예쁘고 무게 밸런스도 매우 좋으며, 글씨가 써지는 느낌 또한 좋다. 앞으로는 5만원 미만의 만년필은 사지 말아야 되겠다는 생각을 갖게 한다. 최저가 라인은 래커칠이 벗겨지거나, 배럴이 부러지거자, 필기감이 좋지 않은 등 여러가지 문제가 있었다. 다만 내가 이번에 구입한 파커 IM은 손에 쥐는 부분이 금속이라서 약간 미끄러운 것이 아직은 적응이 잘 되지 않는다. 나의 개인적인 경험으로는 아래 사진에서처럼 타원으로 표시된 부분이 플라스틱으로 처리된 것이 더 좋았다.

출처: https://global.rakuten.com/en/store/hunnyhunt/item/waterman-phileas-green/

기회가 된다면 파커 소네트 혹은 펠리칸 M200(속칭 '고시용' 만년필)을 언젠가는 써 보고 싶다. 늘 휴대하는 필통 속에는 파커 IM, 그리고 사무실 회의용 테이블 위에는 펠리칸 트위스트가 자리를 잡았다.



2017년 11월 18일 토요일

독서 기록 - 별맛일기, 우리 사우나는 JTBC 안봐요, 과식의 심리학, 교육의 미래 티칭이 아니라 코칭이다


  • 별맛일기: 심흥아 만화
  • 우리 사우나는 JTBC 안봐요: 박생강
  • 과식의 심리학: 키마 카길 지음 강경아 옮김
  • 교육의 미래, 티칭이 아니라 코칭이다: 폴 김·함돈균 대담집

감성이 너무 메마르는 느낌이 들 때에는 소설을 읽는다. 나는 여간해서는 문학 서적을 읽지 않는다. 천천히 음미하면서 꼼꼼하게 보아야 하는 문학 작품을 읽으면서 인내심을 키운다. <별맛일기>는 연필로 공들여 그린 장편 만화로서 요리를 좋아하는 초등학생이 일기의 형식으로 자기의 주변 이야기를 요리와 관련하여 그린 것이다. 미혼모, 동성애, 다문화 가정 등 무거운 주제를 담백하게 담았다. <우리 사우나는...>은 박생강(본명 박진규)가 실제로 회원제 피트니스 클럽의 사우나에서 매니저로 일하면서 접했던 자칭 상위 1%의 부조리한 모습을 신랄하게 비판하였다. 나머지 두 책은 본문 요약 위주로 좀 더 상세하게 독서 기록을 남기고자 한다.

과식의 심리학_현대인은 왜 과식과 씨름하는가


과식(혹은 폭식장애)은 먹는 것을 절제하지 못하는 일부 사람들에게 국한된 개인적인 문제가 아니다. 소비주의, 즉 상품 소비의 끊임없는 증가를 건강한 경제의 토대로 옹호하는 원칙, 또는 소비자 상품을 사들이는 것을 지나치가 강조하거나 그런 일에 몰두하는 것에도 큰 책임이 있다. 과거에는 사치품으로 여기던 것을 이제 필수품으로 여기게 되면서 무엇이 자연적인 욕구인지, 혹은 만들어진 욕구인지를 구별하기가 어렵게 되었다. 실제로 상품을 소비해도 상상적 욕망을 채우지 못하는 것이다. 요즘 유튜브에서 어렵지 않게 접할 수 있는 이른바 언박싱(unboxing) 영상 - 새로 구입한 물품의 포장을 뜯으면서 내용물을 보여주는 영상 - 은 이러한 상상적 쾌락주의의 퇴행적 판타지를 보여준다. 소비주의의 여러 개념들을 살펴보자.
  1. 도덕 원칙으로서 소비주의: 선진국에서 소비자의 상품 선택과 구매는 개인의 자유와 행복 그리고 힘을 얻는 수단으로 인식된다.
  2. 정치 이데올로기로서 소비주의: 국민을 지나치게 보호하려는 성향의 보모국가와 반대로 현대 국가는 초국적 기업을 비호하며, 현대 국가에 팽배한 소비주의 이데올로기는 소비자가 화려하고 멋진 상품을 선택하고 구매할 자유를 찬양한다.
  3. 경제 이데올로기로서 소비주의: 공산주의의 엄격한 금욕주의와 반대로 소비주의가 자유무역의 동인으로 찬양되며 새로운 소비자를 키우는 일이 경제 발전의 열쇠로 여겨진다.
  4. 사회 이데올로기로서 소비주의: 사회 이데올로기로서 소비주의는 계급을 구분하는 기준을 만들기 때문에 물질적 상품은 그것을 소유한 사람의 지위와 위신에 영향을 미친다.
  5. 사회 운동으로서의 소비주의: 소비자의 권리를 증진하고 보호하기 위해 종종 규제를 통해 가치와 품질을 보호하는 운동 형태로 나타난다.
문화에 퍼지는 질병을 개인의 병으로 좁혀서 생각할 것이 아니라(즉 그들만의 잘못으로서  알아서 책임져야 할 일) 잘못된 문화에서 비롯된 최종 결과물로 보아야 한다. 철학자 수전 보르도는 이렇게 썼다고 한다.
나는 한 문화 안에서 발달한 정신병리를 변칙이나 일탈과는 거리가 먼, 그 문화의 전형적 표현으로, 사실상 그 문화에서 잘못된 많은 것의 결정화로 본다. 따라서 문화 관련 증후군을 문화의 자가진단과 성찰의 열쇠로 삼아 검토하는 것이 중요하다.
이 책에서 소개한 '소비의 깔때기'는 소비주의가 어떻게 개인을 압박하는지를 다음의 순서로 표현하였다.

  1. 상품 소비의 끊임없는 증가를 건강한 경제의 토대로 옹호하는 원칙
  2. 소비자 상품 구매의 지나친 강조나 몰두
  3. 상품이나 서비스, 물질, 에너지 구매와 사용
  4. 소모적 지출(시간, 돈, 등)
  5. 고갈(특히 상품이나 자원) 또는 소모
  6. 상품이나 서비스의 구매와 사용(즉 소비자 되기)
  7. 먹거나 마시기, 소화시키기
  8. 지나친 소비(또는 먹기)로 자신을 파멸하기
비만을 고치는 가장 단순하고 확실한 방법은 섭취하는 열량이 남아돌지 않도록 이를 소비하는 것이다. 적게 먹든지, 많이 운동하든지, 둘 중의 하나이다. 그러나 지나친 음식 소비에 의해 생긴 문제를 다른 소비(다이어트 산업의 소비자로서)로 해결하는 것에 더욱 자연스럽게 여기게 되었다.

음식을 잠재적인 중독성 물질로 연구하는 학자도 늘고 있다고 한다. 마약 중독에서 흔히 나타나듯이 무엇인가를 얻기를 갈망하지만 막상 욕망하는 물질을 얻고 난 뒤에는 기대했던 그만큼 그것을 좋아하지 않음을 깨닫게 된다. 즉 우리가 기대했던 보상을 제공하지 않는다.달리 말해서 '욕망은 만족을 욕망하지 않고 반대로 욕망은 욕망을 욕망한다'.

정신 질환의 경계가 낮아지면 더 많은 사람들에게 약물을 처방할 기회가 주어진다. 이는 많은 제약 산업이 원하는 것이기도 하다. 미국정신의학회가 발간하는 DSM(Diagnostic and Statistical Manual of Metal Disorders 한국어판)의 많은 진단이 그러하다. 흔히 드는 사례로 주의력결핍및과잉행동장애(ADHD), 사회불안장애, 우울증이 있다. 진정한 폭식장애와 가끔 게걸스럽게 좋아하는 사람을 어떻게 구별한단 말인가? 사실 폭식과 과식이 경계는 명확하지 않다. 가벼운 폭식은 이른바 lifestyle drug로 치료하기에 가장 최적의 조건이다. 이러한 약은 소비자에게 직접 광고할 수 있기 때문이다. DSM이 정신질환의 문턱을 낮추고 새로운 병의 '보급'과 상업화에 기여한 폐해에 대해서는 익히 많이 들었다.

폭식장애는 과소비라는 문화적인 병인에 의한다고 보아도 무방하다. 그러나 미국에서는 개인과 뇌를 집단에서 개인화·분리시켜서 이를 진단과 치료의 단위로 만들고 말았다. 과체중·폭식의 치료를 위해 거대 제약 산업의 제품을 구매하려는 소비자는 더 많아진다. 과식을 개인 차원에서 해결하려는 이른바 하향 해결책은 기업에 새로운 이윤을 만들어 줄뿐이다.


현대 자본주의 사회는 경제의 성장(팽창)을 동력으로 움직인다. 지갑을 열고 끊임없이 무엇인가를 사들이고 먹는 것이 미덕인 것으로 여겨지고 있다. 하지만 세계 최저 수준의 출산률과 함께 고령화 사회로 초고속 진입을 하는 우리 사회에서는 양적인 팽창에 의존하지 않는 새로운 경제 파라다임을 세우지 않으면 안된다. 그러면 자연스럽게 소비주의 문화에 의해 생겨난 폭식장애는 줄어들 것이다.

교육의 미래, 티칭이 아니라 코칭이다


사회참여를 늘 고민하고 행동하는 문학평론가 함돈균이 스탠포드대 교육대학원 부원장이자 최고기술경영자인 폴 김과 만나서 대담한 내용을 엮은 책이다. 폴 김은 JTBC의 <차이나는 클라스>에도 출연하여 강연을 한 적이 있다(뉴스). 한국에서 초중고 12년을 겪으면서 강압적이고 비인권적인 교육을 경험했던 그는, 미국으로 건너가서 새로운 교수법을 개발하여 전파하고 있다. 

"좋은 교사는 가르치지 않는다"

스스로 질문을 하게 만들고 최신 공학 기술을 이용하여 전세계인들, 특히 교육의 혜택을 받지 못하는 오지의 사람들에게 희망을 주고 있다. 

한국의 교육은 '두려움'을 그 원동력으로 삼는다. 동료와의 협력이나 리더십은 중요하지 않다(리더십은 오로지 대학입시용 자기소개서에 쓰기 위한 입증되지 않은 공허한 기록으로만 존재할 뿐). 세계 시민으로서의 참여의식과 책임감을 배양할 기회는 전혀 없고, 오직 개인의 노력을 통해서 개별적인 생존을 위한 점수따기용 수동적·주입식 교육에 몰두한다. 교육의 궁극적 목표는 자율적 능력의 구현임에도 불구하고 말이다. 비판적 사고를 가진 사람을 '모난 돌' 취급하며 경원시하는 사회, 질문하지 않는 사회에서는 혁신과 발전을 기대하기 어렵다.

한국 대학은 지적 엘리트 집단 전체의 잠재력이 현저히 떨어짐은 물론이고 학문-교육과 삶을 잘 연계하지도 못하며, 그저 제도를 잘 이용하여 어떤 상황만 모면하면 된다는 타성에 젖어있다.
  • 한국 대학: 이 과목 들으면 삼성(대기업)에 입사할 수 있나요?
  • 미국 대학: 제가 삼성같은 기업을 만들려고 하는데 이렇게 하면 될까요?
그러나 그 어떤 묘수를 개발한다 하여도 현지 사정에 맞는 이른바 맥락화(contextualization)가 없으면 소용이 없다. 당장 하루 한 끼를 먹는데에도 어려움이 있는 아이들에게 글을 읽는 것이 어떻게든 도움이 될 것이라 생각하여 신데렐라와 같은 동화책을 보내거나, 당장 불쌍하다고 돈을 주거나 한다는 것은 오히려 나쁜 영향을 끼치는 것이다.

가장 이상적인 교육은 exposure, engage, experiment, empowerment 즉 4E를 통해서 구현되어야 한다. 그리고 학교는 사회 디자인을 위한 실험실이 될 수 있다.

모바일 기기를 몇 명에 하나씩 나누어 주었을 때 가장 효과적인 학습이 되었는가를 알아본 실험에서는 세 명당 기기 하나인 그룹에서 문제 해결 속도가 가장 빨랐으며 그 다음은 일곱 명당 하나,그 다음은 한 명당 하나였다고 한다. 이는 브레인스토밍 등에서 가장 적합한 그룹의 크기를 결정할 때 좋은 참고가 될 것이다.

대학을 어떻게 평가하는 것이 옳은가? 미래의 대학은 세계적인 영향력(global impact)가 관건이 될 것이다. 세계적 영향력이란 사회적 파급력, 사회적 효율성, 사회 발달에 대한 기여도 같은 것이다. 단지 SCI 논문을 일정 수준 발표하고, 영어 강의를 제공하고, 외국인 학생이 많다고 해서 세계적 영향을 갖추는 것은 아니란 뜻이다.

여기서 폴 김의 말을 인용해 보자.
항상 우리는 '길거리에 떨어져 있는 깨진 거울'이라고 생각하는 마음을 갖는 게 중요하다고 봅니다. 특히 교육자, 코치의 역할을 하고 있다면 스스로 완전한 원형의 예쁜 거울이 아니라, 불완전하고 남에게 상처가 될 수 있고 남을 베이게 할 수 있는 깨진 거울일 뿐이지만, 이런 거울도 빛을 반사시키는 귀한 능력이 있다고 믿어야 해요.

2017년 11월 15일 수요일

VirtualBox "VT-x/AMD-V 하드웨어 가속을 사용할 수 없습니다" 오류의 해결

지난 11월 9일-10일 양일간 Cho & Kim Genomics/미래BIT융합교육사업단 공동 추최의 Bioinformatics Analysis Workshop에 참석하였다. 장소는 서울대학교 농업생명과학대학 75-1동이었다. 이때 배포한 우분투 가상머신 파일(.ova)을 가지고 복습을 하고자 내 사무용 컴퓨터의 VirtualBox에서 '가상 시스템 가져오기'를 한 뒤 부팅을 시도하였다. 그런데 '시스템에서 VT-x/AMD-V 하드웨어 가속을 사용할 수 없습니다. 64비트 게스트가 64비트 CPU를 인식할 수 없으며 부팅할 수 없을 것입니다.'란 오류 메시지와 함께 부팅이 되지 않았다.


오류 메시지를 복사하여 구글 검색을 해 보았다. 이에 대한 해결책을 제시하는 꽤 많은 글들이 있었다. BIOS의 고급 설정에서 Virtualization 기능을 활성화하라는 것이었다. 문득 머리를 스치는 것이 있었다. Metagenome으로부터 자가학습을 통해 metagenomic bin을 재구성하는 프로그램인 PhyloPythiaS+(PPSP, 논문 링크)의 가상머신 배포본을 같은 컴퓨터에서 구동하려고 했을때 비슷한 유형의 오류 메시지를 접했었다. 'VT-x is disabled in the BIOS for all CPU models (VERR_VMX_MSR_ALL_VMX_DISABLED).' 그러나 이상의 가상시스템들은 내가 보유한 다른 컴퓨터(데스크탑, 삼성 노트북 및 맥북 프로)에서는 특별한 문제를 일으키지 않았었다.


그렇다면 사무용 컴퓨터의 BIOS에서 해당 부분을 Enabled로 고치면 이 두 가지 가상 머신을 부팅하는데 더 이상 문제가 발생하지 않을 것만 같다. 오늘따라 Windows 업데이트가 많아서 부팅을 여러 차례 하였는데 BIOS 수정을 위해 위해서 부팅을 한 번만 더 하자.  '다시 시작'을 클릭하고 화면을 노려보다가 Del 키를 눌러서 셋업 화면으로 집입하였다. 셋업 화면이 참으로 화려하다.


Advanced 탭의 Intel Virtualization Technology라는 항목이 불활성화된 상태이다. 이를 활성화로 전환한 뒤 설정을 저장하고 재부팅을 하였다. VirtualBox에서 두 종류의 가상머신을 켜 보았다. 이제 아무런 문제가 없이 부팅이 되어 성공적으로 로그인을 할 수 있었다.

VirtualBox에서 공유 폴더 사용하기

호스트와 게스트 OS 사이에서 파일을 주고받는 가장 간단한 방법은 공유 폴더를 설정하는 것이다. 이를 가능하게 하려면 우선 게스트 확상 설치부터 해야 한다. 가상머신이 작동되는 상태에서 '장치->게스트 확장 CD 이미지 삽입'을 실행하면 자동으로 명령을 실행해야 한다는 메시지와 함께 관리자 암호를 입력하라고 할 것이다. 이대로 따라서 하면 터미널 창에서 무엇인가가 잔뜩 진행되는 것처럼 나타난다. 여기까지 했으면 일단 가상 머신을 종료한다.

그러고 나서 VirtualBox의 설정->공유 폴더에서 다음 그림과 같이 입력을 하면 된다. 폴더 경로란 호스트 측의 경로이고, 폴더 이름은 가상머신 내의 경로이다. 폴더 이름 'vbox'는 자동으로 이름이 지어진다. '자동 마운트'를 체크하는 것을 잊지 말자.


설정을 저장하고 리눅스 가상머신을 켠다. 이제 df 명령을 치면 /media/sf_vbox 경로가 보일 것이다. 공유 폴더 설정에서 붙인 이름인 vbox 앞에 /media/sf_를 붙인 것이 게스트 내에서의 마운트 위치이다. sf는 shared folder를 의미한다. 여기에 파일을 기록하면 호스트 측에서는 C:\vbox 위치에서 열어볼 수 있다. 단, 게스트에서 여기에 접근하려면 관리자 권한이 필요하다. 반대로 호스트에서 이곳에 파일을 복사하면 리눅스 게스트에서도 자유롭게 접근할 수 있는 것이다.

앞으로 일주일 동안의 목표는 워크샵에서 배웠던 것을 차근차근히 복습하는 것이다. 필요하다면 스크립트를 정리하여 이곳 블로그나 위키 사이트에 올릴 것이다. 내가 가끔 강사로 참여하는 다른 생명정보학 워크샵에서도 참고할 만한 내용이 많을 것이다.

2017년 11월 9일 목요일

독서기록 - 2020 시니어 트렌드


  • 부제: 새로운 어른들이 만드는 거대 시장의 출현
  • 저자: 사카모토 세쓰오
  • 김정환 옮김

출장지의 허름한 숙소 침대 위에 올려놓고 사진을 찍었더니 너무 배경이 볼품없이 나와서 흑백으로 만들어 버렸다. 영어로 찍힌 Senior Trend와 그 밑의 부제만 빨강색이고 나머지는 전부 검정색이라서 흑백으로 처리해도 큰 무리는 없다.

일본은 고령화 속도가 빠른 나라의 대명사로 알려져 있고, 우리나라는 그보다 훨씬 심각하게 인구 구조가 변하고 있다. 하지만 일본은 잃어버린 20년 이후 경제 상황이 점차 좋아지는 데다가 충분한 인구에 기반한 탄탄한 내수 시장을 보유한 나라이다. 과거에는 노년이란 그저 인생의 내리막이라고 생각했지만, 지금은 더 많은 자유(은퇴, 자녀의 독립 등)와 더 많은 경제적 여유(이것은 우리 사회에 일반화하기 참으로 어렵지만)를 가지고서 문화와 소비를 이끄는 큰 힘이 되어가는 중이다. 이를 내다보면 새로운 비즈니스 기회가 생긴다는 것이다. 은퇴 전에는 급여에만 의존해 살아야 하고 지출이 많은 것이 당연하나, 나이가 들어 자녀들이 독립을 하면 지출도 크게 줄고 금융 자산을 이용한 저축 투자형으로 이행하여(즉 돈이 스스로 돈을 벌게 만들어서) 오히려 예전에는 하지 못한 소비를 하면서 생계를 유지할 수 있다. 물론 우리나라와 같이 자녀들이 취직과 결혼을 포기하고 부모와 같이 살게 되면서 계속 이들을 위해 지출을 해야 하는 상황에서는 부러운 상황이지만 말이다. 고급 자동차, 고가의 카메라가 이들 어른 세대에게 큰 인기를 끌고 있으며, 심지어 고급 기타(악기)에 대한 소비가 늘면서 TV에서도 악기 광고를 시작했다는 것이다. 젊어서는 꿈처럼 바라보던 악기였는데 은퇴 후에는 바로 나 자신을 위한 선물로서 이제 구입을 할 수 있다는 뜻이다. '그래, 이게 바로 그 Gibson이란 말이지...?'하면서.

지금 40~60대는 과거의 비슷한 나이 세대와는 다르다고 느낀다. 인생의 내리막이나 황혼이 아니라 '인생은 지금부터'라는 의식이 그들을 더욱 활기차게 만들고 지갑을 열게 만든다. 과거에는 젊은이에게 최신의 정보를 습득하던 세대였지만, 플레이스테이션을 처음으로 갖고 놀던 사람들이 나이가 들면서 이제 손자 세대들에게 오히려 새로운 정보를 알려주고 공유하는 추세가 강해지고 있다.

건강과 경제는 노년을 불안하게 하는 요소였고 과거에는 이를 받아들이면서 조용히 여생을 보내려는 마음이 있었다. 그러나 지금은 이것을 다스리면 오히려 활력의 근원이 된다.

유럽의 고급 식당이나 슈퍼카(2인용)는 원래 돈 많은 시니어를 위한 것이었다. 이 문화가 일본으로 들어오면서 경제적으로 감당할 수 없는 수준에서 슈퍼카를 젊은이들이 사는 일이 생기긴 했지만 말이다. 설문 조사에 의하면 배우자와 같이라면 외식이나 여행에 돈을 아끼지 않겠다고 했다. 가장 좋은 동반자는 부모도 아니고 자녀, 친구도 아니라는 것이다. 이들을 위한 고급 식당·쇼핑센터·문화시설이 일본의 대도시에 속속 생겨나고 있으며 고가의 여행 상품도 인기를 누리고 있다고 한다.

40~60대를 하나의 세대로 보기는 쉽지 않지만, 이들을 대상으로 마케팅을 할 때 지켜야 할 철칙이 있으니 바로 기존의 고령자 용어로 말을 해서는 절대 안된다는 것이다. 시니어, 정년, 은퇴, 제2의 인생 등이다. 이 책에서 집중적으로 다루는 이 나이의 세대는 '새로운 어른'이다. 어쩌면 시간이 좀 더 지나면 20-30대는 어른 취급을 받지 못할지도 모른다.

종합하자면 피터 드러커가 생전에 말했듯이 일본의 '단카이'세대(1947~1951년 생)가 경험과 지혜를 살려 은퇴 후에 사회적 활동에 종사한다면 일본이 세계 경제의 새로운 모델이 될 수 있다는 것이다.

  • 경험을 사회의 다양한 곳에서 활용하고
  • 세대간 교류(cross-generation)를 통해 젊은 세대를 더욱 지원한다(사내 커뮤니케이션, 업무 지원, 육아 지원, 기술 전승 등)
책 뒷표지에 인쇄된 문구를 옮겨 적는 것으로 내용 요약을 마친다.
  • 어른이라면 '40대 이상'인 시대가 다녀온다.
  • 젊은이에게서 어른으로 무게 중심이 이동한다.
  • 시니어 마케팅이 대부분 실패했던 이유
  • 지금까지 없었던 '새로운 어른'의 출현, 이들은 무엇이 새로운가?
  • 분야별로 세세하게 살펴보는 시장의 진화
  • 새로운 어른과 젊은 세대 간의 크로스 제너레이션이 새로운 미래를 연다
이런 예견이 가능한 일본의 현실이 부러웠다. 사회 변화 중 끓는 물 속의 개구리처럼 그 변화를 느끼지 못하고 있다가 어느새 갑자기 다가와서 그 어떤 대책으로도 해결이 안되는 문제가 무엇이겠는가? 바로 우리 나라의 인구 구조 변화다. 엄밀하게 말하면 지금 우리의 인구 구조 변화는 감지하지 못할 정도로 느린 것이 아니라 정말 가파르다. 이렇게 생산 연령이 급격히 줄어들어서는 올바른 미래 예측을 하는 것이 사실상 불가능하다. 획기적으로 출산률을 늘리든지, 적극적인 이민 대책을 마련하든지(우리처럼 폐쇄적인 문화에서는 외국인 이주 정책에 대하여 누구나 수긍하는 합의안이 도출되기 정말 어렵다), 어떻게 해도 인구를 늘릴 수 없다면 차라리 정년을 연장하여 더욱 나아진 노년기 건강을 바탕으로 계속 일을 하는 새로운 모델을 만들든지...

50대가 될 날이 얼마 남지 않은 지금, 나도 이제 앞으로는 어떤 마음가짐을 가지고 미래를 대비해야 하는지 깊이 생각하게 만드는 그런 책이었다. 이제 반 남은 인생, 인생의 후반전이라는 생각을 하지 말고, 아직 경험하지 못한 미래라는 긍정적인 생각을 갖자.

2017년 11월 6일 월요일

헤어 드라이어 고치기

지난 1월 중순 이후 오래 지속된 절두(납땜인두를 자른다는 의미, 즉 납땜질을 하지 않음)상태를 청산하고자 딸아이가 망가뜨린 헤어 드라이어를 손수 고치기로 하였다. 전원코드가 반복적으로 꺾이면서 내부에서 단선이 일어난 것이다. 그것을 모르고 전원을 연결한 뒤 왜 작동이 안되나 궁금해하다가 코드에서 불꽃이 튀어서 십년감수하였다. 이러다가 주변의 먼지에 옮겨붙기라도 하면 - 작동이 되지 않는다고 해서 스위치를 넣은 상태로 그냥 팽개쳐 두었다가 집이 빈 상태에서 순간적으로 불꽃이 튄다면 - 이는 곧바로 화재로 이어질 것이다.

너무 오랜만에 공구함을 열었더니 수족같이 부리던 와이어 스트리퍼가 보이지 않는다. 에휴, 피복을 무엇으로 벗긴담... 투덜대면서 기기를 분해한 뒤 납땜을 마쳤다.

실수를 발견하기 전의 모습.

재조립을 하려는 순간, 머리를 띵~ 하고 울리는 충격을 받았다. 전원부싱을 끼우지 않고 납땜을 한 것이 아닌가. 수축튜브를 끼우지 않고 선을 납땜해 버려서 이를 다시 끊어내는 실수를 어디 한두번 하였나. 극도의 좌절감에 휩싸였다. 실수는 아마추어의 특권이지만, 이에 따르는 스트레스는 프로의 그것에 못지않다. 으아악, 다시 해야 되잖아!

선을 잘라내고, 다시 피복을 벗긴 뒤 납땜을 하였다. 싸구려 목인두는 용량이 높아서 이런 납땜 작업에 매우 유리하다. 재조립을 하려는데 드라이어 송풍구쪽 부품이 여기저기 금이 간 것을 발견하였다. 순간접착제를 바른 뒤 끈으로 묶어서 붙는 동안 벌어지지 않게 하였다. 요즘 나오는 공산품의 품질이 전반적으로 떨어지는 것인지, 아니면 요즘 아이들이 너무나 물건을 험하게 쓰는 것인지...

그래도 이 제품은 일반적인 스크류 드라이버로 분해할 수 있는 것이라서 자가 수선이 가능하였다. 예전에 사용하던 필립스 헤어 드라이어는 특수 드라이버로만 풀 수 있게 만들어서 고치지를 못했었다.

납땜인두의 열기와 플럭스의 향기(일부러 코를 대고 냄새를 맡지는 않는다)가 요즘 집에서 직접 내려 마시는 에스프레소와 다를 바가 없다. 공작 본능을 일깨울 소소한 프로젝트를 다시 찾아볼까?

학술회의 풍년 유감

구글에서 학술회의, 토론회, 모임 등과 관련한 단어의 뜻을 찾아보았다. 예전에는 '낱말'이라는 순우리말 표현을 자주 썼었는데 요즘은 한자어인 '단어'가 이를 완전히 대체해 버려서 아쉽다.

  • 세미나(seminar): 1. 대학에서 교수의 지도 아래 특정한 주제에 대하여 학생들이 토론·연구하게 하는 교육 방법. 2. 전문인들이 특정한 과제에 관하여 행하는 연수회나 강습회. 순화어는 '연구회', '발표회', '토론회'.
  • 심포지엄(symposium): 특정한 문제에 대하여 두 사람 이상의 전문가가 서로 다른 각도에서 의견을 발표하고 참석자의 질문에 대답하는 형식의 토론회. 순화어는 '학술 토론 회의'
  • 포럼(forum): 1. 고대 로마 시의 중심에 있었던 집회용 광장. 2. 공공의 광장에서 많은 사람이 모여 공공의 문제에 대해 사회자의 진행으로 공개 토의하는 일. 토의를 위한 간략한 주제 발표가 있은 뒤, 청중의 참여로 이뤄짐.
  • 이외에도 colloquium, conference, congress, workshop 등이 있다.
가을이 깊어가면서 각종 포럼을 안내하는 게시글이 풍성하다. 전문학술단체의 연례학술회의는 말할것도 없고 지자체나 정부부처에서 추최하는 행사도 수두룩하다. 여기서 유의할 것은 후자에 속하는 행사이다. 정부부처는 주최, 즉 행사나 모임을 주장하고 기획하여 여는 일을 하고(비용을 댄다는 의미가 강하다), 대개 산하단체에서 주관을 한다. 주관이란 어떤 일을 책임을 지고 맡아 관리함을 뜻한다. 일반인에게는 주최와 주관을 구별하는 것도 쉽지 않지만, 실제 일이 벌어지는 현장에서는 대단히 중요하다. 이를 잘못 표기하거나 실수로 순서를 바꾸거나 하면 그야말로 난리가 날 것이다. 왜냐하면 단연 돋보이는 위치는 '주최'이기 때문이다. 주최자에 대하여 '을'의 입장에서 행사를 주관하는 사람의 어려움을 주변에서 청취하기는 그다지 어렵지 않다.

연구원 내 전자게시판에 올라온 최근 행사 목록을 나열해 보았다.
토론의 장이 열리는 것은 분명히 반가운 일이다. 하지만 엇비슷한 성격의 행사가 너무 많고 - 전세계에서 독보적으로 4차 산업혁명이라는 용어에 열광하는 대한민국에서는 이와 관련한 행사가 많을 것이라는 것이 명백하다 - 이를 개최하는 단체나 조직의 '존재감 부각하기용 행사'에 그치는 경우가 너무 많으며, 그 주최 기관의 영향력 하에 있는 하위 기관에서는 참여자 수를 채우기 위해 사람들을 동원하는 일도 비일비재하다. 주관기관에서는 행사장에 오는 내빈(특히 주최기관 소속의)을 위한 영전에 엄청난 신경을 써야 한다. 소개 순서, 자리 배치, 안내 등.. 잘못하면 '내가 왜 저 사람보다 낮은 취급을 받게 만든거야?'하는 질책성 뒷말을 듣게 되기 떄문이다. 이런 행사를 처음 접하면서 내빈의 축사는 본인이 준비하는 것이 아니라 주관기관에서 작성한다는 것을 알게 되었을때 내가 느낀 문화적 충격은 정말 상당하였다. 요즘은 이러한 일이 많이 줄었다고는 하지만. 만약 초청받은 인사가 직접 축사를 쓰지 못할 정도로 많은 행사를 다녀야 한다면, 그런 행사에 참여한다는 것이 도대체 무슨 의미가 있는가? 지도교수에게 추천서를 부탁하는 사람이 내용을 미리 써서 건네는 관행과 무엇이 다른가? 그리고 어느 정도 급의 인사가 내빈으로 오느냐에 따라서 이 행사의 중요성이 정해지고 만다.

이렇게 고급 호텔에 아침일찍 모여서 참여한 내빈들의 공허한 축사를 듣고, 다음 행사 참여를 위해 자리를 빨리 떠나야 하는 바쁜 내빈들을 위해 미리 기념사진촬영을 하고(제발 주먹 불끈 쥐고 '파이팅'을 외치는 연출 사진은 그만!), 비싼 점심을 먹고, 사람들은 발표에 그다지 집중하지 않고, 돌아가면서 한마디씩 하고 마치는 형식적인 패널 토론으로 끝난다. 그래도 기자들은 의미있는 행사였다면서 기사를 찍어내기에 바쁘다. 혹시 건질만한 것이 없는지 청중으로서 열심히 귀기울여 듣고 메모도 하지만, 늘 아쉬움이 남는다.

요즘은 듣도보도 못한 외국 학술행사에서 나를 강연자로 모시겠다는 이메일을 많이 받는다. 아마도 등록비 납부를 통해서 연명하는 그런 단체에 불과할 것이다. 내가 유명한 학자라서 이런 메일을 받을리가 있겠는가? 학술지에 게재된 논문에서 무차별적으로 이메일을 추출하여 뿌리는 메일일 것이다. 

이런 '영혼없는' 행사가 늘어나면서 컨벤션 비즈니스가 확장되는 효과는 분명 거둘 것이다. 그러나 그것이 전부라면 너무 거기에 들이는 수고와 비용이 너무 아깝지 않은가? 보여주기·예산 소진용 행사는 이제 그만하자. 생기가 넘치고 자발적인 참여로 열기가 가득한 생산성 최고의 진정한 행사에 가고 싶다.

2017년 11월 5일 일요일

독서 기록 - 우리는 왜 억울한가(유영근 지음)

부제: 법률가의 시선으로 본 한국 사회에서의 억울함
책 뒷표지의 소개글: 한국인들이 유난히 억울함을 호소하는 이유는 무엇인가? 개인의 심정과 사회적 틀에서 받아들여지는 억울함의 차이는 무엇인가? 그늘지고 소외된 자들에 대한 따뜻한 시선과 법률적 정의는 양립할 수 있는가? 현직 부장판사가 사회학적 상상력과 법적 균형감각으로 풀어낸 억울함의 실체와 해법.


현재 수원지방법원 성남지원 부장판사로 근무하는 유영근의 책 <우리는 왜 억울한가>를 읽었다. 저자는 주차장에서 일어난 사소한 접촉사고와 자신이 활동하는 조기축구회가 주말에 학교 운동장을 빌려쓰는 문제와 관련한 개인적 경험을 예로 들어서 우리에게 억울함이란 어떠한 감정인지를 소개하는 것으로 글을 시작하였다.

서양에서 시작된 심리학의 견지에서 본다면 한국 사회에서 흔히 말하는 '억울하다'라는 감정에 대한 설명이 없다고 한다('섭섭하다'도 마찬가지일 것이다). 굳이 서양의 언어를 빌려서 설명하자면 부당한 일을 당했을 때 갖게되는 감정의 상태라고 할 수 있는데, 우리가 느끼는 억울함을 설명하는데 중요한 것은 내가 약자여서 당한 일이고, 어쩔 도리가 없었고, 나한테 그 탓을 돌리는 한(恨)에 가깝다고 볼 수 있다. 이 책의 앞부분에서는 최상진 교수의 <한국인의 심리학>을 인용하면서 한국인 특유의 보편적인 감정인 억울함을 설명하는데 지면을 할애하였다. 이 부분은 나에게 대단히 큰 충격이었다. 부당한 일을 당했는데 이에 대해 분연히 저항하거나 일어나지 못하고 속으로 삭이면서 그것이 약자인 내 탓, 내 잘못이라고 자책을 하는 정서가 이렇게 우리에게 뿌리깊은 것이었나? 결국 그것이 홧병의 원인이 아닌가? 그렇다면 이를 부정하고 극복해야 하지 않는가? 이는 나의 가족사와도 얽힌 해묵은 문제이기도 하다. 이에 대해서는 좀 더 깊은 연구와 갈등 해결을 위한 노력이 숙제로 남아있다.

이 책은 심리학에 대한 책은 아니다. 재판정에서 벌어지는 여러 사건을 소개하면서 세상에서 흔히 벌어지는 억울함의 원인과 타당성 여부를 같이 고민해 보면서 올바른 길을 찾아가자는 취지에서 쓰여진 것이다.

우리가 사회생활을 하면서 겪는 충돌이 어느 수준 이상으로 심화되었을 때 우리는 법원을 찾게 된다. 자연과학과 달리 사회과학에는 딱 하나의 정답이 있는 것이 아니다. 따라서 판사로서 평정심을 유지하면서 서로간의 입장을 충분히 듣고 원만한 해법을 찾는 일이 결코 쉽지 않을 것이다. 때로는 분쟁 당사자 모두가 만족하는 원만한 합의를 도출하였지만, 현행법과 사회정의 구현의 측면에서 판단하자면 옳음과 그름 사이의 경계에 걸친 것과 유사한 상황이 된 사례도 있음을 실토하였다.
재판을 하다 보면 명백히 거짓말하는 피고인이나 앞뒤가 맞지 않는 말을 하는 당사자나 증인을 자주 보게 된다. 그래도 법관들은 일단 끝까지 듣고 담담하게 판결로만 말하는 경우가 많다. 통상 법정에서 소리를 높일 때보다 조용히 판결로써 말할 때 결론은 훨씬 가혹하게 나온다. 소리를 높이는 경우는 논쟁을 유도해 반박과 변명의 유지를 주는 것이고, 조용히 듣기만 하는 경우는 더 이상 반박과 변명이 무의히하다고 생각하기 때문이다(154쪽).
끊임없는 고뇌 속에서 묵묵하게 사법 정의를 실현하기 위해 노력하는 법률가들에게 박수를 보내고 싶다. 아직도 부족하지만 우리가 지금 누리고 있는 자유와 권리[지금은 당연하다고 여기는 민주주의, 국민주권, 권력분립, 그리고 사상과 의견에 대한 표현이 자유, 평등의 원칙, 인권의 보장 같은 정치적·사회적 권리 - 275쪽]는 얼마나 많은 투쟁과 희생을 딛고서 얻어진 것인가? 물론 여기에서 6·25 전쟁 당시 우리나라로 와서 싸운 미군(미국)에 대한 고마움을 떠울리는 사람도 있을 것이겠지만.