유연해야 산다(Content is like water)

반응형 웹이란 하나의 url로 다양한 디바이스를 통해서 접속했을 때, 접속하는 디바이스 종류에 따라 화면크기가 자동으로 다양한 디바이스 크기에 최적화되어 사용자들에게 보이는 웹페이지 접근 기법을 말합니다.


사진출처 : 위키피디아

이해를 돕기 위해 간단한 예를 들겠습니다. 테이블 위에 와인 잔, 티포트, 허리가 가는 유리 꽃병이 있는데 그 안에 물을 부으면, 물은 각 용기의 모양에 따라 담길 것입니다. 여기서 각 용기는 디바이스 즉 데스크톱, 태블릿, 모바일 기기를 의미하며, 물은 사이트의 콘텐츠를 의미합니다.

반응형 웹에서는 고려해야 할 요소가 두 가지가 있는데, 해상도와 이미지 블러링 현상입니다.
첫 번째, 해상도란 화면 또는 인쇄물 등에서 표현된 그림이나 글씨 등이 섬세하게 표현된 정도를 나타내는데, 픽셀 수가 많아질수록 해상도가 높아집니다. 한정된 공간 속에 더 많은 픽셀(디스플레이를 구성하는 가장 작은 단위)이 있다면, 그만큼 더욱 콘텐츠를 선명하고 섬세하게 표현할 수 있습니다.


사진출처 : (주)인실리코젠

두 번째, 이미지 블러링 현상은 해상도 차이에 따라 발생하는 현상입니다. 데스크톱을 기준으로 만든 이미지가 모바일 화면에서 보았을 때 화질이 선명하지 않은 경우가 종종 있는데, 이는 데스크톱과 모바일 화면의 해상도 차이로 인해 발생합니다. 이미지 블러링 현상을 방지하기 위해서는 모바일 사이즈를 고려하여 원본 이미지의 1.5~최대 2배가량의 크기로 제작해야 합니다.

그렇다면 반응형 웹을 기획할 때는 어떻게 해야 할까요?? 먼저 데스크톱 사이즈보다 모바일 디바이스 사이즈가 작다는 것을 인지하여, 콘텐츠의 그리드(혹은 레이아웃)를 구성해야 합니다.


사진출처 : http://24h3vq.axshare.com/#p=home

반응형 웹을 구현하기 위해서는 분기점 설정이 필요합니다. 분기점 설정이란 내가 어느 지점에서 화면 레이아웃을 바꿔줄 것인지 설정하는 것을 말합니다. 분기점 미 설정 시 나타나는 문제점을 예를 들어보겠습니다. 직장인 A 씨는 핸드폰으로 N 사이트에서 모바일 쇼핑을 하려고 하는데 상품 이미지와 상품정보가 잘려서 쇼핑을 할 수가 없었습니다. N 사이트는 분기점 지정을 하지 않았기 때문이었죠. 직장인 A 씨가 N 사이트에서 쇼핑할 수 있는 방법은 데스크톱에서 PC 버전으로 쇼핑하는 방법 밖에 없습니다.

자아! 그럼 반응형 웹이 적용된 사이트를 보시겠습니다. 인실리코젠 홈페이지의 경우 분기점을 3가지로 적용하였습니다. 반응형으로 제작했기 때문에 하나의 URL로 모바일, 태블릿, 데스크톱으로 접속해도 해상도에 구애받지 않고, 알맞은 크기로 사이트의 레이아웃과 정보를 구독할 수 있습니다. 모바일 기기에서 가로 또는 세로로 화면을 돌리더라도 화면에 맞게 사이트의 정보가 배치됩니다. 이는 데스크톱에서 브라우저 창의 크기를 증감해도 적용됩니다. 마지막으로 유지관리 측면에서 보았을 때 관리할 코드가 한 맥락이기 때문에 유지관리하는데 효율적입니다.


사진출처 : (주)인실리코젠 홈페이지(http://insilicogen.com/)

마치며...
현재 세계는 디바이스 춘추 전국시대라고 칭해도 과언이 아닐 만큼 다양한 디바이스가 출몰하고 있습니다. 사용자들의 편의와 동등한 정보제공을 위해 반응형 웹 기술이 늘 정답은 아니지만 필요한 웹 기술 중 하나라고 필자는 생각합니다. 이 글을 읽고 반응형 웹에 대한 이해에 도움이 되셨기를 바라며 마칩니다. 제 글을 읽어 주셔서 감사합니다.

작성자 : PlatformLab
프론트엔드개발자  진효빈

Posted by 人Co

2017/11/03 14:53 2017/11/03 14:53
Response
No Trackback , No Comment
RSS :
https://www.insilicogen.com/blog/rss/response/263

어느새 무더운 여름이 지나고 서늘한 가을이 찾아 왔습니다. 어떻게 지난 여름 잘 버티셨나요? 이번 여름은 그 어느 해 보다 더 덥게 느껴지면서 사회적으로도 누진세 같은 이슈가 화제되곤 했었습니다.
어떻게 보면 우리 (주)인실리코젠도 더위와 싸우는 기업입니다. 좀 더 정확히 말하자면 서버실에 있는 분석 및 스토리지 서버들이 더위와 맞서 싸우고 있습니다. 대용량의 생물정보 데이터 분석을 위해 수십대의 분석 서버들이 열을 내며 24시간 쉬지 않고 일을 하고 있답니다. 이 열을 제대로 식혀주지 않으면 서버들은 곧 강제 종료되고 장시간 실행중이던 분석 작업도 중단되며 저장중이던 데이터나 장비에 치명적인 문제가 발생할 수도 있습니다.
 
<열화상카메라... 가 없어서 구한 다른 서버실의 열화상 카메라 사진>
 

그러다 보니 서버실의 더운 공기를 식히고 순환시켜주는 에어컨이나 공조장치들의 역할이 중요합니다. 보통은 에어컨에 적정온도를 맞춰 두고 24시간 가동하여 이런 문제를 대비하지만 언제나 그렇듯 사고는 예상치 못할 때 발생합니다.

의외로 이런 사고는 경험상 여름보다는 겨울이나 초여름에 잘 발생했습니다. 지난 겨울에는 실외기가 너무 추운 바깥 공기에 얼어붙어 버려서 냉매의 순환에 문제가 생겨 차가운 바람이 충분히 나오지 않는 문제가 생겼습니다. 그리고 보통 겨울에는 여름보다 조금 높은 온도를 에어컨에 설정해 두는데 갑자기 더위가 찾아오는 초여름에 너무 높아진 온도에 비해 충분히 차가운 바람을 내지 못하면서 서버실의 온도가 높아진 적도 있습니다.

이런 사고를 몇 번 겪었을 무렵 세상은 IoT(Internet on Things) 열풍이 불기 시작했습니다. 그중에서도 저의 관심을 끌었던 장비가 바로 라즈베리 파이(Raspberry Pi) 입니다. 라즈베리 파이는 영국 잉글랜드의 라즈베리 파이 재단이 학교와 개발도상국에서 기초 컴퓨터 과학의 교육을 증진시키기 위해 개발한 신용카드 크기의 싱글 보드 컴퓨터입니다. 크기는 작지만 하드디스크 대신 SD카드를 사용하고 HDMI 포트로 모니터와 연결도 가능하며 LAN포트도 있어서 인터넷 연결도 되는 엄연한 컴.퓨.터 입니다.

<스마트폰 보다 더 작은 컴퓨터, 라즈베리파이>

라즈베리 파이의 장점은 일반 USB 포트뿐만 아니라 다양한 통신 포트도 제공해서 여러가지 센서들도 제어할 수 있다는 점입니다. 예를 들어서 전기 신호를 켜고 끄도록 프로그램을 만들면 발광 다이오드에 불을 켤 수도 있고, 작은 모터를 동작 시킬 수도 있습니다. 초음파 센서나 감광센서를 이용하면 누군가 센서 앞을 지나가는 것을 알 수도 있습니다. 이젠 정말 좋은 아이디어가 있으면 누구나 직접 만들어 낼 수 있는 세상이 온 것입니다.


<다양한 센서를 조합하면 구현하지 못할 아이디어가 없다>

저는 이 라즈베리 파이에 몹시 흥미를 느꼈습니다. 그리고 이 작은 컴퓨터를 이용해 회사가 겪고 있는 어떤 문제를 해결하는데 사용하고 싶었습니다. 바로 우리 서버실을 높은 온도로부터 지켜줄 수 있는 장치를 만들고 싶었습니다.

저는 이 프로젝트의 이름을 Rainbow Guard Project 라고 이름을 지었습니다.

보통 서버들은 host name이라고 부르는 별명을 가지고 있습니다. 보통은 node0, node1, node2 이렇게 이름을 짓거나 소속 기관의 영어 약자로 붙여주곤 합니다. 디자인에 강한 우리 인실리코젠은 각 서버들의 성격에 맞는 색을 이름으로 지어 줬습니다.

  • 강력한 파워를 자랑하는 분석 서버에게는 BLACK
  • CPU가 많아 언제나 많은 분석량을 자랑하는 서버에게는 RED
  • 많은 고객이 찾아오는 웹사이트를 운영하는 서버에는 GREEN
  • 테스트를 많이 해서 정신이 오락가락한 서버에게는 PURPLE

Rainbow Guard Project 이렇게 다양한 색깔의 레인보우를 지켜주겠다는 의미를 지닙니다.

<애네들이 생각 나도 모른척 하세요, 아~재 소리 듣습니다...>

Rainbow Guard Project는 크게 3부분으로 나뉩니다.

1. 서버실의 온도를 체크하고 기록
2. 특정 온도 이상으로 온도가 올라갈 경우 서버실 관리자에게 경고 메일 발송
3. 24시간 동안의 서버실 온도 현황 조회

첫 번째 기능을 위해 먼저 라즈베리 파이와 온도센서를 연결하는 작업을 진행했습니다. 기왕이면 평상시 정상 작동 때와 온도가 높을 때를 구분할 수 있도록 LED도 있으면 좋겠네요. 이런 기능을 위한 회로도를 설계해 보고 납땜질도 하면서 깔끔하지는 않지만, 동작은 하는 온도 감시 및 알림 회로를 만들어 라즈베리 파이와 연결하였습니다. 저도 V=IR이라는 공식밖에 모르지만, 열심히 구글링하고 공부하면서 만들 수 있었습니다.

<PPT로 회로 설계도면을 만들고, 겨우겨우 납땜해서 만든 모듈>

리눅스에는 crontab 이라는 스케줄러가 있는데요, 온도센서의 값을 읽어와서 저장하는 프로그램을 만든 후 이 crontab의 스케줄에 추가해 주면 정기적으로 온도 감시가 진행됩니다. 덤으로 온도가 높아 졌을때 서버실 밖에 있는 사람들이 빨리 알아챌 수 있도록 음악이 나오게 셋팅해 뒀습니다. 경고 상태에서 나오는 음악은 f(x)의 'Dangerous' 입니다. 듣기만 해도 위험한 상태라는걸 알 수 있게 해줍니다.


<원래는 마이클잭슨의 Dangerous를 재생 시키려고 했는데 음원을 못 구해서...>

경고 상태가 되면 설정된 서버실 관리자들에게 다음과 같은 메일이 발송됩니다. SMS 문자를 보낼 수도 있지만, 유료 서비스라서 메일을 보내도록 설정해 뒀습니다. 어짜피 스마트 시대에 메일이 오든 문자가 오든 틈틈이 확인하는 습관이 있어서 상관은 없습니다.

마침 이 글을 작성하는 동안 경고 메일을 수신했습니다. 앞서 말씀드린 것처럼 봄, 가을 같은 환절기에는 에어컨의 적정온도가 변경되어 간혹 이런 경고가 발생하기도 합니다. 이번에는 날씨가 선선해 지면서 건물 중앙 관리 시스템이 적정온도를 조금 높이다 보니 서버실의 온도가 높아져 경고가 발생했습니다. 서버실 자체 에어컨의 온도를 조금 더 낮춰 해결하였습니다.

<토요일 새벽 6시에 경고 메일을 받은 서버관리자가 긴급 출동하여 초기에 대처>
 

경고 알림 메일에 있는 URL을 클릭하면 지난 24시간 동안의 온도 현황을 그래프와 함께 볼 수 있는 웹페이지로 이동하게 됩니다. 이 사이트는 Python Django를 이용하여 구현하였습니다. 제가 디자인 감각은 꽝이라서 정말 필요한 정보가 보이게끔만 만들어 봤습니다. 지금은 회사 동료들과 함께 조금씩 예쁘게 업그레이드하는 중입니다.


<저의 html 레벨은 15년 전에 멈춰 있습니다...
(그렇다고 배경에 보노보노를 넣고 싶진 않았어요 ㅠㅠ)>


이렇게 경고 알림 메일을 받으면 몇몇 직원들이 급히 서버실로 출동하여 상태를 점검하고 위기의 우리 서버들을 더위로부터 구출해 냅니다. 제가 납땜질이 서툴러서 회로의 한 부분이 끊어져 잠시 운영하지 못한적도 있지만 지금은 24시간 서버실에서 제 역할을 하고 있는 중입니다.


<일부러 서버실에서 더운 곳에 둬서 빨리 경고가 울리도록 설치>
 
위에서도 잠시 언급했지만 저는 주입식 교육을 통해 V=IR이라는 공식만 기억하는 동물세포 실험실 출신의 생물학 전공자입니다. 하지만 다양한 분야의 융합을 통하여 가치를 생성해 나가는 생물정보 분야의 동료들과 함께 일하면서 새로운 분야에 대한 도전 의지도 키울 수 있었던 것 같습니다. 잘 모르는 분야라도 꾸준히 보고, 듣고, 배우다 보니 생물학 너머 다양한 분야의 기술과 노하우를 배울 수 있었습니다. 그렇다고 아주 잘 하는 건 아닙니다. 생물 정보 분석을 위한 넓고 얕은 지식 정도 되겠네요. 여러분들도 생물정보 분석을 하면서 리눅스, 코딩, 통계 등의 난관에 부딪혀 많이 힘든 상황을 겪으실 것 같습니다. 하지만 포기하지 말고 꾸준히 밀고 나가다 보면 경계 너머의 다양한 즐거움을 느끼게 되실 거라고 믿습니다.  
 

<이미지 출처>
  • IDC HOWTO - http://idchowto.com/?p=12787

  • RayHightower.com - http://rayhightower.com/blog/2012/12/03/ruby-on-raspberry-pi/

  • SUNFOUNDER - https://www.sunfounder.com/rpi2-sensorv2.html

  • 후레쉬맨 - http://blog.daum.net/gkglh16/3

  • f(x) - http://ppulset.tistory.com/552


작성자 : BS실 SP팀 심재영 선임 컨설턴트

Posted by 人Co

2016/10/31 18:33 2016/10/31 18:33
Response
No Trackback , No Comment
RSS :
https://www.insilicogen.com/blog/rss/response/226

제 4차 산업혁명

최근 제 4차 산업혁명이라는 용어가 크게 이슈화되어 많은 사람들에게 회자되고 있어 이에 대해 짧게 간추려 보고자 합니다.


제 4차 산업혁명이란?
제 4차 산업혁명의 핵심 키워드는 융합과 연결이라고 할 수 있습니다. 이를 더 쉽게 풀어 이야기한다면, 제조업에 정보통신기술이 접목된 것이라 할 수 있습니다. 애초에 제 4차 산업혁명이라는 의미는 제조업 강국인 독일이 새로운 성장동력을 모색하는 과정에서 정립한 개념인 ‘인더스트리 4.0’을 확장한 것으로 그 범위가 더욱 확장되어 제조업뿐만 아니라 사회 전반에 일어날 엄청난 변화와 영향력을 내포하고 있습니다.
인류의 삶을 변화시킨 지난 1차, 2차 그리고 3차 산업혁명에 비하면 제 4차 산업혁명의 정체는 아직 불분명하지만, 산업생태계가 새로운 먹거리 중심으로 재편되어 인류에게 또 다른 혁신의 삶을 제공할 것임은 확실한 것 같습니다. 특별히 빅데이터, IoT, 인공지능과 같은 첨단기술과의 융합이 가져올 변화는 무궁무진한 듯합니다.
그럼 새로운 패러다임인 제 4차 산업혁명의 특징은 무엇일까요? 그 특징은 사람과 사물, 사물과 사물이 인터넷으로 연결되는 초연결성, 그 초연결성으로부터 파생된 막대한 데이터를 분석하고, 그 분석을 통해 일정 패턴을 파악해 내는 초지능성, 그리고 마지막으로 분석결과를 토대로 인간의 행동을 예측해 내는 예측가능성입니다. 이러한 단계를 거쳐 새로운 가치를 창출해 내는 것입니다.


<출처 : http://www.newspim.com/news/view/20160102000009>


국내외 정책동향
국내외적으로 제 4차 산업혁명의 정책적 동향을 살펴보면, 독일은 2011년부터 인더스트리 4.0을 통해 스마트 팩토리에 집중하여 정책적 지원을 추진하고 이를 추진하면서 노출된 문제점인 표준화, 보안정책, 중소기업 거부 등을 개선하기 위한 전략적 수정을 추진하고 있습니다. 미국은 2014년부터 ‘미국에서 만들기 (Making in America)를 통해 디지털 디자인과 3D 프린팅 역량강화로 시제품 제작기간 단축, 비용절감은 물론 혁신형 기업 창업 촉진을 정책적으로 지원하고 있습니다. 중국 또한 IT 경쟁력 강화를 통해 ‘중국제조 2025’를 발표하여 제조대국에서 제조 강국으로 도약하기 위한 전략을 추진하고 있습니다. 이에 뒤질세라 일본은 2013년 ‘세계 최첨단 IT 국가 창조선언’을 하고, 2016년 ‘로봇 혁명 신전략’을 내세워 미국, 독일에 비해 상대적으로 경쟁 우위에 있는 로봇혁명을 통해 IoT 시대에 로봇으로 세계를 리드할 전략을 추진하고 있습니다.
국내에서도 제조업의 창조경제 구현을 목표로 스마트센서, CPS(Cyber-Physical-System), 3D프린팅, 에너지절감, IoT, 빅데이터 등 스마트 제조기술개발과 더불어 이러한 스마트기술과 소프트웨어를 연결하여 이루어지는 지능화 산업 발전을 위한 R&D 예산 확대를 도모하고 있습니다.


제4차 산업혁명 주요 기술
대다수의 전문가들과 문헌에서는 제 4차 산업혁명의 주요기술로 ICT 관련 기술인 IoT, CPS, 빅데이터 그리고 인공지능(AI)을 언급하고 있습니다.

<출처 : 해외 ICT R&D 정책 동향, 정보통신기술진흥센터(2016)>

몬산토, 듀폰, 존 디어 등 다국적 기업들은 빅데이터를 활용한 '처방식 재배(prescriptive planning)'를 통해 농업 분야의 가치 창출을 본격화하고 있고, 국내에서도 각종 센서를 통해 환경정보, 생육정보, 에너지 정보, 농작업 정보 등을 통합적으로 수집, 분석한 빅데이터 기술을 활용하여 스마트 팜 산업이 확대되고 있습니다.
 
에필로그
생물정보분석 전문회사인 (주)인실리코젠은 유전체 분석 외에도 생물정보를 기반한 디지털융합사업, 다양한 정보화 사업을 수행해 왔습니다. 아마도 이미 10년 전부터 데이터의 가치를 알고, 데이터의 축척, 데이터 연결 그리고 데이터를 통합하는 4차 산업혁명의 주요 기술인 빅데이터 기술을 준비해 왔으며, 로봇 기술을 제외한 주요 기술들(빅데이터 기술, IoT, 머신러닝)을 꾸준히 연구, 개발하여 미래를 준비하고 있었던 것 같습니다.
현재 (주)인실리코젠은 수년간 준비해온 식품 빅데이터 정보를 이용하여 식품 산업의 제 4차 산업 혁명의 단초를 제공하고자 준비하고 있습니다. 아마도 식품 빅데이터 정보는 바이오 헬스, 진단 및 의료 산업을 비롯해 식품 산업으로까지 확대되어 더 폭넓게 견인하게 될 것입니다. 제 4차 산업혁명으로 산업의 패러다임이 대변신을 이루어 갈 때 (주)인실리코젠이 바이오 혁신 산업의 제 4차 산업혁명 그 중심에 서지 않을까 기대해 봅니다.




작성자 : R&D센터 DS그룹 신가희 책임 연구원

Posted by 人Co

2016/09/07 14:27 2016/09/07 14:27
Response
No Trackback , No Comment
RSS :
https://www.insilicogen.com/blog/rss/response/221

2016년 3월, 전세계의 이목이 우리나라에서 벌어지는 두 바둑기사의 특별한 대국에 쏠려 있습니다. 3월 9일부터 하루이틀 간격으로 5차례 진행되는 이번 대국이 특별한 이유는 이것이 세계 최고의 바둑기사인 이세돌 9단과, 바둑 좀 둘 줄 안다고 알려진 서양의 인공지능 바둑기사간의 대결이기 때문입니다. 바둑 좀 둔다는 이 인공지능 기사는 각종 미래기술 연구에 엄청난 투자를 하고 있는 구글의 대표적인 인공지능 시스템 '알파고'로, 얼마전 유럽의 바둑 챔피언을 꺾고 한껏 기세가 등등한 상태입니다. 1997년 체스판에서 세계 챔피언에 승리를 거둔 ‘딥블루’로부터 시작된 인공지능의 도전은, 2011년 퀴즈쇼 ‘제퍼디’에서 승리를 차지한 ‘왓슨’을 거쳐 이제는 바둑이라는 성역에까지 진출한 알파고로 이어지고 있습니다. 그동안 바둑이 인공지능 분야에서 성역으로 불리었던 이유는 바둑에서 가능한 경우의 수가 엄청나게 많기 때문에 현대의 컴퓨터 기술로는 바둑에서 승리하기 위해 두어야 할 수를 도저히 찾아낼 수 없으리라 여겼기 때문입니다.

그런데 3월 9일에 벌어진 역사적인 첫 대결에서 많은 이들의 예상(혹은 기대)을 깨고 알파고가 불계승으로 승리하는 이변이 일어났습니다. 그리고 다음날 이어진 두번째 대국의 결과는 첫 대결의 충격이 채 가라앉지도 않았던 많은 사람들을 경악하게 만들기에 충분했습니다. 결과는 알파고의 연승. 첫 대결은 경기가 주는 압박감으로 인한 이세돌 9단의 심리적인 긴장과 이로 인한 몇 번의 실수에 의한 패배라고 볼 수 있는 여지가 있었지만 그 다음의 대결이 사람들을 경악케했던 것은 특별한 실수를 하지도 않았고 전체적으로 자신의 경기흐름대로 잘 이끌어가는 것처럼 보였던 이세돌 9단이 중후반부 열세에 몰리며 명백한 패배를 하고 말았기 때문입니다. 많은 사람들은 대등함을 넘어 판을 압도하는 수준의 경기력을 보여준 알파고를 보며 놀라움과 두려움이라는 매우 묘한 감정에 휩싸였습니다.

인공지능이 발전할수록 세상은 분명 더 편리해질텐데 우리는 왜 두려움이라는 감정을 함께 느끼게 되는 걸까요?

오늘날 미국을 비롯한 선진국에서는 산업분야에 인공지능 시스템을 활용하는 비율이 점차 높아지고 있습니다. 과거에는 단순 반복작업만을 해주던 기계들이 인공지능과 결합되면서 이제는 보다 높은 지적 능력이 필요한 분야에도 널리 사용되고 있습니다. 최근에는 인터넷상의 자료를 수집해서 기사를 자동으로 작성해주는 인공지능 기자 ‘워드스미스’부터 구글의 자율주행 자동차와 아마존의 택배관리 시스템 ‘키바’, 그리고 호텔부터 요양원까지 여러 곳에서 다양한 형태로 활용되고 있는 일본의 각종 도우미 로봇 등 실생활에 밀접한 영역까지 인공지능이 진출했거나 진출을 목표로 활발하게 연구되고 있습니다. 유럽에서는 '인더스트리4.0'이라는 슬로건 아래 기존의 제조업에 모바일 기술과 인공지능 기술을 적극적으로 결합시키는 전략을 펼치고 있습니다.



<최근에 출시되었거나 수 년 내 상용화 예정인 인공지능 시스템들
/ 출처 : 각 그림의 하단부에 표시>

그러나 이렇게 승승장구하고 있는 인공지능이 만들어갈 미래의 모습이 꼭 밝은 것만은 아닙니다. 인공지능이 활발하게 활용되는 분야일수록 그 이면에는 그만큼 줄어든 사람들의 일자리가 쓸쓸하게 남아있습니다. 그동안은 비교적 단순한 판단능력을 요구하는 작업에만 인공지능이 사용되었지만, 현재 연구중인 인공지능 관련 기술들이 하나둘씩 상용화되면 지금과 비교할 수 없을 정도로 많은 분야에서 인공지능이 사람의 일을 대신하게 될 것입니다.



<미국의 제조업 일자리수와 세계 산업로봇 규모의 변화 / 출처 : IBTIMES>


이대로 가면 앞으로는 인공지능 시스템을 소유하거나 제어할 수 있는 능력이 있는 사람들 - 자본가와 인공지능 전문가들이 사회의 상위계층으로 군림하고 그렇지 못한 사람들은 하위계층에서 살아남기 위해 인공지능과 경쟁하는 암울한 영화같은 일이 벌어지게 될 것입니다.(가디언지의 관련기사) 그리고 사실 - 이미 그러한 일들은 곳곳에서 진행중입니다. 인공지능은 인간 고유의 영역이었던 지식 기반 산업 분야와 서비스업에서 지속적으로 입지를 넓혀가고 있습니다. 최근에는 예술과 같은 창의적인 분야까지도 인공지능이 도전하고 있습니다. 도입부에서 소개한 바둑두는 인공지능 시스템 '알파고' 역시, 일자리라는 관점에서 본다면 사람인 바둑기사가 앉아 있을 자리 하나를 차지하고 들어온 것입니다. 이제 인공지능간의 바둑이나 스포츠 대결을 보게 될 날이 올지도 모르겠습니다. (물론 이 경기를 볼 수 있는 사람은 인공지능에게 생존권을 빼앗기지 않은 사람이겠죠!)
그렇다면 인공지능은 이렇게 암울한 미래만을 만들게 될까요? 꼭 그렇지만은 않을 것입니다. 그동안의 모든 신기술들이 그랬듯이, 인공지능 역시 열심히 익히고 대응하면 오히려 세상을 새롭게 개척할 수 있는 기회로 활용할 수 있습니다. 인공지능이 만들어낼 변화에 어떻게 적응하고 대처하느냐에 따라서 다가올 미래의 온도는 다르게 결정될 것입니다.
인공지능을 만들고 제어하기 위해서 우리는 무엇을 알아야 할까요? 좀 더 쉬운 이해를 위해 몇 년 후 인공지능 바둑 대회에 출전할 가상의 인공지능 로봇을 그려보며 관련 기술에 대해 알아보겠습니다.


인공지능의 주요 연구 분야


<인체 구조로 본 인공지능 주요 연구 분야 / 출처 : 직접 작성>

Machine learning(기계 학습) : 인공지능의 뇌

우리가 그동안 접해온 인공지능은 정해진 패턴에 의해서만 사고하는 수준이었습니다. 이 고정적인 패턴은 자체적으로 바뀌거나 향상될 수 있는 대상이 아니었습니다. 그러나 오늘날의 인공지능은 곳곳에 산재되어 있는 다양한 데이터를 바탕으로 자체 학습을 거쳐 거시적인 그림을 그려내고 그 안에서 최적의 선택을 하는 것에 중점을 맞춰 개발되고 있습니다. 그리고 이 학습으로 향상된 지능은 다음번 판단을 할 때 그대로 활용됩니다. 이렇게 인공지능이 데이터를 바탕으로 자체 학습을 하는 것을 machine learning이라 하는데, 최근에는 빅데이터 기술이 접목되면서 한걸음 더 나아간 Deep learning으로 진화하기에 이르렀습니다. 서두에 소개한 알파고 역시 이 Deep learning기술을 잘 활용한 인공지능의 예입니다.


<생물학적 뉴런과 이를 바탕으로 구성된 인공신경망 / 출처 : 직접 작성>


machine learning을 구현하기 위해서 가장 많이 사용되는 방식은 실제 우리 뇌의 구조를 바탕으로 만든 인공신경망입니다. 입력신호로 들어온 데이터는 가중치에 따른 변조를 거쳐 출력신호로 전달되는데, 이 과정에서 가중치 값이 조정되며 최적화되는 과정이 바로 인공지능의 학습이 됩니다. 알파고의 경우에는 특이하게 신경망을 ‘정책망(policy network)’과 ‘가치망(value network)’ 으로 나누어 구축한 것으로 잘 알려져 있습니다. 정책망은 과거의 기보를 학습시킨 다음 실제 대국에서 전략을 세우는데 활용하는 네크워크로, 그동안 무려 3000만 수 이상의 기보를 학습했다고 합니다. 가치망은 알파고가 자기자신과의 대국을 10만 번 이상 펼치고 여기서 승리했던 수들의 가중치를 높여서 만든 네트워크입니다. 이렇게 신경망은 목적에 따라서 다양한 방식으로 활용할 수 있으며, 인공지능의 핵심이 되는 부분이라 할 수 있습니다.

Computer vision(컴퓨터 시야) : 인공지능의 눈
- 인공지능 시스템이 독자적으로 활동하기 위해서는 학습과 판단능력 뿐만이 아니라 주변의 여러 정보를 정확하게 인지할 수 있는 능력을 갖추어야 합니다. 이 인지능력 중 시각적 인지를 연구하는 분야가 바로 computer vision입니다.

Speech recoginition(음성 인식) : 인공지능의 귀와 입
- 인공지능의 인지능력 중 청각적 인지와 표현을 연구하는 분야입니다.

Robotics(로봇공학) : 인공지능의 몸
- 실제 물리적인 행동으로 나타나는 부분으로, 로봇팔부터 보행 하체, 에너지 공급 장치 등이 연구 대상입니다. 그동안 로봇 관련 연구에서 주가 되었던 분야입니다.

 

마치며

“인류는 열정으로 가득차 있지.
의학, 법률, 경제, 기술 같은 것들은 삶을 유지하는데 필요해.
하지만 시와 아름다움, 낭만, 사랑은 삶의 목적인 거야”

- John Keating in Dead Poets Society

인공지능의 발전과 도전이 계속되며 인간의 지성이 위협을 받는 현실속에서 많은 사람들이 인간의 존엄성에 대한 걱정과 우려를 하고 있습니다. 그렇지만 사람이 사람일 수 있는 가장 큰 이유는 다른 존재보다 뛰어난 지적능력 때문이 아니라 추구하는 가치관이 고귀하였기 때문이었다고 생각합니다. 인공지능이 더욱 발전할수록 우리가 할 지적 노동의 많은 부분을 그들이 대체하거나 도와주게 될 것입니다. 그들이 만들어준 여유 속에서 우리는 우리가 추구하는 궁극적인 가치 - 정의, 평화, 아름다움, 사랑 - 에 더 가깝게 다가서는 삶을 영위할 수 있을 것입니다. 머지않은 미래에 인공지능과 함께 정의에 관해 논할 수 있는 날을 기다려봅니다.

 

참고문헌
인공지능 개론 / 마이클 네그네빗스키(Michael Negnevitsky) / 김용혁 역 / 2nd Ed. / ADDISON WESLEY / 한빛미디어
인공지능 바둑 / 이병두 지음 / 북스홀릭
컴퓨터 비전 / 오일석 지음 / 한빛 아카데미
음성처리와 자연언어 개론 / John Coleman 지음 / 최운호 옮김 / 한국문화사


참고사이트

구글의 자율주행 자동차 https://www.google.com/selfdrivingcar
아마존 로보틱스 : https://www.amazonrobotics.com
Hatteland(노르웨이 회사) 오토스토어 http://autostoresystem.com
영국의 요리하는 로봇 ‘몰리’ http://www.moley.com
일본의 로봇호텔 ‘헨나’ http://www.h-n-h.jp




작성자 : 대전지사 Development팀
서승원 주임개발자

Posted by 人Co

2016/03/21 09:14 2016/03/21 09:14
Response
No Trackback , No Comment
RSS :
https://www.insilicogen.com/blog/rss/response/202

Jupyter는 웹환경에서 실행코드와 문서를 함께 작성하면서 실행 결과 및 가시화 결과 (차트 등)을 확인할 수 있는 웹 어플리케이션 프로그래밍 도구입니다. 동작하는 코드와 그 결과를 문서와 함께 직접 만들고, 또 변경하며 관리할 수 있다는 장점때문에 데이터 분석 실무에 폭넓게 사용되고 있습니다. 당사 R&D Center와 컨설팅팀에서도 일부 생물정보 분석을 Jupyter Notebook으로 수행하고, 그 결과를 고객에게 제공하고, 직접 시연하면서 좋은 반응을 얻고 있습니다.

pandas는 효과적인 데이터분석을 지원하는 python 모듈입니다. R에서 자주 사용되는 DataFrame, 즉 엑셀 쉬트 같은 2차원 테이블 데이터를 파이썬에서도 좀더 파이썬스럽게 사용할 수 있습니다. 이전에는 데이터 분석한다 하면, R로만 해야하는 경우가 많았었는데, pandas가 등장한 뒤로, 파이썬에서도 손쉽게 DataFrame 데이터를 다루고, 프로그래밍할 수 있게 되었습니다. 데이터 분석분야에 R이 더 좋으냐, Python이 더 좋으냐 논란이 있기도 했습니다. (R vs Python for Data Science: The Winner is …) 각각 장단점이 있습니다만, 객체지향적이고, 성능 더 좋고, 응용프로그램을 만들기 좋다는 점 때문에 점점 Python을 활용한 데이터 분석이 점점 더 부각되고 있습니다. 특히, Jupyter 환경에서 pandas로 데이터 분석하고, 동작코드를 잘 문서화해두면, 기존의 어떤 데이터 분석 환경보다 더 나은 생산성을 기대할 수 있습니다.

본 블로그 포스팅을 통해, Jupyter와 pandas의 데이터 분석 사례를 쉬운 예제와 함께 소개해보고자 합니다. (Python, Jupyter, pandas는 모두 잘 설치되어 있다고 가정합니다. 설치 방법은 별도의 문서를 확인하세요)

이번에 소개할 데이터 분석 예제는 다음과 같은 성적표입니다.

위 데이터를 갖고, 1반과 2반은 통계적으로 유의한 성적차이가 있는지, 유의한 차이를 나타내는 과목은 어떤 과목인지, 성적 패턴이 비슷한 학생은 누구인지 등등, 저 데이터를 이용해서 알 수 있는 정보들이 많습니다. 이를 Jupyter로 분석해 보겠습니다.

다음 링크를 클릭하면, Jupyter 문서를 볼 수 있습니다. --> 성적 데이터 분석 사례

Jupyter의 장점이 분석용 프로그램 코드가 함께 문서화된다는 것입니다. 링크의 설명을 참고하세요, (링크의 메뉴에 보면 json 파일 다운로드가 있습니다. json 파일과 아래 성적표.xlsx 파일을 하나의 디렉토리에 두고 Jupyter를 실행하시면, 본 문서 겸 프로그램을 직접 구동할 수 있습니다.)

.

잘 보셨나요? 이 예제는 간단한 성적표이지만, 실제 실무의 많은 데이터들이 이것과 비슷합니다. 생물정보 분석한다면 가로는 유전자 혹은 유전좌위, 세로는 샘플인 데이터를 많이 다루겠지요. 핵심 개념과 활용 방법은 비슷합니다. 모쪼록 이 자료가 데이터 분석 실무를 수행하는데 도움이 되길 바랍니다. 다음 기회에 또 다른 유용한 통계 분석기능을 소개하겠습니다.



작성자 : R&D센터 김형용 책임 개발자

Posted by 人Co

2016/01/22 14:53 2016/01/22 14:53
Response
No Trackback , No Comment
RSS :
https://www.insilicogen.com/blog/rss/response/197

집단지성의 힘과 위키

1989년, 알래스카 해상에서 5,300 갤런의 원유를 싣고 가던 유조선이 좌초되었습니다. 유출된 원유의 양은 1,100만 갤런으로 당시까지 발생한 해양 원유 유출 사고 중 사상 최악으로 기록되고 있습니다(참고: 엑슨발데스 원유 유출 사고, 현재 최악의 사고는 딥워터 허라이즌 기름 유출 사고). 이 사고로 일대에 서식하던 바다새, 해달, 수달 등 해양생물이 집단 폐사하였고, 현재에도 그 영향으로 그 지역의 각종 해양 동물 개체 수가 계속해서 감소 하고 있다는 보고가 있습니다.

당시 하루 1만명이 넘는 사람들이 방제에 동원되었고 1년동안 20억 달러의 천문학적인 비용을 들여 사고수습에 힘썼습니다. 하지만 유출된 기름은 젤리상태로 물과 엉겨 붙어 분리가 어려웠고 심각한 환경오염을 일으켰습니다. 결국 이 문제는 17년이나 지속되었습니다.


(좌) : 원유유출으로 피해를 입은 동물들 / (우) : 원유유출 범위 (출처 : 구글)

이를 고민하던 국제기름 유출 연구소(OSRI)는 '이노센티브(InnoCentive)' 라는 한 기업에 이 문제를 의뢰하게 됩니다. 이노센티브는 전 세계의 수많은 사람들에게 문제를 공유하고 해결책을 찾아주는 '문제의 집단 해결' 서비스를 제공하는 전문기업입니다. 문제를 올리자 전세계의 수많은 사람들의 아이디어가 올라왔고, 마침내 단 3개월 만에 한 시멘트회사 엔지니어의 아이디어로 17년간 해결하지 못했던 문제를 해결하게 됩니다.

대중은 전문가보다 똑똑하다.

'군중의 지혜(wisdom of crowd)'의 저자 제임스 서로위키(James Surowiecki)는 집단은 지능적일 수 있고, 심지어 그 집단 안의 가장 똑똑한 사람보다도 더 똑똑할 수 있다고 말합니다. 실제로 그는 유리병 안의 구슬 수를 예측전문가와 다수의 비전문자에게 예측하도록 했는데 비전문자 여러명의 결과가 실제 구슬의 수에 가까웠다고 합니다.

우리는 이미 페이스북과 트위터 등을 통해 개개인이 모여서 만들어내는 대중의 강력한 힘을 느끼고 있습니다. 문제가 생겼을 때 많은 사람들이 도서관이나 전문가를 찾는 대신 인터넷 커뮤니티에 질문을 올리고 그 답을 찾습니다. 개인의 힘은 미미하지만 개인이 모이면 전문가보다 더 큰 힘을 발휘하는 것, 이것이 바로 집단지성 입니다.

우리 주변에서 집단지성을 이용한 사례들을 쉽게 찾아 볼 수 있습니다. 4천만명이상의 사용자를 보유하고는 네이버의 지식교류서비스 '지식iN' 또한 그 중 하나로, 무엇이든 궁금한것을 올리면 이내 여러 사람들의 답변이 달리는 것을 볼 수 있습니다. 소프트웨어/하드웨어의 소스코드를 공개하고 누구나 수정할 수 있도록 한 '오픈소스' 또한 집단지성을 이용한 예 입니다.

위키(Wiki), 그리고 人Co 인들이 느끼는 집단지성의 힘

집단지성의 힘을 잘 활용한 예 중 하나는 위키(Wiki)시스템이라고 할 수 있습니다. 위키는 웹브라우저를 이용해서 사용자 누구나 내용을 쉽게 추가하고 수정할 수 있는 웹사이트를 말 합니다. 위키는 한사람의 의해 만들어지는 문서가 아니기 때문에 많은 사용자의 지속적인 협력이 있어야 더욱더 휼륭해지고 풍성한 웹 사이트가 됩니다. 전 세계의 많은 사람들이 이용하고 있는 위키피디아(http://wikipedia.org)가 대표적인 예라고 할 수 있습니다.

사용자 삽입 이미지
위키를 창안한 워드 커닝엄 (출처 : 위키피디아)

(주)인실리코젠에서도 수 년간 사내 인트라넷으로 위키시스템을 사용하고 있습니다. 人Co인들 모두 개인이 모여 만들어 내는 큰 힘을 직접적으로 느끼고 있습니다. 업무 중 일어나는 모든 일들이 사내위키를 통해 기록되고 공유되며, 누구든 자유롭게 자신의 의견을 추가 합니다. 이렇게 만들어진 인실리코젠의 위키는 전문가보다 더 전문적인, 그리고 실질적인, 생생한 정보들이 축적되어있고 지금도 만들어지고 있습니다.

전 세계 수많은 사용자들의 참여로 위키피디아가 매우 휼륭한 방향으로 발전할 수 있었지만, 특정분야의 전문지식을 얻고자하는 사람들에게는 여전히 위키피디아에서 얻을 수 있는 정보는 한계가 있습니다. 예를 들어, Biopython의 역사와 주요 특징에 대한 정보는 찾을 수 있으나, 좀 더 세부적으로 Biopython의 SeqIO 모듈이 제공하는 기능과 사용법에 대한 내용들은 추가로 다른 책이나 웹 사이트에서 찾아봐야 합니다. 더군다나 영어와 한국어 간 위키 자료의 양 차이도 매우 커 대부분의 문서는 영어로 되어있습니다. 이러한 한계를 극복하고자 만들어진 전문분야 위키 중 하나로 생물정보분야의 人CoDom (인코덤, http://incodom.kr)이 있습니다.



마치며

한편에서는 집단지성의 한계와 신뢰성에 대해 지적하고 있습니다. 구성원의 의지와 참여도가 낮으면 당연히 결과물의 질이 낮아질것이고, 일부 사용자의 악의적인 활동을 통제하는 것 또한 쉽지 않습니다. 근본적으로 참여자들의 지식이 편향되어 있다거나 다른 사람의 의견에 쉽게 동조하는 경향이 있다면 이 또한 신뢰할 수 없는 결과물을 만들어내는 요인이 됩니다. 실제로 미국 국립과학원 회보(PNAS)에 실렷던 한 연구에서는 질문을 할때, 다른 이의 대답을 알려주었을 경우가 그렇지 않을 경우에 비해 대답의 다양성이 줄었다는 보고가 있습니다.

그럼에도 불구하고 집단지성을 무시할 수 없는 것은 기술의 발달로 점점 더 쉽게 자신의 의견을 공유 할 수 있는 환경이 되고있기 때문입니다. 대중이 만들어 내는 집단지성의 힘은 그 누구도 부인 할 수 없습니다. 그러므로 집단지성의 한계와 특징를 알고 올바르게 활용한다면 누구나 전문가 안부러운 '지성'을 가질 수 있을 것입니다.



작성자 : 데이터사이언스센터 솔루션그룹
김지예 개발자

Posted by 人Co

2015/11/30 09:29 2015/11/30 09:29
Response
No Trackback , No Comment
RSS :
https://www.insilicogen.com/blog/rss/response/194

Introduction
'웹의 힘은 그것의 보편성에 있다. 장애에 구애없이 모든 사람이 접근할 수 있는 것이 필수적인 요소이다.'

(The power of the Web is in its universality, Access by everyone regardless of disability is an essential aspect.)
팀 버너스 리 경 - 웹의 창시자 (Tim Berners - Lee , W3C Director and inventor of the World Wide Web)

웹 접근성은 2008년 '장애인차별금지 및 권리구제 등에 관한 법률(이하 장애인차별금지법)'이 제정된 이후로 국내에서도 그 법률적 근거가 마련되었고, 2013년에 이르러 민간 기업까지 그 적용 범위가 확대되었습니다. 한국정보화진흥원 웹 접근성 연구소에서 제시하는 웹 접근성 정의는 다음과 같습니다.


“어떠한 사용자(장애인, 노인 등), 어떠한 기술환경에서도 사용자가 전문적인 능력 없이 웹 사이트에서 제공하는 모든 정보에 접근할 수 있도록 보장하는 것”

위 정의에 따르면 웹 접근성은 특정 대상에 한정되지 않고 모든 사용자를 대상으로 하며 모두를 유익하게 하는데 그 목적이 있습니다.

웹 접근성에 대한 관심과 필요성에 대한 인식이 커지고 있지만 그 정의와 범위가 모호하고 방대해 실무자에게는 아직까지 와 닿지 않거나 어렵게 느껴지는 것이 현실입니다. 이 에 웹 콘텐츠 접근성 지침을 위한 국가 표준으로 KWCAG(Korea Web Content Accessibility Guidelines, 한국형 웹 콘텐츠 접근성 지침) 2.1이 마련되었고 장애인이 비장애인과 동등하게 웹 콘텐츠에 접근할 수 있도록 웹 콘텐츠를 제작하는 지침 및 방법에 관하여 기술하고 있습니다. KWCAG 2.1은 원칙(Principle), 지침(Guideline), 검사항목(Requirement)의 3 단계로 구성되어있고 각 각의 내용은 웹 접근성 제고를 위한 4가지 원칙과 각 원칙을 준수하기 위한 13개 지침 및 해당 지침의 준수 여부를 확인하기 위해 22개의 검사항목으로 구성되어 있습니다.

웹 접근성에 대한 실무적 접근을 돕고자 웹 콘텐츠의 접근성 준수여부를 평가해 볼 수 있는 도구들을 소개하려 합니다.


K-WAH 4.0

K-WAH 4.0은 한국형 웹 콘텐츠 접근성 지침 2.0에 따라 웹사이트(웹페이지)가 접근성 지침의 6개 세부지침을 준수하는지를 자동 점검하도록 지원해 주는 소프트웨어입니다.




다운로드 및 설치

1. 웹접근성 연구소 접속
2. K-WAH 4.0 프로그램 내려받기


3. 파일을 다운받고 원하는 위치에 압축을 푼 후 파일 실행
4. 사용권계약에 동의하고 경로를 설정한 후 설치
5. 설치를 완료하면 바탕화면에 'K-WAH 4.0 바로가기' 아이콘 생성

진단가능한 검사항목

  • 01. 대체텍스트 제공
  • 13. 제목제공
  • 15. 기본언어 명시
  • 16. 사용자 요구에 따른 새창 열기
  • 19. 레이블 제공
  • 21. 마크업 오류 방지


OpenWAX

Firefox 부가기능으로 제공되고 있는 소프트웨어로 개별 페이지별로 웹 접근성 준수여부를 확인할 수 있습니다.



* 위 이미지는 2015년 당사에서 개발 및 웹접근성 인증마크를 획득한 바 있는 의과학지식센터 웹사이트를 테스트하여 캡쳐한 이미지입니다.

다운로드 및 설치

1. 파이어폭스 부가기능 으로 이동



2. '+Firefox에 추가' 버튼 클릭
3. 소프트웨어 설치 창에 [설치] 버튼 클릭
4. Firefox 다시 시작
5. Firefox 주소창 우측에 사다리모양 아이콘 생성


사용방법

1. OpenWAX 아이콘(사다리모양) 클릭
2. 사이드바에 OpenWAX가 실행되면 [현재 페이지 검사] 버튼 클릭
3. 검사항목별 검사결과 확인

진단가능한 검사항목

  • 01. 대체텍스트 제공
  • 03. 색에 무관한 콘텐츠 인식
  • 05. 텍스트 콘텐츠의 명도 대비
  • 12. 건너뛰기 링크
  • 13. 제목제공
  • 14. 적절한 링크 텍스트
  • 15. 기본언어 명시
  • 16. 사용자 요구에 따른 새창 열기
  • 18. 표의 구성 - 19. 레이블 제공 - 21. 마크업 오류 방지


Colour Contrast Analyser

전경색과 배경색의 명도 대비를 확인할 수 있습니다.

다운로드 및 설치

1. 다운로드

2. 다운로드 받은 압축 파일을 압축 해제하여 압축 해제된 폴더를 적당한 위치로 이동
3. 폴더 내의 Colour_Contrast_Analyser.exe 파일을 실행



작성자 : 데이터사이언스센터 프론트앤드개발자
김근래 주임

Posted by 人Co

2015/09/17 16:21 2015/09/17 16:21
Response
No Trackback , No Comment
RSS :
https://www.insilicogen.com/blog/rss/response/190

소프트웨어 프로젝트를 성공적으로 수행하기 위해선 개발에 참여하는 이해관계자들간에 사용하는 기술과 물적/인적 자원, 프로세스의 공유가 절대적으로 필요하다는 것은 소프트웨어 개발을 해본 사람이라면 누구나 공감할 것이다. 하지만 이러한 개발 환경과 관련된 문제들은 이해의 범위와 자원의 한계로 많은 한계에 부딪히고 실직적인 프로젝트 실패라는 고배를 마셔본 경험을 개발자라면 능히 한번쯤은 해 보았을 것이다.

인력이나 금전적 문제같은 물리적 자원의 부족으로 불안정한 상태의 프로젝트를 무리해서 진행하는 것보다는 안정화 단계를 거치는 것이 소프트웨어 품질 개선을 위한 최선의 방향이겠지만, 어디서부터 잘못 되었는지 찾아 내는 것 또한 그리 만만한 작업은 아닐 것이다. 이러한 문제들로 인한 자원낭비를 줄이기 위해 다양한 방법들이 개발자들간에 거론되고 다양한 시도가 실무에서 이루어지면서 지금은 소프트웨어 품질개선을 위한 솔루션들이 제품화되어 출시되고 있을 정도로 품질관리 영역 또한 소프트웨어 개발의 중요한 분야로 자리잡은 상태이다.

소프트웨어 공학에서 제안하는 수많은 개념 중에 다양화, 대형화 되고 있는 소프트웨어 프로젝트의 특성 때문에 고전적으로 빌드단계에서 품질관리가 이루어지던 방식에서 생산성과 안정성 확보를 주기적인 빌드를 통해 고품질의 소프트웨어 개발을 보장하고 통합운영할 수 있는 개념도 나오게 되었다.

세상에 변하지 않는 것은 없다는 불교의 진리처럼 이용자의 요구사항도 변하고, 소프트웨어의 기능도 변하기 때문에 소프트웨어의 지속적인 변화, 즉 업그레이드는 소프트웨어 분야에서 자연의 순리라 할 수 있다. 이런 과정을 보다 효율적으로 수행하기 위해 나온 것이 지속적 통합(Continuous Integration)으로 소프트웨어 개발 생명주기에 걸쳐서 코드 품질 보증에 대한 초점을 맞춘 방법이다.

소프트웨어의 지속적 통합은 소프트웨어의 품질 향상이란 근본적인 목적뿐 아니라 최소한의 백업 및 공유를 제공할 수 있기 때문에 프로젝트를 수행하는 데 꽤나 유용하리라 본다.

지속적 통합을 위해 기본적으로 충족되어야 할 것이 몇 가지 있는데

  • CVS, Subversion, Git와 같은 소스코드를 공유하고 이력을 관리할 수 있는 형상관리저장소
  • 지금 내가 프로그램이 아닌 버그를 만든 것은 아닌지를 확인할 수 있는 단위 테스트 환경
  • Ant 혹은 Maven 같은 빌드 자동화(Build Automation) 도구들

이 제공되어야 한다. 특히 CI와 빌드 자동화를 위한 프로그램은 허드슨(http://www.hudson-ci.org/)과 젠킨스(http://jenkins-ci.org)같은 프로그램들로 이미 유포되어 사용되고 있으며 역사가 조금 더 오래된 Hudson 의 경우는 몇몇 프로젝트 그룹에서 사용되어 괜찮은 평가를 받고 있다.

지속적 통합을 처음 접하고 어디서부터 시작하면 좋을지를 고민중인 개발자라면 Hudson 을 설치하고 Hudson 환경에 맞게 개발환경을 구축한다면, 제법 그럴듯한 지속적 통합 환경에서 평안하고 희망적인 개발을 기대할 수 있을 것이다.


허드슨 특징 및 다운로드

허드슨의 주요특징을 간략하게 설명하면 기본적으로 CI서버 기능을 제공하면서 플러그인 기반으로 동작하기 때문에 설치된 플러그인의 종류에 따라 다양한 분석을 수행할 수 있다. 자바로 개발되었기 때문에 JDK 6.0 이상이 설치된 환경에서 설치가 쉽고, 웹을 통해 서비스를 이용할 수 있다.
JDK 6.0 이상과 Apache Tomcat 5 이상이 설치되었음을 가정한다.

1. 우선 허드슨 홈페이지(http://www.hudson-ci.org/) 메인 페이지 좌측 하단을 보면 최신버전의 허드슨을 다운받을 수 있다. 웹 기반 서비스가 제공되기 때문에 Servlet Container 에서 서비스 될 수 있는 WAR(Web ARchive) 파일로 제공된다.



2. 시스템에 따로 설치를 할 필요 없이 다운받은 파일(hudson-3.1.1.war) 을 직접 실행하거나 톰캣 서버를 이용해 서비스를 실행할 수 있다. hudson 자체적으로 동작할 수 있도록 Jetty 서버를 탑재하고 있기 때문에 별도의 웹 어플리케이션 서버를 설치하지 않아도 실행은 가능하다.
- 허드슨에 내장된 Jetty 서버는 다음과 같이 실행시킨다.
> java -jar hudson-3.1.1.war 톰캣 서버를 이용하는 경우는 톰캣이 설치된 폴더의 webapps 폴더에 war파일을 복사해 붙혀 넣으면 된다.



3. Tomcat 서버를 실행하면 자동으로 war파일에 해당하는 컨텍스트 폴더가 생기고 웹 브라우저를 열어 주소창에 "http://localhost:8080/hudson-3.1.1" 를 입력하면 hudson 서비스 페이지로 이동하게 된다. hudson에 내장된 Jetty 서버를 이용하는 경우는 주소창에 "http://localhost:8080/"를 입력하면 톰캣에서의 결과를 확인할 수 있다. 처음 설치해 실행하는 경우엔 유용한 플러그인 선택 화면을 통해 필요한 플러그인 설치를 수행할 수 있다.




백업 및 복구 방법


허드슨의 모든 설정과 프로젝트 소스 코드는 허드슨 홈 디렉토리에 저장되기 때문에 홈 디렉토리를 복사하고 붙여넣는 것만으로 백업과 복구 작업이 가능하다. 허드슨 홈 디렉토리 이름은 .hudson 으로 되어 있으며, 윈도우즈의 경우는 "C:/uesrs/계정폴더/.hudson" 처럼 위치한다.





보안 설정

허드슨 메인 화면 왼쪽 메인메뉴의 "Hudson 관리"를 클릭하면 관리화면을 통해 플러그인을 관리하거나 시스템 로그를 확인할 수 있다. 관리화면에서 "Configure Security" 링크를 클릭하면 허드슨 보안기능, JDK/Ant/Maven 설치경로 및 이메일 통지 등을 설정할 수 있는 화면으로 이동하게 된다.




"Enable security" 체크박스를 선택하면 설정 폼이 활성화되어 설정을 계속 진행할 수 있다. Tomcat 설치 폴더의 conf 폴더의 tomcat-user.xml 파일에 설정되어 있는 Role을 이용한 그룹별 권한 설정 방법은 다음과 같다.

(1) 우선 톰캣서버의 tocmat-user.xml 에 role을 정의한다.



(2) 허드슨 보안관리 페이지의 Security Realm 에서 Delegate to servlet container 를 선택한다.



(3) Authorization 영역에서는 Matrix-based security 를 선택한다. Anonymous 그룹에는 Overall 의 read 권한만을 부여하고, 하단 User/group to add 에 추가할 tomcat-user.xml 에 등록된 그룹 이름을 입력한 후 "Add" 버튼을 눌러 추가한 후 권한 체크한 후 저장하게 되면 등록된 사용자 계정으로 로그인 할 수 있다.



(4) 시스템 설정
Manage Hudson 페이지의 Configure System 을 클릭하면 JDK, Maven, Subversion 등의 경로설정 및 이메일 통지 설정을 할 수 있다.
1) JDK 경로 설정
JDK 영역의 Add JDK 버튼을 클릭하면 JDK를 추가할 수 있는 입력폼이 나온다. 이미 설치되어 있는 JDK를 이용하기 위해선 Install automatically 체크박스 선택을 해제하고 이름과 JAVA_HOME 경로를 입력한 후 저장한다.





작업 등록

허드슨은 기본적으로 자바뿐만 아니라 C/C++ 의 프로젝트 빌드할 수 있다. 기타 다른 언어들도 지원하지만 그러기 위해선 프로젝트 유형에 맞는 플러그인을 설치해야 한다.

1. 허드슨 페이지 왼쪽 메인 메뉴에서 "새 작업"을 클릭하면 아래와 같이 간단한 작업으로 프로젝트를 등록할 수 있다. 4가지 항목 중에 "Build a free-style software job" 이 무난하기 때문에 이것을 선택해 프로젝트를 등록하도록 한다.




2. save 버튼을 눌러 작업을 등록하면 작업에 대한 보안설정 화면으로 이동하게 된다. 다른 선택사항들은 그대로 두고 Source Code Management 영역의 Subversion 설정을 보면 Repository URL 에 SVN 주소를 넣고 Local module directory 에 동기화할 폴더 경로를 입력한다. 기본적으로 동기화 폴더는 허드슨 홈 디렉토리(.hudson)에 하게 된다. 다른 설정들은 기본으로 한 후 저장한다. 플러그인이 설치 된 경우 CVS, Git 정보들에 대한 설정도 가능하다.




3. Build Triggers 영역을 보면 언제 프로젝트 빌드 작업을 수행할 것인지를 선택할 수 있게 되어 있다.
- Build after other jobs are built : 다른 작업들의 빌드 작업이 끝난 후에 빌드 수행
- Trigger builds remotely : HTTP를 통해 원격으로 빌드수행.
- Poll SCM : 형상관리 서버가 변경되었을 때 빌드 수행
- Build periodically : 설정한 일정에 따라 반복적으로 빌드 수행



4. Build 영역에서 빌드 설정을 할 수 있다. 콤보박스를 누르면 4가지 선택항목이 있다. 프로젝트 환경에 맞게 선택을 하면 된다.
- Invoke Maven 2 (Legacy) : Maven 형식의 자바 프로젝트를 빌드한다.
- Execute shell : 리눅스 플랫폼에서 서비스되는 경우 셸 스크립트를 실행할 수 있다.
- Execute Windows batch command : 윈도우 플랫폼에서 서비스되는 경우 사용된다.
- Invoke Ant : Ant를 이용한 자바 프로젝트를 빌드한다.



5. Post build Actions 영역에서 빌드가 완료된 후 수행할 작업들을 선택할 수 있다.
- Publish JUnit test result report : Junit 수행 테스트 결과를 게시한다.
- Archive the artifacts : 빌드하고 나서 target 디렉토리의 모든 Jar 파일을 아카이브 파일로 제공한다.
- Record fingerprints of files to track usage : 현재 프로젝트가 참조되는 프로젝트의 위치를 표시한다.
- Build other jobs : 다른 빌드 작업을 수행



모든 설정이 완료된 후 save 버튼을 눌러 저장하면 빌드작업 설정은 끝이난다. 생성된 작업 화면을 통해 프로젝트 빌드 이력관리, 상태정보 등을 확인하면서 누가 버그를 만들고 있는지 확인할 수 있다.


작성자 : 데이터사이언스센터 선임개발자 양성진

Posted by 人Co

2014/03/11 17:11 2014/03/11 17:11
Response
No Trackback , No Comment
RSS :
https://www.insilicogen.com/blog/rss/response/149

장고(Django)의 CSRF 웹 취약점 대응

웹(WWW)이 대중화되고 많은 프로그램들이 웹으로 넘어오면서 웹 보안의 중요성은 날이 갈수록 강조되고 있습니다. 웹은 타 인터넷 네트워크 프로토콜에 비해 상대적으로 안전하다고 인식되기 때문에 일반적으로 서비스 포트(80)가 열려있으며 다양한 웹 어플리케이션이 동작하고 서비스됩니다. 그러다보니 웹을 통한 네트워크 취약점 또한 많이 연구되고 있으며, 악의적인 목적을 가진 임의의 공격자 역시 예전의 다양한 네트워크 프로토콜에 관련된 것보다는 직접 웹 어플리케이션의 취약점을 노리는 경우가 많습니다.

따라서, 웹어플리케이션을 구현할 때는 보안에 보다 더 주의해야 합니다. 국제 웹 보안 표준기구인 OWASP에서는 주기적으로 보안 10대 취약점을 발표하는데, 이 내용을 기준으로 자신의 웹 어플리케이션에 취약점이 없는가 점검하는 일은 매우 중요합니다.

OWASP 2007 Top 10 에 의하면 다양한 취약점들이 보고되고 있는데(조만간 2010년 Top 10이 발표될 듯 합니다), 그 가운데 매우 중요한 보안요소임에도 불구하고 많은 부분 신경쓰고 있지 못하는 취약점이 바로 CSRF 취약점입니다.

CSRF(Cross-site Request Forgery, 크로스사이트 요청 위조) 공격은 원클릭 공격, 사이드 재킹, 세션 라이딩 등으로도 알려져 있고, 약어로는 XSRF로도 알려져 있습니다. 이 공격은 사이트가 신뢰하는 사용자를 통해 공격자가 원하는 명령을 사이트로 전송하는 기법을 사용합니다. 공격이 사용자를 통해 이루어지기 때문에 공격자의 IP는 추적 불가능한 특성이 있습니다.

은행사이트를 예를 들자면, 공격자 A는 피해자 B가 접속하는 은행 사이트에 조작된 이미지 태그를 게시판에 남깁니다.
<img src="http://bank.example.com/withdraw?account=B&amount=100000&for=A" />
피해자 B 가 은행사이트에 접속하고 로그인하면 세션 정보가 남아있는 상태이고 이때 공격자 A가 게시판에 남겨놓은 글을 B 가 읽게 되면 해당 링크가 요청되면서 공격이 실행됩니다. 원래는 이미지를 불러오기 위해 지정된 이미지 링크롤 GET 메쏘드로 요청하게 되는데, 피해자 B가 인증되어 있는 상태인점을 이용하여 이렇게 우회공격을 할 수 있게 된 것입니다. 특히 대부분의 게시판들이 자바스크립트는 막아놓지만, 이미지 포스팅은 막지 않는 것도 공격에 유리한 상황을 만들어줍니다.

최근에 발생했던 옥션의 1800만명 개인 정보 유출 사고는 CSRF 공격을 당한 것으로 밝혀졌다고 합니다. 중국 해커는 직접 서버를 공격하는 대신, 옥션 운영진을 대상으로 악성 코드를 첨부한 메일을 대량으로 유포했습니다. 운영자가 메일을 확인한 순간 ID를 얻을 수 있었고, 해커는 이 ID를 이용하여 옥션 서버에 로그인할 수 있었다고 합니다. (용어사전 CSRF의 내용을 일부 인용했습니다.)

이러한 취약점을 막는 가장 기본적인 방법은 서버의 상태를 변경하는 요청에 대해 GET 을 쓰지 않는 것입니다. 하지만 만일의 경우 공격자가 스크립트를 이용하여 POST로 보낼 수 도 있으므로 POST 메쏘드인 경우에도 대비를 해야합니다. 따라서 가장 일반적인 해결 방법은,
 1. 서버의 상태를 변경하는 요청은 GET 을 쓰지 않고,
 2. POST 의 경우에도 hidden 필드에 임의의 키값을 전달하고 그 키값이 맞는가를 매번 확인하는 것입니다.

하지만, 실제 보통의 웹 어플리케이션은 2번의 방비가 되어있지 않습니다. 이는 불특정 사용자가 서버의 상태를 임의로 변경할 수 있는 약점을 가지고 있게 합니다.

장고(Django)에서는 1.2 버전부터 이러한 CSRF 취약점을 막는 기능을 기본으로 제공합니다. 모든 POST 방식의 폼 전송에는 hidden 필드로 세션에 따른 임의 키값을 전송하며, 해당 키 값이 유효한지를 매번 확인합니다.

이를 위해서는
 1. 설정파일(settings.py)에 미들웨어에 django.middleware.csrf.CsrfViewMiddleware를 추가하고,
 2. POST 가 사용된 폼 템플릿에 {% csrf_token %} 을 직접 삽입해야 합니다.
<form action="" method="post">{% csrf_token %}
만일 미들웨어를 쓸 수 없는 경우라면, django.views.decorators.csrf 의 csrf_protect 장식자(decorator)를 쓸 수 도 있습니다.
from django.views.decorators.csrf import csrf_protect
from django.template import RequestContext

@csrf_protect
def my_view(request):
    c = {}
    # ...
    return render_to_response("a_template.html", c,
                               context_instance=RequestContext(request))
특정 뷰에 대해 csrf를 적용하고 싶지 않다면 csrf_exampt 장식자를 사용합니다.
from django.views.decorators.csrf import csrf_exempt

@csrf_exempt
def my_view(request):
    return HttpResponse('Hello world')
장고 뿐 아니라 최신의 웹 프레임워크 (Ruby on rails, Spring 등)은 모두 CSRF를 위한 별도의 방어 방법들을 제공합니다. 하지만 장고는 별도의 설정없이도 CSRF 대응이 가능하도록 구현되어 웹 초보개발자도 취약점이 존재하는 사이트를 만들 수 있는 여지를 사전에 차단한다는 점이 특징이라고 할 수 있습니다.

인실리코젠 KM팀에서 구현하는 대부분의 웹 어플리케이션은 최신 버전의 장고를 사용하고 있으며, 중요한 보안위험요소들을 주기적으로 검토하고 있습니다.

Posted by 人Co

2010/03/10 17:52 2010/03/10 17:52
, , ,
Response
No Trackback , No Comment
RSS :
https://www.insilicogen.com/blog/rss/response/55

프로그래밍언어 파이썬(Python)과 웹프레임워크 장고(Django)는 당사 KM팀의 주요 개발 환경입니다. LabKM을 비롯한 다양한 프로젝트들이 파이썬과 장고를 이용하여 구현되었고, 개발중에 있습니다. 파이썬은 그 넓은 활용성과 다양한 적용분야와 활용사례에도 불구하고 국내에는 잘 알려지지 않았는데, 마침 파이썬이 어떤 언어인지 좀 알려달라는 고객분의 요청이 있어 간략히 소개하고자 합니다.

파이썬에 관하여,

파이썬은 동적형결정 객체지향 언어로 빠른 생산성과 다양한 라이브러리를 보유한 프로그래밍 언어입니다. 구글 내부에서 가장 많이 사용하는 언어로도 알려져 있습니다. 생물정보분야 및 각종 과학기술분야에 관련 라이브러리들이 잘 갖추어져 있어서, 과학기술용 어플리케이션을 만드는데 용이합니다.

개괄적인 설명은 위키피디아를 참조하시면 좋습니다.
 * 국문 : 파이썬
 * 영문 : Python

파이썬에 관련된 아래 포스팅들을 보시면, 실무경험자의 다양한 평가들을 확인할 수 있습니다.
 * 파이썬, 이슈에서 벗어나 대세로 자리매김
 * 프로그래밍 지형도를 바꾸는 파이썬
 * 파이썬을 배워야 하는 이유
 * 지식관리팀 주 개발환경 파이썬, 장고
 * 장고(Django)로 쉽고 빠른 웹개발

생물정보분야에도 많이 사용됩니다. 다음의 자료들을 확인해보세요.
 * 생물학 + 전산학 = 생물정보학 :
 * Python programming for Bioinformatics :
 * Python for Bioinformatics (서적)

인실리코젠에서 구축한 시스템 사례들도 있습니다.
 * 국립문화재연구소 고대유전자원정보시스템  (since 2009-11)
 * 국방부조사본부  6-25전사자유전자정보검색시스템 (본부 내부, 2009-11)
 * 가축유전자원시험장 가축유전자원종합관리시스템 (since 2009-01)
 * KIST 독성유전체분석시스템 (since 2009-02)
 * 대한환경위해성보건과학회 온라인논문투고 및 학회홈페이지 (since 2008-10)
 * 대한독성유전단백체학회 온라인논문투고 및 학회홈페이지 (since 2007-06)

인실리코젠 KM팀은 생물정보(과학기술용) 파이썬 라이브러리를 발전시키고 기술을 축적하며, 다양한 사용자의 요구사항의 반영이 용이하도록 준비함으로써 수준높은 웹 어플리케이션을 구현하고자 합니다. 많은 성원을 부탁드립니다.

Posted by 人Co

2010/02/12 17:17 2010/02/12 17:17
, ,
Response
No Trackback , No Comment
RSS :
https://www.insilicogen.com/blog/rss/response/39