안녕하세요. 피씨클리어 입니다. 피씨클리어 프로그램으로 바이러스/악성코드 치료 후 주소입력창이 사라지는 경우가 발생하고 있습니다. 이는, 툴바가 삭제되면서 인터넷 익스플로러 주소입력창 관련 레지스트리를 수정하여 일어나는 문제입니다. 이에 주소입력창 복원 방법을 안내해 드립니다.
주소입력창 복원 방법 안내
① 윈도우 창에(그림과 같은 위치) 마우스를 가져다 놓고, 오른쪽 마우스 버튼 클릭합니다. 옵션중 [도구 모음 잠금] 부분이 체크되어 있는지 확인하시고, 체크가 되어 있으면 해제해 주세요.
② ① 번의 순서대로 옵션창에서 [주소 표시줄]을 선택해 주시면 왼쪽에 [주소(D)]가 나타납니다. [주소(D)]한칸 아래로 또는 원하시는 위치로 끌어(드래그) 놓으면 주소입력창이 복원됩니다. (※ [도구 모음 잠금]을 해지 하지 않으시면 주소입력창을 이동시킬 수 없습니다.)
우선 이러한 현상의 원인은 여러 가지가 있을 수 있습니다. 우리가 사용하는 MicroSoft 사에서 개발한 Windows 도 역시 프로그램으로 이용 중 여러가지 버그나 오류가 발생할 수 있으며, 이러한 문제의 원인으로 보고 되고 있습니다. 피씨클리어 역시 MicroSoft 사의 Windows 운영체계에서 운영되는 통합보안백신 프로그램이므로 버그나 오류가 발생할 수 있습니다.
우선 해결을 위해 피씨클리어 메뉴 중 악성코드검사와 PC최적화를 각각 구분 지어 수행해 주신이후 고객님의 컴퓨터에서 시작 => 프로그램 => 보조프로그램 => 시스템도구 => 디스크조각모음을 수행하시고 컴퓨터를 재부팅 합니다.
이후 다시 한번 문제가 있었던 검사를 해보시길 권유 드립니다. 이렇게 해도 계속해서 문제가 발생한다면 피씨클리어 고객센터로 연락 주시면 자세히 안내해 드리겠습니다.
리소스(resource) 및 오브젝트(object) 파일 링크(link) 및 연계 편집 실행 파일 생성 프로그램 실행 종료
1. 컴파일타임 오류(Compile-time Error)
이 과정 중에서, 제일 처음 과정(소스 코드 컴파일)에서 발생하는 오류는 컴파일타임 오류 라고 합니다. 컴파일 도중에 발생한 오류를 지칭하는 말입니다. 이 오류는 대개 소스 코드 자체의 문법적 오류(syntax error)로 인하여 발생합니다. 또한 이 오류는 핸들링(handling)이 불가능한 것입니다. 프로그램으로서 실행조차 되기 전에 오류가 발생했는데 당연히 핸들링보다 우선하여 코드를 수정해야할 것입니다. 그래서 이 오류는 개발 과정에서 사전에 수정되므로 일반 사용자들이 이 오류를 볼 일은 없습니다.
2. 링크타임 오류(Link-time Error)
두 번째 과정(연계 편집)에서 발생하는 오류는 링크타임 오류라고 합니다. 컴파일타임 오류와 마찬가지로 프로그램 실행 전에 발생한 오류의 하나입니다. 사실 이 오류는 그리 중요하게 여기지도 않고, 이런 용어는 잘 쓰지도 않습니다. 이 오류는 주로 필요한 리소스(Resource; 그림, 문자열과 같이 프로그램에 들어가는 부가적인 데이터들을 일컫음)나 라이브러리의 부재로 인해 발생하지만, 그렇지 않은 경우에는 해결하기가 까다롭습니다. 컴파일 오류와 마찬가지의 이유로 일반 사용자들이 맞닥뜨릴 일이 없는 형태의 오류입니다.
3. 런타임 오류(Run-time Error)
그리고 네번째 과정에서 발생하는 오류를 런타임 오류라고 합니다. 런타임 오류의 정의는 말 그대로, "프로그램 실행 중 발생한 오류"입니다. 인터넷 검색을 하다보면 런타임 오류를 설명하는 말이 다음과 같은 것들이 있습니다.
"프로그램이 조정할 수 있는 환경을 넘어선 환경에 의해서 발생되는 오류", "어떤 객체(object)를 실행하려고 찾다가 없거나, 혹은 적당하지 않은 값을 리턴 받으면서 생기는 오류"
이 설명들은 완전히 틀린 건 아니지만 엄밀히 말하면 모두 틀렸다고 할 수 있습니다.그 이유는 다음의 4. 런타임 오류의 발생원인에서 자세히 설명합니다.
4. 런타임 오류의 발생 원인
런타임 오류의 발생 원인은 매우 다양하지만 피상적인 이유는 단 하나입니다.
프로그램이 동작 중에 어떤 이유로 잘못된 데이터를 가지게 되어 잘못된 처리를 진행하려 할 때 런타임 오류가 발생하는 것입니다. 이 때 프로그램 자체적으로 조정하거나, 혹은 OS가 끼어들어 프로그램을 중단시킵니다. 프로그램이 런타임 오류를 자체적으로 조정했다면 사용자는 여전히 프로그램을 계속 이용 할 수 있을 것입니다. 하지만 OS가 프로그램을 중지시켰다면 더 이상 이용하지 못하고 사용중이던 데이터도 증발하게 됩니다.
프로그래머들은 분명히 개발 과정에서 런타임 오류가 발생할 가능성을 통찰하여 오류가 발생해도 잘못된 처리를 하지 않도록하는 코드를 미리 넣어서 사용자에게 자세한 알림창을 띄워 친절하게 알려주지만, 프로그래머들도 신은 아닌 관계로 어쩌다보면 예기치 못한 런타임 오류(unexpected run-time error)가 발생합니다.
그러면 그렇게 프로그램이 핸들링하지 못한 예기치 못한 런타임 오류는 어떻게 될까? 그것은 '하수 종말 처리장'을 떠올리면 어떻게 될지 알기 쉽습니다. 핸들링되지 못한 런타임 오류는 OS(혹은 VM)가 최종적으로 처리합니다. OS는 런타임 오류를 최종적으로 핸들링하여 사용자에게 예기치 못한 런타임 오류가 발생하였음을 알린 후 프로그램을 종료시키고 다시 정상적으로 컴퓨터를 운영합니다. 이것이 윈도우에서 종종 보게되는 다음과 같은 장면의 발생 과정입니다.
앞서 설명한대로, 런타임 오류의 피상적인 이유는 단 한 가지라고 했습니다. 그렇다면 근본적인 원인은 뭘까? 답은, "너무 다양하다"입니다. 그 중 몇 개를 뽑아 나열하자면 다음과 같습니다.
1. 논리적으로 잘못된 동작의 조합 2. OS가 판단하기에 어떤 프로그램이 내린 명령이 컴퓨터의 운영에 좋지 않은 영향을 미친다고 생각될 때 3. 플랫폼(platform) 차이의 문제
'논리적으로 잘못된 동작의 조합'이라는 것은 쉽게 말해 버그(bug)입니다. 프로그래머들은 프로그램을 항상 프로그램이 정상적이고 상식적인 방향으로 동작하도록 설계하지만 이미 말한대로 프로그래머는 신이 아니므로 프로그램은 분명 이상한 동작을 할 수가 있습니다. 기대하고 예측하고 설계한 방향으로 프로그램이 동작하지 않는 것입니다. 그럴 때 우리는 이를 버그라고 부름니다. 이런 측면에서 모든 프로그램은 버그가 발생할 가능성이 있다고 할 수도 있습니다. 그래서, 어느 것이나 마찬가지지만, 프로그램도 피드백(feedback)이 중요합니다.
물론 버그가 발생했다고 다 런타임 오류로 직행하는 것은 아닙니다. 버그에도 멀쩡하게 동작하는(그러나 원하는 방향은 아닌) 버그와, 런타임 오류를 발생시키는 버그가 있습니다. 플랫폼 차이의 문제로 인한 런타임 오류는 프로그램 설계에 대한 문제이기도 합니다. 단적인 예를들자면, 윈도우 XP에서 개발된 프로그램이 DOS에서 잘 돌아 가겠느냐하는 것입니다. 물론 그럴 수도, 아닐 수도 있습니다.
요즘 개발되는 대개의 프로그램은 선배 프로그래머들에 의해 이미 개발된 편리한 라이브러리와 툴을 이용함으로써 개발 생산성을 높이고 시간을 단축시키곤 하지만, 오히려 그 때문에 플랫폼에 제약을 받게 됩니다. 그 라이브러리가 특정 플랫폼에서 최적화 되어있는 경우가 많기 때문입니다. 그래서 앞서 든 예와 같이, 플랫폼이 바뀌면 프로그램이 동작하는 상황도 바뀝다. 프로그램 설계시에 그것을 예측하지 못하면 결국 프로그램은 오동작하여 런타임 오류가 발생하는 것입니다. 그런데 사실 이것은 예측하여 설계한다해도 이러한 오동작을 완전히 박멸할 수는 없습니다. 모든 사용자의 컴퓨터가 같은 OS라고 해서 장착한 하드웨어나 깔린 프로그램이 한결 같이 같은 것이 아니므로 얼마든지 발생할 수가 있습니다. 프로그래머들은 이러한 문제를 해결하기 위해 플랫폼과 프로그램 사이의 격차를 줄일 수 있는 방법을 고안하게 되는데, 그것이 바로 VM입니다. 이 VM을 통해 실행되는 프로그램은 어떤 플랫폼에서든지 동일하게 동작한다고 보장됩니다. 덕분에 이렇게 플랫폼 차이에 의한 런타임 오류는 점점 해소되고 있습니다.
그 다음, 마지막으로 2번의 경우는 사실 위의 화면과 같은 모든 오류 메시지의 원인이기도 합니다. 버그로 인해서, 혹은 플랫폼 차이로 인한 오동작으로 인해 프로그램이 '분수에 넘치는 짓'(권한을 넘는 동작)을 하면 OS는 프로그램을 중지 시키고 강제 종료 시킵니다.
그런 '분수에 넘치는 짓'으로 말할 것 같으면, 대표적으로 '메모리 침범'을 들 수 있습니다. '메모리 침범'은, 어떤 프로그램이 OS가 허락한 메모리의 영역 이외의 영역에 접근하려고 하는 것입니다. 이것은 빈틈없이 꽉 짜인 운영체제에서 대단히 위험한 행동으로서, OS는 즉시 프로그램을 멈춘 뒤 사용자에게 알리고 강제 종료시킵니다. OS라는 '독재자'가 구축해 놓은 세상이 보기에는 법률 위반과 같습니다. 위법을 저지르면 어찌 될까? 당연히 법에 명시된 그대로의 처벌을 받을 것입니다.
5. 런타임 오류의 해결책
발생 원인을 알았으니, 이제 해결 방법을 알아야 할 것입니다. 런타임 오류는 어떻게 해결할 수 있을까? 결론부터 말하자면 일반 사용자들은 런타임 오류를 거의 해결할 수 없습니다. 어떤 프로그램에서 발생하는 런타임 오류에 대한 '해결책'이라고 알려지는 것은 전적으로 그 프로그램을 만든 사람, 혹은 그 프로그램과 매커니즘을 잘 아는 일부 전문가들이 제시한 것입니다. 일반 사용자들은(물론 여기에도 전문가는 있겠지만...) 그저 전문가들이 알려주는 대로 따를 수 밖에 없습니다. 그래서 런타임 오류를 해결하는 패치나 해결된 새로운 버전이 나오기를 기다려야 합니다. 하지만 그 해결책이나 패치가 모든 컴퓨터, 모든 상황에서 유효할 수는 없으며, 결국 런타임 오류는 모든 사람, 모든 컴퓨터에서 완전히 박멸되기 힘듭니다. 그 이유는 간단합니다. 일반 사용자는 프로그램 내부에서, 특정한 동작이나 작업이 어떻게 돌아가는지 모르기 때문입니다. 만약 그걸 안다면 왜 오류가 발생했는지도 금방 추적해내어 오류를 해결할 수 있을 것입니다. 런타임 오류를 해결하는 방법의 핵심은 프로그램이 어떻게 잘못 돌아가는지 알아내는 것입니다.
그렇다고 그 매커니즘을 모르는 일반 사용자들이 런타임 오류를 아주 해결할 수 없다는 말은 아닙니다. 프로그래머들(시스템 프로그래머나 OS 프로그래머등)은 오류가 발생했을 때 다른 프로그래머를 위해 반드시 오류의 원인과 발생 위치등에 대한 자세한 정보를 알려주도록 설계합니다. 그런 때에 발생하는 오류 메시지의 일부는 일반 사용자들도 쉽게 알아들을 수 있습니다. 예를 들어, "파일을 찾을 수 없습니다", "파일이 이미 사용 중이므로 접근할 수 없습니다", "접근 권한이 없습니다" 등과 같이 딱 보면 알 수 있는 오류 메시지도 있습니다. 이런 경우에 눈치가 좀 있거나 컴퓨터를 좀 만질 줄 아는 사용자라면 금방 해결할 수 있습니다. 물론 이것저것 건드리다가 망가뜨리는 수도 있을 것입니다.