레이블이 SW공학웹진인 게시물을 표시합니다. 모든 게시물 표시
레이블이 SW공학웹진인 게시물을 표시합니다. 모든 게시물 표시

2017년 4월 18일 화요일

소프트웨어 안전성 분석(2)

제4차 산업혁명이 나타나면서 각 산업에서 소프트웨어가 차지하는 비중이 점점 늘어나고 있어 소프트웨어의 안전성에 대한 이슈가 날로 커지고 있다. 지난 회에 이어 소프트웨어 안전성 분석에 대해 알아보고자 하며 지난 회에서는 소프트웨어 안전성 분석의 개념 중심으로 살펴봤고 이번 회에서는 실제 적용된 체계 중심으로 살펴본다.
소프트웨어 안전성 확보 체계
소프트웨어의 안전성을 확보하기 위한 노력은 최근에 이루어진 것은 아니다. 이미 오래 전부터 소프트웨어로 인한 대형 사고는 계속 발생하고 있다. ‘96년 4월에 유럽의 상업 우주선 아리안 5호는 발사한지 50여초 만에 공중에서 폭발했는데 사고의 원인을 소프트웨어 오류 때문이라고 결론 냈다. 64비트 숫자 값을 16비트 정수로 변환하는 과정에서 일어난 것으로 지금은 흔하게 알려져 있는 오버플로우 오류였고, 이로 인해 5억 달러 우주선이 폭파됐다. 가까운 일본의 최근 사례로 도요타는 ‘10년부터 차량 급발진 사례로 여러 번의 소송을 받아 왔고 결국 미국 법무부의 조사를 받았다. 조사 중 소프트웨어 전문업체를 통해 전자제어장치의 소프트웨어 오류로 급발진이 발생한다는 사실이 입증되었고 도요타는 12억 달러의 합의금을 내야했다. 이처럼 크지 않을 것 같은 소프트웨어 오류로 인한 피해는 앞으로 기하급수적으로 늘어날 것으로 예상되기 때문에 소프트웨어 안전성에 대한 철저한 검증과 관리가 필요하다.

소프트웨어 안전성 기준 확보

각 산업에서는 산업 고유의 안전성 확보를 위한 기준이 준비되어 있는데 전자나 기계적인 장치가 들어있는 경우 소프트웨어에 대한 내용도 포함되어 있는 경우가 대부분이다(표1). 각 기준에는 산업별로 안전성에 대한 확보, 검증, 관리에 대한 가이드라인이 포함되어 있어 소프트웨어와 관련된 가이드라인을 확인한다.

<표1> 산업별 안전성 기준

출처: 중소기업융합학회 논문 - 소프트웨어 개발 프로세스에서의 안전성 분석 및 관리활동의 적용방안

소프트웨어 안전성 보증 프로세스

소프트웨어를 개발할 때는 요구사항을 기준으로 체계적으로 반영될 수 있도록 준비하고 제대로 적용되었는지 확인하는 것이 기본이다. 소프트웨어의 안전성 확인도 개발 프로세스에 맞추어 준비를 하는 것이 가장 효율적이기 때문에 요구사항에서 안전성 관련된 부분을 발췌하여 정리하고 소프트웨어에 제대로 적용되는지 확인하도록 해야 한다(그림1).

<그림1> 소프트웨어 안전성 보증 프로세스의 예
출처: 2015 소프트웨어 안전성 컨퍼런스

다만 주의할 사항이 있는데, 그림1과 같은 방법은 소프트웨어 중심으로 만들어지는 프로세스로 볼 수 있고, 각 산업별로는 더 다양한 형태로 소프트웨어 안전성이 확보될 수 있도록 프로세스를 확인하고 적용해야 한다(그림2).

<그림2> 산업별 소프트웨어 안전성 기준
출처: 2015 소프트웨어 안전성 컨퍼런스

각 소프트웨어 안전성 보증 프로세스에 맞춰 개발을 진행할 때도 메인 프로세스가 각 산업에 있다고 하더라도 소프트웨어는 안전성 보증 프로세스에 맞추는 것이기 때문에 단 번에 끝내는 것이 아니라 안전성 수준에 따라 점진적(Increment), 반복적(Iteration) 프로세스를 도입하는 것도 좋은 방법이다. 더 보기 >>>

모바일 기기 확대로 인한 회사들의 보안 문제

거의 모든 회사원들에게 모바일 기기가 보급되면서 모바일을 이용하여 업무를 수행하도록 하는 회사들이 지속적으로 늘어나면서 회사 업무 보안에 대한 관심도가 증가하고 있지만 이보다 더 임직원들을 통해 회사 안으로 들어오는 모바일 자체에 대한 보안 문제는 고민거리를 더 안겨주는 추세다. 이번 회에서는 단국대학교 보안연구실의 연구원들, 글로벌테크 이성규 이사와 함께 모바일의 확대로 인해 늘어가는 회사들의 고민거리에 대해 알아보기로 한다.

Q: 안녕하세요. 최근에 스마트폰의 등장으로 기업에서 스마트폰을 이용하여 업무 영역을 확대하는 사례가 늘고 있습니다. 모바일과 관련된 기업들의 움직임에 대해 먼저 부탁합니다.

회사 내에서 스마트폰이 없는 사람은 아마 거의 없을 겁니다. 스마트폰 자체를 거부하는 일부 피쳐폰 사용자 말고요. 그러다 보니 기업의 경영자 입장에서는 스마트폰을 이용하여 업무의 편의성을 제공하려 한다지만 어떻게 보면 더 타이트한 업무 범위를 강조하는 것일 수 있지요. 회사에 도움이 되지 않는데 일부러 비용을 들여서 적용할 필요는 없기 때문이죠. 이메일도 더 빨리 볼 수 있고 결재도 더 신속히 결정되고 근태도 스마트폰으로 신청할 수 있고요. PC 앞에서 처리하던 것들을 스마트폰으로 할 수 있으니 업무 관점의 신속성이 더 높아진 것이죠.

<그림1> 기업 내 업무 커뮤니케이션 설문 결과



출처: 이스트소프트

그림1을 보면 스마트폰으로 업무를 활용하는 수치가 지금도 계속 증가하고 있습니다. 우리가 스마트폰으로 흔히 이용하는 메신저나 이메일 뿐만 아니라 자료 공유나 문서 작성에도 많이 활용하고 있다는 것이 눈에 띄는 변화입니다. 그리고 다소 사용률이 떨어질 것 같은 중년층의 경우도 지속적으로 늘어가고 있고 사장이나 임원들이 더 적극적으로 활용하고 있는 추세이기 때문에 증가하는 속도는 더 빨라질 것으로 보입니다.

Q: 업무에 스마트폰을 활용하는 경우가 계속 증가하고 있는 것은 부정할 수 없는 사실이긴 한데 업무에 도움이 많이 되기 때문인가요?

논란이 있기는 하지만 도입한 회사들의 경우 커뮤니케이션에는 상당히 도움이 된다는 보고가 나오고 있기는 합니다만 사용자인 직원들은 불만 섞인 피드백이 많이 나오는 것도 사실입니다. 시도 때도 없이 울려대는 스마트폰 때문에 회사 안과 밖의 경계가 없어진 때문이겠죠. 긍정적인 면을 본다면 담당자와 한시도 떨어지지 않는 스마트폰은 업무 공백을 없애주는 핵심 요소이기 때문에 업무에 도움을 준다고 봐야겠지요.

<그림2> 모바일 오피스의 예
출처: 삼양데이타시스템

예전에 그룹웨어(Groupware)가 유행하던 현상과 비슷하다고 보시면 되지요. 그룹웨어도 처음에는 이메일이나 회사 게시판 정도가 운영되다가 화상 회의나 일정 관리, 주요 거래선 관리, 결국 회사 전용 메신저도 추가되었고 구글 드라이브와 같은 문서 공유 솔루션도 만들어졌지요.

Technical Debt as a Core Software Engineering Practice

참석자
Ipek Ozkaya - At the SEI she is the deputy lead for the Architecture Practices initiative.
요약
---
기술 채무 (Technical Debt): 소프트웨어 개발 프로젝트를 진행할 때, 초기에 제대로 처리하지 않은 일이 반복 주기에서는 문제점으로 나타나고, 이러한 문제점이 다른 수정사항이나 또 다른 문제를 나타낼 수 있어 원금에 이자까지 지불해야 하는 상황이 온다는 개념
---

이번 이야기는 기술 부채와 소프트웨어에서의 의미에 관한 것입니다. 수년에 걸쳐서 우리는 레거시 현대화, 애자일 적용, 아키텍처가 충분히 많은지, 어떤 것을 바꿔야 기술이 바뀌는지 문제를 겪은 많은 고객과 함께 했습니다.
다양한 고객과 다양한 문제에 걸쳐 한 가지 사실은 있습니다. 실제로 시스템에 남는 것을 표현할 수 없다는 것입니다. 예를 들어, 정말로 레거시를 업그레이드 해야 합니까? 정말로 아키텍처를 다시 만들어야 합니까? 그리고 어떻게 트레이드-오프를 결정해야 합니까? 결국 마지막에는 비즈니스 결정만 아니라 디자인 결정을 해야 한다는 것입니다. 하지만 일단 비용 측면을 고려하면서 트레이드-오프를 이야기하면 계속 반복될 겁니다. 그것은 커뮤니케이션 메커니즘뿐만 아니라 연관된 여러 연구 과제에서 기술적 부채를 찾는 시작입니다. 이것이 프로젝트의 착수 방법입니다.

2017년 4월 11일 화요일

소프트웨어 안전성 분석(1)

산업 내에서 직접적인 소프트웨어 활용이 많아지면서 소프트웨어의 안전성에 대한 고민이 다른 측면으로 다시 시작되었다. 소프트웨어가 오류없이 동작하는데 초점이 맞춰진 예전에는 소프트웨어 테스팅이나 보안 중심으로 안전성을 확인했지만 지금은 소프트웨어가 산업 자체에 영향을 주는 경우가 많아 이 외에도 다양한 관점으로 안전성을 살펴볼 필요가 생겼다. 2회에 걸쳐 소프트웨어 안전성 분석에 대해 알아보고자 하며 이번 회에서는 소프트웨어 안전성 분석의 개념 중심으로 살펴보도록 한다.
소프트웨어 관점의 소프트웨어 안전성 분석
소프트웨어가 사용되면서 사용자들에게 가장 큰 고민은 소프트웨어 오류였다. 소프트웨어를 개발하면서 나타나는 오류는 사용자뿐만 아니라 개발을 완료한 개발자 입장에서도 많은 시간과 노력을 들여야 하는 경우가 많았다. 또한 소프트웨어를 사용하는 범위가 산업의 기반 시설들을 다루는 경우보다는 대체로 오퍼레이션과 관련된 것들이 많아 소프트웨어의 안전성이 좋지 않아도 산업 자체가 동작하는데 큰 무리는 없었다. 그래도 소프트웨어의 안전성을 높이기 위해 글로벌 기업을 중심으로 많은 예산과 인력을 투입하였고 다양한 소프트웨어 분석 도구와 기술을 개발하여 대처하였다. 개발 과정에서부터 보안 안전성을 고려하여 개발하는 시큐어 소프트웨어 개발 방법론(Secure Software Development Methodology)도 소프트웨어 안전성이나 보안 위협을 고려한 방법이라고 할 수 있다.
과거에 많이 사용된 소프트웨어 안전성 분석 방법은 크게 화이트박스 테스팅(White box Testing)과 블랙박스 테스팅(Black box Testing)으로 볼 수 있다. 화이트박스 테스팅은 분석 대상이 되는 소프트웨어의 소스코드를 대상으로 취약성이 발생할 수 있는 패턴을 분석하거나 버퍼 오버플로우와 포맷 스트링 취약점 등을 점검하여 소프트웨어가 적절하게 데이터를 처리하는지 점검하는 방식이다. 블랙박스 테스팅은 소프트웨어에 데이터를 입력하고 소프트웨어의 동작을 모니터링하면서 안전성을 점검한다. 블랙박스 테스팅은 소스코드가 반드시 필요하지는 않고 화이트박스 테스팅이 발견하지 못하는 예외적인 상황을 유발시켜 다양한 형태의 안전성 분석을 할 수 있지만 시간과 비용이 많이 드는 것이 단점이기 때문에 효율적인 테스팅을 위해서 자동화된 안전성 분석 도구가 이용되는 경우가 많다(그림1).

<그림1> 블랙박스 테스트와 화이트박스 테스트

소프트웨어의 안전성 분석을 위해서는 분석 대상 소프트웨어의 수준에 따라 분석 방법을 결정하는데 실행 프로그램만 있는 경우에는 블랙박스 테스팅, 소스코드가 제공되는 경우에는 화이트박스 테스팅을 수행하는 경우가 많다. 블랙박스 테스팅과 리버스 엔지니어링(Reverse Engineering)을 접목한 그레이박스 테스팅(Gray box Testing)도 알려져 있다(표1).

<표1> 소프트웨어 안전성 분석 방법의 장단점
출처: 한국전자통신연구원(ETRI)

블랙박스 테스팅과 화이트박스 테스팅을 활용하는 방법도 여러가지가 있다. 먼저 소프트웨어에 다양한 입력을 하여 실행시킨 후 결과를 살펴보는 동적 분석(Dynamic Analysis)과 소프트웨어를 실행시키지 않고 소스 코드의 내용으로 판단하는 정적 분석(Static Analysis)이 있다. 블랙박스 테스트와 화이트박스 테스트를 이 두가지 방법으로 구분하여 안전성을 테스트 할 수 있다(표2).

<표2> 정적 분석과 동적 분석
출처: 데이터베이스진흥원

소프트웨어 안전성 확인을 위해서 동적 분석은 소프트웨어의 특성에 따라 다양한 방법으로 확인해야 하지만 정적 분석은 요구사항을 받아 개발을 하면서 확인하기 때문에 요구사항을 받은 후 진행되는 프로세스에 따라 안전성 확인 방법이 어느 정도 정해져 있다.

소프트웨어 개발자가 준비해야 하는 미래

지금까지도 소프트웨어 개발자가 되기 위한 준비를 위해 C++이나 Java와 같은 프로그래밍 언어를 배우고자 하는 사람들이 많다. 많은 SI 프로젝트가 요구하는 대용량 처리 시스템과 모바일 발달로 인한 다양한 앱들은 개발자들을 코딩하는 기술자로 내몰고 있는 것이 사실이기 때문이다. 하지만 제4차 산업혁명의 등장으로 다양한 산업 분야에서 소프트웨어 개발자를 찾고 있고 개발자에게 코딩 이외에 다양한 아이디어를 요구하고 있다. 두산중공업의 이빈 팀장, 현대파워텍의 이윤희 팀장, 로만소프트의 이철승 대표, 그리고 김규억 박사와 함께 이러한 현상을 주목하며 이야기를 나눠본다.

Q: 안녕하세요. 참석자들이 소프트웨어와 조금 거리가 있을 제조업이나 디자인 쪽입니다. 이렇게 모인 이유에 대해 얘기해보죠.

소프트웨어 개발이 아주 과거에는 특정한 사람들의 전유물이었습니다. 가만히 앉아서 코딩의 신이라는 소리를 들어야 최고가 됐구나 생각했지요. 그러다가 웹 환경이 나타나면서 개발자들에게는 Java 언어가 익숙한 언어가 됐고 너도나도 소프트웨어 개발에 많이 편입을 하게 되었습니다. 숫자로 보면 눈에 띄게 늘어난 것이 사실입니다.

<그림1> 소프트웨어 개발 환경 변화

출처: 오픈소스컨설팅

이러한 개발 환경은 시스템의 전체 큰 그림을 잘 그려놓고 세부적으로 잘 연결되어 움직이도록 하는 Big Picture형 개발자가 필요했습니다. 단순히 개발만 잘하는 사람이 아니라 어떻게 하면 시스템이 효율적이고 문제없이 돌아가게 하는지를 고민해서 개발하는 것이지요.
그러다 모바일이 나오면서 소프트웨어 크기가 전체적으로 작아지기 시작했습니다. 가급적이면 크게, 더 크게 만들던 시스템에서 손에서 동작하는 소프트웨어로 변화하기 시작한 것이죠. 작은 모바일 안에서 어떻게 하면 더 작고 효율적인 소프트웨어를 만들까 하고 고민하기 시작했습니다. 이러한 고민은 사용자를 더 만족스럽게 해주기 위해 더 보기 좋고 빠르게 동작하고 원하는 기능이 딱 들어있는 소프트웨어가 만들어지도록 했다는 것이죠. 이 때까지는 일반적으로 알려진 소프트웨어만 생각하기 때문에 기존의 소프트웨어 개발자가 더 고민할 것은 많지 않았습니다.

<그림2> 시대별 기술 변화
출처: 조대협 - 소프트웨어 개발 트렌드의 변화

그런데 지금은 단순히 운영 시스템 정도만 요구하던 산업에서 소프트웨어 개발자를 채용하고 있습니다. 이유가 뭘까요? 소프트웨어 개발 회사에 의뢰하던 수준을 넘어 자신들에게 딱 맞는 소프트웨어가 필요해졌다는 것입니다. 우리가 모인 이유도 새로운 소프트웨어의 세계를 얘기해 보기 위해서 입니다.

인간을 대체하는 ICT 기술에 대한 동향

최근에 인공지능에 대한 관심이나 기술들이 많이 소개되고 있고 이를 활용한 비즈니스들이 앞다투어 발표되고 있다. 과거의 영화나 미디어에서 전달되던 것과 같이 인간이 해야할 일을 기계가 대신하는 시대가 곧 도래할 것처럼 보인다. 이번 회에서는 기계가 인간을 대체할 수 있게 해주는 ICT 기술이 어떤 것이 있는지 살펴보기로 한다.
인간 대 기술
마이크로소프트의 빌 게이츠나 미래 학자인 거드 레너드는 지금까지 나타난 기술의 발전보다 앞으로 30~50년 동안 발전할 기술이 더 많다라고 주장한다. 그동안 인간은 쉼없이 새로운 기술을 만들면서 다양한 혁신을 이루었지만 인공지능이나 유전자 기술 등과 같이 인간들에게 직접적으로 영향을 미치는 기술들은 인간의 삶에 큰 영향을 미칠 것으로 예상되고 있다. 이와 같이 앞으로 발전될 기술들은 이전의 기술들과는 사뭇 다르게 인간의 삶을 질적으로 바꾸어주는 역할을 할 것으로 보인다. 이러한 것을 트랜스휴머니즘(transhumanism)이라고 부르는데 사람이 기술로 세상을 바꾸는 것이 아니라 기술이 인간의 삶을 바꾼다는 것을 말한다.
인공지능 전문가인 제리 캐플런은 인공지능과 로봇의 발달을 제2차 산업혁명의 공장화나 자동화와 유사하다고 보고있다. 근로자들을 기계가 대체하는 것과 인공지능을 갖춘 로봇들이 일자리를 대체하는 것은 자연스러운 일이고 로봇의 일자리가 단순 노동에 그치지 않고 지적인 부분까지 확대된다고 한다. 로봇이 숙련된 근로자와 교육받은 사람들의 일까지 대신하는 것이고 기술 혁신은 단순히 근로자의 일자리를 대신하는 것에 그치지 않고 직종 자체를 소멸시킬 수도 있는 것이다.
더구나 인공지능의 발달로 사람, 사물, 공간을 초월하여 연결하고 인간의 지능을 초월하여 생각하는 산업의 구조와 시스템이 혁신되는 제4차 산업혁명의 등장은 인간의 자리를 점점 더 대체할 것으로 보인다. 즉 인공지능의 발달이 인간을 대체할 수 있는 기계의 발달을 이끌어 온다고 볼 수 있다.

<그림1> 산업혁명의 핵심 요소


인공지능의 발달
위키피디아에 의하면 인공지능(AI; Artificial Intelligence)은 기계로부터 만들어진 지능을 말한다. 컴퓨터 공학에서 이상적인 지능을 갖춘 존재, 혹은 시스템에 의해 만들어진 지능을 뜻한다. 이미 1980년대에 인공지능의 목표에 대해 정의가 되었는데 인간과 같은 사고를 하고 행동을 한다는 이론이 성립되었고 이러한 이론이 1990년를 넘어가며 시스템으로 정의하려는 노력이 이루어지고 있다. 이러한 목표는 인공지능이 인간과 유사한 생각을 하고 그에 따른 행동이 이루어지도록 하기 위한 노력으로 볼 수 있다(그림2).

<그림2> 인공지능의 정의 및 목표
출처: 조영임 - 인공지능시스템

인간을 대체하기 위해서는 인간처럼 행동하기 위한 기술을 만들어야 한다. 인공지능은 인간을 닮아가기 위한 대표적인 기술이라고 할 수 있다. 처음에는 규칙과 논리적인 프로그래밍을 통해 간단한 로직을 구현했고 통계와 확률을 이용해 판단을 할 수 있는 기본적인 자료를 제공하였다. 이후 딥러닝을 통해 기계 스스로 학습하는 알고리즘이 등장했고 인간과 같이 학습에 기반한 자율적인 판단을 하게 되었다(그림3).

<그림3> 인공지능의 발달 과정
출처: 한국전자통신연구원

인공지능을 구성하는 3대 요소는 학습, 추론, 인식이며 사용자 인터페이스(HCI; Human Computer Interface)가 포함되어 인공지능 시스템이 구성된다. 일반화되어 있고 절차적인 알고리즘으로 판단이 가능한 분야보다는 제한된 정보만으로도 어떤 사안이나 상황을 판단할 수 있는 분야가 인공지능의 적용에 적합하다고 볼 수 있다.
해외 인공지능 기술 현황
중국은 13차 5개년 계획(‘16년 ~ ‘20년)을 통해 인간과 로봇의 상호 작용을 위한 플랫폼 확보 계획을 발표했으며 ‘18년까지 7,000억을 투입해 로봇 산업 단지를 조성할 계획이다. 중국어는 키보드보다 음성 인식이 더 효율적이기 때문에 음성 인식 활용이 다른 국가들보다 높은 편인데 바이두, 알리바바, 텐센트 등이 인공지능에 적극적으로 투자하고 있다. 미국은 인공지능을 차세대 컴퓨팅 플랫폼으로 육성하려는 전략을 추진하고 있고 IBM, Alphabet, 마이크로소프트, 페이스북, 애플, 아마존 등 미국의 대표 글로벌 기업들은 인공지능을 기존 제품이나 서비스에 추가로 적용하고 있다. 로봇 강국인 일본은 인공지능을 로봇에 적용하는데 집중하고 있는데 생산 인력 부족과 생산성 향상을 위해 제조, 의료, 건설, 농업 등에 로봇을 적극 적용하는 로봇 新전략을 발표하였다. PatSnap에 의하면 인공지능 특허 출원이 미국 > 중국 > 일본 > 우리나라 순으로 많다고 조사되었다.

2017년 4월 4일 화요일

Cyber Security Engineering for Software and Systems Assurance


참석자
Nancy R. Mead - SEI fellow and principal researcher in the CERT Division of the Software Engineering Institute
Carol Woody - Senior member of the technical staff and the technical manager of the Cybersecurity Engineering Team

소프트웨어공학의 오해와 필요성

불과 얼마 전까지만 해도 소프트웨어 개발 프로세스나 개발 방법론 등은 개발자들에게 환영 받지 못할 정도로 소프트웨어를 개발할 때 필요한 요소들이 정리된 소프트웨어공학의 관심은 일부 전공자들에게 한정되어 있었다. 하지만 최근에 소프트웨어공학을 다시 살펴보자는 주장들이 많이 나오고 있어 호윤시스템 김기향 팀장과 소프트웨어공학을 전공한 윤광렬 박사를 만나 이야기를 나눠본다.

Q: 안녕하세요. 2000년 전후로 집중적인 관심을 받다가 그 이후 지속적으로 관심이 줄어들고 있던 소프트웨어공학이 요새 다시 회자되고 있습니다.

이 얘기를 들으시는 분 중에 요새 소프트웨어공학이 다시 얘기되는 것을 모르겠다는 분들도 많을 겁니다. 그런데 최근에 이슈가 많이 되고 있는 애자일(Agile)이나 마이크로 서비스(Micro Service), 클라우드 서비스(Cloud Service) 등 많은 부분이 소프트웨어공학 없이는 구현되기가 어려운 것들입니다. 녹아 들어있는 소프트웨어공학을 인지 못하시는 것뿐입니다.

<그림1> 소프트웨어공학 활용의 예 
출처: http://blog.creation.net/306

최근까지도 소프트웨어공학을 소프트웨어를 개발하고 유지보수하는 생명주기 전반을 나타낸다고 이해하시는 분들이 많습니다. 특히 위키백과와 같은 사전적 정의도 이렇게 정의된 경우가 대부분이죠. 위키백과에서는 “소프트웨어의 개발, 운용, 유지보수 등의 생명 주기 전반을 체계적이고 서술적이며 정량적으로 다루는 학문이다; 즉, 공학을 소프트웨어에 적용하는 것이다”라고 정의되어 있습니다. 물론 틀린 말은 아니지만 소프트웨어공학이 적용되는 범위는 훨씬 광범위하다는 것이죠.
“소프트웨어를 만들 때”라는 말을 하나의 시스템을 개발하는 것에만 국한하지 말고 어떠한 제품을 만들 때 소프트웨어를 어떻게 하면 잘 적용할 수 있는가 하는 것도 포함시켜야 합니다.

Q: “제품을 만들 때”라는 말이 이해가 어려운데 조금 자세히 말씀해주시겠습니까?

일반적으로 소프트웨어를 만든다고 하면 시스템을 설계해서 코딩을 하고 운영을 하게 됩니다. 말 그대로 소프트웨어가 단독으로 만들어지는 것이지요. SI가 이러한 형태로 개발이 되고 솔루션 개발에서도 이러한 방식을 취하는 경우가 많습니다. 그런데 소프트웨어가 다른 제품에 들어가는 경우도 많지 않습니까? 최근에는 자동차나 비행기, 공장 등지에서도 사용되고 있는 것이 현실이지요. 반도체는 컴퓨터에만 쓰이는 것으로 잘 알려져 있지만 사람이 사용하는 거의 모든 전자 제품에 들어가는 것처럼 소프트웨어도 비슷합니다.

<그림2> 임베디드 소프트웨어 활용의 예
출처: http://j.mp/ZYZ4KF

그림2에서처럼 임베디드 소프트웨어만 그런 것은 아닙니다. 이제 소프트웨어가 거의 모든 기계나 제품에 대부분 들어간다는 것을 인식해야 하고 이에 대비한 소프트웨어 만드는 방식을 준비해야 하는 것이죠.

클라우드 SW 사례 연구 - 보안

클라우드 서비스가 전통적인 소프트웨어 시스템을 대체하면서 가장 크게 이슈화된 것이 보안이다. 전통적인 소프트웨어 시스템은 구현 초기부터 보안에 대한 분석과 설계를 함께 하게 되는데 클라우드는 네트워크 자체가 외부에 오픈되어 있는 경우도 많고 가상화나 공유되는 부분도 많아 보안 문제가 항상 노출되어 있다. 하지만 클라우드 서비스도 소프트웨어 시스템의 일종이기 때문에 기존 보안 기술을 적절히 사용한다면 큰 보안 문제는 나타나지 않을 것으로 보인다. 이번 회에서는 클라우드 서비스의 보안에 대해 살펴보기로 한다.
사례 전 확인 사항

클라우드(Cloud) 보안 개념

클라우드 서비스는 시스템 내부의 자원을 사용하지 않고 외부의 자원을 일부나 전부를 사용하는 경우가 많아 보안에 대한 대비가 반드시 필요하다. 클라우드 보안 문제도 전통적인 소프트웨어 시스템의 보안 문제와 유사한 데이터 유출이나 안정성, 네트워크 문제, 그리고 가용성에 따른 서비스 문제 등이 있다(표1).

<표1> 클라우드 서비스의 보안 위협

출처: 보안공학연구논문지 - 클라우드 보안 위협요소와 기술 동향 분석

클라우드 서비스에서 보안 문제가 더 크게 대두되는 문제는 그림1에서 보는 것처럼 전통적인 소프트웨어 시스템에서는 각 시스템 단위로 보안 문제를 준비하면 되기 때문에 자체적인 보안 가이드에 따라 보안 준비가 가능했지만 클라우드는 외부 네트워크로 연결되어 서비스가 되기 때문에 보안이 외부에 직접적으로 노출되어 있기 때문이다.

<그림1> 전통적인 소프트웨어 시스템과 클라우드 서비스의 비교
출처: 미래창조과학부

클라우드 서비스의 보안은 두가지 관점이 공존한다. 다양한 기업의 정보나 네트워크가 몰려 있기 때문에 보안 사고가 나타나면 여파가 굉장히 크다는 것과 기업이 자체적인 보안보다 체계적인 관리를 하기 때문에 더 안전하다는 관점도 있다. 특히 인프라(IaaS), 플랫폼(PaaS), 그리고 소프트웨어(SaaS)에 따라 보안이 구성되기 때문에 서비스 특성에 따른 맞춤형 보안도 장점 중 하나다. 또 다양한 시스템을 효율적인 구성으로 서비스하는 클라우드는 자원을 빌려 쓰는 개념이다 보니 비용적 측면이나 운영적 측면에서도 매우 효과적이고 보안 사고가 날 경우에도 클라우드 업체와 이용 업체가 책임을 나눌 수 있다는 점에서도 보안 부담이 줄어드는 것도 사실이다.

2017년 3월 21일 화요일

Best Practices for Preventing and Responding to Distributed Denial of Service (DDoS) Attacks


참석자
Will Hayes - Principal engineer at the Software Engineering Institute
Rachel Kartch - Network analyst team lead in CERT Division of the SEI

4D 업종이 되어가는 소프트웨어 개발

불과 얼마 전까지만 해도 소프트웨어 개발에 대한 수요와 공급은 기하급수적으로 늘어갔고 이 때문에 많은 사람들이 소프트웨어 개발자를 희망했다. 하지만 새로 유입되는 상당수의 개발자가 소프트웨어 업종 자체를 포기하는 경우가 발생하고 소프트웨어 개발 업체의 수도 예전만 못하다. 기존의 3D 업종에서 꿈이 없다(Dreamless)는 의미가 포함된 4D 업종으로 분류되고 있는 소프트웨어 개발에 대해 고려대학교 이영환 박사, 신명소프트 박승식 대표를 만나 살펴보기로 한다.

Q: 안녕하세요. 이번 주제는 다소 비관적인 주제가 될 것도 같습니다만 소프트웨어 개발을 하는 사람이라면 한번 이상은 고민하는 문제가 아닐까 생각됩니다.

소프트웨어 하나 잘 만들어서 대박이 나고 전세계 사람들이 주목하는 그런 시대가 있었죠. ‘90년대에 들어서면서 우후죽순처럼 생기던 전자계산학과, 컴퓨터공학과에 지원자가 한없이 넘치기도 했습니다. 그만큼 인기가 많았다는 것이죠. 어떻게 보면 지금도 소프트웨어에 대한 인식은 아주 나쁘지 않습니다. 다만 소프트웨어 개발자들의 생각이 회의적이라는 것이 문제죠.
냉정하게 컴퓨터나 소프트웨어 업의 인기가 올라갔던 이유는 XT, AT, 386이라 불리던 인텔의 80시리즈가 나오면서부터 였습니다. 컴퓨터 전공의 학생들조차 학교에서 쉽게 다루지 못했던 컴퓨터가 가정에서 쉽게 접할 수 있게 되었던 것이죠. 486, 586 컴퓨터를 거쳐 현재의 i5, i7 등의 CPU가 나타나고 있습니다.
하지만 중요한 점은 컴퓨터나 소프트웨어 개발의 인기는 식지 않았는데 소프트웨어 개발자의 인기는 점점 줄어들고 있다는 점입니다. 더 세부적으로 말하면 소프트웨어 개발자의 인식은 점점 회의적으로 변하고 있다는 것이죠.


Q: 하드웨어와 소프트웨어의 인기는 그대로인데 왜 소프트웨어를 만드는 개발자들의 인식은 점점 회의적으로 바뀐다는 것이네요. 실제로 우리나라 개발 업체에서도 개발자 문화 바꾸기나 개발자 기 살리기와 같은 운동이 펼쳐지기도 합니다.

최근에 애자일 문화가 보급되면서 다소 활기를 띄는 것은 사실이지만 한계를 느끼는 경우가 대부분이라는 보고가 계속 나오고 있습니다. 아마도 소프트웨어 개발이 가지고 있는 특성과 회사라는 조직이 운영되는 방식과 차이를 보이고 더 깊은 이유는 갑을 관계로 형성된 계약 관계에 있지 않나 싶습니다.

전체 보기 >>>

4차 산업혁명과 비즈니스의 변화

4차 산업혁명에 따른 미래 사회 변화는 기술, 산업 구조, 고용 구조 그리고 직무역량 등에서 나타날 것으로 예측된다. 기술과 산업 간 융합을 통해 기존 산업 구조를 스마트 비즈니스 모델로 변화시킬 것으로 보인다. 4차 산업혁명의 특징인 초연결성과 초지능화는 스스로 생각하고 판단하는 스마트 형 팩토리(Smart Factory)와 같은 새로운 비즈니스 모델을 이끌어 내겠지만 스마트에 대한 적응이 어느정도 되어 있는 상태이기 때문에 적응은 그리 어렵지 않을 것으로 보인다. 이미 제조업에서는 인간의 노동력을 줄이고 자동화한 소 품종 다량 생산에서 스마트 기능이 접목되면서 다 품종 소량 생산의 맞춤형 개발도 시도하는 추세다(그림1).

<그림1> 스마트 산업의 시장 사이클



출처 : Global Market Strategy(삼성증권), 2016

한가지 주의해야할 사항은 산업에서 인간의 노동력을 대체하여 기계화 하는 것은 이미 2, 3차 산업혁명에서 이루어진 사항이다. 많은 전문가나 보고서가 4차 산업혁명으로 인해 노동력이 감소되고 인간의 직업군이 줄어들 것으로 예측하고 있지만 스마트 적인 관점으로 본다면 인간이 할 수 없는 부분을 담당하면서 또다른 직업군을 만들어 낸다고도 볼 수 있다(그림2).

<그림2> 스마트화가 가능한 직업 분포
출처: CEDA(Committee for Economic Development of Australia), 2015

그림4에서 보는 것처럼 단순 노동(우측)에 가까운 부분과 숙련(좌측)에 가까운 부분이 스마트화 하는데 좋은 대상이 될 것으로 보인다. GE의 2016년 보고에 의하면 빅데이터, 인공지능 등 4차 산업혁명과 관련된 기술 분야에서 200만개의 새로운 일자리가 생기고 그 중 65%는 신생 직업이 될 것이라고 전망하고 이러한 신생 직업은 대부분 소프트웨어 개발 분야에서 나타날 것이라고 하고 있다. 이런 현상이 일어나는 가장 큰 이유는 기존 산업의 스마트화를 위해서는 사물 인터넷, 빅데이터, 인공지능, 그리고 이들을 연결할 클라우드가 필요하고 운용을 위한 소프트웨어가 반드시 필요하기 때문이다. 각 산업에서는 스마트화를 위해 기하급수적으로 4차 산업혁명을 위한 혁신을 요구할 것이기 때문에 빠르고 효율적인 적용을 위한 소프트웨어 관점의 표준화된 플랫폼이 필요한 것이다. 또한 이러한 표준 플랫폼은 산업별로 독립적으로 존재하는 것이 아니고 추후 산업 간 융합을 위해 상호 보완적이고 연결성이 높도록 구성하는 것이 좋다.

2017년 3월 14일 화요일

차세대 로봇 시장의 동향

인공지능 기술과 산업이 발전하면서 산업에 필요한 로봇 산업도 함께 성장하게 되었다. 자동화를 위한 과거의 로봇 산업은 현재 지능을 갖춘 지능형 로봇으로 발전하고 있는데 머신 러닝을 통한 인공지능의 발전이 로봇 산업의 발전을 이끌고 있는 추세다. 이번 회에서는 로봇 산업의 전반적인 동향에 대해 살펴보고자 한다.
로봇의 개요
로봇은 인간을 모방하여 외부 환경을 인식(Sense)하고 상황을 판단(Think)한 후 자욜적으로 동작(Act)하는 기계를 말하는데 인간의 오감과 두뇌, 손과 팔, 표현 등을 기계가 하게 된다. 로봇은 인간을 대신해 단순 반복되는 작업을 담당하는 것으로 시작되었고 제조업에서 많이 사용되다가 최근에는 서비스용으로 많이 활용되고 있다(그림1).

<그림1> 로봇의 종류


출처: T-Robot

로봇을 최초로 적용한 곳은 산업용이었다. 단순 반복 작업을 자동화한 경우가 대부분이었기 때문에 현재의 로봇 형태보다는 공장의 기계에 가까웠지만 자율적인 다양한 작업을 처리하는 로봇이 나타나고 있고 곧 지능을 가지고 응용 작업을 할 수 있는 로봇이 나타날 것으로 기대되고 있다. 이러한 변화는 인간의 노동을 단순 대체하는 것에서 노동을 보완하고 향후에는 인간의 삶을 개선하는 효과를 가져올 것이다.
로봇 기술의 발달은 산업 측면에서 로봇을 활용하면서 인간이 회피하는 작업을 대체하고 노동 대체 효과로 인해 산업 경쟁력이 강화되며 생산성 향상과 규모가 증가함으로써 연관된 산업의 동반 성장 효과를 가져올 것으로 보인다. 이러한 성장은 새로운 고용 창출로 이어지며 산업 전반에 긍정적 효과를 보이게 된다(그림2).

<그림2> 로봇 산업의 효과

해외 로봇 산업 동향
보스턴 컨설팅 그룹에 따르면 전세계 제조업 분야에서 로봇의 활용도는 현재 10% 정도이지만 2025년에는 25%로 증가할 것으로 예상하고 있다. 첨단 기술의 발전으로 로봇의 가격이 인하되고 기능이 비약적으로 향상될 것으로 보이기 때문이다. 표1은 2015년에 발표된 로봇 시장 규모를 나타내고 있다.

미래기술이 현실화된 기술

미래 기술에 대한 예측 보고서가 매년 셀 수 없을 만큼 나온다. 산업 전반에 걸친 예측 보고서의 주체는 정책 기관이나 연구 기관이 될 수도 있지만 단위 기업에서도 자신들이 준비하고 있는 미래 기술들을 발표하는 경우도 있다. 이처럼 수많은 미래 기술이 예측되고 있지만 당장 실현되는 경우도 있지만 수십년이 지나도 실현되지 않는 기술도 있다. 이번 회에서는 프리랜서 고동욱 프로, 고려대학교 이영환 박사와 단국대학교 김규억 박사를 만나 미래 기술이 성공한 요인에 대해 살펴보기로 한다.

Q: 안녕하세요. 이번 주제는 매우 주관적인 견해가 강할 것도 같고, 어디서부터 이야기를 나눠야 할지도 걱정이네요. 어느 시점에서 생각하는 미래 기술일지 정하는 것이 좋을 것 같습니다.

IT 기술이 본격화된지는 오래 되었지만 일반 사람들이 직접 경험하면서 느낀 때는 2000년 전후이지 않을까 싶습니다. 더구나 2000년은 20세기에서 21세기로 바뀌면서 Y2K 이슈나 기술의 패러다임이 바뀔 것이라는 기대가 많았던 때이기도 합니다. 대략 20년 정도 전이니 인터넷이 일반 사람들에게 어느정도 활성화되기 시작한 때로 봐야 할 것 같습니다(그림1).

<그림1> Y2K 관련 내용들

출처: 인터넷

지금이라면 IT를 잘 모르는 사람들도 과도한 걱정이었다는 것을 알았을 겁니다. 그만큼 정보가 부족했던 것도 사실이었지만 중요한 사실은 당시에 사람들이 매우 놀랄 정도의 기술들이 많이 선보였기 때문에 IT 기술에 대한 경이감 같은 것도 있었을 때입니다.

Q: 정확하게 그 시점을 지정하시는 것을 보면 무언가 이유가 있을 것 같습니다.

네. 잘 보셨습니다. 2000년이 오기 몇 년 전부터는 2000년을 기점으로 많은 미래 기술이 나타날 것이라는 발표가 많았습니다. 제가 가장 기억이 또렷한 것은 타임즈에서 정한 지금처럼 “미래의 10대 기술”처럼 명확하게는 아니었지만 “최첨단 기술 10가지” 정도로 기억합니다. 당시는 인터넷이 발달하지는 않아서 잡지 형태로 읽었습니다. 이번 이야기에서 보려고 찾아보았는데 없더군요. 아쉬웠습니다.
당시에 기억나는 기술이 몇가지 있는데 먼저 3D 프린터입니다. 당시에는 3D 스캐너도 소개되었는데 가격은 비싸도 조만간 싸게 나올 것이라고 해서 기대가 많았습니다. 품질은 지금과 거의 유사할 정도로 정밀도가 높았던 것으로 기억합니다. 그리고 가정의 중앙 관리식 기기입니다. 집에 있는 전자 제품들을 하나의 기기에 연결해서 제어할 수 있도록 하는 기기였습니다. 불이나 TV도 키고 컴퓨터도 연결해서 인터넷을 할 수 있고 다양한 가정의 정보를 한 곳에서 관리하는 것이지요. 딥 러닝의 전신인 뉴럴 네트워크도 그 때 실현 가능성이 점쳐지기도 했습니다. 문자인식이나 음성인식 등은 실제 적용도 했던 시기였습니다(그림2).

<그림2> 2000년 전에 정립된 기술의 예

출처: 인터넷

Q: 말씀하시는 기술들이 지금 주목받는 기술들로 보이는데 20년 전에 이미 나온 기술이란 건가요?

네, 그렇습니다. 흥미로운 사실이죠. 당시에 소니는 중앙 관리식 기기를 실제로 만들고자 했습니다. 네트워크 선을 연결해서 모든 정보를 주고받고 제어할 수 있도록 말이지요. 정확한 사실이 아닐 수도 있지만 이 것이 플레이스테이션2라고 알려져 있었습니다. 이후에 나온 Xbox도 비슷한 역할을 수행하고자 시도를 했던 적도 있습니다. 물론 정확하게 그 기능을 위해서 만들어진 것은 아니지만요.