우리는 보통 "질병에 걸릴 것 같아서"가 아니라, 질병에 걸려 "발생하는 증상" 때문에 병원을 찾아 치료받곤 합니다. 따라서 증상이 늦게 발현되는 경우 혹은 증상을 알아채지 못한 경우, 치료 시기를 놓쳐 치료에 어려움을 겪거나 질병이 급격히 진행되는 일들이 자주 발생합니다.

또한, 만성 질환을 앓고 있거나 특정 치료법을 시행한 경우에는 환자가 입원하거나 매일 병원에 방문하지 못한다면, 자신의 건강 상태를 확인하고 예후를 지속해서 살펴야 하는 번거로움이 있습니다. 지금부터 소개할 "라이프로그" 데이터는 앞선 문제와 번거로움을 해소하는 데에 많은 도움을 주고 있습니다!



[그림 1] https://www.galendata.com/digital-healthcare-future-heathcare/


라이프로그란?
 
먼저 라이프로그(Life log)란 일상생활을 의미하는 'life'와 기록을 의미하는 'log'의 합성어이며, 문자 그대로 일상에서 기록 및 저장되는 모든 정보를 의미합니다. SNS에 업로드한 글, 일상적인 대화가 담긴 음성 파일 등 디지털로 기록 가능한 모든 데이터는 라이프로그라 할 수 있습니다.
특히, 헬스케어 분야에서 말하는 라이프로그는 병원에 방문하지 않고도 환자의 건강 상태를 실시간으로 업데이트하거나, 질환의 예후를 감지 및 예측하는 중요한 자료로 사용될 수 있는 PGHD(patient generated health data)의 확장된 범주로 분류되고 있습니다. PGHD는 데이터를 생성하는 주체가 질환을 앓고 있는 환자였다면, 라이프로그는 그 주체를 건강한 사람까지 포괄하는 개념입니다.


라이프로그의 등장
라이프로그는 자료를 저장하는 저장 장치와 데이터의 수집을 위한 센서가 더욱 정밀하게 발달하며, 그 양이 기하급수적으로 증가하기 시작하였습니다. 또한, IT 기술이 발전하고 정보와 지식을 공유하는 문화가 사회 전반에 자리매김함에 따라 더 많은 사람에 의해 다양한 종류의 라이프로그가 생산되고 있습니다.


라이프로그의 종류


 
 
라이프로그는 문자 그대로 일상에서 기록되는 모든 정보이기에, 그 종류가 정해져 있지는 않습니다. 모바일 기기의 사용 패턴부터 SNS 활동 로그까지 모든 개인의 삶에 대한 모든 데이터가 포함됩니다. 그 중 헬스케어 분야에서 자주 활용되는 라이프로그에는 크게 활동량 데이터, 영양 데이터, 자가 측정 임상 데이터, 커뮤니케이션 데이터 4가지가 존재합니다. 활동량 데이터는 라이프로그 중 가장 먼저 모이기 시작한 데이터이고, 웨어러블 디바이스를 통해 수동적인 방법으로 수집할 수 있습니다. 두 번째 영양 데이터는 활동량 데이터 다음으로 대두되고 있으며, 스마트폰에 직접 기입하는 형식으로 수집합니다. 식생활 변화를 헬스케어 분야에 적용할 수 있다는 장점이 있지만, 데이터의 형식이나 분석의 편차가 큰 편이라는 특징이 있습니다. 다음은 자가 측정 임상 데이터로 주로 환자를 대상으로 하며, 병원에서 측정해야 하는 임상 데이터를 환자가 수집할 수 있다는 장점이 있습니다. 그러나 사용자의 숙련도에 따라 정확도가 달라질 수 있다는 이슈가 있습니다. 마지막은 커뮤니케이션 데이터이며, 헬스케어 서비스 내 사용자의 대화 로그나 SNS 채널 내의 데이터 등이 포함됩니다. 위 4가지 카테고리 데이터는 현재도 많은 연구가 진행되고 있는 헬스케어 내의 라이프로그입니다. 이외에도 수많은 종류의 라이프로그가 존재하며 헬스케어 분야에 얼마든지 적용할 수 있기에 그 위상이 날로 증가하고 있습니다.



데이터의 종류의 따라, 사람이 주체적으로 데이터를 모바일이나 웹 애플리케이션에 직접 기입해야 하기도 하지만, 특별한 행위 없이도 디바이스에 의해 자동으로 데이터가 수집되기도 합니다. 예를 들어, 헬스케어에서 활동량 정보의 경우, <table.1 활동량 정보 예시: 헬스케어 웨어러블 디바이스 주요 제품>에서처럼 우리에게 익숙한 애플워치, 핏비트 등의 밴드형 기기 외에도 다양한 종류의 기기에 의해 자동으로 데이터가 모여 활용할 수 있는 형태로 반환됩니다. 웨어러블 디바이스에 의해 수집된 데이터는 이동 거리, 활동 강도 등의 비교적 간단한 정보부터 약물 복용 여부 등의 감지하기 어려운 데이터까지 포함되며, 이들은 의료진에게 직/간접적으로 전달하는 서비스를 통해 임상 데이터와 연동하여 체계적인 수술 후 건강 관리, 만성 질환의 관리 등에 활용될 수 있습니다.


라이프로그의 활용사례


[그림 4] https://dobrain.co](https://dobrain.co/

첫 번째 사례"두브레인"이라는 아이를 위한 두뇌 교육 모바일, 태블릿 애플리케이션입니다. 언뜻 보면 모바일 게임과 유사해 보이지만, 아동이 두뇌 게임을 하면 쌓이는 데이터들을 이용하여 장애 여부나 발달 수준을 진단하고, 진단 결과를 기반으로 발달 테라피나 인지 교육 프로그램을 제공하는 서비스입니다. 이 서비스는 국내 의과대학 연구진들과 함께 두뇌 게임의 플레이 데이터를 라이프로그 데이터로 활용하여 발달 장애를 진단하는 알고리즘을 개발하였다고 합니다.



두 번째 사례는 아이의 체온을 관리해주는 "fevercoach"라는 모바일 애플리케이션에서 생성된 라이프로그 데이터를 활용한 연구 사례입니다. fevercoach 애플리케이션은 현재의 체온을 입력하면 아이가 어떤 상태이고, 어떤 행동을 취하면 좋은지를 제시해줍니다. 또한, 이 서비스에는 아이가 접종받은 백신의 종류와 열이 났을 때 어떤 해열제를 얼마만큼 복용하였는지를 기입할 수 있습니다. 이와 같은 아이의 기초 정보와 체온 변화 정보, 해열제 종류 및 복용량 정보는 라이프로그 데이터로 축적되어 해열제의 단일 복용과 복합 복용에 따른 체온 조절 효과를 연구하는 데에 기여한 바가 있습니다.
 


 
세 번째 사례는 라이프로그 데이터 중 섭취음식 사진 데이터를 활용하여 비대면 영양관리 해주는 iFOOD-U 모바일 애플리케이션 서비스입니다. iFOOD-U는 매 끼니를 모바일 기기를 통해 촬영한 영상에서 각 식품을 인식하고, 식품별 영양 성분을 분석하여 영양 데이터를 생성합니다. 이 영양 데이터는 전문 영양사에게 전달되어, 고객의 식이 섭취행태를 파악하고, 이를 기반으로 레포트 형태의 더 나은 섭취 방안을 제시하는 근거 자료로 활용되고 있습니다.


라이프로그의 한계와 도전

라이프로그는 데이터를 생성하는 대상에 제한이 적고, 데이터의 수집이 비교적 간편합니다. 또 주로 개인이 수집하는 데이터이기에, 병원에 축적된 임상 데이터 혹은 유전체 데이터와 연계한다면, 그 활용 범위는 무한에 가깝다 해도 과언이 아닙니다. 그러나 라이프로그를 다른 원천 데이터와 연동하여 활용하는 것이 그리 쉬운 일은 아닙니다. 라이프로그는 개인이 생성하는 반면, 전자 의무 기록이나 임상 데이터들은 환자 혹은 개인이 방문하였던 여러 의료 기관에 산재하여 있기 때문입니다. 또한, 의료기관마다 사용하는 전자 의무 기록의 형식이 조금씩 다르기에 개인의 정보와 직접 연동하기 위해서는 데이터를 통합하고 정리하기 위해 많은 시간이 필요합니다.

덧붙여, 라이프로그는 다른 데이터와는 다르게 특정 기관에서 생성하는 데이터가 아니라, 다양한 방식으로 여러 사람이 생성하는 데이터입니다. 따라서 데이터의 소유권이 누구에게 있는지, 데이터를 활용하려면 데이터 제공에 따른 대가를 어떤 방식으로 산정해야 하는지 등의 데이터의 권리에 대한 이슈가 불거지고 있습니다. 권리뿐만 아니라 개인의 일상생활과 관련한 데이터이기에 사생활 침해나 가명처리와도 밀접하게 관련되어 있습니다. 다행히, 공공 기관에서도 데이터 3법과 같이 피해를 최소화하며 기술의 발전은 최대화하도록 법을 개정하고 규율을 정하기 위해 노력하고 있어, 데이터 관련 이슈는 계속해서 개선될 것으로 보입니다.


마치며

우리가 이 글을 읽는 와중에도, 작은 규모의 로그 데이터들은 계속해서 생성되고 있습니다. 이는 하찮고 용량만 차지하는 데이터로 취급될 수도 있지만, 누군가에게는 우리의 삶을 더 풍요롭게 만드는 가치 있는 자원으로 여겨지기도 합니다. 우리도 이번 기회로 라이프로그의 잠재력을 알았으니, 지금부터 라이프로그 데이터의 또 다른 의미를 찾아보면 어떨까요?


참고자료


작성 : AIDX 이주연 개발자

Posted by 人Co

2021/07/08 16:02 2021/07/08 16:02

면역력 향상을 위한 일상 습관



신종 코로나바이러스 감염증(코로나 19)이라는 전례 없는 감염병의 발병으로 세계 각처에서 사회적 거리 두기가 일상화되고, 생활 방식의 극적인 변화를 경험하고 있습니다. 외출 시 마스크 착용은 필수가 되었고, 악수나 포옹 같은 접촉식 인사보다는 묵례와 눈인사와 같이 비접촉식 인사를 나누는 등 우리 일상의 많은 것들을 변화시켰습니다. 최근 미국 의학학술지 뉴잉글랜드저널오브메디신(NEJM)에 따르면 신종 코로나바이러스 감염증을 일으키는 사스코로나바이러스-2(SARS-CoV-2)가 면역이 떨어진 사람의 몸에서 변이 속도가 빠르다는 연구결과가 발표되었습니다. 이렇게 면역력의 중요성이 어느 때보다 강조되고 있는 시점에 면역에 대한 개념과 면역력을 높일 수 있는 일상 습관을 알아보도록 하겠습니다.


면역에 대한 개념

먼저 면역에 대한 개념에 대해서 알아보도록 하겠습니다.
면역(immunity)의 어원을 살펴보면 면제받은 사람(immunis)을 뜻하는 라틴어에서 비롯되었으며, 우리 몸이 바이러스에 감염되어도 멀쩡할 수 있었던 것은 선천면역, 그리고 감염 후 만들어지는 후천면역 덕분입니다.

선천면역이란 이전에 바이러스에 걸린 적이 없어도 우리 몸이 스스로 발휘하는 면역 기능을 말합니다. 바이러스가 인체의 피부, 장, 폐, 눈, 코에 침입하면 우선 이곳에 있는 상피세포들이 천연장벽 역할을 하며 일차적으로 막게 되고 이곳을 지나는 바이러스는 면역 세포들과 싸우기 시작합니다. 바이러스가 천연장벽을 통화하는 순간 면역세포들이 활성화되어 사이토킨, 자연살해 세포(NK세포), 대식세포, 백혈구 등이 바이러스가 장벽을 지난 후 고작 몇 분, 길어야 몇 시간 만에 나타나 대식세포는 바이러스를 잡아먹고, 자연살해 세포는 바이러스에 감염된 세포를 스스로 죽게 합니다. 이것이 염증반응인데, 이러한 작용이 격렬할수록 신체에는 발열, 두통, 식욕부진 등 증상이 크게 나타나기 시작합니다.

선천면역이 시작된 지 1~2주 후에도 바이러스가 우리 몸에 남아있다면 후천면역이 발동하게 됩니다. 선천면역과 후천면역의 가장 큰 차이점은 아군(self)과 적군(non-self, 항원)을 구분할 수 있다는 것입니다. 후천면역은 백혈구의 일종인 B세포와 T세포에 의해 이뤄지고, 적군을 골라내 죽이거나, 아직 감염되지 않은 세포가 감염되지 않도록 보호하는 역할을 하게 됩니다. 후천면역의 또 다른 특성은 한번 걸린 바이러스에 다시 걸리지 않거나, 쉽게 이겨낼 수 있게 되는데 후천면역을 통해 항체가 생성되었기 때문입니다. 예를 들면 어린아이들은 모기에 물리게 되면 손바닥만 하게 붓기도 하는데, 모기 알레르기라고도 불리는 이러한 현상은 아직 모기의 체액에 대한 항체가 형성되지 않았기 때문입니다. 자주 모기에 물려 익숙해지면 점점 면역 반응이 약해지는데, 이를 면역 관용(immunologic tolerance)이라 하며, 이를 이용해 내과나 이비인후과에서는 일부러 알레르기 항원을 조금씩 투약해 비염, 천식 등 알레르기 질환을 치료하기도 합니다.


면역력을 높일 수 있는 일상 습관

우리 몸의 면역력이 떨어지게 되면 감기에 자주 걸리고 구내염이 자주 생기거나 피로를 자주 느끼게 됩니다. 배탈이나 설사가 잦은 것도 면역력이 약해졌다는 증거이며 대상포진은 면역력이 떨어질 때 나타나는 대표적인 질환입니다.
몸 안에서 자체적으로 생성되는 면역력이 강해지면 병원균에 노출되더라도 1차 면역체계에서 제거하거나 발병하더라도 가볍게 앓고 지나갈 확률이 높게 됩니다. 이를 위해 간단한 생활습관을 통해 면역력을 높이는 방법을 알아보도록 하겠습니다.
  • 햇볕 쬐기
킬러 세포로 불리는 T세포는 면역세포로 몸속에 암세포나 병든 세포를 공격해서 죽이는 기능을 담당하는데, 이 T세포가 비타민D에 의해 활성화됩니다. 비타민D를 따로 챙겨 먹지 않더라도 15분~20분 정도 충분히 햇볕을 쬐면 자연 비타민D를 생성해 T세포를 활성화해 면역력을 높일 수 있습니다.


[그림 1] "햇빛으로 생기는 비타민D 부족, 생각보다 훨씬 치명적" [파이낸셜뉴스]

  • 장 건강 유지
장은 면역 기능의 70%를 담당하고 있으며, 장내 세균 생태계가 면역 세포를 자극하는 데 영향을 줍니다. 장내 유해균은 줄이고 유익균을 늘려야 하며, 채소, 과일 등의 섬유질을 섭취해 장내 연동 운동을 활발하게 하는 것이 중요합니다.
 

[그림 2] 유해균 공격, 면역세포 증식…장 건강 지켜 면역력 높인다 [중앙일보]

  • 적정 체온 유지
몸을 따뜻하게 하면 림프구가 활성화되면서 면역력이 높아지게 됩니다. 체온이 떨어지게 되면 면역력도 떨어지게 되는데, 체온 1도가 내려가면 신진대사 기능이 12% 내려간다는 연구 결과도 있습니다. 쉽게 체온을 올리는 방법에는 반신욕이 있으며, 체온을 높이는 것 외에도 혈액순환, 우울증 감소, 숙면에도 도움이 됩니다.
 

[그림 3] "적절한 체온 유지가 건강한 뇌와 신체를 만든다. [바이오타임즈] 

  • 충분한 수면
밤 10시~새벽 2시 사이는 수면 호르몬인 멜라토닌이 활발하게 분비되는 시간이므로 이 시간 내에 반드시 수면을 취해 깊은 잠을 자도록 해야 합니다. 이 시간 내에 수면해야 성장호르몬이 분비되어 자가면역 역할을 하는 T림프구 증가에 도움을 주게 됩니다.
 

[그림 4] 대한수면학회 제안, 면역력 높이는 수면규칙 '5가지' [헬스조선] 
 
  • 림프샘 마사지
림프계는 림프샘과 림프관으로 이루어져 있고, 림프샘은 림프구라는 면역세포가 외부로부터 들어오는 세균을 죽일 수 있게 단련시키는 곳입니다. 따라서 림프샘이 많이 모여 있는 목 주위, 겨드랑이, 서혜부 이 세 곳을 중심으로 가볍게 마사지해 주는 것이 좋습니다. 하루 10분 정도씩 해 주면 림프샘 면역력을 높이는 데 도움이 됩니다.
 

[그림 5] 바이러스 퇴치하는 면역 장기 3총사, ‘간-림프절-대장’ [하이닥]



마치며

바쁜 생활 속에서 습관처럼 찾는 소화제, 진통제, 위장약 등은 간의 해독 기능을 저하해 면역력을 떨어뜨리는 원인이 될 수 있습니다. 또한, 질환이 있어 약을 꾸준히 복용하는 사람일 경우 중복 섭취의 위험이 있어 부작용의 위험도 커지게 됩니다. 소화 불량이나 두통 등은 1~2시간이 지나면 자연 치유되는 경우가 많으니 습관적인 약 복용보다는 간단한 일상 습관의 변화를 통해 면역력을 높이는 것이 바이러스로부터 우리의 몸을 지키는 가장 쉬운 방법일 것입니다.

참고자료

Posted by 人Co

2021/06/24 17:30 2021/06/24 17:30
, , , ,
Response
No Trackback , No Comment
RSS :
https://www.insilicogen.com/blog/rss/response/386

8 Point Grid, 더 적은 결정 = 더 적은 시간


많은 사용자들이 이용하는 프로덕트(혹은 서비스)들은 정보가 잘 정돈되어 있거나 특별한 가이드 없이 짧은 시간 내 능숙하게 사용할 수 있습니다. 그러한 프로덕트들의 공통점은 '일관성'을 가지고 사용자에게 혼란을 야기하지 않습니다. 즉, 일관성 있는 UI는 예측 가능하고 중요한 정보가 더 돋보이도록 할 수 있습니다. 일관성을 맞추는 방법은 여러가지가 있겠지만 오늘 블로그는 레이아웃 그리드, 그 중 가장 일반적으로 사용되는 8 포인트 그리드에 관해 알아보도록 하겠습니다.
 
 
 
포인트(Point)란?
 

[그림 1] 하나의 단위, 포인트와 3가지 해상도
 
8 포인트 그리드를 알아보기 전에 포인트(point)가 무엇인지 알아보겠습니다. 포인트는 화면 해상도에 따라 달라지는 공간을 측정하는 값입니다. 가장 간단한 설명은 @1x 해상도에서 1pt는 1px입니다. @2x 해상도에서는 해상도가 X축과 Y축 모두에서 2배가 되어 너비 2px, 높이 2px가 되기 때문에 1pt는 4px입니다. 당연히 @3x 해상도에서는 1pt는 9px (3px x 3px) 입니다.
 


8 Point Grid 기본원리


[그림 2] 8 Point Grid 적용 예시

왜 하필 숫자 8일까요? 숫자 8과 관련된 몇 가지 이유는 다음과 같습니다. 첫 번째는 모든 다른 화면 디스플레이(안드로이드 @0.75x 및 @1.5x 포함)에서 완벽하게 확장할 수 있습니다. 두 번째 이유는 작업하기에 좋은 기본 단위입니다. 숫자 4와 8은 쉽게 곱할 수 있어 유연하고, 일관적이며 선명하게 제공합니다.


[그림 3] 가장 많이 사용되는 화면 해상도
(W3schools.com, Jan-2021 기준) 

음... 이제 짝수가 좋다는 건 알겠습니다. 그럼 숫자 6이나 10은 안될까요? 일반적으로 분기점에 많이 사용되는 화면 크기는 적어도 하나의 축(일반적으로 둘 다)에서 8로 나눌 수 있습니다. 8 포인트로 스케일링을 하게 되면 6 포인트 시스템처럼 같은 변수에 의해 과부하가 걸리거나 10 포인트 시스템처럼 제한 없이 많은 옵션을 사용할 수 있습니다. 최종적으로 우리는 개발 친화적이고 사용자에게 보기 좋은 디자인을 결정해야 합니다. 그러려면 규칙을 따라 하고 반복하기 쉬운 시스템이어야 합니다.



2가지 방법
 
그러면 어떻게 사용하는 걸까요? 8 포인트 그리드의 기본 원칙은 디자인 내부 요소에서 8(8, 16, 24, 32, 40, 48 등)의 배수를 사용하는 것입니다. 이 시스템은 2가지 방법이 있습니다. 8의 배수로 정의된 그리드에 요소를 배치하는 "하드 그리드"와 개별 요소 사이의 8의 배수를 측정하는 "소프트 그리드"입니다.


[그림 4] 하드 그리드(Hard grid) 개념
 
"하드 그리드"는 요소별로 여백과 패딩을 추적하고 이러한 컨테이너를 벽돌과 같이 그리드에 배치하는 접근 방식입니다. 모든 요소가 이미 4 포인트 그리드로 디자인된 머티리얼 디자인은 자연스럽게 이 방법을 따릅니다.


[그림 5] 소프트 그리드(Soft grid) 개념

반면 "소프트 그리드" 방법에 관한 주장은 프로그래밍 언어는 그런 종류(하드 그리드 접근 방식)의 그리드 구조를 사용하지 않기 때문에 실용적이지 않다는 것입니다. 유연하고 최소한의 구조를 선호하거나 많은 시스템 UI 요소가 짝수 그리드로 정의되지 않은 iOS에 더 유리할 수 있습니다.



8 Point Grid 시스템을 통해 얻을 수 있는 가치
 
첫 번째로 일관된 UI를 개발하고 제공할 수 있습니다. 모든 측정이 같은 규칙을 따르면 자동으로 일관된 UI를 얻게 됩니다. 이는 사용자에게 신뢰할 수 있는 브랜드라는 느낌을 줄 수 있습니다. 또한, 모든 장치에서 균일한 안티앨리어싱 효과로 더 선명한 디자인을 전달할 수 있습니다.

두 번째는 '더 적은 결정은 더 적은 시간이 든다'는 개념입니다. 간격을 설정할 때 숫자 8만 기억하시면 빠르게 해결할 수 있습니다. 그러면 요소 간 퀄리티가 저해되지 않고, 일정한 리듬을 유지하면서 의사 결정을 최소화할 수 있습니다. 또한, 디자이너와 개발자 간의 쉬운 의사소통 시스템으로 매번 측정하지 않고도 8 포인트 단위로 쉽게 생각할 수 있습니다.



마치며


[그림 6] 예시 이미지
 
우리는 수치에 따라 움직이는 로봇이 아닙니다. 아주 드문 사례로 숫자가 정의되지 않았거나 8을 곱하지 않더라도 괜찮아 보이면 사용해도 됩니다.

오늘 소개해드린 8 포인트 그리드 시스템 역시 수많은 디자인 시스템 중 하나에 불과하며, 모든 그리드 시스템은 절대적인 규칙은 아닙니다. 다만 빠르게 변화하는 시대 흐름에 적응하며 사용자 경험을 극대화 시키기 위해 지속적인 개발 및 관리는 필수가 되었습니다. 그러기 위해서는 내부의 효율적인 소통과 적은 의사결정을 할 수 있는 환경이어야 하며, 시스템 활용은 그 방안 중 하나라 생각합니다. 인실리코젠은 서비스 규모와 성격에 따라 다양한 시스템을 적용하며 본질을 추구하고 있습니다.(여기서 말하는 본질은 디자이너는 사용성 경험 개선에, 개발자는 기능 로직 구현에 힘쓰며 더 나은 서비스를 만드는 것입니다.) 앞으로도 더 나은 것을 위해 시도와 적용을 하며 사용자가 만족할 수 있고 행복할 수 있는 프로덕트를 만들도록 노력하겠습니다. 긴 글 읽어주셔서 감사합니다.



Posted by 人Co

2021/06/09 19:12 2021/06/09 19:12


최근 미국의 전기차 기업 테슬라에서 사내 CCTV가 해킹당해 회사 내부의 모습이 노출되는 사건이 있었습니다. 또 송유관 운영회사 콜로니얼 파이프라인이 랜섬웨어 공격을 받아 시스템이 마비되어 수많은 자동차가 연료를 공급받지 못해 대혼란에 빠지는 사태가 발생하기도 했습니다. 두 사건 모두 해킹으로 벌어진 일입니다.


[그림 1] CCTV 해킹으로 인해 노출된 테슬라 회사 내부
 
해킹 사고는 주로 소프트웨어(SW) 보안취약점을 공격 경로로 이용합니다. 소프트웨어 보안취약점이란 소프트웨어 개발 시 결함이 될 수 있는 논리적인 오류나 버그, 실수 등 이후 취약점으로 발생할 수 있는 근본 원인을 말합니다. 시스템에 보안취약점이 존재하고 그로 인해 정보가 노출된다면 해커는 해당 정보를 이용해 시스템을 공격하는 것입니다. 그럼 개발자는 어떻게 해커들의 공격을 방지할 수 있을까요? 이를 위해 '시큐어코딩(Secure Cording)'이 필요합니다.
 
 
 
시큐어코딩이란 무엇인가요?
 

[그림 2] 코딩 화면
 
시큐어 코딩은 해킹 등 사이버 공격의 원인인 보안취약점을 제거해 안전한 소프트웨어를 개발하는 SW 개발 기법을 말합니다. 개발자의 실수나 논리적 오류로 인해 발생할 수 있는 문제점을 사전에 차단하여 대응하고자 하는 것입니다. 정보보호가 SW 개발의 중요한 주제로 떠오르는 지금 시큐어 코딩은 선택이 아닌 필수가 되었습니다.
 
 

시큐어 코딩 가이드
 
시큐어 코딩은 개발단계에서 적용되기 때문에 개발자의 코딩 작업이 핵심 대상이 됩니다. 그러나 개발자로서 취약점을 모두 고려하는 프로그래밍이란 어려운 일입니다. 따라서 어떠한 규칙에 따라 코딩을 하면 되는지에 대한 기준이 있으면 좋을 것입니다. 그리고 실제로 국내에서는 2012년 12월부터 행정안전부에 의해 시큐어 코딩에 대한 법규가 제정, 시행되어 그 기준을 제시하고 있습니다.
 

[그림 3] 행정기관 및 공공기관 정보시스템 구축·운영 지침
(출처:행정안전부고시 제2021-3호, 2021.1.19.)

그리고 그 기준은 다음과 같이 50개의 소프트웨어 보안 약점 항목으로 구성되어 있습니다.


[그림 4] 소프트웨어 개발 보안 가이드
(행정안전부고시 제2021-3호, 2021.1.19.)
 
이번 블로그 시간에는 소프트웨어 개발 보안 가이드를 기반으로 시큐어코딩의 7가지 유형에 대해 살펴볼 것입니다. 개발 경력이 없으신 분들도 이해할 수 있도록 최대한 쉽게 설명하겠습니다. :)



1. 입력데이터 검증 및 표현
 
입력데이터 검증 및 표현이란 폼 양식의 입력란에 입력되는 데이터로 인해 발생하는 문제를 예방하기 위해 점검하는 보안 항목을 의미합니다. 쉽게 말해서 사용자가 비정상적인 데이터를 입력하여 시스템에 손상을 주거나 정보를 수정 및 탈취하지 못하도록 방지하는 것입니다. 이는 주로 SQL 인젝션(SQL Injection) 공격을 막기 위한 코딩이라고 할 수 있습니다. SQL(Structured Query Language)은 DB 관리에서 가장 중요한 핵심 요소로 실제로 저장된 데이터를 수정, 삭제, 삽입할 수 있는 기능이 있습니다. 예를 들어 은행 업무 시스템에서는 SQL을 이용해 계좌의 잔액을 조절한다고 볼 수 있는 것입니다. 이토록 중요한 SQL이 악의적인 해커 마음대로 실행될 수 있다면... 정말 치명적인 문제가 될 것입니다. 이를 방어하기 위해 사용자가 입력한 데이터를 확인해 공격 시도로 의심되는 단어를 치환하거나 차단하는 방식을 이용합니다. 이것이 바로 입력데이터 검증 및 표현의 가장 핵심요소라고 말할 수 있겠습니다.

[그림 5] 안전하지 않은 코드의 예 JDBC API
 

안전하지 않은 코드의 예로, 외부에서 받는 데이터인 'gubun'의 값을 검증 없이 사용하고 있습니다. 이 경우 gubun의 값으로 a' or 1=1 이 들어간다면 board 테이블의 전체 데이터가 조회됩니다.



[그림 6] 안전한 코드의 예 JDBC API

안전한 코드의 예로, 파라미터를 받는 PreparedStatement 객체를 상수 스트링으로 생성하고 파라미터 부분을 setString 등의 메소드로 설정해야 합니다.



2. 보안 기능
 
보안 기능이란 소프트웨어 개발 구현단계에서 코딩하는 기능인 인증, 접근제어, 기밀성, 암호화 등을 올바르게 구현하기 위한 보안 항목을 의미합니다. 주로 암호와 같이 중요한 정보를 암호화 없이 저장하거나 프로그램 내부에 하드 코딩되어 노출의 위험성이 있는 경우, 인증과 권한 관리를 부적절하게 구현할 시 발생하는 문제가 있습니다. 서두에 말씀드린 테슬라 해킹 사건이 이 항목에 해당합니다. 해커가 이중인증시스템의 취약점을 파악하고 이를 이용해 보안 체계를 우회한 것입니다. 보안 기능은 비인가 접근을 방어하고 저장된 정보를 암호화하여 취약한 기능이 존재하지 않도록 하는 것이 중요하다고 말씀드릴 수 있겠습니다.
 


3. 시간 및 상태
 
시간 및 상태는 동시 또는 거의 동시 수행을 지원하는 병렬 시스템이나 하나 이상의 프로세스가 동작하는 환경에서 시간 및 상태를 부적절하게 관리하여 발생할 수 있는 보안 약점입니다. 프로그래밍을 하다 보면 하나의 자원을 다수개의 프로세스가 사용해야 하는 경우가 생깁니다. 이때 자원 공유가 적절히 진행되지 않아 프로그램이 꼬일 수 있게 됩니다. 예를 들어, 프로세스 A는 ①파일이 존재하는지 확인하고 ②파일을 읽는 과정을 진행합니다. 프로세스 B는 파일을 삭제합니다. 만약 프로세스 A의 과정①이 진행되고 과정②가 시작되기 전 프로세스 B가 파일을 삭제해버린다면 프로세스 A가 삭제된 파일 읽기를 시도하므로 *레이스컨디션이 발생합니다. 이 밖에도 종료되지 않는 반복문이나 재귀문을 사용하여 무한루프에 빠지는 것도 시간 및 상태 점검 항목에 포함됩니다.

*레이스컨디션(Race Condition): Race Condition은 두 개 이상의 프로세스가 공용 자원을 병행적으로(concurrently) 읽거나 쓸 때, 공용 데이터에 대한 접근이 어떤 순서에 따라 이루어졌는지에 따라 그 실행 결과가 달라지는 상황을 말한다.


 
4. 에러 처리
 
에러 처리는 이름 그대로 에러를 처리하는 방식이 부적절하거나 누락되어 발생하는 보안 항목을 의미합니다. 종종 개발자가 디버깅의 편의성을 위해 에러 메시지를 화면에 출력하는 경우가 있습니다. 에러 메시지는 시스템과 관련된 중요 정보를 포함하는 경우가 많아 공격자의 악성 행위를 도울 수 있습니다. 또한, 오류가 발생할 상황을 적절하게 검사하지 않았거나 잘못된 처리를 한 경우도 에러 처리 항목에 포함됩니다. 에러 처리는 가능한 최소한의 정보만을 담고 있어야 하며, 광범위한 예외 처리보다는 구체적인 예외 처리를 통해 보안 공격을 사전에 방어하는 것이 중요합니다.
 

[그림 7] 안전하지 않은 코드의 예 에러처리
 
안전하지 않은 코드의 예로, try 구문에서 예상되는 예외 상황을 catch 하지만, 그 오류에 대해 추가로 아무 조치를 하지 않고 있습니다. 이런 상황이라면 사용자는 프로그램 내부에서 어떤 일이 일어났는지 전혀 알 수 없게 됩니다.

[그림 8] 안전하지 않은 코드의 예 에러처리
 
예외 catch 후 적절한 조치를 수행한 예
 


5. 코드 오류
 
코드 오류는 구현 단계에서 개발자의 실수나 지식 미달로 인한 오류를 예방하기 위한 점검 항목입니다. 주로 형(Type)변환 오류, 자원 반환, NullPointer 참조가 이에 해당합니다. 이 부분은 개발 경험이 없는 경우 이해하기가 조금 어려우실 수 있습니다. Null 값을 체크하지 않고 변수를 사용한다든가 실수로 스레드와 같은 자원을 무한하게 할당하여 시스템에 부하를 주는 경우가 있습니다. 개발자가 잘못된 코딩 습관을 들인다면 코드 오류 항목에서 번번이 보안 취약점에 걸리게 됩니다. 본인만의 보안 코딩 규칙을 만들어서 습관을 들이는 것을 추천합니다.



6. 캡슐화
 
캡슐화란 객체 지향 방법론에 중요한 개념으로 객체와 필드의 은닉을 통해 외부의 잘못된 사용을 방지하는 것을 의미합니다. 그런데 가끔 시스템의 데이터나 기능을 불충분하게 캡슐화하거나 잘못된 방법을 이용함으로써 보안 취약점으로 작용하는 경우가 있습니다. 부적절한 캡슐화는 정보은닉의 기능을 잃어버립니다. 시스템의 중요 정보가 노출되어 공격자는 이 정보를 이용해 식별 과정을 우회할 수 있습니다. 변수 제어 함수가 노출된다면 공격자는 원하는 값으로 데이터를 외부에서 수정할 수 있게 됩니다.


 
7. API 오용
 
API(Application Programming Interface)란 응용프로그램에서 사용할 수 있도록 운영체제나 프로그래밍 언어가 제공하는 기능을 제어할 수 있게 만든 인터페이스를 뜻합니다. 이렇게만 설명하면 명확한 개념이 잘 떠오르지 않습니다. 쉽게 말씀드리면 API는 프로그램들이 서로 소통하는 것을 도와주는 매개체 역할을 합니다. 음식점에서 주문을 받고 서빙을 해주는 웨이터에 비유할 수 있죠. 이렇듯 개발자는 편리하게 개발하고 유용한 정보를 얻기 위해 API를 활용합니다. 그러나 의도된 사용에 반하는 방법으로 API를 이용하거나, 보안에 취약한 API를 이용한다면 심각한 보안 취약점이 될 수 있습니다. 예를 들어, 만약 공격자에 의해 로컬 DNS 캐시가 오염된 상황에서 DNS만 확인한다면 공격자의 네트워크로 경유하거나 공격자의 서버를 도착지로 인식할 수도 있습니다. 이를 방지하기 위해 보안에 취약한 API 사용은 피해야 하며 DNS가 아닌 IP를 확인하는 것이 중요합니다.
 


마치며
 



지금까지 소프트웨어 개발 보안 가이드 시큐어 코딩 7가지 유형에 대해 알아보았습니다. 실제로 개발 보안 가이드를 보시면 더욱 자세한 내용을 확인하실 수 있습니다. 개발 단계뿐만 아니라 분석, 설계 단계의 보안 기법도 자세히 설명되어 있기에 꼭 한번 읽어보시는 것을 추천해 드립니다.

앞으로 디지털 트랜스포메이션과 IoT를 비롯한 SW 시장은 더욱 확대될 것입니다. 하지만 우리가 구성한 네트워크가 보안 위협의 통로가 될 수 있다는 것을 잊지 말아야 합니다. 이제 민관기관에서도 시큐어 코딩을 적극적으로 채택하고 있다고 하니, 시큐어 코딩에 대한 전문성을 길러보시는 것은 어떨까요? :) 오늘 내용이 여러분에게 많은 도움이 되셨길 바랍니다.
 


Posted by 人Co

2021/05/28 16:33 2021/05/28 16:33

나만 알고 싶은 OmicsBox



'유전체 데이터는 점차 쌓여가고···쌓여가는 데이터 처리는 해야겠고···이왕 처리하는 거 효율적으로, 내가 원하는 방향으로 처리하고 싶은데···심도 있는 분석은 또 어떻게 진행해야 하는 걸까···' 이런 의문 품어보신 적 다들 있으시죠?! 있을 겁니다! 저 또한 그랬으니까요!

제 경우에는 OmicsBox라는 솔루션이 저의 이러한 의문을 해소해주었습니다. 제가 OmicsBox를 처음 접한 건 바야흐로 대학원 시절. 그 당시에는 OmicsBox로 리뉴얼 되기 전인 Blast2GO 버전이었습니다. 저는 그 당시 De Novo Transcriptome 분석을 진행했었고, BLAST 분석 이후의 후속 분석인 Functional Analysis(GO, KEGG, InterProScan)를 Blast2GO를 이용하여 진행했었습니다.

만약 그 당시의 저에게 Blast2GO가 없었다면, 저는 아마 졸업을 못 했을 겁니다. (생각만 해도 끔찍하네요.)
서론이 길었네요 :D 자, 그럼 이렇게 저를 무사히 졸업시켜주는데 일조했던 OmicsBox(구 Blast2GO)! 과연 어떤 기능을 하는 생물정보 솔루션인지 이제부터 차근차근 알아볼까요?



나만 알고 싶은 OmicsBox

OmicsBox 기능을 알아보기 전에 OmicsBox는 무엇인지에 대해 먼저 알아보겠습니다.

OmicsBox는 새로운 genome 분석을 위한 최고의 생물정보학 플랫폼(Platform)임과 동시에 산업, 학술 및 정부 연구기관의 생물학자를 위한 사용자 친화적인 생물정보학 데스크톱 애플리케이션(Desktop application)입니다. 이러한 OmicsBox는 기능 유전체학의 선두주자로서 세계적으로 인정받고 있으며, 이는 7,000개 이상의 과학 연구 인용으로 입증되었습니다. 또한, OmicsBox는 genomics, transcriptomics, metagenomics의 NGS 데이터 분석에 최적화(de novo 파트)되어 있으며, 필요에 따라 데이터 분석에 필요한 다양한 모듈(Module)을 결합하여 사용할 수 있습니다.


[그림 1]. OmicsBox OverView

  • 아래는 OmicsBox의 주요 기능을 나열해 봤는데요,
  • 클라우드 플랫폼(Cloud platform)을 활용한 애플리케이션(Application) 고속 실행 및 견고하고 안전한 백엔드(Back-end) 제공
  • Blast 결과의 Gene Ontology mapping
  • Functional Annotation
  • InterProScan domain 검색
  • GO-Slim Reduction
  • KEGG map mapping
  • 통계 정보 차트
  • 다양한 데이터의 import와 export format 지원
  • Eukaryote, prokaryote에 알맞은 model을 이용한 유전자 부위 예측
  • 발현값을 이용한 pairwise/time course 별 분석
이뿐만 아니라 OmicsBox는 아래와 같은 강력한 장점도 가지고 있습니다.



Advantages of OmicsBox

Powerful Tables



[그림 2]. Powerful Tables
풍부한 사용자 인터페이스(Interface)를 통해 대용량 데이터세트를 쉽게 처리할 수 있고, 모든 테이블은 필터링과 정렬을 할 수 있으며, 가장 중요한 것은 다른 결과 세트와 결합할 수 있다는 것입니다. 또한, 후속 분석 단계의 하위 집합을 쉽게 생성하고 추출할 수 있습니다.

Workflows


[그림 3]. Workflows

Workflow manager를 사용하여 생물정보학적 workflow를 생성, 실행 및 저장할 수 있으며, 선택한 분석 단계를 끌어와 workflow를 생성하고 모든 파라미터(Parameter)를 한 곳에서 구성하고 검토할 수 있습니다.
  
Genome Browser


[그림 4]. Genome Browser

Genome Browser는 여러 트랙(Track)을 통해 alignment(.bam), gene annotation(.gff) 및 variant 정보(.vcf)를 결합할 수 있습니다. 그뿐만 아니라 navigation, 필터 및 검색 옵션을 사용하여 쉽고 탐색적인 방법으로 결과를 확인할 수 있습니다.

Omics Cloud Platform



클라우드 플랫폼(Cloud platform)은 대부분의 무거운 작업이 수행되는 OmicsBox에 견고하고 안전하며 자동 확장이 가능한 백엔드(Back-end)를 제공합니다. 또한, 이 시스템을 사용하면 표준 PC에서 매우 까다로운 생물정보학 애플리케이션(Application)을 고속으로 실행할 수 있습니다.
 
자 어떤가요? 전반적으로 OmicsBox에 대해 간략히 알아보았는데, 글을 읽다 보니 내 데이터를 어떻게 처리하면 좋을지 구상이 잡히셨나요? {OK} 아직 잘 안 잡히셨다고요? 괜찮습니다.:-)
이제부터 설명해 드릴 OmicsBox의 4가지 모듈을 살펴보고 나면 구상이 잘 잡히실 겁니다.
그럼 한번 살펴볼까요?



Four modules of OmicsBox


[그림 6]. Four modules of OmicsBox

Genome Analysis
  • Quality Control : 샘플의 품질 관리를 수행하기 위해, FastQC와 Trimmomatic을 사용하여 Reads를 필터링하고, low quality bases를 제거할 수 있습니다.
  • De Novo Assembly : ABySS를 기반으로 하는 assembly 기능을 통해 reference genome 또는 특정 하드웨어(Hardware) 요구 사항 없이 전체 genome sequence를 재구성할 수 있습니다.
  • Repeat Masking : 다운스트림(Down-stream) 유전자 예측을 개선하기 위해 RepeatMasker를 사용하여 진핵생물 genome의 반복적이고 복잡성이 낮은 assemble된 DNA sequence를 마스킹(Masking)할 수 있습니다.
  • Gene Finding : Genome 구조를 특성화하기 위해 원핵생물(Glimmer 사용) 및 진핵생물(Augustus 사용) 유전자 예측을 수행할 수 있으며, 진핵생물 유전자 예측은 RNA-seq 인트론 힌트를 지원합니다.
  • Genome Browser : 트랙(Track) 형태로 annotation을 시각화하여 genome sequences(.fasta), alignments(.bam), intron-exon structure(.gff) 및 variant data(.vcf)와 결합할 수 있습니다.

Transcriptomics
  • Quality Control : 샘플의 품질 관리를 수행하기 위해, FastQC와 Trimmomatic을 사용하여 Reads를 필터링하고 low quality bases를 제거할 수 있습니다.
  • De Novo Assembly : Reference genome 없이 de novo transcriptome을 생성하기 위해 Trinity 프로그램을 이용하여 짧은 Reads를 조립할 수 있습니다.
  • RNA-Seq Alignment : 초고속 유니버설(Universal) RNA-seq aligner인 STAR를 사용하여 RNA-seq 데이터를 reference genome에 alignment 할 수 있습니다.
  • Quantify Expression : HTSeq 또는 RSEM을 사용하여 reference genome의 유무와 관계없이 gene 또는 transcript 수준에서의 발현을 정량화할 수 있습니다.
  • Differential Expression Analysis : NOISeq, edgeR 또는 maSigPro와 같이 잘 알려진 다양한 통계 패키지(Package)를 사용하여 실험 조건 간 또는 시간이 지남에 따라 차등적으로 발현된 유전자를 검출할 수 있습니다. 또한, 풍부한 시각화는 결과를 해석하는 데 많은 도움이 됩니다.
  • Enrichment Analysis : 차등 발현 결과를 functional annotation과 결합함으로써, Enrichment 분석은 과잉 및 과소 표현된 생물학적 기능을 식별할 수 있도록 해줍니다.

Metagenomics
  • Quality Control : 샘플의 품질 관리를 수행하기 위해, FastQC와 Trimmomatic을 사용하여 Reads를 필터링하고 low quality bases를 제거할 수 있습니다.
  • Taxonomic Classification : Kraken에서 현재의 종(세균, 고세균, 바이러스)을 식별하고, 다단계의 Pie chart인 Krona와 샘플 간의 비교 막대 그래프로 결과를 시각화할 수 있습니다.
  • Metagenomics Assembly : 클라우드(Cloud)에서 빠르고 쉽게 대규모 데이터세트를 조립하기 위해 MetaSPAdes와 MEGAHIT 중에서 선택할 수 있습니다.
  • Gene Prediction : 가능 유전자와 단백질을 식별하고 추출하기 위해 일반 Reads에는 FragGeneScan, 조립된 데이터에는 Prodigal을 사용할 수 있습니다.
  • Functional Interpretation : EggNOG-Mapper 및 PfamScan을 사용하여 높은 처리량의 functional annotation을 얻을 수 있고, 결과를 GO graph 및 chart로 시각적으로 표현하고 비교할 수 있습니다.

Functional Analysis
  • High-Throughput Blast and InterProScan : CloudBlast 및 CloudInterProScan을 사용하여 선택한 reference 데이터세트에 대해 빠른 sequence alignment 및 domain 검색을 수행할 수 있습니다.
  • Gene Ontology Mapping : UniProt 및 Gene Ontology Consortia의 최신 데이터베이스에서 사용 가능한 functional annotation을 사용하여 잠재적인 homologous와 domain을 연결할 수 있습니다.
  • Blast2GO Annotation : Blast2GO 방법론을 사용함으로써, source annotation 품질 및 ontology 계층을 고려하여 가장 신뢰할 수 있는 기능 label을 새로운 sequence 데이터세트에 유연하게 할당할 수 있습니다.
  • Enrichment Analysis : 서로 다른 enrichment 분석 방법 (Fisher Exact Test 및 GSEA)을 사용하여 과다 및 과소 표현된 분자 기능을 식별할 수 있습니다.
  • Functional Interpretation : 다양한 시각화를 통해 annotation process를 평가할 수 있을 뿐만 아니라 실험 및 기능 분석 결과의 생물학적 해석을 도울 수 있습니다.

Genome 분석, Transciptome 분석, Metagenome 분석 받고 Functional Annotation 분석까지! NGS 분석 대부분 분야를 섭렵한 OmicsBox, 어떠신 것 같나요? 구상이 어느 정도 잡히시고 있나요? 점점 OmicsBox 매력에 빠져들고 계신가요? :))
그럼 이쯤에서 이런 질문을 던질 수도 있습니다. "Genome 분석, Transcriptome 분석, Metagenome 분석, Functional Annotation 분석까지 기능은 매우 좋은데 어떻게 이용해야 할지 잘 모르겠어요···"
걱정하지 마세요! 저희에게는 앞서 언급되었던 장점 중 하나인 workflows가 있습니다!



OmicsBox Workflows

Genome Analysis Workflows
  • Eukaryotic Genome Analysis Workflow
  • Prokaryotic Genome Analysis Workflow
  • Long Reads Eukaryotic Genome Analysis Workflow
  • Long Reads Prokaryotic Genome Analysis Workflow

[그림 7]. Eukaryotic Genome Analysis Workflow
 

Transcriptomics Workflows
  • De Novo Transcriptome Characterization Workflow
  • Transcript-level Analysis Workflow
  • Gene-level Analysis Workflow



[그림 8]. De Novo Transcriptome Characterizatioin Workflow
 

Metagenomics Workflows
  • Taxonomic Classification Workflow
  • Functional Annotationi Workflow



[그림 9]. Taxonomic Classification Workflow
 

Metagenomics Workflows


[그림 10]. Functional Analysis Workflow
 
Raw data만 넣어주고, 각 단계의 파라미터(Parameter)만 잡아주면~ 자동으로 output까지 산출되는 workflow! 참으로 간단하죠? {OK}
OmicsBox workflow만 있으면 어렵던 유전체 데이터 분석이 앞으로는 재미있게 느껴질 수 있습니다.



마치며
이번 포스팅(Posting)에서는 OMICS 데이터 분석을 용이하게 해주는 생물정보학 솔루션 OmicsBox에 대해 알아보았는데요. Genome 분석부터 Functional Annotation 분석까지 많은 기능이 있는 아주 매력적인 솔루션이라고 생각이 됩니다. 더군다나 어떤 기능을 어떻게 사용해야 하는지 잘 모르더라도 강력한 기능인 workflow가 있어서 손쉽게 output을 얻을 수도 있구요. 만약 NGS 데이터 분석이 아직 어렵고 낯설게 느껴지는 분들이 계신다면 이번 포스팅의 주인공인 OmicsBox를 강력! 추천해 드립니다. 후회하지 않으실 거에요 :D
 
만약 OmicsBox와 친해지고 싶으시다면 consulting@insilicogen.com으로 메일 주세요.
친절히 안내 드리도록 하겠습니다.
마지막으로 긴 글 읽어주셔서 감사드리며, 모두 건강한 나날 보내시길 바랍니다.
감사합니다.
 
OmicsBox : BIOINFORMATICS MADE EASY


Posted by 人Co

2021/04/30 17:17 2021/04/30 17:17
, , , , , ,
Response
No Trackback , No Comment
RSS :
https://www.insilicogen.com/blog/rss/response/380



유전체학의 발전은 인간의 질병을 이해하는 새로운 문을 열어주고 있으며 혁신적인 정밀 치료에 점점 더 많은 정보를 제공하고 있습니다.
2015년도에 전 세계 시퀀싱 스토리지 용량은 연간 1 페타바이트에 이르렀고, 7개월마다 용량이 두 배씩 지속적해서 증가하고 있습니다. 유전체 데이터는 향후 5년 동안 연간 수백 페타바이트를 생성할 것이며 2025년도까지 연간 스토리지가 거의 1 제타 바이트가 필요할 수도 있습니다. 이렇게 증가하는 질병 유전체 시퀀싱 데이터의 처리, 저장 및 분석에 유용한 솔루션인 Intel Select Solution을 소개하고자 합니다.




지난 3월 4일 저희 인실리코젠의 공식 페이스북을 통해서도 간략하게 소개해드렸었는데요, 당시 자세하게 설명해 드리지 않아 궁금한 점이 많으셨을 거로 생각합니다.
그래서 오늘은 Intel Select Solution - GATK Best Practice에 대해 상세히 설명해 드리고자 합니다.


Intel Select Solution은 컴퓨팅, 스토리지 및 네트워크에 특정 소프트웨어 워크플로우를 최적화하여 검증된 결과를 제공하는 것을 목표로 하여 세계 최고의 데이터 분석을 위한 솔루션 서비스 제공을 목표로 개발되었습니다.

해당 서비스 라인 중 GATK Best Practice는 유전체 분석을 위한 고성능 데이터 분석 컴퓨팅 클러스터 하드웨어 및 최적화된 워크플로우 소프트웨어 시스템입니다. 대용량 유전체 변이 분석을 위해 Intel 기술을 활용하여 GATK 파이프라인을 최적화할 수 있도록 Broad Institute에서 개발하였으며, 복잡한 설정 및 구성을 위한 검증 및 인증을 제공하여 유전체 수준의 데이터 분석을 빠르게 진행할 수 있도록 특별히 설계되었습니다.

더불어 Intel Select Solution - GATK Best Practice의 성능 및 품질은 Intel에서 인증을 받았고, 자사의 생물정보 분석 컨설팅 서비스와 결합하여 "Inco X Intel Select Solution - GATK Best Practice"가 탄생하였습니다.

하드웨어는 소규모에서 초대형 클러스터 슈퍼컴퓨터로 확장할 수 있도록 설계되었습니다. 맞춤형 시스템은 특정 요구 사항을 충족하도록 빠르고 동적으로 구성할 수 있으며, 강력한 최신 API 기반 소프트웨어로 리소스를 검색, 구성 및 모니터링하는 도구가 포함되어 있습니다.


[사진 1] Intel Select Solution - GATK Best Practice_설치된사진


 
  • 1. 최적화되고 효율적인 파이프라인 지원
  • 2. 최적화된 턴키 솔루션
  • 3. 사전 패키지된 WDL(워크플로우 설명 언어) 스크립트
  • 4. 다양한 애플리케이션 지원
  • 5. 간편한 IT 지원
  • 6. 더 많은 유전체 데이터에 액세스 가능
  • 7. 향상된 통계 기능
  • 8. 오픈 소스 소프트웨어
  • 9. 유연한 애플리케이션 구조
  • 10. 구현 용이성
  • 11. 확장성
  • 12. 설치 시간 단축
  • 13. 라이선스 비용이 없는 오픈 소스 소프트웨어
  • 14. 다양한 상용 솔루션도 적용 가능
  • 15. 최적화된 구성으로 최고의 효율성




다음 편에서 자세히 소개하겠지만, 하드웨어 구성과 사양이 궁금하신 분들은 아래 페이지에서 먼저 확인하실 수 있습니다.




유전체 연구는 질병을 이해하고 진단하는 것에 매우 중요한 역할을 합니다. 현재 연구원들이 이러한 기술을 사용하여 대규모 유전체 데이터 저장소를 구축하고 해당 데이터를 이해하게 됨에 따라 유전체 데이터 및 분석이 빠르게 발전하고 있습니다. Intel Select Solution - GATK Best Practice는 질병 유전체 연구를 위한 최고의 유전체 분석 솔루션으로, Broad Institute가 릴리즈 하는 GATK는 Intel Select Solution을 기반으로 구동, 검증, 배포되고 있어 GATK를 사용하여 대용량의 유전체 변이 분석을 하고자 하는 고객이 쉽게 시스템을 구축할 수 있는 장점이 있습니다. 그 결과 유전체 분석을 위해 맞춤화된 하드웨어 및 소프트웨어 솔루션으로 더 빠른 분석 및 최적화된 분석 환경을 제공합니다. 또한, Intel Select Solution - GATK Best Practice의 기본 구성으로 Human Whole Genome Sequencing 25~30 sample 데이터를 하루 만에 분석할 수 있으며, 서버 node를 확장함에 따라 더욱 많은 샘플을 빨리 처리할 수 있는 장점을 갖고 있습니다.





질병 유전체 시퀀싱 데이터의 처리, 저장 및 분석에 유용한 솔루션인 Inco X Intel Select Solution - GATK Best Practice에 관심 있으신 분은 인실리코젠으로 문의해주시고, 또한 후속편으로 Inco X Intel Select Solution - GATK Best Practice 하드웨어 구성사양, 작동원리 및 성능 벤치마킹 정보도 안내할 예정이오니 많은 관심 부탁드립니다.


작성 : iLAB 용승천 선임컨설턴트

Posted by 人Co

2021/03/21 19:45 2021/03/21 19:45
, , , , , ,
Response
No Trackback , No Comment
RSS :
https://www.insilicogen.com/blog/rss/response/373



우리는 빅데이터와 인공지능이 대세를 이루고 있는 시대에 살고 있습니다. 과거 산업혁명과 비교해서 4차 산업혁명 시대는 다양한 산업 분야와 산업 생태계에서 격세지감을 느낄 정도의 변화가 일어나고 있으며 그중에 바이오 헬스 산업은 향후 핵심적인 융합산업 분야로 주목받고 있습니다. 바이오 헬스 산업의 가장 기본이 되는 데이터 구축을 위해 국가 차원에서 바이오 빅데이터 구축 사업을 통해 바이오 데이터 구축 및 표준화로 미래 기술을 선점할 수 있는 기반을 만들기 위해 노력하고 있습니다. 이러한 기조에 맞춰 인실리코젠도 보건복지부, 과학기술정보통신부, 산업통상자원부가 컨소시움을 이루어 2년 동안 총 2만 명의 임상정보와 유전체 데이터 수집을 목표로 하는 국가 바이오 빅데이터 구축 시범 사업의 일환인 희귀질환 빅데이터 플랫폼 구축 사업 일부에 동참하여 희귀질환 극복을 위한 노력에 일조하고 있습니다. 이번 시간에는 희귀질환을 극복하기 위한 국내외 연구 기관에 관해 이야기하고자 합니다.




우선 희귀질환의 정의는 법률적으로 유병(有病) 인구가 2만 명 이하이거나 진단이 어려워 유병인구를 알 수 없는 질환으로 보건복지부령으로 정한 절차와 기준에 따라 정한 질환을 말합니다. 국내 희귀질환 관련 법률은 개인적/사회적 부담을 감소시키고, 국민의 건강 증진 및 복지 향상에 이바지하는 것을 목적으로 2015년에 희귀질환관리법이 제정되었으며, 국가관리대상 희귀질환 지정은 희귀질환관리법에 따라 유병인구 수, 질환 진단에 대한 기술적 수준, 질환 진단을 위한 인력 및 시설 수준, 질환에 대한 치료 가능성 등을 기준으로 희귀질환관리위원회의 심의를 거쳐 희귀질환으로 지정하게 되어 있습니다. 국내 기준과 달리 미국은 유병인구 20만 명 미만이거나 인구 1,500명당 1명, 유럽은 인구 2,000명당 1명, 일본은 유병인구 5만 명 미만이거나 인구 2,500명당 1명으로 발병하는 질환을 희귀질환으로 정의하고 있으며, 아직 세계적으로 합의된 정의는 없는 상태입니다.

희귀질환 환자의 질병에 대한 이해를 높이고, 질환에 대한 빠른 진단과 치료의 적용, 그리고 치료법 개발을 위해선 질환 데이터베이스 구축이 필수적이었기에, 이전에는 질환 데이터베이스 구축을 주로 희귀질환 관련 기관 및 단체가 주도하여 개발하고 유지되는 경우가 많았으나, 최근엔 국가 혹은 연합 단위로 데이터베이스를 구축하고 다양한 서비스를 제공하는 방향으로 변화하고 있습니다.

다음은 대표 희귀질환 관련 기관과 단체, 그리고 그 데이터베이스에 대한 특성을 말씀드리겠습니다.



  • 미국 국립희귀질환기구(NORD)
NORD는 1982년 희귀 질환 치료법 개발에 대한 재정적 인센티브를 지원하는 것을 골자로 한 희귀질환의 약물에 관한 법률이 미 국회를 통과하여, 이를 주도적으로 이끌었던 희귀질환 환자 지원 단체들이 연합하여 1983년 NORD(National Organization for Rare Disorders)로 조직되어, 현재까지 꾸준한 활동을 펼치고 있습니다. NORD 웹 사이트(https://rarediseases.org)에는 약 1,300여 개의 희귀질환 목록을 유지하고 있으며, 지원 기관들과 치료법 등에 대한 자세한 정보를 포함하고 있습니다.


<그림1. 미국 국립희귀질환기구 (NORD) 웹사이트>
 
  • 미국 유전병 및 희귀질환정보센터
GARD(Genetic and Rare Diseases Information Center)는 미국국립보건원(NIH)과 미국 국립인간게놈연구소(NHGRI)에서 지원받아 운영되는 센터로 희귀질환 환자의 지원, 희귀질환 진단 및 치료지원, 연구자 연결, 연구 및 치료 자금 지원 연결, 희귀질환에 대한 교육 등을 주된 활동으로 하고 있습니다. GARD 사이트(https://rarediseases.info.nih.gov/) 내에 희귀질환의 정보를 서비스하고 있으며, 질환 정보, 유전 여부, 진단 및 치료정보뿐만 아니라 환자를 지원하기 위한 지원기관, 전문가 목록, 질환 관련 콘퍼런스 및 이벤트 일정 등을 제공하고 있습니다.
 

<그림2. 미국 유전병 및 희귀질환정보센터 (GARD) 홈페이지>
 
  • Global Genes
Global Genes(https://globalgenes.org/)는 희귀유전질환 환자와 그 가족을 위한 국제 비영리 단체입니다. 이 기구는 희귀유전질환에 대한 의식을 고양하기 위한 공교육 제공과 소셜 미디어를 통한 지역사회 지원 체계를 구축하고, 치료와 치료법을 찾기 위한 연구 자금 지원을 하고 있습니다. 또한, GARD 등에서 유전정보를 참고하여 정보를 제공하고 있으며, 희귀유전환자와 그 가족에게 질환의 진단 및 치료를 지원받을 수 있는 기관 목록을 함께 제공하고 있습니다.
 

<그림3. Global Genes 홈페이지>
 
  • 유럽희귀질환환자연맹(EURORDIS)
EURORDIS(European Organization for Rare Diseases)는 유럽연합 내에 있는 70개국 837개 희귀병 환자 조직을 대표하는 비영리 기구로 1997년에 설립되었습니다. EURORDIS는 환자, 가족, 환자 그룹을 연결하고 모든 이해당사자를 모아 질환을 연구하고 환자를 대상으로 하는 다양한 서비스를 제공하고 있습니다. 또한 세계희귀질환의 날을 제정하여 국제적인 관심과 이해를 촉구하고 있습니다. 연맹 자체에서 운영하는 데이터베이스는 보유하고 있지 않지만, 대신에 관련 정보는 프랑스 국립보건의학연구소의 Orphanet을 이용하도록 유도하고 있습니다.
 

<그림4. 유럽희귀질환환자연맹 (EURORDIS) 웹사이트>
 
 
  • 스웨덴 희귀질병정보센터(Swedish Information Centre for Rare Diseases)
스웨덴에서는 질병이 인구 1만 명당 1명 미만에 장애를 일으킬 때 희귀질환으로 정의하고 있으며, 이러한 정의를 기반으로 2019년 2월까지 440여 개의 희귀질환에 대한 정보를 제공하고 있으며, 스웨덴 국립 희귀질환연구소(NFSD, https://www.socialstyrelsen.se/)와 스웨덴 대학병원 및 다양한 의료 전문 센터와 연계하여 환자의 진단 및 지표를 지원하고 있습니다.
 

<그림5. 스웨덴 희귀질병정보센터 웹사이트>
 
 
  • 일본 희귀 및 미진단 질환 이니셔티브(IRUD)
일본은 2015년 일본 의료연구개발청(AMED)에서 일본의 희귀 및 난치성 질병 프로젝트의 일환으로 IRUD(the Initiative on Rare and Undiagnosed Disease)를 시작하였고, 2018년 3월까지 3,083명의 환자와 그 가족을 대상으로 총 8,837개의 시료를 수집하여 추출한 엑솜(Exome) DNA 염기서열 해독 정보와 의료 정보를 결합해 희귀질환을 연구하고 있습니다. IRUD는 희귀 및 미진단 질환의 기초 연구에도 큰 도움이 되고 있으며, 확보한 환자 및 가족 엑솜 DNA 정보를 바탕으로 데이터베이스를 만들어 이를 통해 전 세계와 공동 연구를 늘려가고 있습니다. 이제까지 몰랐던 질병 관련 변이나 유전자도 찾아내어 엑솜 외의 DNA 영역까지 모두 해독해 RNA, 후성유전 등 다양한 유전학 영역을 탐구하고 있습니다.
 

<그림6. 일본 희귀 및 미진단 질환 이니셔티브 (IRUD) 웹사이트>
 
 
  • 질병관리청 희귀질환 헬프라인
국내의 경우 질병관리청에서 2012년부터 일부 희귀질환에 대해 전국 단위의 전문가 네트워크를 구성하여 환자 임상자료 및 생체자원을 수집하고 있으며, 이를 통해 희귀질환의 진단, 치료 및 예후 등에 대한 임상정보와 시료를 수집, 분석하여 한국인의 임상적 특성을 규명하고 국내외 관련 전문가들과 정보 공유를 통해 해당 질환의 진료와 치료기술을 개발하고, 환자들의 조기 진단 및 진료의 질 향상에 기여하기 위해 헬프라인을 운영하고 있습니다. 국내 6개 질환 (시신경척수염, 아밀로이드증, 유전성 부정맥, 전신홍반성루푸스, 조직구증식증, 크론병)에 대한 전문가 네트워크를 운영하고 있으며, 2020년 11월 1,014개의 질환에 대한 증상, 원인, 진단, 치료 등의 정보를 제공합니다. 또한, 관련 임상시험 정보 제공을 위해 미국국립보건원의 ClinicalTrials.gov 데이터베이스로 연결을 제공하고 있습니다.
 

<그림7. 질병관리청 희귀질환 헬프라인>
 
  • 한국생명공학연구원 희귀난치질환연구센터
한국생명공학연구원(KRIBB)의 바이오의약연구부 소속 희귀난치질환연구센터는 빅데이터 기반의 희귀난치성 신경계 질환의 정밀, 맞춤의료연구 인프라 구축을 통해 희귀난치성 신경계 질환의 진단과 치료를 위한 원천기술 개발을 목표로 희귀난치성 신경계질환의 임상시료와 임상정보, 유전체 정보를 확보하여 한국인 유전체표준변이지도 작성하고 고급 데이터베이스를 구축하고 있습니다. 현재까지의 연구 성과는 뇌 발달장애 원인 신규 변이 발견 및 동물 모델 개발로 소아간질, 자폐 , 지적장애를 유발하는 TSC 유전성 뇌 발달질환의 in-vivo 동물 모델 제작과 in-vitro 신경줄기세포 배양 시스템을 이용하여 뇌 발달질환 진단 표지자 발굴을 위한 시스템이 구축되었고, 질환 특이적 대용량 NGS 유전체 데이터 생산 및 분석 파이프라인 구축으로 대용량 NGS(Next Generation Sequencing) 유전체 데이터와 다중 이형 바이오 빅데이터 처리, 가공, 분석을 위한 시스템을 구축하였습니다.
 
  • 한국희귀질환재단
한국희귀질환재단(Korean Foundation for Rare Disease)은 시민과 지자체, 기업, 단체 등의 후원과 참여로 이루어지는 순수 공익재단으로, 그 모체가 되는 '한국희귀질환연맹'의 지난 10년 동안의 활동을 통해 파악된 희귀질환 환자와 가족들의 충족되지 못한 욕구와 간절한 염원을 담아 희귀질환찾기, 유전상담 서비스 지원, 효율적인 희귀질환 치료를 위한 R&D 연구 지원, 진단 사업 지원, 자원봉사 네트워크 구축 및 관리 지원, 특수 보육 교육 프로그램 개발 및 지원 사업 등을 보다 전문적이고 효율적으로 제공하기 위해 설립되었습니다.
 

<그림8. 한국희귀질환재단 홈페이지>
 
 

 
이상이 국내외 대표적인 희귀질환 관련 단체에 대한 간략한 설명이었습니다. 위의 단체들은 각기 지역과 국가, 질환에 특화된 환자와 가족을 대상으로 하는 다양한 서비스를 제공하고, 진단과 치료를 위한 지침과 성과를 지속해서 업데이트하고 있습니다. 말라리아의 경우 아프리카에서는 너무나 흔한 질환이지만 북유럽의 경우는 희귀질환인 경우가 있듯이 전 세계가 연구 성과를 공유하고 지속해서 정보를 수집하고 분석한다면 희귀질환 극복의 시기를 앞당길 수 있을 것이라 기대하며 위의 단체와 기관은 설립 목적을 잊지 않고 질환 극복의 그 날까지 계속해서 정진해 나가기를 바라며 이만 희귀질환 관련 기관 소개를 마칩니다.
 
 
작성 : 대전지사 양성진 책임 개발자

Posted by 人Co

2021/02/28 20:23 2021/02/28 20:23
,
Response
No Trackback , No Comment
RSS :
https://www.insilicogen.com/blog/rss/response/372



역사를 보면, 인류는 어떤 상황 속에서도 교육을 항상 지속하여 왔습니다.
그러한 교육에 대한 열정이 있었기에 현재의 문명을 이룰 수 있었다고 생각합니다.

COVID-19 상황이 지속되는 가운데 (주)인실리코젠은 철저한 방역지침을 준수하며, 생물정보 인재양성 프로그램을 진행하였습니다. 7월 6일부터 8월 14일까지 6주간 진행된 프로그램의 생생한 후기 함께 보겠습니다.





























작성 : 人CoINTERNSHIP 제11기 수료생
이가희, 이솔휘, 이주연, 진종현, 황성경

Posted by 人Co

2020/08/26 09:00 2020/08/26 09:00
, , , , , , , ,
Response
No Trackback , No Comment
RSS :
https://www.insilicogen.com/blog/rss/response/355

 
최근 여러 분야에서 딥러닝에 대한 관심이 많아지고 있습니다.
생물정보 분야에서는 MRI나 CT 같은 의료 이미지로 학습한 뒤, 질병을 진단하는 연구가 많이 진행되고 있습니다. 그렇다면 이미지를 이용한 딥러닝은 어떤 방식으로 진행될까요?

이미지 딥러닝은 어떠한지 알고 싶어도 코드 위주의 설명이 많아, 코드가 익숙하지 않은 분들은 시작부터 벽이 세워진 느낌이 드셨을 거예요.
코드가 익숙하신 분이시든 그렇지 않은 분이시든 이미지 딥러닝의 입문자분들께 개념 잡는 것에 대해 조금이나마 도움이 되셨으면 하여 알고리즘 개념 설명 위주로 이 글을 준비하였습니다. 그럼 이미지 딥러닝을 하기 위한 알고리즘에 대해 알아보기에 앞서, 컴퓨터는 이미지 파일을 어떤 방식으로 인식하는지에 대해 알아볼까요?
 
 


우리가 이미지를 인식하는 방식과 컴퓨터가 이미지를 인식하는 방식은 많이 다릅니다. 우리는 이미지를 눈에 보이는 모습을 그대로 받아들이지만, 컴퓨터의 경우는 숫자로 된 형태로 인식합니다. 숫자는 색의 명암을 나타내며, 0에 가까울수록 어두운색이고 255에 가까울수록 밝은색입니다. 그렇다면 색상은 어떻게 표현할까요? 흑백 이미지의 경우에는 1개의 채널로, 컬러 이미지의 경우엔 RGB(R-Red, G-Green, B-Blue) 3개의 채널로 빨강, 초록, 파란색 각각의 명암을 이용하여 이미지의 색상을 표현합니다.


[그림 1] 컬러 이미지의 구조 - Insilicogen (IX Team)

컬러 이미지는 각 픽셀을 채널별로 실수로 표현된 3차원 데이터입니다. 흑백 이미지는 2차원 데이터로, 1개의 채널로만 구성되어 있습니다.
[그림 2] 컬러 이미지의 3차 구조
위의 그림처럼 높이가 4 pixel, 폭이 4 pixel의 이미지일 경우,
 
컬러 이미지 데이터의 shape은 (4, 4, 3)
흑백 이미지 데이터의 shape은 (4, 4, 1)
 
로 표현합니다.
 
컴퓨터가 이미지를 어떤 방식으로 인식하는지에 대해 간단하게 알아봤습니다. 그럼 이제 이미지 딥러닝에선 어떤 알고리즘이 주로 사용되는지 알아볼까요? 딥러닝을 이용하여 이미지를 분류할 때에는 주로 CNN(Convolutional Neural Network) 알고리즘이 많이 사용되고 있습니다. 그렇다면, 이 CNN 알고리즘이 나오기 이전에는 어떻게 학습을 했을까요?
 

  
 
CNN 알고리즘 이전에는 Fully-connected Multi-layered Neural Network의 학습 방식을 이용하여 이미지 딥러닝을 수행했습니다.
 
[그림 3] Fully-connected Multi-layered Neural Network
형상을 가졌는지에 대해 알 수 없고, 각각의 픽셀을 1차원적으로 보게 됩니다. 이러한 학습 방식으로 인하여 이미지의 크기가 커져서 픽셀의 수가 많아진다거나 은닉층(Hidden layer)의 수가 증가하면 학습시간 및 학습해야 하는 매개변수(Parameter)의 수가 기하급수적으로 증가하게 됩니다. 또한, 이미지가 살짝 회전되었거나 gif처럼 이미지가 움직이는 상태라면 이를 같은 이미지라고 인식하지 못하므로, 조금이라도 변화가 생길 때마다 새로운 입력으로 이미지 데이터를 처리해 주어야 합니다. 그럼 이미지를 분류하기 위해 Fully-connected 학습 방식처럼 이미지의 모든 픽셀이 꼭 중요할까요? 그렇지 않습니다. 이미지의 특성을 찾는 데에 중요하게 작용하는 픽셀이 있지만, 단순히 배경인 부분이라 픽셀 정보를 가지고 있지 않더라도 이미지를 구분하는 데 큰 영향을 주지 않기 때문입니다. 이미지 분류를 하는 데 중요하지 않은 픽셀은 제거하고 학습을 하기 위해 고안된 알고리즘이 바로CNN(Convolutional Neural Network)입니다.
 

 
 
그렇다면 CNN 알고리즘은 어떠한 구조를 이루고 있을까요?
 
 
[그림 3] CNN 알고리즘의 구조
 
CNN은 크게 이미지의 특징을 추출하는 부분과 클래스를 분류하는 부분으로 나뉩니다. 특징 추출 영역은 합성곱층(Convolution layer)과 풀링층(Pooling layer)을 여러 겹 쌓는 형태(Conv+Maxpool)로 구성되어 있습니다. 그리고 이미지의 클래스를 분류하는 부분은 Fully connected(FC) 학습 방식으로 이미지 분류를 합니다.
 

 
 
합성곱이란, 주어진 이미지 데이터를 합성곱 필터(Convolution filter)를 통해 이미지 분류에 중요하게 작용할 feature들을 추출하는 데 사용됩니다. CNN 알고리즘 이전에 사용되었던 FC 알고리즘과 달리, 이미지의 형태를 유지하기 때문에 합성곱층을 지나더라도 인접한 픽셀에 대한 정보를 알 수 있습니다. 그렇다면, 합성곱에서 사용되는 합성곱 필터는 무엇일까요? 우선, CNN에서 필터는 커널(Kernel)이라고도 합니다. 필터는 이미지의 공용 매개변수(weight)로 작용하며, 주어진 이미지를 슬라이딩하면서 이미지의 feature들을 찾아냅니다. 여기서 공용 매개변수라고 하는 이유는 합성곱을 진행할 때, 하나의 이미지에 대해서 하나의 필터가 사용되기 때문입니다. 일반적으로 (3, 3)이나 (4, 4)와 같은 정사각 행렬로 정의가 되고, 주어진 이미지를 지정된 간격(Stride)만큼 순회합니다. 그럼 합성곱 필터를 이용하여 합성곱 연산은 어떤 방식으로 진행되는지 알아보기 위해, 아래의 그림으로 설명하겠습니다.
 
 
[그림 5] Convolution 연산
 
위의 그림에서 주어진 이미지 데이터의 크기는 6x6이고, 필터의 크기는 3x3입니다. 이미지를 순회하는 간격(stride)은 1입니다. 연산은 이미지와 필터가 서로 겹쳐지는 부분은 곱을, 각각의 곱은 합하는 방식으로 진행됩니다. 위의 그림에서 Result 아래에 적힌 연산을 참고하시면 이해가 더 쉬우실 거예요.
 
Fig6.Convolution_layer.gif
 
위의 그림은 합성곱 연산이 진행되는 방식입니다. 이 그림 역시 필터가 이미지를 순회하는 간격은 1입니다. 이처럼 합성곱을 진행하여 얻어진 결과를 피처맵(Feature Map, 위의 그림에서는 오른쪽의 분홍색)을 만듭니다. 여기서 피처맵은 주어진 이미지에서 특징들을 추출한 것이고, 액티베이션맵(Activation Map)이라고도 합니다. 피처맵은 여러 가지의 의미로 사용되지만, 액티베이션맵은 주로 합성곱층의 최종 출력 결과를 의미합니다.

합성곱층에서 필터와 스트라이드의 작용으로 이미지(피처맵)의 크기는 입력 데이터보다 작아지게 됩니다. 그렇다면 합성곱층을 지나면 이미지가 자꾸 줄어드는데, 계속 반복적으로 합성곱층을 지나면 이미지가 없어지지 않을까? 라는 생각이 들게 되죠. 이를 방지하는 방법이 패딩(Padding)입니다. 패딩은 입력 데이터의 외각에 지정된 픽셀만큼 특정 값으로 채워 넣는 것을 의미하고, 보통 0으로 값을 채워 넣습니다.
 

 
 
위의 그림을 보면, 3x3 이미지의 외각에 0이 채워진 것을 볼 수 있습니다.
 
 

 
[그림 8] Pooling
지금까지 합성곱에 대해서 알아보았습니다. CNN 알고리즘에서 이미지 특징을 추출하는 부분에서 합성곱층 다음으로 나오는 층은 풀링층(Pooling layer)입니다. 합성곱층의 출력 데이터(액티베이션 맵)를 입력으로 받아, 출력 데이터의 크기를 줄이거나 특정 데이터를 강조하는 용도로 사용됩니다. 풀링층을 처리하는 방법으로는 Max, Average, Min Pooling이 있습니다. 정사각 행렬의 특정 영역 안에 값의 최댓값, 평균 혹은 최솟값을 구하는 방식이고, 주로 Max Pooling을 사용합니다. 앞의 합성곱처럼 인접한 픽셀값만을 사용한다는 것은 비슷하지만, 합성곱처럼 곱하거나 더하는 연산 과정이 없어서 학습이 필요한 부분이 없고 입력 데이터의 변화에 영향을 적게 받습니다. 이는 최댓값, 평균값, 최솟값 중 하나를 구하는 것이기 때문에, 입력 데이터가 조금 변하더라도 풀링의 결과는 크게 변하지 않습니다.
  

 
 
앞에서 설명해드렸던 바와 같이, CNN은 크게 특징 추출(Feature extraction) 부분과 분류(Classification) 부분으로 나뉩니다. 특징 추출은 합성곱층과 풀링층이 반복적으로 수행되고, 분류는 앞에서 추출된 Feature들이 Fully-connected layer 학습 방식을 이용하여 어떤 이미지인지 분류합니다.
 
참고) 학습시킬 이미지가 부족하시다면! 이미지 학습을 위한 open data source
 
이미지 분류하기 위해 이미지를 학습시킬 때, 하나의 클래스(ex. 강아지 클래스, 고양이 클래스)당 최소 1,000장이 필요합니다. 학습을 많이 시키면 많이 시킬수록 이미지를 분류하는 정확도는 당연히 올라갑니다. 그렇다면, 이미지 학습을 하기 위해서 많은 양의 이미지 데이터가 필요하겠죠? 딥러닝이 활성화되면서 공개 이미지를 수집하는 데이터베이스가 많아졌고, 대표적으로 ImageNet과 Kaggle 등이 있습니다. 이미지를 학습하는 데 필요한 이미지 데이터를 공개적으로 제공하는 사이트이므로, 아래 사이트를 들어가시면 이미지 딥러닝 활용에 여러 방면으로 도움이 될 것입니다. :)
 

[그림 9] ImageNet
(http://www.image-net.org/)


[그림 10] Kaggle
(https://www.kaggle.com/)


CNN 알고리즘에 대해서 더 자세하게 설명해 드리고 싶었지만, 그러면 본 취지에 맞지 않을 것 같았어요. 제가 생각하기에 이미지 딥러닝의 입문자분들께 가장 필요한 부분 위주로 이 글을 작성하였습니다. 이 글에 적힌 것들을 바탕으로 궁금한 부분이 생길 때마다 조금씩 조금씩 자료를 찾다 보면, 깨닫지 못한 사이에 이미지 딥러닝에 대해 많이 알게 되실 거예요. 조금이나마 도움이 되셨길 바라며, 너무 두려워하지 마시고 힘내시길 바랍니다. :D
 
 

Posted by 人Co

2020/06/01 19:28 2020/06/01 19:28
, , ,
Response
No Trackback , No Comment
RSS :
https://www.insilicogen.com/blog/rss/response/346

Welcome The Year Of Mighty Mouse!

한 해 동안 열심히 달려온 인실리코젠 모든 직원분이
다가오는 2020년을 힘차게 맞이하고자 한자리에 모였습니다.
2019 인실리코젠 송년의 밤, 그리고 2020을 맞이하는 시무식
영상으로 함께 보시죠!


















자선 경매 행사로 모은 기부금은 아름다운가게에 전달되었으며 윈스턴 처칠의
"우리는 일함으로 생계를 유지하시만 나눔으로 인생을 만들어간다"는 말처럼
의미있는 2019년을 보냈습니다.  

아름다운가게 블로그 확인하기:
Link 1 : http://blog.naver.com/beautifulcup/221797031474 
Link 2 : http://bitly.kr/tlLfO2AG





IX팀 김지인 / 이용태

Posted by 人Co

2020/01/13 08:47 2020/01/13 08:47
, , , , , , , , , , ,
Response
No Trackback , No Comment
RSS :
https://www.insilicogen.com/blog/rss/response/335



« Previous : 1 : 2 : 3 : 4 : 5 : ... 8 : Next »