컴퓨터 과학, 컴퓨터 공학, 소프트웨어 공학 : 차이점

이 글은 컴퓨터공학을 선택하거나, 편입하려고 하는 분들에게 쓰는 글입니다.
많이들 헷갈려 하거든요.

….

개발자가 되려고 합니다.

컴퓨터 과학, 컴퓨터 공학, 소프트웨어 공학, 정보공학….
아, 복잡합니다. 뭔지는 몰라도 저게 다 개발자가 된다는거죠?

흠, 그런데 막상 대학에 입학을 해보면 개발자인듯 아닌 듯.
소프트웨어인 듯 아닌 듯, 그런 걸 배우게 됩니다.

사실 이제는 저게 경계선이 없습니다.
각 대학의 교수님들이 계속 커리큘럼을 업데이트 하고 있어서,
지금은 그냥 개발자가 되는 학과 정도의 의미를 가지고 있습니다.

하지만, 넓은 의미로선 비슷할지 몰라도 좁은 의미로선 구분되기도 합니다.
그 이야기를 짧게 이야기해보고자 합니다.

01.컴퓨터 발전의 역사

컴퓨터는 이렇게 발전했습니다.

(1) 1940년대 : 고성능 계산기의 시대

( ENIAC, 전선을 바꿔끼우면서 코딩을 했다 )

ENIAC 는 포탄 탄도를 계산하기 위해서 만들어졌습니다.
입력을 넣으면 자라락 계산을 해서 띵~ 하고 결과를 내어놓았죠.
거대한 진공관을 이용한 실시간 입력.실시간 계산일 뿐, CPU.메모리라는 개념은 없었죠.

이 때에 컴퓨터를 만든다는 건, 물리학, 수학의 영역이었습니다.
미분, 적분 등 복잡한 수식을 계산하는 거였으니까요.

이 때의 컴퓨터란, “컴퓨터 과학” Computer Science 였습니다.
이 때의 코딩이란, 논리흐름을 10진법으로 바꾸는 거였습니다.
진공관 사이의 전선을 연결해서 회로를 재설계하는 거였죠.

(2) 1950년대 : 폰 노이만 구조

(폰 노이만이 고안한 컴퓨터의 구조)

매번 10.8.9.5.4… 등으로 변환한 후 전선세팅을 바꾸는 건 고역이었습니다.
이걸 안하려고 폰노이만이 새로운 컴퓨터 구조를 그리죠.

연산장치와 저장장치를 분리하자는 겁니다.
“폰 노이만 구조”라고 합니다.
1945년에 처음 아이디어가 나와서 1949년에야 정립됩니다.

그래서 EDVAC 이 만들어지죠.
이 때 EDVAC 은 이진수 연산법을 최초로 이용하는데,
10진수를 2진법으로 바꾸는 훈련이 비로소 학교 과목에 등장하게 됩니다.
지금은 알 필요 없는 내용이죠.

( EDSAC 과 최초의 메모리 Delay-line storage )

EDVAC 이전에 EDSAC 이 있었습니다.

EDSAC 은 메모리의 원형이 만들어지죠.
수은으로 만들어진 긴 수조를 만들고, 파형을 쏘아서 담는 거죠.
그 파형이 끝나면 그걸 순환시켜서 계속 수은이 파형을 쥐고 있게 만들었습니다.
이게 1 싸이클 “Cycle” = 1 Hz 입니다.

EDSAC 은 500 kHz(= 500,000 Hz = 50만회 순환) 이었다고 하고,
256개의 단어를 저장할 수 있었다고 하네요.

이 때의 수은조란, 수은을 길게 담은 아주 길다란 어항 같은 겁니다.
흠… 정말로 이 때야말로 컴퓨터가 “과학”이었던 시대입니다.

참고로 이런 구조를 가지고 최초로 만든 상용컴퓨터는 1951에야 탄생합니다.
바로 “마크1” 입니다. (아이언맨 슈트 아님)

컴퓨터 기술이 발전하자 “소프트웨어”란 개념이 처음 등장합니다.
1957년 벨 연구소의 존 터키 박사였습니다.
월간 “미국 수학”에 논문을 기고하면서 처음 이 용어를 사용했죠.

하지만, 이 때의 “소프트웨어”는 하드웨어와 결합되어 분리되기 힘든 그 무엇이었습니다.

(3) 1960년대 : 컴퓨터 공학의 시대

(진공관을 대체하는 반도체의 등장)

1960년대까지만 해도, 컴퓨터 = 비싼 탄도계산 기계
컴퓨터 과학 = 비싼 하드웨어를 만드는 학문 = 엄청난 수식계산

튜링 머신, 폰노이만 구조, 차분기계 등은 수학자의 영역이었습니다.
즉, 수학이론을 현실로 꺼내는 “컴퓨터 과학”의 시대였던 거죠.
컴퓨터 1대를 만드는 데 어마무시한 돈이 들어갔습니다.

컴퓨터가 대량생산되자 컴퓨터를 운영하기 위한 소프트웨어가 필요해집니다.
이 당시의 컴퓨터는 프로그래밍 언어를 운영체제로 사용했죠.
이 때 대세로 등장한 언어가 BASIC 입니다.
1964년 수학과 교수 2명이 만들었죠.

(IBM 1401 메인프레임, 컴퓨터 대량생산이 시작된다.)

1960년대 트랜지스터의 등장으로 드디어 대량생산의 시대가 열립니다.
바로 “컴퓨터 공학”의 등장이죠.

그래서 컴퓨터를 배우기 시작할 때 “프로그래밍 언어” 부터 배웠습니다.
저장하거나, 복사하는 명령어도 “프로그래밍 언어”에 포함되어 있었죠.

(4) 1970년대 : 메모리의 시대

우리가 아는 “메모리”는 1970년대가 되어야 등장합니다.
CPU도 나옵니다.

( Unix 의 진화 지도 )

드디어 운영체제 (OS=Operating System) 도 나옵니다.
바로 Unix 죠.
Unix 는 하드웨어를 잘 다루기 위한 소프트웨어 인프라를 표준화시킵니다.

프로그래밍 언어만 잘 짜면, 어떤 컴퓨터든 잘 이용할 수 있었죠.
즉, 이 때가 되어서야 운영체제와 프로그래밍 언어가 분리됩니다.

언어를 분리시키기 위해 만든게 바로 C 죠.
그래서 프로그래밍에 입문할 때 가장 먼저 “C” 를 배웁니다.
변수타입 같은 게 까다로워진 첫번째 케이스였죠.

( Research Unix, 벨연구소 )

Unix 는 1960년대부터 연구되었지만, 1970년대가 되어서야 완성됩니다.
비로소 하드웨어의 발전이 따라와줬거든요.

이 때가 되어서야 비로소 “소프트웨어” 가 분리되어 인식되기 시작했습니다.
더 이상 BASIC 언어에서 “복사”, “저장” 등을 할 수 없었고,
Unix 모드에서야 명령을 내릴 수 있었죠.

(5) 1980년대 : PC 의 시대

( IBM XT 컴퓨터와 플로피 디스크 )

1981년 IBM PC 가 처음으로 나옵니다.
애플컴퓨터가 먼저 나왔지만, IBM PC가 저렴해서 더 많이 팔렸죠.

이 때의 PC 는 부팅을 하면 DOS 모드와 함께 BASIC 을 기본으로 제공했습니다.
하지만, CPU, Memory는 있었지만, 저장공간이 없었습니다.
플로피 디스크라고 하는 휴대용 저장장치를 별도로 사야했죠.
즉, 처음의 PC란 건 여전히 복잡한 계산을 하는 계산기였을 뿐입니다.

워드프로세스 같은 건 나오지도 않을 때였고,
제일 먼저 할 수 있었던 건 복잡한 수학을 계산하거나,
텍스트 모드로 게임을 만들 수 있었습니다.

이 때 비로소 컴퓨터는 바야흐로 “공학”의 시대로 넘어갑니다.
대량생산을 하면서, 표준화, 공정화, 효율화가 중요해졌거든요.

과학이 이론,원리를 탐구, 그걸 현실화시키는 “발명의 영역”이라면,
공학은 물리적 모형을 만들고 그걸 생산.보급하는 “제작의 영역”입니다.

1960년대 등장했지만, 1980년대가 되어서야 주목을 받게 된거죠.

(6) 1990년대 : 소프트웨어의 시대

Unix, DOS 의 보급에 힘입어 소프트웨어는 확실하게 하드웨어와 분리됩니다.
MS는 DOS 만 탑재되어 판매되는 PC 에 BASIC 언어를 팔기 위해,
GW-BASIC 라는 소프트웨어 상품을 별도로 판매합니다.

즉, 어떤 PC는 부팅이 되어도 복사,저장 밖에는 되지 않는 정말 깡통이었던 거죠.
뭔가 이용가능한 프로그램을 만들려면, GW-BASIC 을 이용해야만 한다는 걸 인식하게 된거죠.
그게 없다면 PC는 정말 아무것도 할 수 없는 깡통이라는 것도 알게 되었고요.

PC, Unix 의 보급으로 컴퓨터는 국방을 떠나, 은행으로 들어옵니다.
복잡한 숫자를 사용하는 가장 큰 산업이었죠.

(일반 은행의 업무 구성도)

그런데 은행용으로 사용하려면, 복잡한 미분.적분 보다, 빠른 사칙연산이 필요했습니다.
다루어야 하는 데이터량도 많고, 업무를 처리하기 위한 문서까지도 처리해야 했습니다.

상업용 컴퓨터라고 이름을 붙였고, 소프트웨어도 복잡해져야 했죠.
이른바 소프트웨어 공학의 시대가 열립니다.
“과학”이 수학, 자연과학의 영역이라면, “공학”은 실용학문의 영역이었으니까요.

초기 은행업무용 프로그램들은 여러 개의 화면으로 이루어진 집합들이었습니다.
조회, 입력, 수정, 삭제 등 “트랜잭션”을 기준으로 화면을 나누었고, “화면수”를 기준으로 개발량을 판단했죠.

은행용 프로그램들은 탄도계산 프로그램과는 달랐습니다.
여러가지 화면들이 얽혀 유기적으로 움직여야 했고, 여러 개의 소프트웨어가 합쳐 하나의 업무를 이루었죠.

( 소프트웨어 생명 주기 관리 모델 – Software Development Life Cycle )

즉, 업무를 해석하고, 어떻게 만들지 설계하고, 나누어서 개발, 운영하는 방법이 중요해졌습니다.
공정과 업무에 관한 것이었죠.
그래서 소프트웨어는 “과학”이라는 용어 없이 “공학”으로 바로 넘어갔습니다.
“Model-Driven”, “Agile”, “Aspect” 등은 여전히 “소프트웨어 공학”에 속한 개념입니다.

(7) 2000년대 : 인터넷의 시대

(HSBC에 적용된 ITSO 은행 플랫폼의 클래스 다이어그램 개요)

은행업무는 하나의 기업 내에 묶인 규칙이 있었습니다.
어떤 틀이 있었죠.
그래서 소프트웨어 설계가 그렇게 만들어졌습니다.

인터넷으로 “자동차 마일리지” 등을 서비스하기 시작하자 기업 내에 묶인 틀이 없어졌습니다.
“구글 검색” 같은 건, “은행업무”와는 사뭇 다른 비즈니스 규칙을 가지고 있죠.
그래서 기존의 설계방식으로 접근하는 게 많이 달라졌습니다.

KT, U+ 같은 이동통신사 시스템은 기능적인 안정성을 위해 극도로 모듈화됩니다.
반면 포털서비스는 “서비스별”로 모듈화를 시키죠.
만드는 법과 운영하는 법이 다릅니다.

소프트웨어 공학이 아주 복잡해져 아직 이론화되지 못했죠.
기본에 충실하는 것 외에 다른 대안이 없긴 하지만, 역시 그것만으로는 부족합니다.

02. 차이점

( 크롬 브라우저의 작동 구조 )

요즘에는 컴퓨터 과학, 컴퓨터 공학, 소프트웨어 공학이 특별하게 다르지 않습니다.
조금씩 다른 부분이 있긴 하지만, 지금은 거의 차별없이 불리어지고 있습니다.

어디를 들어가든 결국 비슷한 걸 배워서 졸업하는 것 같습니다.
앞으로도 더 자세하게 구분될 것 같진 않습니다.

원래대로라면 산업이 학교로 들어와 학문화되고,
그걸 다시 학생들이 배워서 나오는 순환구조가 생겨야 합니다.

데이터, 융합분야는 그렇게 될 정도로 구분되는 무엇이 있었는데,
컴퓨터 과학, 공학은 이젠 두루뭉실해져 버렸습니다.

물론 간혹 엄격하게 구분하고자 하는 교수님들도 계십니다.
하지만, 역시 쉽지 않습니다.

개발자로 일하다보면 필요한 건 그 때 그 때 공부를 해야 하기 때문에,
굳이 가려서 배우는 게 전혀 도움이 되지 않거든요.

즉, 세 개의 단어가 직업의 세계에선 뚜렷하게 구분되지 않습니다.
학문.연구의 세계에선 어떨지 모르지만요.

요약

  • 세 개의 용어는 컴퓨터의 발전의 역사 때문에 붙여진 이름이다.
  • 지금은 그냥 혼재되어 불린다.
  • 어디를 들어가든 기초이론과 원리를 공부하게 된다.
  • 요즘 개발을 하기 위해서는 웹 프로그래밍 등을 따로 공부해야 한다.

끝.

컴퓨터 과학, 컴퓨터 공학, 소프트웨어 공학 : 차이점”에 대한 답글 2개

Add yours

  1. 안녕하세요, 공학 비전공 디자이너입니다.현재 SI 산업 스타트업에서 근무하고 있는데정말 도움이 많이되어답글을 남깁니다감사드립니다!

    1. 작게라도 도움이 되었다면 감사한 일입니다. 항상 좋은 일들만 가득하길 기원하겠습니다. ^^;

댓글 남기기

WordPress.com 제공.

위로 ↑