유신의 "내일의 소프트웨어"

소프트웨어는 피시(PC) 밖에 더 많다. 스마트폰에서, 연구실 시뮬레이션에서, 위험관리 시스템에서…, 소프트웨어가 사회를 움직인다. 그러나 정작 우리는 소프트웨어에 관해 얼마나 많은 이야기를 알고 있을까?

[새연재] PC 파란화면에 무오류 수학의 이상은 흩어지고

(1) 연재를 시작하며


00software3 » 과학자? 공학자? 개발자? 영국 방송 채널4의 시트콤 <아이티 크라우드(IT Crowd)>의 한 장면. 출처/ Channel 4



소프트웨어공학(Software Engineering)이라는 이름을 들으면 무엇이 연상되나요? 아마 대부분의 사람들이 “정보기술(IT) 강국” 혹은 “정보화시대” 등을 떠올리리라 생각합니다. 혹 주변에 IT업계에 종사하는 지인이 있는 경우라면 박봉과 과로에 시달리며, 이상한 유머에 열광하는 “개발자”를 떠올렸을 수도 있습니다. 그런데 혹시 “흰가운을 입은 과학자”를 떠올린 분이 있습니까? 아마 없을 겁니다. 사실인즉, 소프트웨어공학연구소 소속인 저와 제 동료들도 옆건물 창으로 들여다 보이는 실험실 안의 시험관과 비이커, 실험가운을 보면서 “쟤네는 제대로 된 과학자잖아”라고 농담을 하곤 하니까요. 그런데 “과학웹진”에서 제목에 “공학”을 단 연재를 시작하면서, 스스로가 과학자가 아닌 것 같다는 농담으로 말문을 떼는 제가 하고 싶은 이야기는 과연 무엇일까요?

 

 

공학과 과학의 경계


 

키백과에서 ‘소프트웨어공학’을 찾아보면 “소프트웨어의 개발, 운영, 유지보수에 공학(engineering)의 체계적이고 정량적인 원칙을 적용하는 응용학문”이라고 소개되어 있습니다. 그런데 공학을 이루는 중요한 요소 중 하나는 기반 학문, 즉 공학의 대상인 재료에 대한 과학적 지식입니다. 조금 거칠게 이야기하면, 과학에서 얻은 지식을 경제적·실용적으로 응용하는 것이 공학입니다. 생명공학은 일면 분자생물학의 응용이고, 토목공학과 재료공학은 역학과 물리·화학의 응용입니다.

 

마찬가지로 소프트웨어 공학의 기반 학문을 찾자면, 아무래도 수학의 한 갈래인 계산이론(Computational Theory)을 들어야 할 것입니다. 계산이론은 특정한 계산모형(대략 무언가를 계산하는 기계를 상상하면 됩니다)을 가정한 뒤, 해당 모형으로 수행할 수 있는 계산의 범위가 무엇인지를 규정하는 이론입니다. 우리가 날마다 쓰는 스마트폰과 피시(PC)는 모두 특정한 계산모형을 실제로 구현한 것들이고, 따라서 이를 이용해 어떤 계산이 가능하고 어떤 계산이 불가능한지에 대한 이론적 한계가 이미 주어져 있습니다.

 

그런데 수학을 기반 학문으로 삼은 소프트웨어공학의 운명은 조금 기묘합니다. 소프트웨어가 상용화되기 시작한 지 한참 후인 1980~90년대까지도 일각에서는 소프트웨어 ‘공학’이라는 이름 자체가 어불성설이라는 주장이 어렵지 않게 통용되었습니다. 이유인즉 소프트웨어는 여타 공학에서 다루는 재료와는 달리 “순수한 논리의 집합”이며, 따라서 공학의 대상이 될 필요가 없다는 것입니다. 물리적 실체가 없으니 내구성을 걱정할 필요가 없고 마모되지 않아 유지보수도 필요치 않는 데다가, 소프트웨어가 처리하는 작업이 수학적으로 올바르다는 것을 증명할 수도 있는데 그것이 왜 공학이냐는 것입니다(이 주장에는 분명 과학자와 공학자 사이의 미묘한 긴장관계의 일면이 담겨 있습니다만, 여기서는 더 논의하지 않기로 합니다).

 

 

우리 앞에 펼쳐진 이상과 현실의 불일치


 

치 빠른 독자 분이라면 벌써 뭔가 심상치 않음을 느꼈을 것입니다. 일상의 거의 모든 부분에 소프트웨어가 사용되는 21세기에, 뉴스에도 자주 오르내리는 소프트웨어 시스템의 모습은 어떠한가요? 내구성을 걱정할 필요가 없다던 소프트웨어는 많은 사용자가 한꺼번에 몰리면 작동을 멈추고, 마모가 일어나지 않는다던 소프트웨어 시스템의 전체 소유비용 중 20%가 유지보수에 사용됩니다. 물론 “늘 올바르게 작동하는 소프트웨어”에 대한 수학의 약속은 '파란화면' 속에서 잊힌 지 오래입니다. 무엇보다도 소프트웨어 공학을 실무에서 수행하는 프로그래머들 대부분은 스스로를 수학자로 생각하지 않습니다.

 

우리 앞에 펼쳐진 이상과 현실의 불일치는 단지 개발자들이 일을 열심히 하지 않아서 벌어진 것이 아닙니다. 굳이 설명하자면 “순수한, 너무나 순수한” 수학의 이상은 애초에 공학적 응용을 염두에 둔 적이 없었다고 해야 할 것입니다. 수학의 목표는 물리학·화학과 달리 자연에 존재하는 실체를 기술하는 것이 아닙니다. 당연히 수학으로서 계산이론 자체는 계산모형의 실체(즉 스마트폰이나 PC)에 대해 깊게 고민할 필요가 전혀 없습니다. 한데 계산모형을 실체화한 기계가 만들어지고 상상을 초월하리만큼 다양한 용도에 쓰이기 시작하자 수학적 분석의 한계가 양방향으로 드러나기 시작했습니다. 크기가 너무 커서 수학적 분석이 실질적으로 불가능한 문제가 있는가 하면, 애초에 수학적 분석으로 답을 구할 수 없는 문제도 있습니다. 반면에 계산이론이 일반적으로 해결 불가능하다고 증명한 문제를 실무적 맥락에서 몇 가지 가정을 한 뒤 해결한 경우도 있습니다.

 

00software_BS » “늘 올바르게 작동하는 소프트웨어”에 대한 수학의 약속은 '파란화면' 속에서 잊힌 지 오래이고...

 

현실의 소프트웨어 공학자에게, 소프트웨어는 순수한 논리의 집합 그 이상의 존재입니다. 비록 물리적으로 실재하는 재료가 아닐지언정, 소프트웨어공학은 “어떤 재료”를 다룹니다. 프로그래머가 사용하는 프로그래밍 언어, 그 언어로 작성한 코드, 코드를 실행하기 위해 사용하는 운영체제가 모두 소프트웨어공학의 재료입니다. 한 가지 흥미로운 점은 소프트웨어공학이 점차 성숙해감에 따라, 그리고 더욱 더 복잡하고 대규모인 소프트웨어 시스템을 만들고 분석함에 따라, 이 새로운 재료를 묘사하고 분석하기 위해 사용하는 언어와 방법론이 점차 물리적 재료를 다루는 다른 공학 여러 분야를 닮아간다는 것입니다.  일례로 작성한 지 얼마 안 된 코드는 프로그래머의 머릿속에 아직까지 기억이 생생히 남아 있기 때문에 고치기가 쉬운데 이를 “점성이 낮다”고 표현합니다. 물리적 실체가 없는 코드를 묘사하기 위해 물리적인 속성을 사용하는 것이죠.

 

소프트웨어공학의 원칙을 제시하는 기반 학문은 더 이상 순수한 논리를 다루는 계산이론뿐만이 아닙니다. 소프트웨어 시스템의 크기가 커지면서 명확한 논리적 관계보다는 경향과 패턴을 관측하게 되고, 따라서 통계적 사고가 필수적이 되었습니다. 복잡한 문제를 해결하기 위해 진화생물학의 논리를 빌려오고, 보안문제를 해결하기 위해 면역체계를 참조합니다. 소프트웨어공학이 그 탄생을 계산이론에 빚졌다면, 공학으로서 성숙은 더 넓은 과학적 기반을 바탕으로 할 것입니다. 소프트웨어공학의 성숙을 부채질하는 원동력이, 애초에 계산이론이 크게 염두에 두지 않았던 계산모형, 그러니까 컴퓨터의 발달이라는 점은 재미있는 대비입니다.

 

 

소프트웨어공학의 미래를 위해


 

<사이언스온>의 필자 모집에 응모하면서 했던 고민은 과연 소프트웨어공학의 문제들이 누구나 관심을 가질 만하고, 또 이해할 만한 문제인가 하는 점이었습니다. 물리, 화학, 그리고 생물학의 기초가 공공 교육과정에 포함되어 있는 데 반해 계산이론이나 소프트웨어공학에 관련된 기본지식은 딱히 해당 분야를 전공으로 삼은 경우가 아니라면 습득할 수 있는 경로가 상대적으로 매우 협소합니다. 과연 이런저런 장애물을 뛰어넘어 기존 필진만큼 효과적인 지식 전달을 해낼 수 있을까 하는 의구심을 떨치기 위해 적잖은 용기가 필요했습니다.

 

하지만, 어쩌면 역설적으로, 무언가 전달하고 싶은 내용이 있다는 점에는 확신이 있었고, 연재가 결정된 지금도 생각에 변함이 없습니다. 글머리에 던진 질문으로 돌아가자면, 제가 하고 싶은 이야기는 소프트웨어공학이 단순히 경제 발전 효과의 일부로 계산되는 ‘IT산업’과 동격이 아니며, 기반이 되는 과학 여러 분야와 그 관계를 아직도 역동적으로 정립 중인 젊은 응용학문이라는 것입니다. 흔히 소프트웨어공학, 나아가서 컴퓨터공학은 기초과학 분야에 대비해서 첨단 응용학문으로 분류되는 것이 보통입니다. 하지만 소프트웨어공학 안을 들여다보면 더 이상 “기초적”일 수 없는 딱딱한 계산이론부터 어쩌면 경영학에 더 가까워 보이는 소프트웨어 개발지침에 이르기까지 다양한 스펙트럼이 존재합니다. 이 연재의 목표는 소프트웨어공학이 과학과 만나는 여러 지점을 알기 쉽게 조명해보는 것입니다.

 

스마트폰 시대의 도래 이후, 많은 사람이 한국 IT산업의 미래는 제조업 위주의 과거 관점에서 탈피해 소프트웨어의 경쟁 우위를 구축하는 데에 달려 있다고 지적했습니다. 이 과정에서 소프트웨어공학에 다양한 관심이 쏟아지고 있지만, 관련된 담론이 거의 전적으로 산업의 맥락에서 형성되고 마찬가지로 소프트웨어공학을 하는 사람들의 자존감이 ‘개발자’라는 틀에 갇히는 현상에 대해서는 우려의 마음이 큽니다. 그 내부의 기초를 이루는 과학에 눈을 감은 채 소프트웨어공학을 첨단산업의 수출역군 정도로만 취급한다면 그 생명력은 길지 않을 것입니다.

 

늘상 소프트웨어를 사용하시는 독자 분들께서는, 연재되는 글이 컴퓨터와 스마트폰 안에서 벌어지는 일이 과연 무엇인지 그 배경을 조금이라도 더 이해하는 데 도움이 되었으면 좋겠습니다. 또한 이미 관련 분야에 종사하시는 분들이 글을 보신다면, 단순히 지금 사용하는, 또는 유행하는 개발언어와 도구에 대한 기술적 지식의 습득이 아니라 정보와 논리를 재료로 하는 새로운 공학의 미래를 함께 추측해볼 수 있는 기회가 되기를 감히 빌어봅니다.

  • 구글
  • 카카오
  • 싸이월드 공감
  • 인쇄
  • 메일
유신 카이스트 교수, 전산학
소프트웨어 테스팅 연구로 박사학위를 받은 소프트웨어공학 연구자다. 진화 알고리즘과 인공지능 기술, 정보이론 등을 소프트웨어 공학 문제에 접목하는 데에 관심이 많다. 전 영국 런던 유니버시티칼리지 조교수, 현 카이스트 전산학부 조교수
이메일 : shin.yoo@kaist.ac.kr       트위터 : @ntrolls      
블로그 : londonforgeeks.tumblr.com

최신글




최근기사 목록

  • 검증불가능 프로그램, 어떻게 검증할 것인가?검증불가능 프로그램, 어떻게 검증할 것인가?

    내일의 소프트웨어유신 | 2013. 06. 28

    [6] ‘고차변형 테스팅’ 방법3차원으로 초신성의 핵을 시각화하는 컴퓨터 시뮬레이션. 이제는 천체물리학은 물론 과학 여러 분야의 연구 상당 부분이 컴퓨터 내부에서 벌어진다. 그런데 이 시뮬레이션 프로그램에는 과연 오류가 없을까? 초신성의 ...

  • “오류 존재를 보여도 오류 없음을 보일 순 없다”“오류 존재를 보여도 오류 없음을 보일 순 없다”

    내일의 소프트웨어유신 | 2013. 05. 24

    [5] 소프트웨어 테스팅과 ‘부족한 근사값’ 잠깐, 자신이 프로그래머라고 상상해 봅시다. 방금 회사의 다음 프로젝트 중 일부로 사용할 중요한 프로그램 하나를 작성했습니다. 상사에게 이 프로그램을 넘기기 전에 자신이 작성한 프로그램이 ‘제대로...

  • 강한 인공지능, 약한 인공지능강한 인공지능, 약한 인공지능

    내일의 소프트웨어유신 | 2012. 08. 14

    (4) 인공지능이란 대체 뭔가? 얼마 전 개봉한 영화 <프로메테우스(Prometheus)>에서 외계 생명체만큼이나 사람들의 관심을 끈 것은 인공지능 로봇 데이빗이었습니다. 뛰어난 계산 능력과 무한에 가까운 기억력을 지녔지만 감정을 느끼지 못하기 때...

  • [연재] 해도 해도 끝이 없는 계산[연재] 해도 해도 끝이 없는 계산

    내일의 소프트웨어유신 | 2012. 06. 19

    (3) 소프트웨어가 도무지 해결하지 못하는 세 가지: 두 번째, P=NP? 조금 있으면 여름 휴가철이 다가옵니다. 그런데 산으로 혹은 바다로 떠나는 사람이라면 누구나 여행 전 날 자기도 모르는 사이에 매우 복잡한 수학 문제를 풀고 있다고 하면 ...

  • [연재] 완벽한 백신SW 불가능한 이유, 튜링은 알고 있다[연재] 완벽한 백신SW 불가능한 이유, 튜링은 알고 있다

    내일의 소프트웨어유신 | 2012. 05. 22

    (2) 소프트웨어가 도무지 해결하지 못하는 세 가지: 첫 번째 '종료 문제' 지난해 과학계를 뜨겁게 달군 과학 뉴스 중 하나는 바로 중성미자 입자의 속력이 빛보다 더 빠르다는 어느 관측실험 결과였습니다. 이에 많은 사람들이 놀라움과 의구심을 나...