# 2.1.1 통합개발 환경 이전의 프로그래밍

&#x20;최근에 널리 사용되는 프로그래밍 언어 대부분은 개발 생산성을 높이기 위해 여러 가지 기능이 집약된 전용 개발 툴을 제공하거나, 또는 유명한 개발 툴에 플러그인 방식으로 사용할 수 있도록 컴포넌트를 제공합니다. 이같은 도구들은 개발을 무척 편리하게 해 줄 뿐만 아니라, 하나의 툴 안에서 개발에 필요한 모든 것을 해결할 수 있도록 All-In-One 형식으로 구성되어 있어, 개발을 위해 여러 개의 툴을 사용할 필요가 없는 것이 장점입니다.&#x20;

&#x20;하지만 과거에는 그렇지 않았습니다. 프로그래머들은 하나의 소프트웨어를 완성하기 위해 용도 별로 여러가지 툴을 바꿔가며 사용하는 과정을 반복해야 했습니다. 컴파일러가 소스코드를 컴파일하는 과정에서 오류가 발생하면 이를 확인한 프로그래머가 잘못된 부분과 원인을 찾아 고친 후 다시 컴파일 합니다. 이 과정을 반복한 끝에 오류 없이 컴파일이 완료되면, 이제 그 결과로 만들어진 파일을 실행해보는 단계에 접어듭니다.&#x20;

&#x20;지금까지의 과정에서 발생했던 오류를 컴파일 오류로 분류하는 반면, 파일을 직접 실행하면서 발생하는 오류는 런타임 오류라고 합니다. 실행 시점에서 발생하는 오류라는 의미죠&#x20;

&#x20;런타임 오류가 발생하면 디버깅 작업을 하는데, 코드 중간중간에 브레이크 코드나 로그 출력 구문을 집어넣어서 실행 과정 중 어느 단계에서 오류가 발생하는지 알아내는 방법을 많이 사용하지만, 경우에 따라서는 메모리 덤프를 떠서 메모리에 입력된 데이터를 분석하기도 합니다. 이를 편리하게 해주는 툴인 디버거를 사용하는 경우도 많죠. 소프트웨어를 개발하는 데에 걸리는 시간의 절반 이상이 오류를 수정하는 과정에 사용된다는 것이 일반적인 지론입니다.

&#x20;오류의 원인을 찾아내었다면 이를 고치기 위해 소스 코드를 다시 수정합니다. 수정이 완료되면 커맨드 창을 열어 컴파일하고, 다시 그 결과로 나온 파일을 실행해봅니다. 먼저 기존의 런타임 오류가 제대로 해결되었는지 확인하고, 새로운 런타임 오류가 발생하지 않는지 체크합니다. 실행한 어플리케이션이 원하는 결과를 내놓을 때까지 이 과정을 반복하면 하나의 소프트웨어가 만들어집니다.&#x20;

&#x20;개발 과정을 진행하는 동안 개발자들은 소스 코딩과 컴파일, 실행 및 디버깅을 위해 여러 가지 관련 툴들을 번갈아가며 사용해야 했습니다. 그러다 보니 번거롭기도 하고, 이 과정에서 오류가 발생하는 경우도 생겨서 개발 생산성이 좀처럼 나아지지 않는 문제가 대두되었습니다. 하드웨어는 폭발적으로 생산성이 극대화되고 있는 상황에서 소프트웨어의 발전 속도는 이에 따라가지 못하게 된 거죠. 이를 극복하기 위한 노력의 하나로 소프트웨어의 개발 생산성 향상에 대한 방법이 모색되기 시작했습니다.
