본문 바로가기

카테고리 없음

컴파일오류, 런타임오류, 링크타임오류 그게 뭔데 ?

1. 컴파일 타임 오류(Compile-time-Error)

 

위 과정 순서 중에서 첫 번째 과정(소스코드 컴파일)에서 발생하는 오류는 컴파일타임 오류라고 합니다.

 

이 오류는 대개 소스코드 자체의 문법적오류(syntax error)로 인하여 발생합니다.

또한 이 오류는 핸들링(handling)이 불가능합니다. 프로그램으로서 실행조차 되기 전에

오류가 발생했기때문에 핸들링이 불가하기에 코드를 수정해야 합니다.

 

2. 링크 타임 오류(Link-time-Error)

두 번째 과정(연계 편집)에서 발생하는 오류는 링크타임 오류하고 한다. 컴파일타임 오류와 마찬가지로 프로그램 실행 전에 발생한 오류의 하나이며 사실 이 오류는 그리 중요하게 여기지 않는 편이다. 이 오류는 주로 필요한 리소스(Resource: 그림, 문자열과 같이 프로그램에 들어가는 부가적인 데이터들을 일컫는 말)나 라이브러리의 부재로 인해 발생한다. 컴파일 오류와 마찬가지의 이유로 일반 사용자들이 맞닥뜨릴 일이 없는 형태의 오류이다.

 

3. 런타임 오류(Run-time-Error)

네번째 과장에서 발생하는 오류를 런타임 오류라고 한다. 런타임오류는 정의는 말 그대로,

“프로그램 실행 중 발생한 오류” 라는 의미를 뜻한다.

 

3-1. 런타임 오류의 발생 원인

 

런타임 오류의 발생원인은 다양하지만 표면적인 큰 원인이 한가지가 있다.

 

프로그램이 동작 중에 어떤 이유로 잘못된 데이터를 가지게 되어 잘못된 처리를 진행하려 할때 런타임 오류가 발생하는 것이다. 이 때 프로그램 자체적으로 조정하거나 혹은 OS가 끼어들어 프로그램을 중단 시킨다. 프로그램이 런타임 오류를 자체적으로 조정했다면 사용자는 여전히 프로그램을 계속 이용할 수 있을 것이다. 하지만 OS가 프로그램을 중지 시켰다면 더 이상 이용하지 못하고 사용 중이던 데이터도 증발하게 된다.

 

프로그래머들은 분명히 개발 과정에서 런타임 오류가 발생할 가능성을 통찰하여 오류가 발생하여도 잘못된 처리를 하지 않도록하는 코드를 미리 넣어서 if문을 통한 보험을 만들어 놓듯 코딩을 하지만 예기치 못한 런타임 오류가 발생한기도 한다.

 

그러면 그렇게 프로그램이 핸들링하지 못한 예기치 못한 런타임 오류는 어떻게 될까? 

그것은 OS(혹은 VM)가 최종적으로 처리한다. 

  • OS란?

OS는 런타임 오류를 최종적으로 핸들링하여 사용자에게 예기치 못한 런타임 오류가 발생하였음을 알린 후 프로그램을 종료시키고 다시 정상적으로 컴퓨터를 운영한다.

컴퓨터를 운영한다. 

 

앞서 런타임 오류는 피상적인 이유는 단 한가지라고 했따. 그렇다면 근본적인 원인은 뭘까?

답은, “너무 다양하다” 그중 몇개를 뽑아 나열하자면 다음과 같다.

 

  1. 논리적으로 잘못된 동작의 조합 = 버그(bug)
  2. OS가 판단하기에 어떤 프로그램이 내린 명령이 컴퓨터의 운영에 좋지않은 영향을 미친다고 생각될 때
  3. 플랫폼 차이의 문제

 

 

‘논리적으로 잘못된 동작의 조합’ 이라는것은 쉽게 말해 버그(bug)이다. 

프로그래머들이 정상적이고 상식적인 방향으로 동작하도록 설계하지만 그럼애도 불구하고

발생하는 오류를 버그라고 부르는 것이다.

 

여기서 꼭 버그가 발생했다고 런타임 오류가 직행되는것은 아니다.

버그에도 정상적으로 동작하는(그러나 원하는 방향은 아닌) 버그 와

런타임 오류를 발생시키는 버그가 있다.

 

플랫폼 차이 문제로 인한 오류는 프로그램 설계에 대한 문제이기도 하다. 단적인 예를 들자면

 

요즘 개발되는 편리함과 효율성을 위해 라이브러리와 툴을 이용함으로써 개발 생산성을 높이고 시간을 단축시키곤 하지만, 오히려 그 때문에 플랫폼에 제약을 받게 된다. 그 라이브러리가 특정 플랫폼에서 최적화 되어있는 경우가 많기 때문이다. 

그래서 앞서 든 예와 같이, 플랫폼이 바뀌면 프로그램이 동작하는 상황도 바뀐다. 프로그램 설계시에 그것을 예측하지 못하면 결국 프로그램은 오동작하여 런타임 오류가 발생하는 것이다. 

 

그런데 사실 이것은 예측하여 설계한다 해도 이러한 오동작을 완전히 박멸할 수는 없다. 모든 사용자의 컴퓨터가 같은 OS라고 해서 장착한 하드웨어나 깔린 프로그램이 한결 같이 같은 것이 아니므로 얼마든지 발생할 수가 있다. 프로그래머들은 이러한 문제를 해결하기 위해 플랫폼과 프로그램 사이의 격차를 줄일 수 있는 방법을 고안하게 되는데, 그것이 바로 VM이다. 

 

이 VM을 통해 실행되는 프로그램은 어떤 플랫폼에서든지 동일하게 동작한다고 보장받는다. 덕분에 이렇게 플랫폼 차이에 의한 런타임 오류는 점점 해소되고 있다.

 

* 오류 핸들링(error handling) : 프로그램 실행 도중 발생한 오류를 처리하는 것을 일컫는다.

* 플랫폼(platform) : OS 프로그램이 동작하고 있는 컴퓨터 환경을 통칭한다.
* VM(Virtual Machine) :
가상 머신. 프로그래밍에서 말하는 VM 컴파일된 프로그램의 코드를 번역하여 실행하는 컴파일러를 지칭하는 말이다. 하드웨어와 프로그램 사이를 중계하며 양자간 차이를 줄이는 역할을 한다.
* OS(Operating System) :
운영 체제