충돌 (컴퓨팅)
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
충돌(컴퓨팅)은 컴퓨터 프로그램이 예상치 못한 방식으로 종료되는 현상을 의미하며, "다운", "떨어졌다", "죽었다" 등으로 표현되기도 한다. 애플리케이션 충돌은 운영 체제에 허용되지 않은 연산을 수행할 때 발생하며, 메모리 접근 오류, 유효하지 않은 명령어 실행, I/O 연산 실패, 잘못된 인자 사용 등이 원인이 될 수 있다. 특히 게임에서는 "Crash to Desktop(CTD)"이라는 용어로 사용되기도 하며, 웹 서버 충돌은 웹사이트 접속 불가를 초래할 수 있다. 운영 체제 충돌은 하드웨어 예외 처리 실패 또는 내부 일관성 손실로 인해 발생하며, 보안 취약점으로 이어질 수 있다. 충돌 발생 시 개발자는 충돌 리포트를 통해 문제 원인을 분석하고, 자동 복구, 주기적 재시작, 데이터 백업 등의 방법으로 충돌을 예방하거나 피해를 완화할 수 있다.
더 읽어볼만한 페이지
- 소프트웨어 이상 - 예외 처리
예외 처리는 프로그램 실행 중 예외 발생 시 정상적인 실행 흐름을 유지하거나 안전하게 종료하기 위한 메커니즘으로, 많은 프로그래밍 언어에서 제공하며 예외 안전성을 목표로 한다. - 소프트웨어 이상 - NaN
NaN(Not a Number)은 IEEE 754 표준에서 숫자가 아님을 나타내는 특수한 값으로, 지수부가 모두 1이고 가수부가 0이 아닌 비트 패턴으로 표현되며, 연산 시 예외를 발생시키지 않고 전파되는 quiet NaN과 예외를 발생시키는 signaling NaN이 있다. - 컴퓨터 특수용어 - DLL 지옥
DLL 지옥은 윈도우 운영체제에서 DLL 파일 공유로 인해 발생하는 호환성 문제 및 의존성 충돌을 의미하며, 특정 프로그램의 설치/제거 과정에서 시스템 DLL이 변경되어 다른 프로그램의 동작을 방해하는 현상이다. - 컴퓨터 특수용어 - FUD
FUD는 경쟁사의 제품이나 서비스에 대한 부정적인 정보를 퍼뜨려 소비자의 의사 결정을 왜곡하는 전략으로, 1970년대 IBM에서 유래하여 정보통신 기술, 정치, 광고 등 다양한 분야에서 사용되며 비판받는다. - 컴퓨터 오류 - 블루스크린
블루스크린은 윈도우 운영체제에서 발생하는 치명적인 오류로, 컴퓨터 작동을 멈추고 파란색 화면에 오류 메시지를 표시하며, 하드웨어 또는 소프트웨어 문제로 인해 발생하고, 시스템 복원, 안전 모드 부팅 등의 방법으로 대처한다. - 컴퓨터 오류 - 글리치
글리치는 예기치 않은 오작동이나 오류를 뜻하며, 전자 공학, 컴퓨터, 비디오 게임, 텔레비전 방송, 대중문화 등 다양한 분야에서 기능 실패, 오류, 그래픽 및 사운드 문제, 신호 오류 등의 이상 현상을 포괄적으로 지칭하는 용어이다.
충돌 (컴퓨팅) | |
---|---|
일반 정보 | |
현상 | 프로그램이 예상치 않게 종료되는 현상 |
원인 | 오류 |
세부 정보 | |
영어 | Crash |
설명 | 예상치 못한 프로그램 종료 |
기술적 원인 | 오류 |
발생 시점 | 프로그램 실행 중 |
주요 원인 | 잘못된 메모리 주소 접근 예외 처리 미흡 프로그래밍 오류 데이터 손상 |
추가 정보 | |
관련 용어 | 시스템 충돌 블루 스크린 커널 패닉 |
2. 용어
한국어에서는 "충돌" 외에 "다운", "떨어졌다", "죽었다" 등의 표현도 사용된다. 메인프레임 환경에서는 "ABEND"(아벤드, ABnormal END의 약어)라는 용어가 사용되기도 한다.[12][13] 특히 컴퓨터 게임에서는 "Crash to desktop"의 약어로 "'''CTD'''"라는 용어가 자주 사용된다.
넓은 의미로는 "정상적으로 동작하지 않게 되는 것"을 가리키며, "프리즈(멈춤)" 현상도 포함될 수 있다. 그러나 프리즈 상태는 통상 프로그램이 아직 실행 중이며 종료된 것은 아니다. 만약 교착 상태 등에 빠진 것이 아니라, 어떤 처리에 시간이 걸려 응답이 지연되고 있을 뿐이라면, 그대로 두면 프리즈가 회복될 가능성도 있다. GUI 응용 프로그램의 이벤트 루프를 담당하는 메인 스레드(사용자 인터페이스 스레드)가 응답 불능이 되면, 운영 체제에 의해 응답 정지를 나타내는 대화 상자가 표시되는 경우가 있지만, 대기를 계속하거나 닫는 선택지가 있으며, 닫기를 선택하면 응용 프로그램은 강제 종료된다. 이는 실질적으로 충돌에 가깝다.
3. 애플리케이션 충돌
응용 소프트웨어는 운영 체제에서 허용하지 않는 연산을 수행할 때 주로 충돌한다. 운영 체제는 예외 또는 시그널을 보내 이 상황을 알린다. 유닉스 계열 시스템에서는 코어 덤프를 생성해 원인을 분석하기도 한다. 윈도우와 유닉스 GUI 환경에서는 대화 상자를 표시해 디버거 연결 여부를 묻기도 한다. 일부 애플리케이션은 오류 복구를 시도해 실행을 계속하기도 한다.[14]
프로그램 설계상 오류로 치명적인 문제가 발생해 실행을 계속할 수 없을 때도 충돌이 발생한다. 이상 값 입력, 과도한 부하, 장시간 연속 작동 등이 원인이다. 예를 들어 0으로 나누기, 널 포인터 참조, 버퍼 오버런 등이 있다. 메모리 누수가 반복되면 사용 가능 메모리가 줄어들어 결국 메모리 확보에 실패하기도 한다.
C나 C++처럼 언어 자체 보호 기능이 거의 없으면 정의되지 않은 동작 발생 시 운영 체제가 이상을 감지해 강제 종료한다. Java나 C#은 예외 처리가 가능하지만, 메모리 부족 상황에서는 불가능할 수 있다.
애플리케이션 충돌 시 작업 중이던 데이터는 대부분 손실된다. "보호 위반", "예외" 등의 시스템 오류 메시지가 표시될 수 있다. 운영 체제나 커널에서 동작하는 장치 드라이버가 충돌하면 블루 스크린, 커널 패닉, 갑작스러운 재부팅이 발생할 수 있다. 이때 실행 중이던 모든 애플리케이션도 함께 충돌한다.
최근 멀티태스킹 운영 체제는 메모리 보호 기능으로 애플리케이션 충돌이 다른 애플리케이션이나 운영 체제에 영향을 주지 않도록 설계한다. 마이크로소프트 윈도우, macOS, 리눅스와 달리 iOS, Android 같은 모바일 OS는 메모리 부족 시 백그라운드 앱부터 강제 종료한다.[14]
CPU, GPU 과열 등 하드웨어나 우주선에 의한 메모리 전하 파괴 등 드문 경우에도 충돌이 발생할 수 있다.[15][16]
3. 1. 일반적인 애플리케이션 충돌 원인
3. 2. Crash to Desktop (CTD)
"데스크톱으로의 충돌"(Crash to Desktop, CTD)은 컴퓨터 프로그램, 주로 비디오 게임에서 예기치 않게 게임이 종료되고 데스크톱으로 돌아가는 현상을 말한다. CTD는 오류 메시지가 표시되지 않는 경우가 많아 원인 파악이 어렵다.[12][13]
CTD 발생 시, 게임은 보통 잠시 멈췄다가 종료되거나, 검은 화면이 되면서 마지막 몇 초간의 소리를 반복하기도 한다. (오디오 데이터 버퍼 크기에 따라 다름). 특정 동작(예: 지역 로드)이 트리거가 되는 경우도 있지만, 명확한 동작 없이 발생하는 경우가 많아 패턴이나 공통점을 찾기 어렵다.
CTD 문제 해결을 위해 게임을 창 모드로 실행해 볼 수 있다. 윈도우 비스타와 윈도우 XP는 CTD 원인 추적 기능을 제공한다. ''StepMania''나 BBC의 ''Bamzooki''처럼 전체 화면 모드에서 CTD가 발생해도 별도 창에 오류를 표시하는 프로그램도 있다.
4. 웹 서버 충돌
웹 서버 소프트웨어 충돌이 발생하면 웹 사이트에 접속할 수 없게 되거나, 정상적인 내용 대신 오류 메시지만 표시될 수 있다. 예를 들어, PHP 스크립트를 사용하는 웹 사이트에서 MySQL과 같은 SQL 데이터베이스 서버가 충돌하면, PHP는 연결 오류를 표시한다.[14]
5. 운영 체제 충돌
운영 체제 충돌은 주로 처리할 수 없는 하드웨어 예외가 발생하거나, 운영 체제의 내부 일관성을 상실했을 때 발생한다. 윈도우에서는 블루 스크린이, macOS나 리눅스에서는 커널 패닉이 발생할 수 있다.
z/OS와 같이 신뢰성, 가용성 및 서비스 가능성 (RAS) 기능을 갖춘 운영 체제는 중요한 구성 요소의 충돌로부터 복구할 수 있다.
5. 1. 비정상 종료 (Abnormal End, ABEND)
ABEND는 소프트웨어의 비정상적인 종료 또는 프로그램 충돌을 의미한다. 노벨 NetWare 네트워크 운영 체제에서의 오류 또는 충돌은 일반적으로 ABEND라고 불린다. abend.org와 같이 인터넷을 중심으로 NetWare 관리자 커뮤니티가 생겨났다.이 용어는 IBM OS/360, ..., z/OS 운영 체제의 'ABEND' 매크로에서 유래되었다. 일반적으로 대문자로 표기되지만 "abend"로 나타날 수도 있다. 몇 가지 일반적인 ABEND 코드는 System ABEND 0C7 (데이터 예외) 및 System ABEND 0CB (0으로 나누기)이다.[1][2][3] ABEND는 "소프트" (자동 복구 허용) 또는 "하드" (작업 종료)일 수 있다.[4] 이 용어는 유머러스하게 독일어 단어 "Abend"(저녁)에서 유래되었다고 주장되기도 한다.[5]
6. 충돌의 보안 영향
충돌을 유발하는 많은 소프트웨어 버그는 임의 코드 실행과 권한 확대에 대한 취약점 공격이 가능하다.[22][23] 예를 들어, 스택 버퍼 오버플로는 서브루틴의 반환 주소를 유효하지 않은 값으로 겹쳐쓸 수 있으며, 이것은 서브루틴이 리턴할 때 세그멘테이션 오류를 유발한다. 그러나 만약 익스플로잇이 반환 주소를 유효한 주소로 겹쳐쓴다면 그 주소의 코드는 실행될 것이다.
응용 프로그램 충돌은 사용자의 민감하고 개인 정보를 포함할 수 있다.[6] 게다가 충돌을 일으키는 많은 소프트웨어 버그는 악용되어 임의 코드 실행 및 기타 유형의 권한 상승에 사용될 수 있다.[7][8]
7. 충돌 재현 및 분석
충돌 리포터를 통해 현장에서 충돌이 수집되면, 개발자는 이를 로컬 환경에서 재현해야 한다. 이 과정에서 STAR는 기호 실행을 사용하며,[9] EvoCrash는 진화적 탐색을 수행한다.[10]
7. 1. 충돌 보고 (Crash Report)
응용 프로그램 충돌 시, 디버깅에 유용한 정보를 수집하고 분석하는 과정을 충돌 보고라고 한다. 특히 디버거를 사용할 수 없는 최종 사용자 환경에서 발생한 충돌 원인을 파악하는 "포스트모템 디버깅"에 유용하다.- 윈도우의 블루 스크린은 오류 코드를 포함한 정보를 화면에 표시한다. 윈도우 NT 계열은 윈도우 9x 계열보다 더 많은 정보를 제공한다.
- 윈도우 이벤트 로그에는 충돌 원인이 된 예외 코드나 오프셋 주소와 같은 정보가 자동으로 기록된다.
- 윈도우의 크래시 덤프나 유닉스 계열 운영 체제의 코어 덤프는 충돌 시점의 메모리 내용을 파일로 기록하여, 추후 분석을 가능하게 한다.
- Mozilla의 Breakpad나 Google의 Firebase Crashlytics|Crashlytics영어와 같은 도구를 사용하면, 수집된 정보를 개발자에게 전송할 수 있다.
- 메인프레임 전용 OS에서는 보통 사전 설정(SLIP 등)에 따라 코어 덤프를 출력한다.
- Google Play Console에서는 Android 애플리케이션의 충돌 및 응답 없음(ANR) 오류에 대한 자세한 분석 정보를 제공한다.[17]
개발자에게 충돌 정보를 전송하는 시스템은 개인 정보 보호를 위해 개인 식별 정보를 포함하지 않는 것이 일반적이다. 하지만 사용 상황 및 진단 정보 자동 공유에 대한 최종 사용자의 사전 동의가 필요하며, EU 권역 국가에서는 GDPR에 따른 솔루션을 사용해야 한다.[18]
8. 충돌 예방 및 복구 기술
충돌을 예방하거나 충돌로부터 복구하기 위한 다양한 기술들이 존재한다.
자동 복구 기술에는 다음과 같은 것들이 있다.
- 저널링 파일 시스템: 쓰기 작업 중 충돌이 발생해도 디스크 상의 데이터 불일치를 방지한다.
- 서버 프로그램 자동 재시작 스크립트: 프로세스 다운 시 자동으로 다시 시작한다.
- 고가용성 클러스터: 시스템을 다중화하여 하드웨어나 소프트웨어 충돌에 대응한다.
- 데이터베이스 롤백: 쓰기 중 충돌로 인한 데이터 파괴를 방지한다.
- OS 메모리 보호 기능: 한 프로세스의 충돌이 다른 프로세스나 OS 전체로 확산되는 것을 막는다.
- 윈도우 비스타 이후 재시작 관리자: 지원하는 애플리케이션의 충돌 후 자동 재시작, 편집 중 파일 자동 저장 및 복원을 지원한다.[19]
운영을 통한 완화 방법으로는, 연속 가동 서버의 주기적인 재시작을 통해 재부팅과 같이 주기적으로 시스템을 재시작하여 충돌 가능성을 낮추거나, 작업 데이터의 주기적 저장 및 외부 백업을 통해 개인 사용자가 충돌로 인한 데이터 손실을 줄일 수 있다.[20]
ECC 메모리와 같은 오류 정정 기술을 사용하여 충돌을 방지하는 고신뢰성 시스템도 있다.[20]
8. 1. 자동 복구
- 저널링 파일 시스템은 쓰기 중의 충돌로 인해 디스크 상의 데이터가 불일치를 일으키는 것을 방지한다.
- 일부 서버 프로그램은 프로세스가 다운되었을 경우 자동으로 다시 시작하는 스크립트를 준비하고 있다.
- 고가용성 클러스터는 원래 시스템을 다중화하여 장애에 대비하기 위한 것이지만, 하드웨어 장애뿐만 아니라 프로세스 감시 등으로 소프트웨어의 충돌에도 대응한다.
- 데이터베이스가 갖춘 롤백 기능은 쓰기 중의 충돌로 데이터가 파괴되는 것을 방지한다.
- OS의 메모리 보호 기능은 어떤 프로세스의 충돌이 다른 프로세스나 OS 자체로 파급되는 것을 방지한다.
- 윈도우 비스타 이후에 탑재된 재시작 관리자는 해당 기능을 지원하는 애플리케이션의 충돌 후 자동으로 애플리케이션을 재시작하거나, 편집 중이던 파일의 자동 저장 및 복원을 지원할 수 있다.[19]
8. 2. 운영을 통한 완화
근본적인 해결책은 아니지만, 운영을 통해 충돌의 피해를 억제하거나 발생률을 낮추는 경우도 있다.- 연속 가동되는 서버에서는 재부팅과 같은 주기적 재시작이 효과적인 경우가 있다.
- 작업 중인 데이터를 자주 저장하거나, 외부 저장 장치에 백업하는 것도 개인적으로 할 수 있는 대책 중 하나이다.[20]
하지만, 내장 환경이나 인명과 관련된 시스템 등, 충돌이 절대로 허용되지 않는 심각한 경우도 있다. 우주선으로 인한 충돌을 방지하기 위해, 오류 정정 기능을 가진 ECC 메모리가 사용되기도 한다.
8. 3. 고신뢰성 시스템
내장 환경이나 항공 우주 시스템 등에서는 ECC 메모리와 같은 오류 정정 기술을 사용하여 충돌을 방지한다.[20]참조
[1]
서적
OS Release 21 – System/360 Operating System – Supervisor Services and Macro Instructions
http://bitsavers.org[...]
IBM
2023-07-08
[2]
웹사이트
0Cx – z/OS MVS System Codes
https://www.ibm.com/[...]
IBM
[3]
웹사이트
List of ABEND codes
http://faculty.madis[...]
2018-09-16
[4]
서적
z/VM and Linux Operations for z/OS System Programmers
https://books.google[...]
IBM Redbooks
[5]
웹사이트
Abend
http://dictionary.di[...]
2011-09-29
[6]
arXiv
Crashing Privacy: An Autopsy of a Web Browser's Leaked Crash Reports
[7]
웹사이트
Analyze Crashes to Find Security Vulnerabilities in Your Apps
http://msdn.microsof[...]
Msdn.microsoft.com
2007-04-26
[8]
웹사이트
Jesse Ruderman » Memory safety bugs in C++ code
http://www.squarefre[...]
Squarefree.com
2006-11-01
[9]
간행물
STAR: Stack Trace Based Automatic Crash Reproduction via Symbolic Execution
[10]
서적
2017 IEEE/ACM 39th International Conference on Software Engineering (ICSE)
http://resolver.tude[...]
2020-12-21
[11]
웹사이트
クラッシュとは - 意味をわかりやすく - IT用語辞典 e-Words
https://e-words.jp/w[...]
[12]
웹사이트
ANR | App quality | Android Developers
https://developer.an[...]
[13]
웹사이트
Preventing Hangs in Windows Applications - Win32 apps | Microsoft Learn
https://learn.micros[...]
[14]
웹사이트
プロセス間のメモリ割り当て | App quality | Android Developers
https://developer.an[...]
[15]
웹사이트
超高速信号処理分野(橋本研究室) — 電気電子工学科 | 京都大学工学部
https://www.s-ee.t.k[...]
[16]
뉴스
いま改めて見つめなおす宇宙線中性子による「ソフトエラー」の評価と対策(1) 宇宙空間から降り注ぐ放射線が身の回りの機器に与えている影響とは | TECH+(テックプラス)
https://news.mynavi.[...]
[17]
웹사이트
クラッシュやアプリケーション応答なしのエラーを表示する - Play Console ヘルプ
https://support.goog[...]
[18]
웹사이트
Firebase のプライバシーとセキュリティ
https://firebase.goo[...]
[19]
웹사이트
How to: Add Restart Manager Support | Microsoft Learn
https://learn.micros[...]
[20]
웹사이트
あなたのパソコンをブルースクリーンにしてしまう、宇宙からの来訪者の秘密 - ログミーBiz
https://logmi.jp/bus[...]
[21]
웹인용
충돌 : 지식백과
https://terms.naver.[...]
한국정보통신기술협회
[22]
웹인용
Analyze Crashes to Find Security Vulnerabilities in Your Apps
http://msdn.microsof[...]
Msdn.microsoft.com
2014-06-26
[23]
웹인용
Jesse Ruderman » Memory safety bugs in C++ code
http://www.squarefre[...]
Squarefree.com
2014-06-26
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com