2025년 1월 16일 목요일

달리기 1월 중간 결산 - 국문 기사를 근거로 논문의 원문을 찾기가 이렇게 어렵다

달리기를 시작한지 6개월째를 맞는 사이 해가 바뀌었다. 겨울 날씨(특히 기온)에 따라서 옷 입는 방법에 대한 데이터도 충분히 쌓았다. 결론은 간단하다. '뛰면 덥다.'



1월 들어서는 하루 건너 하루 뛰기를 철저히 지키고 있다. 특히 최근 3회의 달리기에서는 매번 7 km를 채웠다. 소요 시간은 대략 45분으로, 페이스로 환산하면 6분 26초에 해당한다. 현재의 내 수준으로는 45분 내내 6분 30초 정도의 페이스를 유지하려면 조금 더 노력해야 한다. 평균적으로는 이 페이스가 되지만, 고르지는 않기 때문이다.

현재의 운동량은 일상생활이 어려울 정도로 피로가 누적되거나 다리에 불편함이 느껴질 정도는 아니다. 좀 과하다 싶으면 하루는 5~6 km 정도로 목표를 줄여서 뛰면 될 것이다.

작년 8월 달리기를 시작하던 당시를 떠올려 본다. 처음 며칠은 근육통이 와서 며칠을 고생했고, 그 뒤로 몇 주는 숨이 차서 힘들었다. 초보자는 천천히 달리는 것이 바람직하다고 해서 '터벅터벅' 느리게 뛰면 관절에 더욱 많은 체중이 실리게 되니, 보다 바람직하게는 케이던스를 올리되 좁은 보폭으로 시작해야 된다는 것을 알게 된 것은 몇 개월이 지난 다음이었다. 

어젯밤에는 비로소 엉덩이의 근육을 써서 뛴다는 느낌이 들었다. 그동안은 주로 종아리 근육을 써서 종종걸음을 걷듯이 뛰는 편이었다. 속도를 높이기 위해 무리하게 앞발을 멀리 착지하는 오버스트라이드(overstride)는 좋지 않다고 한다. 그렇게 하지 않고 속도를 올리려면 땅을 힘차게 밀면서 허벅지를 높이 들어 올려야 한다. 드디어 어제 이런 자세가 나오기 시작한 것 같다. 요즘 유튜브 등에서 쉽게 찾을 수 있는 '달리기 전 고관절 워밍업(사례)'를 눈여겨 본 것도 도움이 되었다. 6개월이 되면서 몸이 스스로 더 효율적인 달리기의 방법을 체득해 나가는 것 같다.

보통 스트레칭의 중요성을 많이 강조하는데, 실제로 운동 전후 스트레칭이 부상 예방에 도움이 되지 않았다고 한다. 운동후 몇 시간 뒤에 나타나는 통증을 줄이려면 스트레칭보다는 맛사지가 더 낫다는 논문 소개를 본 일이 있다. 달리기 전에 해야 하는 것은 몸을 깨우는 워밍업이다. 요즘 나는 고관절을 풀고 간단히 어깨 돌리기 등을 한 뒤 기록을 재기 시작하는 출발점까지 약 300 미터를 가볍게 뛰는 것으로 워밍업을 대신하며, 달리기를 마친 뒤 액 5분 정도 걸으면서 쿨 다운을 한다.

체중은 아직도 조금씩 줄어드는 추세이다. 너무 달리기를 많이 하면 근손실이 오기 때문에 근력 운동을 별도로 하거나 동물성 단백질을 섭취해야 한다는 말도 있다. 하지만 달리기에 의한 체중 감소나 근손실은 일정 수준 이상으로는 일어나지 않는다고 한다(2024년 2월 13일 메디컬투데이기사 링크). 달리기는 대표적인 지구력 운동이다. 이 논문의 시사점은 달리기만으로도 정상적 기능에 필요한 근육량을 유지할 수 있다는 점이다. 별도의 근력 운동이 꼭 필요한지 고민하던 나에게는 반가운 소식이었다. 물론 기록 단축을 강렬하게 원한다면 하체 운동을 별도로 해야 될 것이다.

Frontiers 저널에 실렸다고 하는 핀란드 연구자 논문의 원문을 찾고 싶어서 챗GPT에게 기사 내용을 준 뒤 원문을 찾아달라고 해 보았다.  기사는 단순히 '지구력 운동과 근력 운동이 체중, 근육량, 체지방량에 미치는 영향에 관한 연구 결과가 ‘프론티어(Frontiers)’에 실렸다.'라고만 하였기 때문이다. 그러나 챗GPT가 제시한 링크는 내가 원하는 것이 아니었다. 이쯤에서 메디컬투데이의 기자는 실제 Frontiers 논문을 찾아보고 기사를 쓴 것이 아니었음을 진작에 눈치챘어야 한다.

어떻게 해야 논문 원문을 찾을 수 있을까? 운동 의학 분야는 잘 모르니 여기에서 쓰는 용어에는 익숙하지 않다. 기사 첫머리에 나오는 '달리기가 일정 수준 이상의 체중이나 근육량 감소로 이어지는 것은 아니다'를 영어로 번역하게 한 뒤 여기에 저널명이 Frontier를 넣어서 그대로 구글 검색창에 넣어 보았다. 그랬더니 상단의 [Search Labs | AI 개요]에서 몇 개의 링크를 제시하였다.



맨 위의 것을 클릭해 보았다. 영국에서 발간하는 Medical NewsToday라는 미디어의 기사('Running has limited benetits for weighting loss, but it can help prevent weight gain')가 나온다. 논문의 링크는 아니라서 실망을 하였는데, 가만히 보니 메디컬투데이의 기사는 이것을 가져다가 그대로 번역하여 요약한 것으로 보인다. 처음에 나는 메디컬투데이가 Frontiers 저널에 실린 '논문'을 보고 국내에 소개할만 하다고 생각하여 기사를 낸 것이라고 순진하게 생각했다. 하지만 현실은 그것이 아니라 국외 미디어에 실린 '기사'를 보고 번역해서 냈을 것 같다. 만약 그게 사실이라면, 기사를 너무 쉽게 쓰는 것이다. 다른 미디어의 기사를 참조했다고 언급했어야 옳을 것 같다.

Medical News Today의 기사를 챗GTP에게 요약하게 하였다.

  • 달리기는 단기적으로 체중 감량에 도움이 될 수 있지만, 장기적인 체중 유지에는 더욱 효과적입니다. 핀란드 유바스큘라 대학교의 연구에 따르면, 달리기는 체지방 증가를 방지하는 데 유용하지만, 체중 감량을 위해서는 달리기만으로는 충분하지 않을 수 있습니다. 
  • 운동 생리학자인 사이먼 워커 박사는 주당 2-3회의 지구력 운동(예: 달리기)과 저항 훈련을 병행하는 것이 이상적이라고 조언합니다. 또한, 주 4-6회의 규칙적인 운동이 체지방 감소에 더욱 효과적이며, 일주일에 두 번 집중적으로 운동하는 것보다 낫다고 합니다. 
  • 연구진은 20-39세의 젊은 남성과 70-89세의 고령 남성을 대상으로 한 대규모 코호트 연구 데이터를 분석했습니다. 그 결과, 지구력 운동을 하는 사람들은 낮은 체지방률을 유지하면서도 근육량이 감소하지 않았습니다. 이는 달리기가 근육량 유지에도 도움이 될 수 있음을 시사합니다.
  • 그러나 고강도의 장거리 달리기는 근육량 증가를 방해할 수 있으므로, 균형 잡힌 운동 프로그램이 중요합니다. 또한, 충분한 칼로리 섭취가 필요하며, 미국 질병통제예방센터(CDC)는 주당 150분의 중등도 강도의 신체 활동을 권장하고 있습니다.
  • 결론적으로, 달리기는 체중 유지와 전반적인 건강 증진에 유익하지만, 체중 감량을 위해서는 저항 훈련과 균형 잡힌 식단을 함께 고려하는 것이 좋습니다.

달리기를 좋아하는 사람에게 도움이 될 만한 매우 중요한 정보를 제공하고 있다. 그런데 기사를 살펴보니 이런 문장이 있었다. 

Researchers from the University of Jyväskylä in Finland have published these findings in the journal Frontiers.

어라? 여기에는 Frontiers 저널의 논문 원문 링크가 있네?

Body composition in male lifelong trained strength, sprint and endurance atheletes and healthy aga-matched controls. Front. Sports Act. Living, 31 October 2023 | Volume 5 - 2023 | https://doi.org/10.3389/fspor.2023.1295906 (PMID: 38022768)


논문의 제목을 보라. 메디컬투데이의 기사를 보고 이 분야의 비전문가(내가 아무리 생명과학자라고 해도 스포츠의학이나 운동생리학을 꿰뚫고 있지는 못하다)로서 적당한 영문 키워드를 생각해 낸 다음, 이를 PubMed 검색창에 넣어서 기사의 소스가 된 논문의 원문을 찾아낼 수 있었겠는가? 오늘의 경험에 의하면 구글이 실험적으로 서비스하는 AI를 이용하여 겨우 가능하였다? Abstract를 보아도 비전문가가 단순한 키워드 검색을 통해 PubMed에서 이 논문을 쉽게 찾아낼 수 있는 수준은 아니라는 생각이 들었다.

오늘의 결론은 이러하다.

  • 달리기는 이제 완전한 나의 일상이 되었다. 계속 달리자.
  • 국내 온라인 매체의 기자는 기사를 너무 쉽게 쓴다.
  • 잘 아는 분야가 아니라면 논문 정보를 찾기가 쉽지 않으며, AI가 그 과정에서 도움을 준다(챗GPT가 최고인 것은 아니다).
  • sarcopenia(노화와 영양 결핍 등으로 인한 근감소증)라는 용어에 관심을 갖자. 어차피 누구나 늙는다. 노화를 극복하거나 최대한 늦추고 건강한 삶을 살려면, 이 분야에서 어떤 연구 성과가 나오는지 계속 주목해 볼 필요가 있다. 그러한 연구 성과로부터 생활 속에서 실천 가능한 것을 찾아낸다면 더욱 좋다.


2025년 1월 14일 화요일

새로 나온 책 『나라를 위해서 일한다는 거짓말』을 읽고

중앙부처 공무원은 나(그리고 직장 동료)에게는 어떤 존재일까? 먼저 밝혀 둘 것은 나는 공무원은 아니다. 공공기관에 근무하고 있으니 일반인이 보기에는 둘 다 비슷해 보일지도 모르나 결코 동등한 관계는 아니라는 입장을 먼저 밝힌다. 

세상엔 참으로 여러 종류의 사람이 있다. 어느 집단이든 남을 힘들게 하는 사람은 있게 마련이다. 같은 조직의 식구를 힘들게 하는 사람도 있을 것이고, 그 조직과 상호작용하는 외부 조직의 식구를 힘들게 하는 사람도 있을 것이다. 외부 조직 사람들에게 어떤 한숨을 자아내게 하든, 가시적인 성과라는 것을 만들어 내니 내부에서는 반드시 필요한 사람이라고 칭찬을 받기도 할 것이다. 물론 어떤 사함의 평판은 내부와 외부가 한결같지는 않으니 주의가 필요하다.

공무원과 공공기관의 관계는 매우 특수하다. 공무원과 일반 국민(또는 '민원인') 사이의 관계와 사뭇 다르다. 공공기관이라는 말을 '산하기관'이라는 말로 바꾸어 놓으면 '아~!'하고 이해가 갈 것이다. 산하(傘下)란 말 그대로 '우산 아래서 그 신세를 진다'는 뜻이다. 즉, 산하기관이란 어떤 조직이나 세력에 속하여 그 영향이 미치는 범위 아래 있는 기관을 뜻한다. 그렇기 때문에 블로그와 같이 노출된 공간에 공무원에 대한 나의 개인적 경험을 털어놓기는 매우 조심스럽다. 그 관계가 절대로 수평적이지 못하기 때문이다.

온갖 형태의 민원인은 공무원에게 또 중요한 존재이다. 공무원을 힘들게 할 수도 있고, 공무원이 어떤 사업을 어떠한 방향으로 이끌어 나가게 하는 중요한 근거를 마련해 주는 집단이 되기도 한다. 민원인은 동사무소를 찾아와서 소란을 피우는 부류의 사람만을 이야기하는 것이 아니다. 이익집단의 다른 표현으로 보아도 좋다.

요즘 잔잔히 화제를 불러 일으키는 책 <나라를 위해서 일한다는 거짓말>(노한동 지음)을 구입하여 오늘 단숨에 읽었다. 행정고시 출신으로 중앙부처에서 10년 동안 공무원으로 일하면서 서기관까지 진급한 사람이 '먹던 우물에 침을 뱉지 말라'는 말을 들으면서까지 왜 공직 생활을 그만두어야 했을까? 나의 체험을 통해 막연하게 느끼고 있었던 공직사회의 분위기는 저자의 문제의식과 얼마나 많은 부분이 겹칠까? 이런 호기심이 주저함 없이 나를 책 주문으로 이끌었다. 주문은 5일 전에 하였지만 오늘이 되어서 초판 3쇄로 찍한 책이 도착하였다. 참고로 초판 1쇄는 지난달 26일이니 꽤 잘 팔리고 있는 듯하다.

나는 "공적 냉소와 사적 정열이 지배하는"이란 표현을 볼 때마다 이보다 공직사회를 잘 묘사하는 문장은 없다고 생각한다.(프롤로그)

내가 블로그에 글을 열심히 쓰는 것은 순전히 사적 정열의 측면일지는 잘 모르겠지만... 



요즘 그 누구도 공무원을 한가한 사람으로 생각하지 않는다. 중앙부처 공무원은 물론이거니와, 일선에서 민원인을 상대하는 빈도가 압도적으로 높은 지방공무원도 마찬가지일 것이다. 그러나 이들을 힘들게 만드는 노동에서 '가짜 노동'이 차지하는 비중이 압도적으로 높다는 것이 문제이다. 늘 '위'를 지향하는 공직 사회에서는 책임감과 전문성을 가지고서 알뜰하게 나라 살림을 돌보는 것이 어렵다. 한 쪽짜리 문서로 현재를 진단하고 미래를 위한 대책을 담는 것은 곤란하다. 형식에 그치고 그저 윗분들이 읽기 편한 보고서를 만들고 정무직 공무원들의 존재감을 충족시키기 위해 만들어지는 수많은 간담회를 준비하는 일, 이 모두가 가짜 노동이다. 

한 번은 간담회에 단골로 불려 나오던 한 스타트업 대표가 간담회가 모두 끝난 뒤, "고위 공무원들이 의견만 듣고 아무것도 바꾸지 않는다는 걸 이미 경험했다. 제발 나를 다시 부르지 말아달라."라고 볼컥 화를 냈다...(142쪽)

책의 후반부에서는 문화체육관광부 사업의 구체적인 사례를 들었고, 앞부터 중반까지는 일반적이라 할 수 있는 공직사회의 일반적인 문제점에 대하여 논하였다. PMO(Project Management Office, 109쪽)라는 생경한 용어의 시스템을 통한 사업 수행 방식은 내가 작년 1월 말부터 현재 일하고 있는 조직에 몸담기 전에는 알지 못했다. 이렇게 일을 함으로써 적은 수의 사람이 더 많은 일을 관리할 수 있다는 믿음에 빠지게 된다. 그러나 이는 어떤 면에서는 착각이 아닐까? PMO 업체에게 발주자는 '갑'이다. 여러 단계를 거치게 되니 갑작스런 상황 변동에 따른 긴급한 대처가 어렵고, 나라의 돈을 정말 알뜰하고 효율적으로 쓰기 위해 노력하기보다는 발주자에 대한 심리학적 대처에 더 신경을 쓸 수도 있다. 책에서는 고작 몇 달 정도의 실무 경험밖에 없는 인턴 직원이 실제 일을 하는 폐해를 다루었다. 이미 만들어진 산업적인 시스템을 돌리는 방법일 수도 있겠으나, 효율성 추구라는 측면에서는 높은 점수를 주기 어렵다.

어떤 사업을 성공적으로 수행했느냐가 아니라 누구를 가까이에서 모셨는지에 따라 평가를 받는다면 이 또한 불합리한 일이 아니겠는가? 다면 평가에서 좋은 점수를 받기 위해 점심시간을 할애하여 열심히 자기를 파는 사람의 사례에서 느끼는 서글픔은 어느 조직에나 있을 것이다. 나? 나는 자타가 공인하는 '혼밥러'이다. 컴퓨터 앞에서 일하면서 점심 도시락을 먹는... 그래서 아직 읽지는 않았지만 <혼자 밥먹지 마라>(교보문고의 책 소개 링크)라는 종류의 책은 여전히 읽기가 싫다. 공무원 사회의 맥락에서 따진다면 점심식사라는 행위조차 때때로 상관을 모시는 숙제가 되지 않는가? 심지어 돈을 모아서! 요즘은 거의 사라진 문화라고는 하니 다행이다.

수많은 위원회와 정책용역과제는 책임 회피를 위한(또는 결정을 2년 정도 뒤로 미루기 위한, 즉 인사 이동에 의해 다른 사람이 그 자리에 올 때까지만) 아주 합법적인 장치이다.

직업공무원인 관료는 책임을 싫어한다. 특별히 승부를 걸어야 하는 때가 아니라면, 본인이 있을 땐 결정을 최대한 미루고 싶어 하는 것이 공무원의 태생적 속성이다. 연구용역과 위원회는 정책의 전문성과 민주성 증진을 핑계 삼아 공무원이 시간을 벌 수 있게 만들어 주는 결정의 완충지대이다. (116쪽)

이 책은 공직자 사회 내부를 고발하기 위한 비장한 각오로 쓴 것은 아니다. 공직 사회가 필요한 일을 소신 있게 하기 위해서 가짜 노동을 걷어 내야 한다는 주장으로 끝을 맺고 있다. 비판적 시각을 갖고서 정말로 효율적으로 일하려는 고민과 사명감으로 무작한 공무원이 더 많아지길 바란다. 그리고 국민의 복지를 향상시키고 보다 경쟁력있는 국가를 만들어 나가기 위해서 공공기관 종사자들과 동료로서 수평적인 입장에서 같이 일한다는 생각을 갖는 공무원이 더 많아지기를 바란다.

GTDB-Tk 설치 후 첫 실행하기 - 유전체를 이용한 다수의 미생물 동정을 내 컴퓨터에서!

요즘 시대에 새롭게 분리한 미생물을 동정하는 가장 빠르고도 확실한 방법은 아마도 유전체 해독일 것이다. 이미 공개된 type strain(표준균주)의 유전체와 비교하여 ANI가 일정 threshold 보다 크면(대략 95% 이상이며, 종마다 조금씩 다르게 정의한다고 알려짐) 그 종에 속한다고 판명하면 된다. 그동안의 문제는 이 과정을 빠르게 진행하기 어려웠다는 것이다. 대충 어느 genus에 속하는지 알게 되면 여기에 속하는 미생물의 공개된 유전체(특히 공인된 종의 표준균주 포함)를 전부 받아서 pyani나 fastANI로 분석을 해야 하는데, 많은 시간이 소요된다. 16S rRNA 분석에 의해 대충 어느 종에 가까울 것이라고 판단하여 후보 종을 줄여 나갈 수도 있으나, 재수가 없으면 비교 대상을 더 넓혀야 한다. 특히 BacillusPaenibacillus와 같은 대책이 없는 genus의 경우 XYZbacillus라고 이름이 붙은 녀석들까지 건드려 봐야 할지도 모른다. 

현재 22,176개의 type strain 정보를 갖고 있는 DSMZ의 Type (Strain) Genome Server, 즉 TYGS도 좋은 자원이지만 웹사이트에 유전체 서열 파일을 제출하고 한참을 기다려야 한다. 50개 정도 유전체 파일을 밀어 넣으려면 시간도 오래 걸리고 상당히 미안해진다. RAST server에 작업을 제출할 때에는(꽤 오랜 전의 일이 되었지만) 별로 미안한 느낌이 없었는데 말이다.

1990년대에 Jean P. Euzéby가 시작하여 LPSN이라는 약자로 잘 알려진 List of Prokaryotic names with Standing in Nomenclature가 DSMZ로 넘어가면서 TYGS는 미생물 명명법 체계와 유전체 정보에 기반한 더욱 좋은 자원이 되었을 것이다.

호주 퀸즐랜드 대학에서 개발한 GTDB(Genome Taxonomy Database)는 마커 유전자(박테리아: 120개, 고세균: 53개)를 이용하여 계통수를 구성하고, ANI를 이용하여 종 구분을 하여 구축한 유전체 기반 미생물 분류 DB라고 할 수 있다. 다시 말해서 웹 인터페이스에서는 이미 구축해 놓은 정보(2024년 4월 24일자 공개버전에서는 596,859개 유전체 수록)를 보여주는 것과 FastANI calculator를 제공한다. 


만약 수십 건 정도의 유전체를 이용하여 정확한 종 분류를 하고 싶다면 GTDB-Tk를 로컬 컴퓨터에 설치하면 된다. 이에 대한 논문 2020년에 별도로 나왔다(링크). Query genome에 대한 taxonomic classification 세부 사항은 논문을 직접 확인하는 것이 좋을 것이다.

요즘은 업무를 하는 틈틈이 10여년 전에 일루미나로 시퀀싱해 둔 72개의 미생물 유전체 정보를 선별하여 국가 바이오 데이터 스테이션에 등록하기 위한 작업을 진행 중인데, 시퀀싱 당시에 붙여놓은 각 균주의 종 분류가 올바른지 확인하기 위해서 GTDB-Tk를 이용하기로 하였다. 이에 관한 상세한 스토리는 72 prokaryotic genomes에 작성해 나가고 있다.

Bioconda를 이용한 설치는 별로 어렵지 않을 것이라고 생각했었다. 그런데 테스트 실행을 하는 과정에서 일찌감치 문제가 발생하였다. 개발자가 제공하는 Docker image를 사용함으로서 설치에 따르는 문제를 우회해 보려고 시도하였으나 이 역시 잘 되지 않았다. 지금 생각해 보니 Docker image와 reference database의 버전 문제가 아니었나 하는 생각이 든다.

첫 실행 단계에서 벌어지는 문제에 대하여 GTDB 포럼을 검색해 보니 numpy의 버전을 낮추라는 제안이 있었다. Conda 자체를 새로 깔아서 해결했다는 코멘트도 있어서 일단 가장 쉬운 방법을 택했다. 즉, 내 데스크탑 서버에 아예 다른 계정을 새로 만들어서 conda를 깨끗하게 설치하고 GTDB-Tk를 환경도 구축하였다. Mamba가 나온 뒤로 conda 생태계도 조금씩 세분화되는 것 같다. 물론 환경 구축이나 패키지 설치에는 mamba가 훨씬 편리한 것은 맞는데, 'mamba activate <env>'라는 명령어를 입력하는 것이 아직은 어색하다. 예전에는 mamba가 conda이 패키지 매니징 기능만을 대체한다고 생각하였는데 점점 그 영역을 넓혀 나가는 것으로 보인다. 이번에는 새 계정에 conda를 설치하기 위해 miniconda가 아닌 miniforge를 사용해 보았다.

그래도 여전히 GTDB-Tk의 테스트 실행, 즉 첫 단계인 'gtdbtk identify'(prodigal을 이용한 gene prediction 단계)에서 문제가 발생하였다. 화면으로 나오는 메시지를 잘 살펴보았다.

...
AttributeError: module 'numpy' has no attribute 'bool'.
`np.bool` was a deprecated alias for the builtin `bool`. To avoid this error in existing code, use `bool` by itself. Doing this will not modify any behavior and is safe. If you specifically wanted the numpy scalar type, use `np.bool_` here.
The aliases was originally deprecated in NumPy 1.20; for more details and guidance see the original release note at:
    https://numpy.org/devdocs/release/1.20.0-notes.html#deprecations
...

numpy 버전을 1.20보다 낮은 것으로 바꾸어야 할 것만 같다. Bioconda를 이용하여 GTDB-Tk를 최신 버전으로 깔면 numpy는 1.24.4가 되는데 이 무슨 조화란 말인가? 다음 명령어를 이용하여 gtdbk-2.1.1 환경을 그대로 유지한 채 numpy를 다운그레이드하였다.

(gtdbtk-2.1.1) $ mamba install -c conda-forge numpy=1.19.5

numpy 버전을 내리고 나서 다시 gtdbtk 명령어를 실행해 보았다. 비로소 identify - align - classify로 이어지는 전 과정이 순조롭게 진행되었다. 화면으로 표시되는 진행 상황을 살펴보니 마커 유전자를 발굴하는 데에는 TIGRFAM protein family를 쓰는 것 같았다. 아, 추억의 TIGRFAM이여... 언제 기회가 된다면 미생물 유전체 분야의 값진 유산인 TIGRFAM에 대해서 글을 남겨야 되겠다.

최종 결과는 박테리아와 고세균 각각에 대해서 별도의 summary.tsv 파일(<prefix>.bac120.summary.tsv and <prefix>.ar53.summary.tsv)로 제공된다. 이 파일에 대한 설명은 여기를 참조하라. 결과 파일의 맨 마지막 컬럼인 'warning'(indicates unusal characteristics of the query genome that may impact the taxonomic assignment)에서 어떠한 글을 남겼는지 확인해 보았다. 72개 유전체 어셈블리 중 8개에 대해서 경고문이 나왔으며, 다음과 같은 세 부류로 압축된다.

  1. Genome has more than ##.#% of markers with multiple hits
  2. Genome not assigned to closest species as it falls outside its pre-defined ANI radius
  3. Insufficient number of amino acids in MSA (#.#%)

1번은 아마 다른 균주로 오염이 된 것일테고, 2번은 type stain과 비교 시 ANI threshold 이내에 들어오지 못하는 것으로 보이며, 3은 sequencing coverage가 충분하지 못하여 genome completeness가 떨어진 것으로 보인다. GTDB-Tk 분석을 하기 전 k-mer analysis, phyloFlash 및 ZGA pipeline을 통해서 read 및 assembly 차원에서 품질이 떨어지는 샘플를 추려 놓았으니 이를 GTDB-Tk의 결과와 비교해 보면 재미있을 것이다. 

남들이 이미 만들어 놓은 멋진 도구나 자원을 늘 가져다 쓰기만 하는 것이 부끄럽다. 은퇴하기 전에(아직 꽤 많이 남았다!) 뭔가 나도 이 업계에 기여했다는 흔적은 남겨야 하는데...

챗GPT에게 anaconda, conda, miniconda, mamba 및 miniforge의 차이를 설명해 달라고 부탁해 보았다. anacond~miniconda~miniforge(배포판), conda~mamba(환경 및 패키지 관리 도구)라고 보면 쉽다. 다음은 챗GPT의 답변 일부를 인용한 것이다. Bioconda와 같은 '채널'을 이해하는 것도 중요하다.




추천 사용 시나리오(챗GPT 답변)

  1. 초보자: Anaconda
    데이터 과학 및 머신러닝을 빠르게 시작하고 싶다면 Anaconda가 적합합니다.

  2. 고급 사용자: Miniconda 또는 Miniforge
    최소 설치 후 필요한 패키지를 선택적으로 설치하려는 경우 Miniconda나 Miniforge를 권장합니다. 특히 M1 Mac과 같은 ARM 기반 환경에서는 Miniforge가 적합합니다.

  3. 빠른 속도: Mamba
    Conda의 느린 속도에 불만이 있다면 Mamba를 사용하는 것이 좋습니다. Conda와 동일한 명령어로 사용할 수 있습니다.

   


2025년 1월 11일 토요일

산켄(Sanken) SI-1525HD 앰프에 스피커 보호회로를 달았다

전원을 넣을 때 스피커에서 '퍽'하는 팝업 노이즈가 나는 것이 귀에 거슬려서 오래전부터 계획했던 스피커 보호회로 장착을 드디어 실행에 옮겼다. 이런 종류의 스피커 보호회로는 전원 투입 후 수 초가 지난 다음에 스피커와 앰프의 출력부를 연결해 준다. 만약 앰프의 증폭용 반도체 소자가 망가져서 전원의 직류가 그대로 스피커로 나가게 될 때 이를 차단하여 보호하는 기능도 있다. 진공관 앰프는 아무리 망가진다고 해도 출력 트랜스포머가 있기 때문에 스피커로 직류가 나갈 수는 없다. 스피커에 만약 직류 전압이 가해지면 보이스 코일이 한쪽으로 과도하게 튀어나가므로 곧 망가질 것이다.

스피커 보호회로는 알리익스프레스에서 구입하였다. 많은 종류가 있기 때문에 적당한 것을 고르면 된다.


이 기판을 동작시키려면 직류 또는 교류 12-15V의 전원이 필요하다. IC114에서 구입해 놓았던 35밀리 전원트랜스(0.25A, 제품 링크)를 쓰기로 했다. 실제로 기판을 연결하여 테스트를 해 보니 12V 탭에서는 10V 정도의 전압이 나와서 작동이 잘 되지 않았다. 따라서 15V 탭을 쓰기로 하였다.


주말 아침이 되어 판을 벌였다. 전원트랜스와 스피커 보호회로를 삽입해야 하므로 앰프 기판을 앞쪽으로 이동하여 고정해야 하고, 약간의 타공 작업을 더 해야 한다. 삼십분에서 한 시간이면 넉넉하게 끝날 것이라 생각했는데 그게 아니었다. 앰프의 속판에 구멍을 잘못 뚫지 않나, 트랜스를 엉뚱한 곳에 연결하지 않나... 스스로에게 물었다. '나는 바보 아닌가?'

예를 들자면 속판 오른편 가장자리 아주 좋은 위치에 이미 구멍이 나 있어서 여기에 볼트를 아래쪽에서 위로 넣어 IC의 방열판(오른쪽)을 고정하였다. 그런데 이 구멍은 원래 속판을 플라스틱 케이스에 고정하기 위한 볼트를 위한 것이었다. 구멍은 6개이지만 네 귀퉁이만 평소에 쓰고 있으니 그 용도를 잊고 있었다. 이 구멍에 볼트를 아래에서 위로 관통하여 방열판을 고정하면, 플라스틱 케이스 하판의 나사산 삽입용 돌기에 볼트 머리가 닿아서 속판이 위로 뜬다...



작업을 마친 뒤 CD 플레이어와 스피커를 연결하였다. 전원을 넣으니 약 3초가 지난 뒤 '짤깍'하고 릴레이가 붙는 소리와 함께 음악이 흘러나온다. 이렇게 간단한 작업을 하면서 엉뚱한 실수를 몇 개나 하다니... 포플레이, 비틀즈, 제시카(소녀시대의 '제시카'가 아니라 1998년에 Goodbye라는 노래를 발표해서 우리나라에서 큰 인기를 끌었던 스웨덴 여가수 Jessica Folcker)의 것을 꺼내어 재생해 보았다.



91년대 초반에 생산된 롯데 LCD-7500를 2014년에 중고로 구입하여 지금껏 잘 사용하고 있다. 2015년에 직접 픽업(KSS-210A)을 갈았고, 작년에는 전면부의 택트 스위치를 교체하였다. 알리익스프레스에서 호환 픽업과 메커니즘을 요즘도 팔고 있어서 앞으로도 유지보수를 하는 데에는 문제가 없을 것이다.

해가 지기 직전 7 km를 달리고 돌아와서 저녁을 먹은 뒤 거실에서 PCL86 싱글 앰프로 KBS 클래식 FM의 <세상의 모든 음악>을 들으며 글을 쓰고 있다. 여느 때보다 풍성한 소리로 음악이 흘러 나온다. 

자작 6V6GT 싱글 앰프의 섀시 작업이 올해 오디오 DIY의 가장 큰 목표이다. 상판 설계는 다음과 같은 상태까지 이르렀다. 알리익스프레스에 주문한 R-코어 출력트랜스 고정용 U 볼트가 도착하면 나머지 부품을 주문한 다음 정확히 치수를 재서 도면을 확정할 예정이다.




2025년 1월 10일 금요일

스트레스를 날리기 위해 영하 11도에 달려 보았다

올 겨울 들어서 최강의 한파가 몰아치기 시작하였다. 오늘 아침은 영하 15도를 기록하였다. 스트레스를 많이 받도 퇴근한 어제, 영하 11도임을 확인하고 밤 9시 40분쯤 딱 3 km만 뛸 요량으로 밖으로 나섰다. 상의는 반팔+긴팔+패딩조끼+바람막이, 하의는 타이즈와 약간 두꺼운 바지. 영하 2도 정도에서 입었던 복장에 한 겹씩을 더하였다. 

실제로는 30분, 4.7 km를 사뿐사뿐 뛰었다. 눈이 내려 미끄러운 길에서 넘어지지 않으려고 많은 노력을 하였다. 달리기를 마쳤더니 영하 12도로 기온이 더 떨어졌다. 



'이 정도의 온도에서는 이렇게 입고 뛰면 되겠다'는 데이터를 쌓아가는 셈이다. 어제보다 더 추울 때 달리는 일은 앞으로도 흔치 않을 것이다. 미국 스포츠의학회에 따르면 기온이 섭씨 영하 22도 이하로 떨어질 때에는 야외 러닝을 자제하라고 한다(관련 기사 링크). 

마스크는 꽁꽁 얼었지만 바람이 없어서 달리는데 문제는 없었다. 밤에 바람이 없는 데에는 충분한 기상학적 근거가 있다고 한다. 새벽 해뜨기 전에도 바람은 없지만, 공기 중에는 오염물질이 가득하다고 한다. 바람이 가장 심한 때는 해가 지기 전의 낮이라고 한다.


어제 회의를 위해 만났던 사람(두 그룹의 공무원)으로부터 많은 문화적 충격과 스트레스를 받았다. 그중에서 하나는 일방적인 반말 문화에 관한 것이었다. 정황을 상세히 적으면 대상을 특정할 가능성이 있어서 소심한 나는 <말 놓을 용기>라는 책을 지은 이성민 작가의 인터뷰 기사를 대신 소개한다.

'말 놓을 용기' 이성민 "한국·일본만 존댓말 써...수평적 관계 이끄는 '평어' 보편화되길" - 투데이신문 2023년 1월 10일

화제의 신간 <나라를 위해서 일한다는 거짓말>을 주문해 놓았는데 예정보다 훨씬 늦게 도착할 예정이다. 잔뜩 기대하고 있었는데...


2025년 1월 8일 수요일

곧 사라질 NCBI PopSet은 무슨 목적의 데이터베이스였을까

2025년 1월에 서비스가 종료되는 NCBI의 데이터베이스(PopSet)에 관해서 공들여 공부할 필요성은 그다지 높지 않을 것이다. 그러나 게놈 고물상의 영업 활동을 위해서는 그 흔적이 사라지기 전에 '기억'을 남겨놓는 것이 중요하다고 생각한다. 그동안 내가 수집한 '고물'은 K-BDS에 전부 등록해 놓았다(링크). 오늘의 글은 스무 번째 고물을 등록하기 위하 자료를 준비하다가 알게 된 것을 기록하고자 함이다.

NCBI's PopSet Database to Retire Effective January 2025 - NCBI Insights  2024년 8월 14일

위에 소개한 글에는 PopSet 서비스 종료에 대한 불만을 털어놓는 댓글이 있었다. 소수 사용자의 의견에도 관심을 가져야 한다.

PopSet이란 무엇인가? https://www.ncbi.nlm.nih.gov/popset이라는 URL도 곧 사라질 것이다. 여기를 방문해 보면 "The PopSet database is a collection of related DNA sequences derived from population, phylogenetic, mutation and ecosystem studies that have been submitted to GenBank"라고 하였다. PopSet DB 서비스가 종료됨으로써 관련이 있는 DNA 서열을 한데 모아서 제출하거나 또는 한꺼번에 다운로드할 수 있는 편의성은 사라지고, 앞으로는 개별적인 서열로서 검색하거나 접근해야 한다고 공지하였다. 관련성이 있는 서열을 앞으로 하나의 BioProject로 묶어서 제출하는 것이 가능할까? 그건 잘 모르겠다.

하필이면 지금 이 시점에 2025년 1월 종료하게 될 PopSet을 알게 되다니? 'Bacterium NLAE-zl-H470'이라는 어떤 분리 균주의 정체를 추적하다가 PopSet이라는 것이 있다는 것을 오늘 처음 알게 되었다. 최근 게놈 고물상 활동의 일환으로서 2013-2014년도에 일루미나로 시퀀싱해 두었던 72개 미생물 균주의 raw data를 다시 점검하고 있었다. 대부분의 경우 KCTC 번호가 붙은 미생물 자원이라서 원한다면 얼마든지 분양 신청이 가능하다. 물론 약간의 사연 때문에 현재 분양이 불가능한 것도 있다.

10년이 넘게 지나면서 진작에 논문을 쓰거나 최소한 유전체 정보를 등록하여 공개라도 해 두었으면 정말 좋았을 것이다. 균주를 제공한 사람이나 시퀀싱 결과물을 들고 있는 나나 다들 바빴다고 해 두자. 72개 균주는 대부분 표준 균주였다. 따라서 이에 대한 시퀀싱 및 분석에 대한 필요성은 늘 제기되었었고, 우리가 시퀀싱한 것과는 별개로 이미 외국에서 해독을 완료하여 공개를 해 버린 것이 많다. 이러한 시점에서 굳이 노동력을 들여서 10여년 전 자료를 다시 건드리는 것이 옳은지 참 고민이 많았다. 그래도 필요한 일이라고 생각한다.

10년 전에는 k-mer analysis를 통해서 오염 여부를 정성적으로 점검하고 나서 CLC Genomics Workbench로 contig를 조립하는 정도로 그쳤다. 그러나 지금은 어떠한가? Whole-genome shotgun read로부터 phyloFlash를 이용하여 16S rRNA를 확인함은 물론이요, ZGA pipeline을 이용하여 조립 결과에 대한 QC도 실시해 나가고 있다. 다음은 ZGA의 작업 로그이다. 얼마나 친절한가? 이렇게 얻은 contig sequence를 내 리눅스 워크스테이션에 설치된 GTDB-Tk에 투입하면 species 수준의 동정 정보를 얻게 된다.

2025-01-08 12:43:03,662 - INFO - Checking input files.
2025-01-08 12:43:03,662 - INFO - Read quality control started
2025-01-08 12:43:44,026 - INFO - Reads processing started
2025-01-08 12:43:44,026 - INFO - Trimming and filtering paired end reads
2025-01-08 12:43:47,663 - INFO - Merging paired-end reads.
2025-01-08 12:44:06,678 - INFO - Read processing finished
2025-01-08 12:44:06,678 - INFO - Estimating genome size with mash using: /data/project/52_KCTC_72_microbial_genomes_2014_Apr/01_Illumina_2014-04-16/05_zga_assembly/zga_3590T/reads/lib1.u1.fq.gz, /data/project/52_KCTC_72_microbial_genomes_2014_Apr/01_Illumina_2014-04-16/05_zga_assembly/zga_3590T/reads/lib1.u2.fq.gz, /data/project/52_KCTC_72_microbial_genomes_2014_Apr/01_Illumina_2014-04-16/05_zga_assembly/zga_3590T/reads/lib1.merged.fq.gz
2025-01-08 12:44:42,683 - INFO - Estimated genome size is 2754800 bp at coverage 464.905.
2025-01-08 12:44:42,683 - INFO - Assembling started
2025-01-08 13:09:04,211 - INFO - Assembling finished
2025-01-08 13:09:04,228 - INFO - Assembly length: 2603790
2025-01-08 13:09:04,228 - INFO - Contig count: 53
2025-01-08 13:09:04,228 - INFO - N50: 235623
2025-01-08 13:09:04,228 - INFO - Checking genome quality
2025-01-08 13:09:06,804 - INFO - Bacteria marker set will be used for CheckM
2025-01-08 13:09:21,945 - INFO - Genome completeness: 98.28%
2025-01-08 13:09:21,945 - INFO - Genome contamination: 0.0%
2025-01-08 13:09:21,945 - INFO - Genome heterogeneity: 0.0%
2025-01-08 13:09:21,945 - INFO - Genome annotation started
2025-01-08 13:09:22,027 - INFO - No locus tag provided. Generating it as MD5 hash of genome
2025-01-08 13:09:22,033 - INFO - Locus tag generated: FOXIOS
2025-01-08 13:09:43,983 - INFO - Workflow finished!
2025-01-08 13:09:44,064 - INFO - ZGA ver. 0.0.9post2
2025-01-08 13:09:44,064 - INFO - Full log location: /data/project/52_KCTC_72_microbial_genomes_2014_Apr/01_Illumina_2014-04-16/05_zga_assembly/zga_3791T/zga.log

요즘 같아서는 long read sequencing technology를 이용하여 너무나 쉽게 circular chromosome을 얻어 버리지만, 많은 경우에 시퀀싱 서비스 업체를 통해서 최종 결과물만 얻게 되니 그 뒤에 숨어있는 수많은 과학과 중간 과정에서 검토해 봐야 할 단계가 생략되고 만다. 즉 연구자는 가격과 품질만을 따지는 단순한 '소비자'가 되고 만 것이다. 그 간극을 메꾸고자 함이 바로 게놈 고물상의 역할일 것이다. 왜냐하면 우리는 소비자이기 이전에 연구자가 되어야 하기 때문이다.

시퀀싱 대상 중 몇 개의 균주는 KCTC에 근무하던 연구자가 따로 입수하여 사용하던 것이다. 이들은 동정이나 특성 분석을 거쳐 공식적으로 KCTC 번호를 부여받아 관리되지는 못하였고, 이를 관리하던 연구자 중에는 이미 퇴직을 한 분도 있다. Genus 수준까지 동정이 되어 있었다면 그나마 다행인데, 어느 샘플은 Bacterium NLAE-zl-H470라고만 되어 있었다. 

무턱대고 구글에 이 명칭을 넣어 보았다. 2019년 PLoS One에 실린 논문 'Baseline human gut microbiota profile in healthy people and standard reporting template의 supporting information' 중 하나인 S6 Table <Blacklist of Filtered-nt>에, 그리고 2019년에 발간된 대만의 어느 석사학위 논문('Development of a culturomic system and isolation of a bacterial strain associated with low trimethylamine (TMA) producing phenotype', 링크)에 이 이름이 보였다. 그런데 정말 흥미로운 것은 NCBI Taxonomy에 이것이 올라와 있는 것이었다.

bacterium NLAE-zl-H470 (NCBI TaxID: 1201806)

제대로 동정도 되지 않았는데 species rank로 버젓이 올라 있다는 것이 너무나 신기했다. 연결된 nucleotide 자료(JX006681.1)로 이동해 보니 미국의 C.N. Ziemer라는 사람이 2012년에 등록한 'Bacterium NLAE-zl-H470 16S ribosomal RNA gene, partial sequence'였다. 타이틀에 따르면 이 균주는 인체 분변에 cellulose 또는 xylan/pectin을 넣어서 8주간 enrichment culture를 거친 뒤 분리하였다고 한다. BRENDA의 TaxTree Explorer에서도 bacterium NLAE-zl-H470이 보인다(링크). 아마도 NCBI Taxonomy의 정보를 그대로 가져다가 보여주는 것으로 여겨진다. Flat file의 KEYWORD는 비어있다.

Taxonomy 웹사이트 오른편에는 Nucleotide, PopSet, 그리고 Taxonomy라는 Entrez record가 보였다. PopSet이라? NCBI Taxonomy Browser에 수시로 들락거리면서 PopSet이라고 표시된 링크에는 관심을 가지지 않았었다. 클릭을 해 보았다. PopSet이 어떤 성격의 데이터베이스인지 쉽게 이해할 수 있었다.



PopSet이 서비스를 종료한다 하더라도 이를 구성하는 각 염기서열은 이미 공지하였듯 고유의 accession number를 통해 접근이 가능하다. 그러나 어떤 연구자가 무슨 목적으로 한 세트의 염기서열을 생산했는지 그 배경이나 맥락을 이해하기 어려울 것이다. 그런 차원에서는 K-BDS의 바이오프로젝트가 더욱 적합할 수 있다.

2010년에 GenBank의 하위 DB인 GSS에 Paenibacillus polymyxa의 표준균주인 ATCC 842의 유전체 염기서열을 등록한 일이 있다. Accession number는 DU532978부터 DU534724까지의 1747개의 서열 단편이었다. 클릭해 보면 'KEYWORD    GSS.'라는 라인이 보인다. GSS는 PopGen처럼 하나의 단위로 데이터를 묶어서 보여주지는 않는다.

고물을 뒤지다가 새로운 고물을 찾게 되고, 또 고물의 먼지를 털고 얼마나 쓸만한지 알아보는 과정에서 새로운 정보와 역사를 알게 되었다. '온고지신'이란 바로 이럴 때 쓰는 말일 것이다.

2025년 1월 5일 일요일

자작 R-코어 출력 트랜스포머를 고정하기 위한 마지막 아이디어

진공관 앰프 자작에 사용할 R-코어 트랜스포머를 처음으로 만들었던 것이 지난 2018년이었다. J-50이라 이름이 붙은 R-코어 한 조를 제이앨범(오디오퍼브의 소개 글 링크)에서 구입하여 총 두 차례에 걸쳐 출력 트랜스포머를 감아 보았다. 코어는 한 조인데 두 차례를 만들었다? 이게 무슨 소리인지 잠시 그 내력을 소개해 보겠다.

처음 출력 트랜스포머를 만들어서 지금은 사라진 6N1 + 6P1 싱글 앰플리파이어에 연결하여 쓰다가, 잠시 6LQ1 싱글 앰플리파이어에 적용하여 사용하였다. 그 뒤 다른 앰프(6V6GT 싱글)에 사용하기 위해 코일을 다 풀어내고 다시 감았다. 두 번째 시도에서는 전동 드릴을 이용한 권선기를 만들어서 에나멜선을 감기도 했으니 그 수고란 이루 말할 수 없다. 너무나 손이 많이 가기에 다시 출력 트랜스포머를 만들 생각은 하지 않는다. 부끄러운 경험이지만 전원용 EI 코어 트랜스포머를 다 풀어서 코어를 한 방향으로 재조립한 뒤 싱글 출력용 트랜스포머로 개조해 본 일도 있었으니...

보빈에 에나멜선을 감기 전의 R-코어 모습. 원본 글은 2022년 11월에 작성하였다(링크).


이렇게 2018년부터 2024년까지 무려 만 6년에 걸쳐 R-코어 트랜스포머를 두 번 만드는 동안에도 이를 앰프에 고정하는 가장 적당한 방법을 생각해내지 못하였다. 기성품 트랜스포머를 쓴다면 다음과 같이 볼트를 사용하여 적당히 체결하면 그만이다.

6PQ8을 사용한 푸시풀 앰프. 모양은 허름하지만 드라마 촬영 시 소품으로 쓰였다. 미술팀의 요청에 따라 생활용품을 이용한다는 제작 콘셉트에 맞추어 만들었다. 안타깝게도 그 드라마는 8회분(시즌 1) 촬영이 다 끝나고 몇 년이 지난 지금까지도 방송이 되지 못하고 있다. 이 앰프의 바닥에는 드라마에 출연한 주연 배우의 사인만이 남은 채로...

구멍만 몇 개 뚫으면 트랜스포머 고정에 아무런 문제가 없다. 기성품은 이래서 좋다.


R-코어 트랜스포머 역시 기성품이라면 고민할 필요가 없다. 다음 사진의 것은 전원용 트랜스포머(기성품)의 사례이다.



하지만 직접 코일을 감아서 만든 R-코어 트랜스포머라면? 도대체 어디 붙들어 맬 곳이라고는 없다. 아크릴판으로 상자를 만들어서 그 안에 넣고 실리콘 같은 것으로 고정하는 방법(제이앨범의 실제 사례)을 제외한다면 말이다.

이 트랜스포머 2개를 고정해야 한다.


계속 머리를 굴리다가 파이프를 고정할 때 쓰이는 새들이나 U볼트를 사용하는 아이디어를 떠올리게 되었다. 이를 아래 그림에 표현해 보았다.



먼저 반새들 아이디어. 이 방법의 문제는 위 그림에서 빨간색 원으로 표시한 곳에서 새들과 보빈 사이에 간섭이 일어날지 여부를 예측하기가 어렵다는 것이다. 호스 클램프가 사선으로 지나가기 때문에 R-코어의 직경(대략 22 mm)보다는 큰 파이프를 수용할 수 있는 것을 써야 하고, 한쪽에서만 고정해야 할 뿐만 아니라 PCB 서포트의 길이가 고정 강도에 영향을 미칠 것이 자명하다. 

따라서 지금으로서는 U볼트를 쓰는 두 번째 아이디어가 더 나아 보인다. 양쪽에서 M6 너트로 조이면 되니 균형을 맞추는 데에도 문제가 없고 보빈이 으스러지지 않을 정도로만 적절히 잘 조이면 된다. 실측과 계산으로 선정한 U볼트는 국내에서 구하기 어려운 규격(M6 x 48 x 68 mm)이라서 알리익스프레스에서 구입하고자 한다. 참고로 U볼트는 KS 규격이 따로 없어서 국내에서는 인치 규격으로 만들어진다고 한다.

U볼트를 먼저 구입하여 문제가 없는지 확인한 다음 고정용 구멍의 크기와 위치를 확정한 뒤 상판 설계 작업을 마무리하는 순서로 진행하면 될 것이다.