« Previous : 1 : 2 : 3 : 4 : Next »
 
행정안전부는 2020년 7월 30일부로 전자정부 웹사이트 품질관리 지침(행정안전부 고시 제2020-38호(2020. 7. 30., 전부개정))을 개정했습니다. 전자정부 웹사이트 품질관리를 한마디로 정의한다면 행정/공공기관의 웹사이트를 국민이 이용하고자 할 때 이용에 대한 불편을 해소하고 편리성을 높이고자 웹사이트에 대한 품질관리 원칙 및 종합적인 품질관리 기준을 마련한다고 할 수 있습니다.
 

오늘 블로그는 행정안전부 (이하, 행안부)에서 2020년 7월에 개정한 정부 웹사이트의 품질관리 원칙 및 품질관리 기준을 자세히 살펴보도록 하겠습니다.


''전자정부 웹사이트 품질관리 지침이 개정되기 이전에도 전자정부서비스 호환성 준수지침(개정 2017. 12.29.행정안전부고시제2017- 26호)(개정 2017. 12.29.행정안전부고시제2017- 26호)이 있었습니다. 이 지침의 경우, 웹표준 준수, 비표준 제거 및 웹 호환성 확보 등 다양한 웹 브라우저 이용 지원에만 내용이 집중되었습니다.

이제 사용자 이용 측면에서 더욱 현실적인 법안이 개정되었으니 행정/공공기관의 웹사이트 이용 시에 불편함 없이 더 편리하게 이용할 수 있다고 예상해 보면서 실질적으로 어떤 내용이 개정되었는지 확인해 보겠습니다.

[Fig.1] 조문별 주요 내용
(https://www.mois.go.kr/cmm/fms/FileDown.do?atchFileId=FILE_00095282LdKk50g&fileSn=0)

전자정부 웹사이트 품질관리 지침 각 조항의 주요 내용을 정리한 표입니다. 지침의 주요 내용은 크게 웹사이트 품질관리 원칙, 품질관리계획, 품질 진단 및 개선 3가지입니다. 웹표준, 호환성, 접근성, 개방성, 접속성, 편의성, 신뢰성, 유사중복방지 등 품질관리 원칙을 명시하였고, 품질관리계획을 위해 웹사이트 품질관리자를 지정하고 교육할 수 있으며, 행정기관 등은 자체 품질진단 시행, 행안부는 주요 웹사이트 품질진단 시행을 할 수 있습니다.


(기존 지침: 전자정부 서비스 호환성 준수 지침), (개정 지침: 전자정부 웹사이트 품질관리 지침)

[Fig.2] 신구조문대비 전자정부 웹사이트 품질진단 기준
(https://www.mois.go.kr/frt/bbs/type001/commonSelectBoardArticle.do;jsessionid=AQw96T0UD5HJ9fIAOCcvVtnS.node50?bbsId=BBSMSTR_000000000016&nttId=79056)

신구조문대비 전자정부 웹사이트 품질진단 기준을 정리한 표입니다. 전자정부 웹사이트 품질관리 지침 내 별표를 보면 전자정부 웹사이트 품질진단 기준이 있습니다. 이 부분은 품질관리 원칙(호환성, 접근성, 개방성, 접속성, 편의성, 효율성, 신뢰성)에 대한 진단 지표와 진단 내용을 보여주고 있습니다. 기존 지침(전자정부서비스 호환성 준수지침)에는 전자정보서비스 웹 호환성 진단표, 전자정보서비스, 전자정보서비스 모바일 웹 호환성 진단표 두 가지로만 간단하게 되어 있었는데, 더욱 상세하게 세분화하여 품질진단 기준을 마련했음을 알 수 있습니다.

이렇듯, 행정/공공기관의 웹사이트 품질관리 기준은 다양해지고 명확해져서 앞으로 국민이 사용하게 될 때는 편하게 이용할 수 있을 것 같다는 생각이 듭니다.

끝으로 정보화 사업을 수행하는 수행업체 입장에서 한 가지 의문점은, 행정/공공기관에서 나라장터에 웹사이트 구축과 관련된 사업을 공고하게 될 때 위와 같은 품질관리에 대한 요구사항이 많아질 것으로 예상하는데 품질관리 관련된 요구사항은 산출내역에 어떻게 반영되는지 궁금했습니다. 현재 소프트웨어사업 대가산정 가이드(2020. KOSA)를 보면 보정계수 산정 부분에는 품질관리에 관한 내용은 없기 때문입니다.(Fig.3. 참조) 그래서, 국내 SW사업의 품질을 향상하기 위하여 소프트웨어 대가산정 가이드에도 품질관리 지침을 반영한 가이드라인을 제시하는 것이 객관적인 대가산정을 유도하는데 도움이 될 것으로 생각합니다.

[Fig.3] SW사업 대가산정 가이드 2020 개정판(137페이지)
 
 
 
 
 

 

Posted by 人Co

2020/08/30 21:54 2020/08/30 21:54
Response
No Trackback , No Comment
RSS :
https://www.insilicogen.com/blog/rss/response/356

크롬 개발자도구의 숨은 팁 알아보기



웹 기반 관련 업무에 종사하시는 분들은 개발자 도구가 친숙하실거로 생각합니다. Elements 탭에서 CSS를 확인하거나 Console 탭에서 출력된 결과물을 확인하기도 합니다. 저도 웹 개발을 하면서 스크립트 디버깅을 하는 경우가 있는데 그럴 때마다 조금 불편하다는 생각을 하게 되었습니다. 그래서 개발자 도구 꿀팁에 대해 알아보게 되었고 여러분들에게 개발자 도구에서 잘 알려지지 않은 기능을 공유해보려고 합니다.
 
 

 
개발자 도구가 생소하신 분들을 위해 크롬 개발자 도구에 대해 설명하겠습니다. 구글에서 만든 웹 브라우저인 크롬에는 개발을 도와주는 다양한 도구가 기본적으로 제공되는데 이를 개발자도구라고 합니다. 웹 페이지는 많은 요소로 이루어져 있고 이 요소들은 각각 그림, 글, 입력 폼 등 다양한 형태로 존재하게 됩니다. 개발자 도구는 개발자들이 이러한 요소들을 확인하거나 디버깅할 때 자주 사용됩니다.
 

개발자 도구 실행은

  • F12
  • Ctrl + Shift + i

로 실행할 수 있고 아래 사진처럼 [도구 더보기 > 개발자 도구] 를 클릭해서 실행할 수도 있습니다.

[Fig.1] Opening DevTools from Chrome`s main menu (https://developers.google.com/web/tools/chrome-devtools/open)

개발자 도구를 실행하게 되면 여러 가지 패널이 보일 텐데 각 패널의 간략한 특징은 아래와 같습니다.

[Fig.2] DevTools screen

  • Elements : html/CSS 상태 확인
  • Console : 콘솔 (변수 정보를 확인하고 오류 메시지 표시)
  • Sources : 스크립트 디버깅 (break point 지정 및 변수 모니터링 등)
  • Network : 브라우저에서 발생하는 통신 상태
  • Performance(예전 Timeline패널) : 성능 측정
  • Memory(예전 Profiles 패널) : 메모리 사용 형태를 작성하고 누수 탐색.
  • Application(예전 Resources 패널) : 쿠키 및 스토리지 등의 내용 수집
  • Audits : 페이지를 분석하고 최적화를 위한 팁 나열
  • Security : Mixed content 이슈, 인증서 문제 등을 디버깅


 

[Fig.3] Console log

Console 패널에서 호출 결과를 확인하기 위해 위의 그림처럼 출력하는 경우가 많이 있습니다. 이때 결과로 나온 Object를 복사하고 싶다면 어떻게 할까요? 보통 그냥 drag 해서 선택한 다음 Ctrl + c, Ctrl + v 로 복사하는데 이러면 나중에 다시 정리해야 하고 결과값이 많은 Object의 경우 하나하나 펼쳐주지 않으면 [...]이 복사 될 수 있습니다. 이런 불편함을 없애주는 copy이라는 메소드가 있는데 이 메소드를 사용하면 객체가 클립보드에 저장됩니다. 하지만 변수에 담기지 않은 상태, 즉 이미 로깅된 객체는 copy에 바로 담을 수 없고 변수로 지정을 해줘야 합니다.

예시


1. 내가 지정하고 싶은 객채에 오른쪽 마우스를 클릭 후 Store as global variable 선택


 [Fig.4] Select 'Store as global variable'

2. 선택하면 global 영역에 임시 변수로 저장됨

[Fig.5] Save variable

3. 생성된 임시변수를 사용해서 copy메소드 실행

[Fig.6] Copy method

그러면 객체가 복사됩니다.

 


프론트앤드에서 데이터를 얻기 위해 백앤드로 XHR 요청을 보냅니다. 이때 내가 원하는 XHR을 한 번 더 요청하고 싶다면 새로고침을 하는 방법도 있겠지만, 더 쉬운 방법을 알려드리겠습니다.

[Fig.7] Example replay XHR

개발자 도구에서 Network 패널을 선택 후 원하는 XHR요청을 오른쪽 마우스로 클릭하면 Replay XHR이 나오는데 이를 선택하면 해당 XHR을 재요청하게 됩니다.
 
 

 
화면 일부를 캡처하는 것은 이미 여러 가지 툴들이 존재하고 있습니다. 하지만 다음 작업은 웬만한 프로그램으로는 힘듭니다.
  • 스크롤 아래 보이지 않는 부분을 포함하여 웹 페이지에 있는 모든 것의 스크린 샷
  • DOM 요소의 내용을 정확하게 캡처

이런 작업들은 운영체제에 제공되는 스크린 샷 도구로 해결할 수 없지만 개발자 도구에선 해결할 수 있습니다.

시작하기 전에 Command 메뉴를 소개하겠습니다. 리눅스에 셸(Shell)이 있듯이 크롬에는 Command 메뉴가 있습니다. Command 메뉴를 사용하면 명령어를 입력해 Chrome을 조작할 수 있습니다.

Command 메뉴는 개발자 도구를 연 후

  • Ctrl + Shift + p

를 통해 열 수 있고, 아래 버튼을 클릭하여 열 수도 있습니다.


[Fig.8] Opening command from Chrome`s main menu
 
Command 메뉴를 열게 되면 아래 그림과 같이 다양한 명령어들이 있습니다.
 

[Fig.9] Command function
 

제가 Command 메뉴를 설명해 드린 이유는 Command 명령어를 통해 스크린 샷을 할 수 있기 때문입니다.
이제 다시 본론으로 돌아와 스크린 샷에 대해 말해보겠습니다.

1. 스크린 샷 하고자 하는 웹 페이지를 엽니다. 그리고 개발자 도구를 열고 Command 메뉴를 실행합니다.

2. 그런 다음 명령어 screenshot을 입력합니다. 그러면 screenshot에 관련된 여러 명령이 아래에 나오게 됩니다.

[Fig.10] screenshot step 2

3. Capture full size screenshot을 선택하게 되면 현재 페이지의 전체 스크린 샷을 얻을 수 있습니다.

[Fig.11] screenshot 결과물

마찬가지로 DOM 요소의 스크린 샷을 만들려면 스크린 샷 도구를 사용할 수 있지만, 요소를 정확하게 캡처하는 게 쉽지 않습니다. 이때는 Capture node screenshot 명령어를 실행하면 원하는 요소만 선택하여 캡처할 수 있습니다.

1. Elements 패널에서 원하는 요소를 선택합니다.

[Fig.12] Node screenshot step 1

2. 선택한 후 Command 탭을 열어 screenshot 명령어를 입력합니다. 그중 Capture node screenshot 을 선택하면 요소가 저장됩니다.

[Fig.13] Node screenshot 결과물

 


크롬 확장프로그램인 Awesome Screenshot도 전체 스크린 샷을 지원합니다. Awesome Screenshot은 녹화, 공유, 스크린 샷 등의 기능을 제공하는 데 스크린 샷에 텍스트, 주석, 라인, 화살표 및 모양을 캡처한 이미지에 직접 추가할 수 있는 기능이 있습니다.
Awesome Screenshot을 사용하기 위해서는 우선 확장 프로그램을 추가해야 합니다. Awesone Screenshot은 https://www.awesomescreenshot.com/ 에서 무료로 추가할 수 있습니다. 추가한 뒤에는 오른쪽 위에 확장 프로그램을 선택하면 아래 메뉴가 나옵니다.

 

[Fig.14] awesome screenshot 메뉴

  • Visible Part : 현재 보이는 전체화면을 캡처
  • Full Page : 스크롤 아래 보이지 않는 부분을 포함한 전체화면 캡처
  • Selected Area : 선택한 영역을 캡처
  • Visible Part after Delay : 옵션에 따라 3초, 5초 후 캡처
  • Entire Screen & App Window : 화면 공유

  • Annotate Local & Clipboard Image : 내 컴퓨터의 이미지를 편집기로 불러옴

캡처한 뒤에는 바로 여러 도구를 추가할 수 있는 화면으로 넘어가게 됩니다. 무료로 제공되는 부분은 화살표, 도구, 텍스트 등 빨간색 상자 부분이고 등급을 업그레이드하면 노란색 상자 부분의 도구들을 사용할 수 있습니다.

[Fig.15] awesome screenshot 도구

확장 프로그램을 추가하고 싶지 않으신 분, 요소 캡처를 원하시는 분께는 개발자 도구를 이용하는 걸 추천해 드리고 시간 지연 옵션을 원하시는 분, 캡처 후 여러 가지 모양을 직접 추가하시고 싶으신 분들에게는 Awesome Screenshot을 추천해 드립니다.

 


크롬 개발자 도구에서 디버깅을 하다 보면 특정 위치로 이동하기 위해 원하는 위치에 breakpoint를 설정하고 next로 넘어가는 경우가 많이 있습니다. 긴 함수에서도 여러 값을 보기 위해 이러한 방법을 사용하는데 이런 경우 나중에 원치 않아도 걸리게 되어 시간이 지체되고 다시 해체해야 하는 번거로움이 있습니다. 이때 사용하는 기능이 Continue to here입니다. 디버깅 중 원하는 코드 위에 마우스 오른쪽 버튼을 클릭하면 Continue to here 이 있는데 이 기능을 사용하면 breakpoint를 설정하지 않아도 원하는 위치로 이동할 수 있어서 나중에 breakpoint에 걸리지 않고 다시 해체할 필요도 없습니다. 다만 breakpoint가 걸린 함수 내에서만 이동할 수 있습니다.

[Fig.16] Continue to here

만약 특정 이벤트가 발생하는 시점에 호출되는 함수를 알 수 있다면?? 아마 좀 더 디버깅을 쉽게 할 수 있을 것입니다. 개발자 도구에서는 이렇게 이벤트가 발생하는 시점에 break point를 걸 수 있는 기능을 제공하는데 이게 바로 Source 패널에 있는 Event Listener Breakpoints입니다.

[Fig.17] Event Listener Breakpoints

위와 같이 click을 선택하면 click 이벤트가 발생하였을 때 해당 함수에 break point가 걸리게 됩니다. 하지만 문제는 대부분 라이브러리를 사용하기 때문에 아래와 같이 라이브러리 코드에서 멈추게 되는데


[Fig.18] debug

그러면 next 버튼을 계속 눌러줘야 하는 번거로움이 있습니다. 이때 원하는 파일을 디버깅에서 제외하는 기능이 Blackbox입니다. 설정 > Blackboxing > Add pattern... 을 눌러 라이브러리를 등록하게 되면 디버깅을 할 때 해당 라이브러리 코드는 디버깅 대상에서 제외되게 됩니다.


[Fig.19] Framework Blackboxing





이번엔 console 명령어에 대해 알아보겠습니다. 저를 포함한 많은 분께서 console.log()를 가장 많이 사용하실 텐데 console에는 다양한 명령어가 존재하고 있습니다. 이 글에서는 배열을 table로 console 창에 보여주는 법을 알려드리겠습니다. Console창에 console.table([배열객체]) 혹은 table([배열객체]) 를 해주시면 됩니다. 그러면 아래와 같이 예쁘게 결과가 나오게 됩니다.


[Fig.20] console.table()

이미 Console 창에 출력된 결과를 table로 보여주고 싶다면 앞서 알려드린 방법처럼 global 변수에 담은 뒤 사용하시면 됩니다.




Elements 패널에서 간단하게 CSS를 수정해본 경험 다들 있으실 겁니다 개발자 도구에서는 스타일을 쉽게 테스트하기 위해 Elements 패널에서 CSS 수정뿐만 아니라 가상 클래스를 작동시켜 테스트할 수 있습니다. Element 패널에 styles 아래 :hov를 클릭하면 여러 이벤트가 있는데 각각의 이벤트마다 적용된 CSS를 확인, 수정할 수 있습니다.



[Fig.21] Trigger class

또 CSS 스타일을 디버깅할 때, 요소를 숨겨야 할 때도 간혹 있습니다. 이때는 요소를 선택한 뒤 키보드의 H 키를 누르면 요소를 빠르게 숨길 수 있습니다.
 

[Fig.22] ‘H키를 이용한 빠른 요소 숨기기 예시

크롬 개발자 도구의 흰 바탕색이 소스 보기 부담스럽고 눈이 쉽게 피로해지는 분들 있으실 겁니다. 이를 위해 크롬에서는 색상 반전 기능을 제공하고 있습니다.

1. 개발자 도구를 열어 설정을 실행합니다.

[Fig.23] 개발자도구 설정메뉴

2. Performances 메뉴를 선택 후 Appearance 아래에 Theme을 Dark로 변경합니다.

[Fig.24] Theme 변경

3. 다음과 같이 Dark Theme로 변경됩니다.

[Fig.25] Dark Theme

또 Dock의 위치를 원하는 곳으로 변경할 수 있는데 분리, 왼쪽, 아래쪽, 오른쪽 순으로 변경할 수 있습니다. 저는 듀얼모니터를 쓸 때 개발자 모드를 분리해서 사용하곤 하는데 여러분들은 개발하는 화면에 맞게, 취향이나 편의에 따라 원하는 Dock 위치를 바꿔가며 사용하시면 좋을 것 같습니다.

[Fig.26] Dock 위치 변경

 


지금까지 알아두면 편리한 잘 알려지지 않은 기능에 대해 살펴보았습니다. 제가 설명한 기능 외에도 크롬 개발자 도구에서는 다양한 기능을 제공하고 있고 Google에서 제공하는 개발자 도구 공식 매뉴얼(https://developers.google.com/web/tools/chrome-devtools)에 설명이 잘 되어 있으니 이번 기회에 다른 기능들에 관해서 관심 두고 공부하셔서 개발의 질을 높이는 데 도움이 되었으면 좋겠습니다. 감사합니다.

 




작성자 : 대전지사 도선아 개발자

Posted by 人Co

2020/08/17 01:50 2020/08/17 01:50
Response
No Trackback , No Comment
RSS :
https://www.insilicogen.com/blog/rss/response/354

[Fig.1] 인실리코젠 IX팀
(출처:(주)인실리코젠)

올해 인실리코젠의 Descign(Design+Science+Management)팀 명칭이 IX팀으로 개편되었습니다. IX는 다양한 기술을 통합(Integration)하여 상호작용(Interaction)적인 서비스와 혁신적인(Innovation) 사용자 경험을 디자인하는 부서로 변화하였습니다. 금일 준비한 포스트도 부서의 방향성과 어울리는 콘텐츠로 준비하였습니다.

사용성 테스트의 니즈

[Fig.2] Usability Testing Illustration

편리한 시스템과 서비스를 디자인할 때 필요한 요소 중 하나는 사용성 테스팅(Usability Testing) 입니다. 테스팅은 예측하지 못했던 문제나 유저(User)들의 어려움을 찾아낼 수 있도록 도와주는 데 큰 역할을 합니다. 그럼 언제 사용성 테스트를 진행하는 것이 좋을까요? 일반적으로 디자인(기획) 단계에서 구상한 아이디어를 프로토타입 하여 진행합니다. 테스트 과정 중에 문제를 미리 발견하여 기업이 투여 시간과 비용적인 손실을 최소화할 수 있게 도와주기 때문입니다. 현재 이를 도와주는 다양한 테스팅 방법들이 존재합니다. 그중 Wizard of Oz(WOZ) 테스팅 기법을 소개해 드리려 합니다.

Wizard of Oz(WOZ) 테스팅은 어떤 건가요?


[Fig.3] Wizard of Oz Film

누구나 한 번쯤은 오즈의 마법사(Wizard of OZ) 영화를 보셨을 것입니다. 이쯤 되면 테스팅 방법과 오즈의 마법사 스토리와의 연관성에 대해 궁금증이 생기실 듯합니다. 극 중 마법사인 오즈는 자신의 진짜 모습(서커스에서 마술하는 사람)을 복화술로 숨기고 엄청난 대마법사인 것처럼 모두를 속입니다. 마법사 오즈처럼 Wizard of Oz 테스팅도 사용자들이 실제 개발되지 않은 서비스를 실존하는 서비스처럼 착각하게 하여 테스팅을 진행하는 방법입니다. 아래 IBM의 ‘The listening type writer’ 일러스트 이미지를 보시면 조금 더 이해가 되실 겁니다. 사용자가 컴퓨터 마이크에 “Dear Henry”라고 말을 하면 커튼 뒤에 또 다른 사람(wizard)이 직접 사용자의 말을 듣고 타이핑을 해줍니다. 이를 모르는 사용자로서는 컴퓨터가 출력해주었다고 생각하며 편리한 기능이라고 생각할 것입니다.

[Fig.4] Wizard of Oz Prototyping

어떻게 활용되나요?

WOZ 방법론은 가설을 빠르게 검증할 수 없는 AI(인공지능) 프로젝트에서 많이 활용되며 데이터가 없거나 기술이 완벽하지 않은 상황에서도 테스트를 진행할 수 있습니다. 또한, 시스템에 대한 사용자의 반응을 확인하며 반복적인 테스트를 통해 사용자 경험을 점진적으로 발전시킬 수 있습니다. 테스팅을 진행하기 전 명심해야 할 부분은 얻고자 하는 인사이트가 무엇인지 결정하는 것과 테스트 시 사용자들이 느끼기에 그럴듯하게(Believable) 프로토타입을 제작해야 합니다. 그리고 너무 복잡한 인터페이스 보다는 간단한 형태의 기능을 테스트하는 것이 효율적입니다.

인실리코젠에서는 생물정보를 활용하여 다양한 시스템을 개발하고 있습니다. 사용자 친화적이며 효율적으로 서비스를 디자인 및 개발을 하기 위하여 WOZ 방법론에 대해 알아보았습니다. 향후 직접 프로젝트에 적용해본 후 그 효과나 장단점에 대해서 알려드리겠습니다.

출처

[Reference 1] "Wizard of Oz testing – a method of testing a system that does not yet exist.", 2020년 6월 10일 접속, https://www.simpleusability.com/inspiration/2018/08/wizard-of-oz-testing-a-method-of-testing-a-system-that-does-not-yet-exist/

[Reference 2] "Making the machine believable: Wizard of Oz-ing AI applications.", 2020년 6월 12일 접속, https://uxdesign.cc/making-the-machine-believable-wizard-of-oz-ing-ai-applications-293cfbb0f244

[Reference 3] "[인공지능 in IT] 인공지능 UX 디자인 – 디자인 프로세스로 사용자 경험 설계하기.", 2020년 6월 12일 접속, https://www.donga.com/news/article/all/20190515/95530568/1

작성 : IX Team 김지인 주임 UX/UI 디자이너

Posted by 人Co

2020/06/22 14:14 2020/06/22 14:14
, , , ,
Response
No Trackback , No Comment
RSS :
https://www.insilicogen.com/blog/rss/response/349

오픈소스 가상화 플랫폼, Docker

 
오늘은 복잡하고 어려운 서버관리를 효율적으로 할 수 있도록 개발된 플랫폼 ‘Docker` 대하여 알아보고자 합니다.
Docker는 애플리케이션을 신속하게 구축, 테스트 및 배포할 수 있는 소프트웨어 플랫폼으로서 환경에 구애받지 않고 신속한 배포와 확장이 가능하다고 하는데요,
Docker 가 이 이상 어떠한 장점과 특징들을 가졌는지 아래 내용에서 소개해드리고자 합니다.
 

[그림 1] Docker

서버 관리는 어렵고 복잡합니다. 고급 개발자도 서버를 관리하기 위해서는 아기를 다루듯이 섬세한 기술이 필요합니다. 개발에 필요한 언어인 JAVA나 Python 그리고 대표적 DBMS인 오라클과 MySQL 등 서버에서 사용 중인 서비스들이 업데이트 등에 의해 버전이 바뀌게 되고 이에 따라 다양한 버전의 서비스를 서버에서 관리하게 됩니다. 이렇듯 시간이 지날수록 서버에 점점 필요한 서비스들이 많아지게 되고, 관리는 어려워집니다. 서버 관리자나 개발자들은 필요한 서비스를 효율적으로 관리할 필요성을 느끼게 되고 이런 사용자의 욕구를 충족시키기 위해 개발된 오픈소스가상화플랫폼이 'Docker’입니다.


 
2013년 3월 산타클라라에서 열린 Pycon Conference에서 Docker의 창립자, 최고 기술 책임자 (CTO) 및 최고 설계자이며 Docker 오픈 소스 이니셔티브의 창시자인 Solomon Hykes가 'The future of Linux Containers(리눅스 컨테이너의 미래)' 라는 세션을 발표하면서 처음 세상에 알려졌습니다. 'The future of Linux Containers(리눅스 컨테이너의 미래)'는 5분 남짓한 짧은 발표로 이루어졌고, Docker를 사용하여 'Hellow World'를 찍는 것을 보여주었습니다. 이후 Docker가 인기를 얻으면서 2013년 10월 Docker Inc를 설립하고 2014년 6월 Docker 1.0을 발표하였습니다. 2016년에 진행한 Docker 선호도 조사에서는 90%가 개발에 사용 중이며, 80%가 DevOps에 사용할 예정이고 58%가 운영환경에서 사용 중이라고 합니다.
 

Docker는 프로그램이나 라이브러리, 시스템 도구 등과 같은 소프트웨어를 컨테이너라는 표준화된 방식으로 패키징 합니다. 패키징 된 컨테이너는 Docker 위에서 동작하며 가상 머신이 서버 하드웨어를 가상화하는 방식과 비슷합니다. Docker는 각 서버에 설치되며 제공된 명령어를 사용하여 컨테이너를 구축, 시작 또는 중단할 수 있습니다.




Docker : Docker에서 사용하는 컨테이너는 코드와 종속성을 함께 패키지하는 앱 계층의 추상화입니다. 여러 컨테이너가 동일한 머신에서 실행될 수 있고 OS 커널을 다른 컨테이너와 공유할 수 있으며, 각각은 사용자 공간에서 격리된 프로세스로 실행됩니다. 컨테이너는 VM보다 공간을 덜 차지하며 (컨테이너 이미지는 일반적으로 수십 MB 크기) 더 많은 응용 프로그램을 처리할 수 있습니다.

[그림 3] Docker Container

Virtual Machine : 하나의 서버를 여러 서버로 바꾸는 물리적 하드웨어의 추상화입니다. 하이퍼 바이저를 사용하면 여러 VM을 단일 컴퓨터에서 실행할 수 있습니다. 각 VM에는 운영 체제, 응용 프로그램, 필요한 바이너리 및 라이브러리의 전체 사본이 포함되며 수십 GB를 차지합니다. VM의 부팅 속도가 느려질 수도 있습니다.

[그림 4] Virtual Machine




Docker는 소프트웨어 인터페이스를 하드웨어와 비슷하게 만들어주는 반가상화와는 다르게 경량화된 방식이며 Guest OS를 설치하지 않습니다. 그리고 Docker에서는 분리된 공간을 이용해 서버 운영을 위한 프로그램과 라이브러리를 쉽게 설치할 수 있습니다. Virtual Machine과는 다르게 Host의 자원을 직접 이용할 수 있으므로 메모리 접근이나 네트워크 속도, 파일시스템이 월등히 빠르게 동작합니다. 그렇기 때문에 Host와 Docker의 컨테이너 사이의 계층과 성능 차이는 크게 발생하지 않습니다.
정리하자면, 프로그램이나 라이브러리들을 쉽게 설치와 삭제를 할 수 있으며 성능도 뛰어나고, Docker 사용자들끼리는 구축해 놓은 환경을 간편하게 주고받을 수 있습니다. 이 같은 편리함 때문에 많은 사용자가 Docker를 사용하고 있고, Stack OverFlow에서 진행한 2019 Survey에서는 Docker가 가장 널리 사용하는 플랫폼 3위, 가장 좋아하는 플랫폼 2위를 차지하였습니다. 사람들이 많이 쓰고 좋아하는 플랫폼에는 이유가 있다고 생각합니다. 이 글이 Docker를 사용하기 위한 첫걸음을 내딛는 데 조금이라도 도움이 될 수 있었으면 좋겠습니다. 감사합니다.



 

Posted by 人Co

2020/05/20 11:20 2020/05/20 11:20
Response
No Trackback , No Comment
RSS :
https://www.insilicogen.com/blog/rss/response/345

DevOps 란?



최근 IT 업계에서 지속적인 소통을 통한 협업 문화가 중시되고 있는데요, 이를 위해 여러 가지 방법론 또한 등장하고 있습니다. 오늘은 이러한 소통과 협업 방식인 디봅스(DevOps)를 주제로 유용한 정보를 공유해드릴까 합니다.
 
 



[출처] DevOps
 
DevOps는 소프트웨어개발(Development) 그리고 운영(Operations)의 합성어로, 일반적 정의는 개발과 운영을 하나의 조직으로 합쳐서 팀을 운영하는 문화이자 방법론입니다.
 
[출처] Dev vs Ops

개발자들은 고객에게 검토를 요청한 변경 사항을 빨리 확인하길 원합니다. 반면 운영진은 안정성에 더 무게 중심을 두고 싶어 합니다. 일반적인 업무 프로세스상 이 둘 간의 타협은 쉽게 이뤄지지 않게 되고 시장과 고객에 대처하는 속도 또한 더딜 수밖에 없습니다. 하지만 DevOps는 이 둘의 공통 지표를 맞추고 지속적인 커뮤니케이션을 통해 차이를 줄이며 설계부터 배포까지 하나의 조직으로 협업하여 빠르게 변화하는 고객 중심의 시장에 맞춰 효율적으로 신속하게 대처할 수 있도록 하는 "문화" 라고 할 수 있겠습니다.
 




[출처] DevOpsCycle

1. 속도 : 배포까지의 작업 속도가 빨라져 고객을 위해 더 빠르게 혁신하고 시장 변화에 빠르게 대처하여 더 효율적인 비즈니스 성과를 창출할 수 있습니다
2. 신속한 제공 : 빌드에서 배포까지 소프트웨어 릴리스 프로세스를 자동화하여 새로운 기능의 배포와 이슈에 대한 대처 속도를 개선하여 고객에게 제공한 제품을 더 빠르게 혁신, 개선하여 시장 경쟁 우위를 차지할 수 있습니다.
3. 안전성 : 소프트웨어 업데이트와 변경 시의 품질 보장, 지속적인 통합과 전달을 통해 변경 사항이 안전하고 정확하게 작동하는지 테스트하고 모니터링과 로깅 방식을 통해 실시간으로 성능에 대한 정보를 얻을 수 있습니다.
4. 확장 : 자동화와 일관성이 지원되어 안전성을 보장하며 복잡한 시스템 또는 변화하는 시스템을 효율적으로 관리할 수 있습니다.
5. 협업 강화 : 개발부서와 운영부서의 긴밀한 협력을 통해 비효율성을 줄이고 시간을 절약할 수 있습니다.
6. 보안 : 자동화된 규정 준수 정책, 세분화된 제어 및 관리 기술을 사용하여 DevOps 모델을 도입할 수 있습니다.
 



1. Cross Functional Team : 팀 하나에서 개발부터 운영까지 전부 할 수 있는 인원으로 채우는 것이 아닌 각 프로세스의 담당자들을 하나씩 팀원으로 구성하는 뜻으로 서비스 기획부터 개발, 테스트, 운영 배포 등 모든 제품 개발 프로세스를 하나의 팀에서 할 수 있도록 해야 한다는 것입니다.
2. Widely Shared Metrics : 팀 구성원 전체가 기준으로 삼을 수 있는 서비스 제품에 대한 공통적인 지표를 통해 개발 후 잘 운영되고 있는지, 사용자의 반응은 어떤지 등 서비스 진행 상태를 인지할 수 있어야 한다는 것입니다.
3. Automating repetitive tasks : 반복적인 일들을 CI(Continuous Integration)/CD(Continuous Delivery) 를 이용하여 프로세스를 자동화해야 한다는 것입니다. 반복적 작업에 투입되는 시간을 줄여 작업의 효율을 높이고 빠른 서비스 업데이트가 가능하며 전체 시스템에 대한 이해도를 높일 수 있습니다.
4. Post Mortem : 서비스의 장애나 이슈가 있을 때, Fix 후 팀 전체가 공유하여 이러한 이슈들의 심각도를 판단하고 차후 같은 이슈에 대해 예방을 할 수 있습니다.
5. Regular Release : 서비스 릴리즈는 개발, 테스트 배포 과정을 거치게 되고 릴리즈가 끝난 후엔 다음 릴리즈를 위한 기능 정의 등의 과정을 거쳐야 하므로 불필요한 많은 시간이 소요될 수 있습니다. 정기적으로 릴리즈를 하게 되면 팀의 협업시점이 명확해지고 서비스의 기능을 빠르게 개선하여 고객의 VOC(Voice Of Customer)를 반영해 나갈 수 있다는 것입니다.





[출처] CI,CD,CD

1. Continuous Integration : 개발자들이 개별적으로 개발한 프로그램 소스 코드를 하나로 모아 빌드하는 통합 빌드의 과정을 특정 시점에 하는 것이 아니라 주기적으로 수행하여 통합에서 발생하는 충돌 등의 오류를 각기 다른 레벨의 자동화 테스트(단위 및 통합 테스트가 일반적)를 통해 변경 사항이 잘 통합되었는지 확인하고 이슈 발생 시 사전에 해결, 복잡성을 제거하자고 시간을 단축하기 위한 기법을 말합니다. Agile 방법론이 대두하면서 더욱 주목받게 되었고 빌드, 테스트 단계 등에서 걸리는 시간을 절약하여 빠른 시장에서의 경쟁력을 확보할 수 있습니다. CI 시스템을 구축하기 위한 핵심 구성요소는 Jenkins,Travis CI등의 CI Server,subversion,Git 등의 소스 코드 형상 관리 시스템(Source code Management), Maven, Gradle, Ant 등의 Buil Tool, 그리고 테스트 코드에 따라 자동으로 테스트를 수행해주는 JUnit, Mocha 등의 Test Tool이 있습니다.

2. Continuous Delivery : 프로그램에 적용된 사항들을 자동을 빌드, 단위 및 통합 테스트 진행에 이어서 하나의 리포지토리에 (예를 들면 Git)에 업로드되는 것을 말합니다. 이를 통하면 운영부서는 리포지토리의 프로그램을 실시간으로 프로덕션 환경에 배포가 가능할 것입니다. 이것이 효율적인 방법이 되려면 앞서 언급했던 CI의 자동화 프로세스가 제대로 구축하고 작동하여야 가능할 것입니다.
 

3. Continuous Deployment : Continuous Delivery와 개념이 유사하여 살짝 헷갈릴 수 있는 부분이지만 쉽게 말씀드리자면 Continuous Delivery는 프로덕션은 수동으로 배포하고 Continuous Deployment는 프로덕션까지 자동으로 배포하는 것입니다.
 



조직이 오래 지속하였거나 프로젝트 중간에는 이런 DevOps 방식의 "문화"를 도입하기는 쉽지 않을 것입니다. 경영자 또는 PM이 DevOps에 대해 이해가 없다면 도입하더라도 단기성, 일회성에 불과하리라 생각합니다. 이미 다른 방법론인 애자일 방법론을 도입하려 한 수많은 기업의 실패도 앞서 말씀드린 내용에 근거가 됩니다. 물론 실패한 사례만 있는 것은 아닙니다. DevOps는 아니지만 한 소셜커머스 업체에서는 애자일 방법론을 성공적으로 도입한 조직이 하나가 되어 문화를 바꾼 의미 있는 사례도 있습니다.
"한 사람의 꿈은 꿈이지만 만인의 꿈은 현실이 된다."는 말이 있습니다. 이러한 문화, 방법론 도입을 수동적으로 도입하는 것보다는 직급을 떠나 조직 전체가 이를 공감하고 이해하여 능동적으로 받아들이고 형성할 자세가 되어 있어야 한다고 생각합니다. 고객 중심으로 빠르게 변화하는 시장에 알맞게 대응하기 위해 Google, Facebook, Netflix 등 세계 유명 기업들도 개선된 개발 방법론들을 도입하여 시장에 발맞춰 나가고 있습니다. DevOps를 잘 적용했을 때 이전보다 배포주기 46배, 개선속도 440배, 복구시간 96배, 매출 20% 신장 등 좋은 효과를 얻고 있는 사례들이 있는 만큼 조직에 알맞게 DevOps, 또는 개선된 개발 방법론을 도입하여 업무의 효율성과 만족도 향상 그리고 빠르게 변화하고 있는 시장에서의 경쟁력을 가져보는 것은 어떨까요.


Posted by 人Co

2020/05/07 08:16 2020/05/07 08:16
Response
No Trackback , No Comment
RSS :
https://www.insilicogen.com/blog/rss/response/344

신종 코로나바이러스와 진단키트


 
지난 COVID-19에 관한 몇 가지 포스팅에 이어서 오늘은 신종 코로나바이러스(COVID-19) 진단키트에 대하여 알아볼까 합니다.
 
최근 한국의 바이오 기업이 제조, 생산하는 진단키트들의 높은 정확도와 세계적 찬사를 받으며 그 존재감이 날로 커지고 있는데요, 이탈리아, 스페인, 프랑스, 독일과 같은 유럽 국가를 비롯하여 미국에까지 수출하고 있습니다. 특히 미국 수출건의 경우 까다롭기로 유명한 FDA까지 긴급사용승인을 받아 한국의 진단키트에 대한 대내외적 인지도가 어느 정도인지 가늠해볼 수 있습니다. 이렇듯, 진단키트가 무엇이기에 이토록 한국의 진단키트들이 찬사를 받는지, 신종 코로나바이러스에 진단키트가 중요한 이유가 무엇인지 해당 포스트를 통해 유익한 정보 많이 얻어가시길 바랍니다!




최근 신종 코로나바이러스(SARS-CoV-2)로 인해 많은 사람들이 진단키트에 대한 관심이 높아졌습니다. 진단키트는 각종 질병, 임신 여부, 건강 상태, 친자 확인 등 여러 분야에서 각 목적에 맞게 필요한 시약 및 도구 등을 포함한 생화학 실험 도구를 뜻합니다. 신종 코로나바이러스(SARS-CoV-2)가 전 세계 보건의료를 극심하게 뒤흔들고 있는 상황에서 한국은 진단키트를 통해서 신속 정확하게 진단하여 대처하고 있습니다.



특히 '방역 한류'라 불릴 정도로 국내에 여러 업체들(씨젠, 솔젠트, 시선바이오 등)에서 제작한 진단키트를 전 세계 곳곳에서 구하려고 힘쓰는 상황입니다. 전 세계에서도 여러 업체가 진단키트를 생산하나 각국의 법적 규제, 생산 라인, 기술 등의 문제로 국내산 진단키트만큼 생산량도 많지 않고 정확도도 낮은 경우가 많습니다. 진단키트에 활용되는 여러 가지 기술은 배양법, 항원-항체 반응, qRT-PCR 등이 있으며 현재 승인이 된 방법은 항원-항체 반응, qRT-PCR입니다.


 



 

 


일반적으로, 코로나바이러스는 전염성은 강하지만 병원성이나 치사율은 낮은 바이러스입니다. 그러나 신종 코로나바이러스(SARS-CoV-2)는 전염성도 강하면서 제법 치명적인 병원성을 가지는 특이 변종입니다. SARS-CoV-2의 WHO 공식 치사율은 4월 현재 약 6.7%입니다.



코로나바이러스 중에서 치사율이 1%를 넘기는 사례는 SARS(치사율 9.6%), MERS(치사율 38%) 정도를 제외하면 거의 없습니다. MERS와 SAS가 치사율이 더 높아 보이지만 SARS-CoV-2는 현재 진행형이며, 언제까지 진행될지 예상할 수 없다는 문제가 있습니다. 신종 코로나바이러스에 대한 백신 및 치료제가 개발되지 않은 상황에선 감염자를 빠르고 정확하게 판별해서 격리하고 치료하는 게 최선의 방법입니다.




진단키트를 제작하기 위해선 목표하는 질병을 일으키는 세균이나 바이러스 등에서 타 병원체와는 다른 유전자 변이를 찾아내야 합니다. 이를 위해선 생물정보 기술을 활용하여 유전자 변이를 더 쉽게 찾아낼 수 있습니다.





인체 내에 바이러스가 들어올 경우 IgM·G(Immunoglobulin M·G) 항체가 형성됩니다. 신종 코로나바이러스(SARS-CoV-2)가 몸속에 소량이라도 들어오면 이를 방어하기 위해 IgM·G 항체가 생성됩니다. 이렇게 생성된 항체와 결합하는 항원을 통해서 진단할 수 있습니다. 물론 신종 코로나바이러스(SARS-CoV-2)만 특이적으로 검사할 수는 없으나 의심 환자에 대한 광범위한 검사를 진행하여 1차 선별이 가능합니다. 이후 정밀 검사(qRT-PCR등)를 통해 최종 감염 여부를 확인합니다. 1차 선별을 유전자 방식으로만 진행하게 되면 격리된 검사시설과 고가의 장비, 시약, 검사를 수행할 전문 임상 병리사 등이 필요하므로 의심 환자에 대한 광범위한 검사가 어려운 점을 보완할 수 있는 장점이 있습니다.





qRT-PCR은 PCR 증폭 산물을 실시간으로 모니터링하는 해석 방법으로, 기존의 PCR 방법으로는 측정하기 어려운 정확한 정량이 가능합니다. 또한, PCR 원리를 기본으로 하고 있으므로 검출감도가 높고, mRNA 발현 해석이나 SNPs typing 등의 유전자 해석에 요구되는 필수 기술입니다. qRT-PCR의 실험 조작은 비교적 간단하며 종래의 PCR법과 거의 유사하다고 생각하면 됩니다. 현재 qRT-PCR을 기반으로 하는 진단키트에 경우 의삼환자에서 객담(가래)을 추출해 코로나19 바이러스가 있는지를 검사하는 방식으로 정확하게 검출할 수 있습니다. 특히 1~2일 걸리는 배양법에 비해 6시간 가량이면 결과를 도출할 수 있어 신속한 진단에 크게 이바지한 방법입니다.


신종 코로나바이러스(SARS-CoV-2)를 특정할 수 있는 유전자 N, E, S, RdRp, Orf1a, Orf1ab 중에서 최소한 두개 이상의 유전자를 증폭하는 Specific primer를 통해서 감염의 여부를 체크할 수 있습니다.



코로나19 환자에게서 위에 나열된 코로나19 바이러스의 모든 유전자를 완전히 다 검출해서 완벽하게 대조하면 좋겠지만, 그건 오래 걸리고 비용면에서도 효율성이 떨어지기 때문입니다. 그래서 국가마다 검출 유전자는 조금씩 다르지만, 보통은 가장 변이를 덜 일으킬 것으로 보이는 유전자를 최소 2개 이상 검사해서 둘 다 '양성' 반응이 나타나는지를 보고 코로나19 감염 여부를 판단하고 있는 겁니다.
 



신종 코로나바이러스(SARS-CoV-2) 감염증의 사례로 알 수 있듯이 진단키트를 활용하여 빠르게 감염자를 선별하고 격리하여 2차 피해를 예방하고 조기에 치료하는 방법이 제일 좋은 방법입니다. 또한, 병원체 (바이러스, 세균 등)은 빠르게 변이되고 돌연변이를 통해 또 다른 질병을 일으킬 수 있으므로 이에 우리는 생물정보 기술을 통해 신속하게 병원체를 연구 및 분석하여 기존의 병원체와의 차이점을 찾아내고 진단키트로 제작하여 대처해야 합니다.
현재 (주)인실리코젠에서는 신종 코로나바이러스(SARS-CoV-2) 연구를 포함한 감염병 연구를 위해 생물정보 솔루션인 CLC Genomics ProSuite(CLC Genomics Workbench를 포함한 바이러스 및 미생물 NGS 분석 패키지)와 Ingenuity Pathway Analysis(IPA, 유전자 네트워크 분석 솔루션)의 단기 라이선스를 지원하고 있으니 신청하시면 6월 15일까지 사용해보실 수 있습니다.


COVID-19 연구를 위한 단기 라이선스 신청하기


하루 속히 신종 코로나바이러스(SARS-CoV-2) 감염 확산이 종식되길 바라며, 앞으로 이러한 생물정보 솔루션들의 활용을 통해서 바이러스 및 병원체 발생을 조기에 감지하고 제어하는 공중 보건의 보호에 도움이 되길 바랍니다.

Posted by 人Co

2020/04/26 16:36 2020/04/26 16:36
Response
No Trackback , No Comment
RSS :
https://www.insilicogen.com/blog/rss/response/343

신종 코로나 바이러스 (COVID-19)




요즈음 전 세계적으로 가장 이슈가 되고 있는 것은 '신종 코로나 바이러스'라고 할 수 있겠습니다. 우리는 '코로나 바이러스' 보다는 사스(SARS) 또는 메르스(MERS)가 좀 더 익숙할 텐데요, 이전에 유행했던 사스와 메르스도 코로나 바이러스로 인해 발생한 질환입니다.

코로나 바이러스는 종이 다양하며, 인간에게는 가벼운 증상만을 일으키고 병원성이 약한 것으로 알려졌는데요. 이번에 발생한, 흔히 말하는 우한 폐렴은 코로나 바이러스가 변이를 일으킨 신종 코로나 바이러스로 인간에게 매우 심각한 영향을 미치고 있습니다.

우한 폐렴은 무엇인가


이번에 발생한 우한 폐렴은 중국 우한시 화난 해산물 시장에서 처음 발생한 폐렴으로 그 전염성이 매우 강합니다. 원인체로 지목된 것은 신종 코로나 바이러스로 코로나 바이러스가 변이를 일으킨 것입니다. 우한시 화난 해산물 시장에서는 각종 다양한 야생동물들을 판매하고 거래가 되었는데, 이 야생동물을 숙주로 지내던 코로나 바이러스가 변이를 일으켜 인간에게 전파되었을 가능성이 가장 크다고 추정하고 있습니다. 현재까지 알려진 바로는 2015년도 유행했던 메르스보다는 치사율이 낮지만, 전파력은 매우 크다고 알려져 있고, 우리나라를 비롯하여 전 세계적으로 확진자가 계속해서 늘어나는 추세입니다. 신종 코로나 바이러스는 잠복기가 14일 정도로 다른 바이러스들에 비해 길며, 잠복기에도 강한 전파력을 가지고 있어 그 심각성이 더 커지고 있습니다.

코로나 바이러스는 무엇인가

코로나 바이러스(Coronavirus)는 코로나바이러스 과에 속하는 바이러스들을 지칭합니다. 전자현미경으로 보면 바이러스 표면이 돌기처럼 튀어나와 있는 것을 볼 수 있는데, 이것이 왕관처럼 생겼다고 해서 라틴어로 왕관을 뜻하는 'Corona'에서 파생되어 명명되었습니다.


[출처] "크리스천투데이", 2020년 1월 28일 발행, 2020년 2월 14일 접속, https://www.christiantoday.co.kr/news/328396

코로나 바이러스는 총 7종(HCoV 229E, HCoV NL63, HCoV OC43, HCoV HKU1, SARS-CoV, MERS-CoV, 2019-nCoV)이며, 4종은 가벼운 감기 증상만을 일으키지만 3종은 신종 코로나 바이러스를 포함하여 심한 호흡기 질환을 일으킵니다.

이번 우한폐렴의 원인으로 지목된 신종 코로나 바이러스는 초기 '2019-nCoV'로 명명되었지만 지난 11일 세계보건기구(WHO)가 정식 명칭을 'COVID-19'로 결정하였으며, 한글 명칭은 '코로나19'로 결정하였습니다. 'CO'는 코로나(Corona), 'VI'는 바이러스(Vrus), 'D'는 질환(Disease), '19'는 질환이 처음 보고된 연도를 의미합니다.

질병관리본부는 감염증 환자로부터 바이러스를 분리하는 데 성공했으며, 이를 백신이나 치료제를 개발하는 데에 과학계와 공유하기로 했습니다. 한국 분리주 이름은 'BetaCoV/Korea/KCDC03/2020'으로 붙어졌습니다. 질병관리본부가 공개한 바이러스 유전정보에 따르면 분리된 바이러스는 중국(우한, 광동), 프랑스, 싱가포르, 독일 등 국외에서 분리한 바이러스와 염기서열이 99% 일치하는 것을 확인하였으며, 아직까지 특이한 변이가 발견되지는 않았습니다.

현재까지 NCBI에 등록된 2019-nCoV(COVID-19) 염기서열은 50건 정도이며, 318건의 단백질 서열 정보와 112건의 논문이 발표되었습니다.


[2019-nCoV (Accession : NC_045512 / Description : Wuhan seafood market pneumonia virus isolate Wuhan-Hu-1, complete genome)]

CLC Genomics Workbench를 이용하여 COVID-19(2019-nCoV) 서열을 확인해 보았으며, 해당 서열을 이용하여 BLAST를 실행해 보았습니다.



[NCBI BLAST using CLC Genomics Workbench 20.0]

 

BLAST 결과 COVID-19(2019-nCoV) 중국, 미국을 제외하고 박쥐로부터 유래한 코로나 바이러스와 유사한 것을 볼 수 있었습니다.

인간에게 심한 호흡기 질환을 일으키는 3종의 바이러스(COVID-19(2019-nCoV), SARS-CoV, MERS-CoV)를 NCBI에 등록된 서열 중에서 랜덤으로 몇 개만을 추려 tree를 그려보았습니다.

아래와 같이 분류된 바이러스의 taxonomy 정보에 따라 tree가 그려지는 것을 확인할 수 있었습니다.


[Tree layout : Phylogram]


[Tree layout : Cladogram,  (Create Tree using CLC Genomics Workbench 20.0)]

 

COVID-19 발생 현황

미국의 존스홉킨스 대학에서 WHO, CDC, NHC의 자료를 토대로 신종 코로나 바이러스의 발생 현황을 실시간으로 확인할 수 있는 사이트를 개설하여 전 세계적으로 정보를 제공하고 있습니다. 아래의 사이트를 참고하면 좋겠습니다.


[출처] "Coronavirus COVID-19 Global Cases by Johns Hopkins CSSE", 2020년 2월 14일 접속, https://gisanddata.maps.arcgis.com/apps/opsdashboard/index.html#/bda7594740fd40299423467b48e9ecf6

최근까지 보도된 자료에 따르면 국내에서의 COVID-19의 확진자는 28명이며, 7명의 확진자(1,2,3,4,8,11,17번)가 퇴원하였습니다. 퇴원한 일부 확진자에게 에이즈(HIV) 치료제를 투약하여 치료 효과가 있었다는 기사들도 많이 보도되고 있지만, 이를 치료제로 쓸 수 있는 과학적인 근거는 아직까진 없다고 이야기합니다. 28번째 확진자가 나타난 이후 추가 확진자가 나오지 않고 있어, 더는 확진자가 늘지 않기를 바랍니다.

예방법

아직은 백신이나 치료제가 없는 신종 코로나 바이러스를 피할 방법은 없을까요? 바이러스의 전파는 주로 비말감염을 통해 이루어집니다. 비말감염이란 재채기나 기침으로 인해 튀는 침방울이 타인에게 접촉되어 감염되는 형태를 말합니다. 우리는 이런 비말감염만 예방하여도 신종 코로나 바이러스로부터 안전할 수 있습니다. 예방할 수 있는 가장 큰 방법으로는 마스크 착용과 손 씻기 입니다.

이처럼 개개인이 할 수 있는 예방법으로는 개인위생을 철저히 하는 방법밖에는 없을 것 같습니다. 질병관리본부에서 제공하는 신종 코로나 바이러스 감염증 예방 수칙을 토대로 나와 타인을 위해 위생에 신경 써주시길 부탁드리겠습니다.


[출처] "질병관리본부" 2020.2.12 발행, http://www.cdc.go.kr/gallery.es?mid=a20503020000&bid=0003





참고문헌

  1. https://terms.naver.com/entry.nhn?docId=5894275&cid=61232&categoryId=61232

  2. https://terms.naver.com/entry.nhn?docId=72940&cid=43667&categoryId=43667

  3. https://www.christiantoday.co.kr/news/328037

  4. https://blog.naver.com/asecino/221788068575

  5. https://news.sbs.co.kr/news/endPage.do?news_id=N1005648026&plink=ORI&cooper=NAVER

작성 : insilicoLab 송하나 선임
 

Posted by 人Co

2020/02/14 14:37 2020/02/14 14:37
Response
No Trackback , No Comment
RSS :
https://www.insilicogen.com/blog/rss/response/338

소프트웨어 진흥법 개정안



당사는 생물정보 전문기업으로, 대량으로 생산되는 생물정보 데이터들을 다년간의 생물정보 경험을 바탕으로 연구자들이 필요로 하는 데이터베이스나 분석시스템을 구축하여 더 쉽고 편리하게 유용한 데이터를 생산하고 대용량 생물정보 데이터를 분석할 수 있도록 지원합니다.
생물정보에 특화된 시스템 구축 사업을 수행하고 있기에 관련 법령인 소프트웨어 진흥법 개정안에 대해서 알아보고자 합니다.

1. 개정 취지

현행 「소프트웨어산업 진흥법」은 1987년 12월 4일 「소프트웨어개발촉진법 (법률 제3984호)」으로 처음 제정되었고, 2001년 1월 21일 지식과 정보가 고부가가치를 창출하는 21세기 지식 정보화 사회에서 국가의 경쟁력 확대 기반인 소프트웨어 산업을 종합적으로 육성/발전시키기 위해 전면 개정되어 현재의 모습을 갖추었습니다. 이후 수차례의 전면 또는 부분 개정을 해왔지만, 오히려 소프트웨어 산업계의 요구를 충족하지 못하고 「누더기법」이라는 부정적인 평가를 받기도 했습니다.

여전히 문제로 남아있는 것은 발주기관의 요구사항 불명확성, 사업의 적정대가 미지급 등 공공소프트웨어사업의 불합리한 발주 관행이 여전히 남아 있어 소프트웨어 기업의 수익 저하와 개발자의 근로환경 악화 등 여러 가지를 꼽을 수 있습니다. 또한, IoT, AI, Big Data 등 4차 산업혁명 시대가 도래하였지만, 현행법은 산업적 측면만을 주로 규정하고 있어 융합시대의 경제/사회 변화에 대응하는 데 한계가 있어 보입니다.

이에 2018년 11월 30일 정부는 소프트웨어 인력 양성, 소프트웨어산업진흥기관 지정, 소프트웨어 창업 및 연구개발 지원 등을 통하여 소프트웨어 및 소프트웨어융합 분야를 아우르는 중앙 및 지역 차원의 소프트웨어산업 지원의 체계를 수립하고, 소프트웨어 안전을 확보하고 국민 대상의 소프트웨어 교육을 활성화하여 소프트웨어에 대한 이해를 높이는 등 소프트웨어 진흥을 위한 기반 및 문화를 조성하며, 국가기관 등의 소프트웨어 사업 추진 시 소프트웨어 사업자와의 계약이 공정하게 이루어지고 소프트웨어의 가치가 충분히 보장될 수 있도록 요구사항을 명확하게 하고 적정 사업 기간 및 대가를 산정하도록 하는 등, 소프트웨어 중심의 경제 사회 변화에 대응하고 국가 경제의 지속적인 발전을 도모하기 위하여 소프트웨어산업 진흥법 전부개정법률안(의안번호:2016944, 정부)을 제출하고 법률 제명을 「소프트웨어 진흥법」으로 변경을 추진하고 있습니다.

2. 개정 법안 주요 내용

현행법은 5장 48개 조문이나 개정안은 7장 9절 73개 조문으로 개편되었으며, 이 중 27개 조문이 새롭게 만들어졌고, 18개 조문을 현 상황에 맞게 수정되었습니다.


1) 주요 신설 내용

개정안은 법률로의 상향 및 조문 이관 등을 포함하여 총 27개의 조문이 신설되었으며 신설된 조문의 주요 내용은 아래와 같습니다.

① 지역별 특성에 기반한 소프트웨어산업의 진흥을 지원하고 지역산업과 소프트웨어와의 융합을 촉진하기 위하여 지역별 소프트웨어산업진흥기관을 지정하여 업무를 위탁할 수 있는 근거를 마련함(안 제9조).
② 소프트웨어기술 가치평가 및 금융지원 등 소프트웨어창업 활성화를 추진하고 소프트웨어창업을 지원하는 공공단체 등에 지방자치단체가 출연·출자할 수 있도록 함(안 제14조).
③ 소프트웨어 지식재산권 보호시책을 마련하고 계약상대자가 지식재산권을 행사하기 위해 소프트웨어산출물의 반출을 요청하는 경우 국가기관 등의 장은 원칙적으로 이를 승인하도록 하는 등 소프트웨어 지식재산권 보호 제도를 도입함(안 제17조 및 제58조).
④ 소프트웨어 인력을 양성하기 위해 교육·훈련, 경력개발 지원 등에 관한 시책을 수립·시행하고, 소프트웨어 전문 인재를 육성하기 위해 소프트웨어 전문교육기관을 설치·운영할 수 있도록 함(안 제22조 및 제23조).
⑤ 소프트웨어 분야 국가연구개발 사업을 실시하는 경우 원시코드 공개 개발 방식을 활용하거나 그 결과물을 공개소프트웨어로 배포하도록 하는 등 소프트웨어 연구 및 기술개발을 촉진하도록 함(안 제25조부터 제27조).
⑥ 소프트웨어융합을 활성화하여 다른 산업 분야의 혁신을 촉진하고 경쟁력을 강화할 수 있도록 정부의 노력 의무를 규정함(안 제28조).
⑦ 소프트웨어안전 확보를 위한 시책을 마련하고 소프트웨어안전 분야의 산업 진흥, 인력 양성 및 기술 연구 등의 사업을 추진할 수 있도록 함(안 제29조 및 제30조).
⑧ 과학기술정보통신부장관은 소프트웨어교육 콘텐츠의 개발 등 소프트웨어교육 사업을 추진하도록 하고, 국가와 지방자치단체는 초·중등학교의 소프트웨어교육을 진흥하기 위해 노력하도록 함(안 제31조부터 제33조).
⑨ 국가기관등의 장이 민간의 자본과 기술을 활용하여 공공부문과 민간부문이 협력하는 소프트웨어사업을 추진할 수 있도록 민간투자형 소프트웨어사업의 추진 근거를 마련함(안 제39조).


2) 주요 개정 내용

개정안은 총 18개 조문이 정비되었으며 조문 개정은 제1장(총칙) 3개, 제3장(소프트웨어산업의 기반 조성) 5개, 제5장(소프트웨어사업의 선진화) 8개 등이며, 개정된 조문의 주요 내용은 아래와 같습니다.

① 국가기관등의 소프트웨어사업 추진 시 소프트웨어프로세스 품질인증을 받은 자를 우대할 수 있는 근거를 마련함(안 제21조제4항).
② 국가기관등의 소프트웨어사업 영향평가 공시 의무를 규정하고 소프트웨어사업자가 영향평가의 재평가를 요청하는 경우 재평가하도록 함(안 제42조제2항 및 제3항).
③ 국가기관등의 소프트웨어사업 발주 시 요구사항 작성에 관한 분석 또는 설계를 분리하여 발주할 수 있도록 함(안 제43조제3항).
④ 중소 소프트웨어사업자의 사업참여 지원 규정에서 대기업 참여 제한의 예외 사업에 민간투자형 소프트웨어사업 등을 추가함(안 제47조).
⑤ 국가기관등의 소프트웨어사업 발주 시(유지·관리 제외) 소프트웨어사업자가 수행 장소를 제안할 수 있도록 함(안 제48조제3항).
⑥ 소프트웨어사업 과업변경심의위원회의 명칭을 ‘소프트웨어사업 과업심의위원회’로 변경하고 현행 재량사항으로 규정되어 있는 위원회 설치를 의무사항으로 변경함. 또한 국가기관등의 장은 특별한 사정이 없으면 위원회 심의결과를 계약 등에 반영하도록 하고 소프트웨어사업자가 위원회 개최를 요청하는 경우 국가기관등의 장은 특별한 사정이 없으면 이를 수용하도록 함(안 제49조제1항부터 제3항).
⑦ 하도급 제한 규정에서 사업금액의 50%를 초과하여 하도급하는 경우에도 사업금액의 전부를 하도급할 수 없음을 명시하고 재하도급 받은 사업을 다시 하도급할 수 없음을 규정함(안 제50조제1항 및 제3항)


3. 또 다른 시각

위의 내용처럼 이번 개정안을 살펴보면, 소프트웨어 사업자와 기술자에게 도움이 되는 내용이 많이 포함되어 있습니다. 그러나 일각에서는 아래와 같은 개정안의 일부 조항을 근거로 부정적인 시선을 내비치기도 하였습니다.

제34조(소프트웨어 역량의 검정) ① 과학기술정보통신부장관은 국민의 소프트웨어에 대한 관심을 확산시키고, 소프트웨어를 활용한 창의적 문제해결 능력을 육성하기 위하여 소프트웨어 역량을 검정할 수 있다.
② 제1항에 따른 소프트웨어 역량 검정의 방법ㆍ절차ㆍ내용ㆍ대상 및 시기에 관하여 필요한 사항은 대통령령으로 정한다.


위 조항의 일환으로 이미 정부와 한국소프트웨어산업협회(KOSA)에서는 ITSQF라는 새로운 기술자 등급제를 만들고 실시할 준비를 하고 있습니다. 새로운 기술자 등급제(ITSQF)는 4차산업 혁명 시대의 SW산업 경쟁력을 확보하기 위해 SW기술자들에 대한 경력 경로를 제공하는 등의 이점이 있으나, NCS와는 다른 등급체계로 타 산업과의 호환성과 범용성 측면에 제약이 있을 수 있고, SW기술자들의 직종 전환 시 경력연수가 줄어드는 문제가 발생하는 등의 보완이 필요한 부분이 많아 보입니다.

이번 소프트웨어진흥법 개정안 이외에도 정부는 부분 개정으로 2018년 12월 28일 공공소프트웨어사업 원격지 개발 활성화 방안 등을 심의/의결하였습니다. 원격지 개발 활성화 방안의 경우, 공공소프트웨어사업 발주 시 만연된 소프트웨어 개발자의 장기 파견 요구로 인한 기업의 부담과 개발자의 근로여건 악화를 개선하기 위한 것이었습니다.

이를 위해서, 공공소프트웨어 사업 수행 시 소프트웨어 기업이 제시하는 ‘작업장소’를 우선 검토하도록 법령을 개정하고, 원격개발 사업관리 안내서를 마련하고, 원격지개발 관리의 어려움을 해소하기 위해 발주처의 소프트웨어 사업관리 도구 활용을 확산하고, 전문기관을 통해 발주자에 대한 기술지원을 확대하며, 다양한 원격개발 환경에 대한 최소기준을 제시하여, 사업별 최적의 장소를 선택할 수 있도록 지원할 예정이라고 합니다.

신기술의 발전으로 인한 소프트웨어 영역의 확대, 소프트웨어 융합 환경에 부합하는 새로운 지원 환경을 조성하는 등 새로운 법안은 필요해 보입니다. 다만, 지난해 일부 개정한 원격지 개발 활성화 방안처럼 현재 드러나 있는 문제점들을 파악하여 개선하는 등 발주기관, 사업자, 개발자 모두에게 효과적으로 다가갈 수 있는 법안이 될 수 있었으면 좋겠습니다.

※ 참고사항(기술자 등급제 변경)

한국소프트웨어산업협회에서 2018년까지(시행일은 2019년 8월 31일까지)는 기술자의 등급(9단계)을 기준으로 평균 임금을 산정했었습니다. 2019년 9월 이후부터는 새로운 기술자 등급제(28단계의 직무별 등급, 자세한 내용은 참고문헌 5번 참고)를 바탕으로 기술자의 평균 임금을 산정한다고 합니다. 바라는 점이 있다면, 새로운 기술자 등급제(ITSQF)가 발주기관, 사업자, 개발자 모두의 의견을 현실적으로 반영하여 시장에 잘 적용될 수 있었으면 좋겠습니다.

참고문헌

  1. 의안정보시스템

  2. ‘소프트웨어 진흥법 개정안’... 국회 조속히 처리해야

  3. 누구를 위한 소프트웨어진흥법 개정인가?

  4. SW사업주 영리협회 KOSA를 위한 소프트웨어진흥법 개정과 신기술자등급제 ITSQF 반대합니다

  5. IT분야역량체계(ITSQF)란?

  6. 소프트웨어산업진흥법 전부 개정 촉구 서명 참여 안내

  7. [SW진흥법 좌담회]18년만에 개정된 법, 어떤 내용이 들어있나

작성 : BS실 박병준 선임


Posted by 人Co

2020/01/31 16:30 2020/01/31 16:30
Response
No Trackback , No Comment
RSS :
https://www.insilicogen.com/blog/rss/response/337



4차 산업혁명이라는 이름에 걸맞게 생물 분야 뿐만 아니라 어느 도메인에 가도 AI란 용어를 어렵지 않게 찾을 수 있어요. 연구소나 기업은 현재 진행하는 프로젝트에 AI를 접목해 기계학습 및 프로그래밍을 활용하고 있습니다. 덕분에 기존 Rule-based의 작업이 해결하지 못했던 부분까지 많은 인력을 쓰지 않고도 높은 정확도의 프로세스를 진행할 수 있기도 합니다. 그렇다면 AI 분야 특히, 기계학습 혹은 딥러닝(기계학습의 부분집합)에 입문하는 우리는 무엇을 준비해야 할까요?

블로그를 쓰고 있는 현재에도 이 분야와 직・간접적으로 관련된 기초를 탄탄히 하고자 공부하고 있는 사람으로서 AI를 이해하기에 필요한 사전 지식과 그에 도움이 될 만한 좋은 책, 사이트, 세미나 강좌들을 선별하여 소개하려 합니다. 공부 순서는 크게 상관없고요. 기계학습 및 딥러닝을 공부하다가 언젠가 필요해질 때, 이 블로그에 찾아오셔서 방향을 찾아보는 것도 좋은 방법이 될 것으로 생각합니다.


연구 분석가나 개발자는 프로그래밍 언어는 필수적으로 하나 정도는 쓸 수 있어야 합니다. 언어는 다양하지만, 일의 목적에 따라 적합한 언어가 다를 수 있습니다. 기계학습 및 딥러닝 분야에서는 R과 Python이 현재 많이 쓰이고 있어서 개발된 라이브러리를 편하게 이용하기 위해선 둘 중 하나를 추천합니다. 참고로 전 Python을 주로 쓰고 있기에 아래 대부분의 포스팅은 Python에 맞춰져 있습니다.

사용자 삽입 이미지
점프 투 파이썬

책으로 사도 되지만 온라인에 e-book으로 있어서 언제든 참고 가능합니다. 첫 장부터 재미있다고 최면을 걸고 끝까지 한번은 정독하시길 권장 드려요. 후반부에 점차 어려울 순 있겠지만, 독학이 어려운 수준은 절대 아닙니다.

도전! (점프투파이썬)


Linux 기초와 파이썬 및 Pandas 교육(인실리코젠)
우리 회사에서는 Bio 분석가를 위한 교육이 매달 진행되고 있습니다. 달마다 주제가 달라지지만, Linux 기초와 파이썬 및 Pandas 교육도 있습니다. 책이나 강좌로 차근히 배우는 것도 좋지만, 이런 교육을 활용하면 단시간 내에 컴팩트한 기초문법 및 활용을 접할 수가 있습니다. 하지만 교육 수련생의 자릿수가 정해져 있으니 미리 홈페이지와 페이스북 알림을 통해 확인해보시길 추천합니다.

  • 人CoACADEMY : 생물정보 관련 교육 정보를 얻을 수 있음.
  • 人CoDOM : 생물정보 분야의 집단 지성 창출을 목적으로 운영되는 지식 커뮤니티
  • 인실리코젠 페이스북 : 친구를 맺어놓으면 관련 소식을 빠르게 받아볼 수 있음.
  • KOBIC 교육센터 : 인실리코젠이 제작한 온라인 무료 교육(상시 오픈형 교육은아님.)

NumPy는 파이썬의 수학 라이브러리입니다. 라이브러리란 '이미 누군가가 잘 만들어놓은 패키지'로 자주 쓸 것 같은 특정기능을 모아놓은 함수를 의미합니다. 즉, 파이썬으로 코딩 시 수학 라이브러리(예를 들면 Sin(x), Cos(x) 등)를 직접 구현할 필요 없이 NumPy 안에 저장되어있는 함수들을 가져와 쓸 수 있다는 거죠. 수학 및 통계 라이브러리와 더불어 NumPy의 장점은 속도에 있습니다. 내부적으로 C와 Fortran으로 작성되어있어 실행속도가 일반적인 수준에 비해 꽤 빠른 편이죠. NumPy와 관련된 설명은 나무위키에 잘 정리되어있으니 한번 읽어보는 것도 좋겠네요. 또한, 많은 기계학습과 딥러닝 패키지가 NumPy를 기반으로 구현되어있고 input 및 인자 데이터 타입을 NumPy로 요구하기 때문에 꼭 익혀야 하는 모듈이기도 합니다.



신경망(딥러닝) 행렬 표기법
(출처:
http://taewan.kim/post/wij_and_wji/)

기계학습 및 딥러닝에서 왜 이걸 써야 할까요? 우선, 간단하게 행렬 연산에 대해 말해보겠습니다. 기계학습 및 딥러닝 내부적 알고리즘에선 내가 가진 데이터를 잘 설명하는 해(기울기 혹은 가중치)를 찾기 위해 다항식의 연립방정식을 풀 수밖에 없다는 건 공감하실 겁니다. 이런 일들이 시간상 효율적으로 이루어지려면 선형대수학을 이용하여 계산할 수밖에 없고, 그 말은 행렬식을 다뤄야 한다는 말이죠. 만약 기본 자료형인 리스트로 2차원 행렬을 만들게 되면 아래와 같습니다.

>a = [[1, 2], [3, 4]]
>a
[[1, 2], [3, 4]]

여기에 단순히 행렬 스칼라 곱을 하려 해도 이중 for 문을 써서 계산을 해야 하죠. 그러나 NumPy를 쓰면 행렬 연산을 지원하기 때문에 아래와 같이 아~주 간단히, 쉽고, 빠르게 계산진행이 가능합니다.

>import numpy as np
>a = np.array(a)
>a
array([[1, 2],
       [3, 4]])
>a*2
array([[2, 4],
       [6, 8]])

이를 브로드캐스팅(broadcasting)이라 하고 하며, 작은 배열을 큰 배열과 서로 호환되도록 아래와 같이 작은 배열이 큰 배열에 크기를 맞추는 것입니다. 이런 편리한 기능이 있는데 당연히 NumPy를 쓸 수밖에 없겠죠?




Numpy의 broadcasting
(
출처 : 매일매일딥러닝블로그)

NumPy를 공부할 곳은 검색했을 때 무수히 많았어요. 그중 제가 생각했을 때 이것만 봐도 되겠다고 생각한 블로그와 사이트 추려봤으니 시간이 될 때 실습하시길 바랍니다.

Matplotlib이란 시각화 라이브러리 중 하나입니다. 만약 R 언어를 이용하고 있다면 ggplot이란 강력하고 대표적인 라이브러리가 있겠네요. Python에서도 대표적인 하나를 뽑자면 Matplotlib이 있습니다. 그러나 다른 라이브러리보다 이것을 꼭 이용해야 한다고 말하고 싶은 건 아닙니다. Python에선 Matplotlib을 포함하여 seaborn, plotly 같은 고차원 그래픽 모듈도 있으므로 분석가의 목적 또는 기호에 따라 다양하게 이용할 수 있어요. 많은 모듈 중 손쉽게 시각화를 구현할 수 있는 하나 라이브러리를 익혀두는 게 좋습니다.

시각화 모듈은 기계학습 및 딥러닝에서 정말 많이 쓰시게 될 겁니다. EDA(Exploratory Data analysis, 탐색적 데이터 분석) 작업을 하다 보면 데이터 전체의 분포를 보기 위해서는 테이블보다 그림(박스플롯, 산점도)이 강력한 도구가 되기도 합니다.



EDA시각화-Heatmap(왼쪽)과 Line plot(오른쪽)


또한, 이미지 딥러닝 중 segmentation을 예로 들어보면, 내가 생성한 모델의 prediction accuracy가 얼마나 높게 나타나는지 보고 싶을 때가 있을 겁니다. Image processing 기법과 시각화 모듈을 사용하면 원본 이미지와 결과 이미지를 시각화하여 overlap 해보면 모델이 좋은 방향으로 개발되고 있는지 확인도 가능하겠네요.



Deeplearning - segmentation model


조금만 검색하셔도 Matplotlib을 연습할 많은 블로그나 사이트가 있습니다. 그러나 그래프만을 위해 공부를 깊게 하는 건 제 경험상 비효율적인 것 같아요. 시각화 라이브러리는 내가 필요로 할 때 검색해서 만들어가며 자신의 코드를 하나둘 씩 쌓는 게 중요합니다. 혹은 다음에 나올 Pandas를 공부하다 보면 자연스레 시각화 파트에서 익히게 될 수 있을 거예요.



드디어 Pandas 입니다. 역시나 파이썬의 모듈이고요. 이게 뭔지 가장 잘 표현하는 방법은 R의 vector와 dataframe 기능입니다 라고 설명하는 것입니다. R을 접해보시지 않은 분들을 위해 부가 설명해드리면 이 언어는 Wes McKinney가 '시계열 데이터를 분석하기 위해 Python도 R과 같은 데이터 분석이 가능한 모듈이 필요해'라고 생각해서 만든 모듈입니다. 따라서 당연히 R을 닮았습니다. 기본 Python으로 코딩한다면 테이블 형식의 데이터를 행과 열을 추출하고, 혹은 특정 조건을 걸어 추출하고 새로운 테이블 형태로 정리하는…. 말로만 해도 얼마나 많은 번거로움이 나타날지 느껴지시죠?

간단한 예제를 통해 확인해볼게요. 예제를 볼 땐 이걸 순수 Python으로 코딩해서 똑같은 작업을 한다면 몇 줄에 끝낼 수 있을지 상상해보면서 보도록 합시다. 우선 csv 예제 파일을 읽어서 데이터 구조부터 파악해 볼게요.

※첨부파일 : train.csv

>import pandas as pd
>train = pd.read_csv('train.csv')
>print(train.columns)
Index(['datetime', 'season', 'holiday', 'workingday', 'weather', 'temp',
       'atemp', 'humidity', 'windspeed', 'casual', 'registered', 'count'],
      dtype='object')
>train.head()



그럼 여기서 casual, registered, count, datetime 열만 삭제하고 새로운 데이터를 만들려면? Python만으로는 반복문과 변수선언 등등 여러 가지 방법들이 머릿속을 지나가죠. 그렇지만 pandas는 한 줄로 처리할 수 있습니다. 그 dataframe에서 간단히 plot 생성도 가능하고요.

train = train.drop(["casual", "registered", "count", "datetime"], axis=1)
train.head()





Matplotlib같은 시각화 모듈과 함께 Pandas를 사용하면 아주 강력한 EDA툴이 되기도 합니다. 특히나 Mckinney의 의도처럼 시계열 데이터를 가공하고 EDA를 진행하는데 강력한 도구가 될 수 있답니다.


Time-series plot

요즘엔 AI뿐 아니라 데이터 분석을 위해서 관련 교육이 늘어가는 추세가 보입니다. 특히 Jupyter + Pandas + maplotlib/seaborn 을 묶어서 교육을 진행하는 프로그램들이 점차 늘어나고 있습니다. 우리 인실리코젠의 외부 교육프로그램도 해당 주제를 다루고 있으니 페이스북을 통해서 교육 소식을 접하시고 필요하시면 신청하면 좋을 것 같습니다. 19년 08월에 진행한 교육 내용은 아래의 github을 참고 해주세요~

Website

GitHub


구글의 코랩(Colab) 서버는 구글이 제공하는 Jupyter notebook입니다. 막상 기계학습과 딥러닝을 진행하려 하다 보면 적절한 환경부터 세팅이 안 되어 있거나, 가지고 있는 컴퓨터의 성능이 좋지 않아 시작부터 어려움을 느낄 때가 있습니다. 그러나 Colab을 이용하면 인터넷 환경만 갖춰진다면 어떠한 컴퓨터 심지어 태블릿으로도 실습이 가능해집니다. 구글 계정만 있으면 무료일 뿐만 아니라 딥러닝 구현 시 GPU도 몇 번의 클릭으로 연동할 수 있어서 연산속도도 빠르게 됩니다. 잘 만든 Jupyter는 그 자체만으로도 나만의 문서가 될 수 있으니, 시간이 될 때 잘 작성된 블로그나 문서를 보고 연습하시길 추천합니다.
(특징 : Jupiter notebook 환경 제공, 무료, GPU 사용 가능, 구글 드라이브와 연동 가능)

Colab deeplearning tutorial


이 부분은 다른 파트와는 달리 완벽히 이론적인 부분입니다. 기계학습의 기원은 전산학, 컴퓨터 공학, 통계학 등 다양한 곳으로부터 발전했다고 합니다. 이는 결국, AI를 통찰하기 위해선 수학이 기본이 되어야 함을 이야기합니다. 얼마나 깊이 공부해야 하는가는 목표에 따라 다르겠지만, 세부적인 수식까진 아니더라도 전체적인 계산 흐름 정도는 알아야 해석할 수 있어야 자신의 데이터에 맞는 디버깅 또는 최적화가 가능하다 생각해요. 그러기 위해서는 앞서 언급한 통계학(기초통계학, 회귀분석, 선형대수학)과 미분학이 어느 정도 뒷받침되어주어야 합니다.

간단한 예를 들어 볼게요. 기계학습 및 딥러닝에선 손실함수(Cost function 혹은 Loss function)의 최소화가 목적입니다. 이때 주로 드는 예시가 MSE(Mean Squared Error, 평균제곱 오차)방법입니다.


Cost함수 : Mean squared error
(출처 :
https://en.wikipedia.org/wiki/Mean_squared_error)

MSE를 최저로 만들기 위해 weight를 최적화 방법으로 업데이트 해 나가는 것이 기계학습 및 딥러닝의 핵심 원리입니다. 이때의 optimizer로는 Gradient descent(경사 하강법)가 있을 수 있고요. 이때 만약 여러분이 통계학적 지식이 있다면 방금 예시와 설명만으로도 내부적인 흐름이 느껴지실 겁니다. 예를 들면 MSE는 결국 (실측치-예측치)의 평균이고 이 값은 예측이 잘될수록 0에 수렴할 테니 MSE의 정의가 타당해 보일 것이고요. y^ = wx + b 라고 단순 선형이라고 가정한다면 MSE는 w에 대해 2차 함수로 나타날 것이며 아래처럼 곡선 형태임이 예상됩니다. 결국, 이 함수의 기울기가 0인 지점의 weight 값이 최적이 될 테고, '데이터가 들어올 때마다 일정량만큼 최적의 weight를 향해 수렴해 가는 방식이겠구나'라고 생각할 수 있습니다.

여기서 제가 생각한 것은 단지 과정의 흐름입니다. 실력이 좋으신 분은 손으로 직접 풀어가며 계산도 가능하겠죠. 하지만 그렇게까지는 아니어도 내부적인 흐름만 알더라도 기계학습이 한층 재미있어질 것입니다. 아무래도 전공이 아니라면 장벽이 있고 범위도 넓어 어려움이 있겠지만, 그때마다 관련 강의나 책을 찾아보면서 차근히 익혀나가길 추천해 드려요.

통계가 완전 처음이 아니라면 전 Gareth James 저자의 ISL(An Introduction to Statistical Learning)을 추천합니다. 기계학습 입문 이론서 중 유명하고 인기가 있습니다. 아래 사이트에서 PDF를 내려받을 수 있고요(물론…. 영어지만요). 2016년에는 '가볍게 시작하는 통계학습'이란 번역서로 출판하기도 했습니다.

Website & PDF교재



요즘 이미지와 관련된 분석들이나 자동화 기술은 CNN이 활발하게 이루어진 때부터 '모두 딥러닝 아니야?'라고 생각할 수도 있을 만큼 딥러닝 기술이 널리 이용되고 있어요. 그러나 좀 더 실생활 혹은 실용적인 프로젝트를 운영한다면 딥러닝 부분은 프로젝트 일부분이고 많은 부분이 이미지 프로세싱으로 접근 가능하다는 것을 알게 됩니다. 이미지 프로세싱은 말 그대로 사진 또는 영상에 여러 연산을 접목해 새로운 사진 및 영상을 얻어내는 기법을 뜻하는 데요. 화질 개선 및 복원, 영역 추출, 객체 검출, 회전, Perspective transformation 등 많은 이미지 처리 작업에 적용할 수 있습니다.



Perspective Transformation 기술




Camera calibration 기술

Website

당연히 전공이 아니라면 거부감이 있는 주제긴 하지만 어떠한 주제들이 있는지 이해하고 있는 것만으로도 딥러닝 관련 프로젝트를 더욱 완벽히 만들 수 있을 겁니다. 이미지 프로세싱을 위해선 scikit-image 또는 openCV라는 모듈이 가장 잘 알려진 모듈입니다. 아래 있는 사이트에서 예제와 내용을 꽤 자세히 설명해주고 있으니 다양한 주제를 접해보는 경험도 좋을 거라 생각됩니다.



마치며


인실리코젠에서 기계학습을 이용한 마커 선발과 모바일 이미지를 이용한 segmentation 딥러닝과 관련된 프로젝트에 참여하고 있다 보니 가끔 교육, 학회 및 워크숍에서 저에게 실무자 혹은 학생분들이 다음과 같은 질문을 하곤 했습니다.

  • ‘기계학습은.. 뭘 이용하셨나요?’
  • ‘딥러닝은.. 어떻게 하셨나요?’

저 짧은 질문에선 ‘나도 공부하고 싶은데 아직 방향을 모르겠네요’라는 마음의 소리가 들리는 듯했어요. 저도 저 답답함 속에서 맨땅에 헤딩하는 심정으로 이리저리 정보의 홍수를 탐험하던 때가(아직 진행형일 수 있겠네요.) 있었으니까요. 재미있어서 공부하다가 '내가 파고 있던 우물이 한강이구나'를 느끼면서 뒤를 돌아보는데 우물이 어딨는지 찾고 있는 분들을 보았고 그분들을 위해 이 블로그가 하나의 좌표가 되었으면 합니다.

더 많은 예제도 많겠지만 본 블로그는 AI 공부를 위해 다음과 같은 주제들이 언제 어떻게 쓰이는지를 보여주며 필요성만을 강조하고 싶었어요. 언제 어떻게 쓰이는지 모르는데 하나씩 파고드는 건 괴로운 일이 될 수도 있으니까요! 좋은 사이트 및 레퍼런스를 소개했으니 기계학습과 딥러닝에 입문하시는 분들께 도움되었으면 합니다. 모두 화이팅!!

작성 : Data Science Center 형기은




Posted by 人Co

2019/12/05 16:39 2019/12/05 16:39
Response
No Trackback , No Comment
RSS :
https://www.insilicogen.com/blog/rss/response/332

JavaScript Framework



"웹 로딩 속도 1초에 아마존 매출 68억 달러 달렸다."라는 인터넷 기사를 보신 적이 있으신가요?
웹페이지 로딩 타임이 매출에 영향을 끼친다는 내용의 기사인데요, 로딩 타임에 영향을 받는 건 비단 아마존뿐만이 아닌, 모든 웹서비스에 대한 공통적인 이슈일 것입니다. 그럼 로딩 타임을 줄이는 데 도움을 줄 JavaScript Framework에 대해 알아볼까요?


등장 배경


안드로이드, 아이폰과 같은 모바일 시대가 대두함에 따라 렌더링 방식은 새로운 국면을 맞이했습니다. 전통적인 서버사이드 렌더링 방식(ASP, PHP, JSP)에서 클라이언트사이드 렌더링으로 렌더링 방식의 변화를 맞이한 것입니다.

이미 고정된 페이지를 리턴하므로 모바일 페이지를 만들기 위해서는 모바일 사이트를 별도로 만들어야 합니다. 즉, 웹용 사이트, 모바일용 사이트 이렇게 두 개를 만들어야 했습니다. 이 형태도 아이폰과 안드로이드에서 웹앱 형태로는 개발할 수 있지만 네이티브 형태로는 만들기가 불가능해집니다. 그래서 서버는 REST api만 제공해주고 클라이언트가 json 데이터를 렌더링해서 만드는 방식이 사용되는 SPA(single-page application, 스파)가 등장합니다.

SPA는 서버로부터 완전한 새로운 페이지를 불러오지 않고, 현재의 페이지를 동적으로 다시 작성함으로써 사용자와 소통하는 웹 애플리케이션이나 웹사이트를 의미합니다. Gmail, Google 지도, Facebook 또는 GitHub 등이 SPA의 대표적인 사이트입니다.
서버사이드 렌더링 방식과 클라이언트사이드 렌더링 방식의 우열을 가리기보다는 각각의 장단점을 살핀 후 사이트의 성격에 맞게 렌더링 방식을 선택하면 되겠습니다. SPA는 마크업과 데이터를 요청하고, 브라우저에 페이지를 바로 그립니다. 이런 것들을 가능하게 해주는 대표적인 JavaScript Framework 3대장인 Angular, React, Vue.js에 대해 알아봅시다.


[그림1] e-nor 블로그
(출처: https://www.e-nor.com/blog/google-tag-manager/tracking-single-page-applications-with-google-tag-manager)


Angular


[그림2] Angular 홈페이지 (출처: https://angular.io/)

  • 배경 : Google이 2010년에 출시했습니다. 타입스크립트 기반 JavaScript Framework입니다. 현재는 Angular라고 불리지만 2016년 전에는 이름에 접미사 JS가 있었습니다. JS는 Angular 2+ 출시 후 이름에서 삭제되었습니다. 2019년 5월 28일, 최신 버전인 Angular 8.0.0이 출시되었습니다. Google과 Wix는 Angular를 사용하는 가장 인기 있는 회사 중 하나입니다.

  • 성능 : Angular는 실제 DOM을 사용합니다. 문제가 발생하면 문제를 찾기 위해 코드에 깊이 들어가야 하므로 처리하기가 매우 어렵고 문제를 고치는데 많은 시간이 소요되어 버그를 유치하게 되는데 이는 위험합니다. Angular의 실제 DOM 사용은 동적 소프트웨어 응용 프로그램을 만드는 성능과 기능에 영향을 주어 느려지게 만듭니다.

  • 특징 : Angular는 템플릿에서 테스트 유틸리티에 이르기까지 개발자에게 많은 것을 제공합니다. 따라서 경량 응용 제품에는 적합하지 않습니다. 라우팅에서 템플릿까지 모든 것을 제공하기 때문에 응용 프로그램을 개발하기 위해 다른 도구를 이용할 필요가 없습니다. 응용 프로그램을 구성하는 방법에 대한 의견이 있습니다. 라우팅 라이브러리를 얻거나 선택할 필요가 없습니다. Angular 패키지에 제공된 모든 것을 사용하여 코딩 프로세스로 시작할 수 있습니다

React


    [그림3] React 홈페이지 (출처: https://reactjs-kr.firebaseapp.com/

    • 배경 : Facebook에서 2013년에 출시되었습니다. Facebook과 같은 트래픽이 많은 웹 사이트에서 주로 사용됩니다. Facebook 광고가 트래픽을 얻기 시작하고 코딩 및 유지 관리에 문제가 발생하여 특정 문제를 해결하기 위해 개발되었습니다. 최신 버전인 16.8.6은 2019년 5월 6일에 릴리스 되었습니다. WhatsApp, Instagram Paypal, Glass door, BBC는 React를 사용하는 인기 있는 대표적인 회사입니다. React는 매우 동적이며 대화식 사용자 인터페이스를 만드는 데 큰 도움이 됩니다.

    • 성능 : 이 Javascript 라이브러리는 가상 DOM을 사용하고 있습니다. 브라우저에 따라 다르고 가벼울 수도 없습니다. React 패키지로 무료로 제공되며 실제 DOM의 성능 저하 문제를 제거합니다.

    • 특징 : 경량 응용 분야에 적합합니다. Angular와 달리 공식 React는 라이브러리를 많이 제공하지 않습니다. 이를 통해 원하는 프로그래밍 도구를 자유롭게 선택할 수 있습니다. React 라우팅과 같은 타사 솔루션을 이 자바 스크립트 Framework와 통합할 수 있습니다. 이외에도 MobX 및 Redux를 사용하여 사무실 관리 작업을 지원할 수 있습니다. 경험이 풍부한 최고의 소프트웨어 개발자를 고용하면 이러한 유연성을 크게 누릴 수 있습니다. 또한, 비즈니스를 위해 개발된 놀랍고 역동적인 응용 프로그램을 개발할 수 있습니다.



     Vue



    [그림4] Vue.js 홈페이지 (출처:
    https://kr.vuejs.org/)

    • 배경 : 2014년에 출시되었으며, React 및 Angular의 개발사 Facebook과 Google과 같은 큰 회사에 의해 개발되지 않은 진보적인 JavaScript Framework입니다. Google의 전 엔지니어인 Evan You가 만들었으며, 꾸준한 인기를 얻고 있습니다. 최신 버전; 버전 2.6.10은 2019년 3월 20일에 릴리스 되었습니다. Javascript Framework 제품군의 가장 역사가 짧은 Framework입니다. GitLab 및 Alibaba와 같은 웹 사이트는 Vue를 사용하고 있습니다.

    • 성능 : Vue는 이전에 시작된 Framework의 모든 좋은 속성을 취했습니다. 같은 개념으로 Vue는 Virtual DOM을 채택된 React 개념으로 사용합니다. 이것은 더 빠르고 버그 없는 성능을 보장합니다.

    • 특징 : 경량 응용 분야에 적합합니다. Vue.js 생태계는 개발자에게 많은 것을 제공합니다. 추가 기능 중 일부는 라우팅을 위한 Vue 라우터이며 상태 관리를 위해 Vuex가 있습니다. 또한, 응용 프로그램의 서버 쪽 개발을 시작하기 위한 Vue서버 쪽 렌더가 있습니다. 따라서 Angular만큼 의견이 많지 않고 React만큼 유연하지는 않습니다.

    결론
    • Vue.js와 React는 Angular보다 우수한 성능과 유연성을 제공합니다.
    • Vue와 React는 가벼운 응용 프로그램에 더 적합하며 Angular는 큰 UI 응용 프로그램에 가장 적합합니다.
    • Angular는 Vue 및 React와 달리 의견이 많으며 라우팅, 템플릿에서 패키지의 테스트 유틸리티에 이르기까지 모든 것을 제공합니다.
    • Vue는 가장 인기 있고 사랑받고 성장하는 Javascript Framework입니다.



    [참고]
    FED팀 (Front-End Development)
    진효빈 주임




    Posted by 人Co

    2019/11/22 13:28 2019/11/22 13:28
    Response
    No Trackback , No Comment
    RSS :
    https://www.insilicogen.com/blog/rss/response/331



    « Previous : 1 : 2 : 3 : 4 : Next »