일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 카카오 자물쇠와 열쇠
- 카카오 2020 코테
- 기업 조사 빨리 하는 법
- mac hadoop 설정
- 자소서 빨리 쓰는 법
- mac hadoop
- hive beeline 에러
- code=0)
- hadoop safe mode leave
- Safe mode is ON
- mac hadoop 설치
- 카카오 2020 코딩테스트
- 자소서 시간 줄이기
- hive beeline 실행
- hive beeline
- 백준 18428
- Failed to connect to localhost:10000
- 자소서 너무 오래 걸림
- mac hive
- 도커 교과서
- hive beeline 설정
- Resources are low on NN
- Could not open client transport with JDBC Uri: jdbc:hive2://localhost:10000
- 자소서 빨리
- 이더리움 #ethereum
- 이더리움
- mac hadoop 3
- is not allowed to impersonate hive (state=08S01
- hadoop safe mode
- mac hive 3
- Today
- Total
A seeker after truth
OS에서 프로그램과 패키지가 설치 및 삭제되는 과정을 설명해보자. 본문
안녕하세요! 이번 글에서는 일상적으로 경험하는 프로그램 설치와 삭제 과정 속에 숨겨진 내부 동작에 대해 자세히 알아보려고 합니다. 설치 버튼을 클릭하거나 패키지 매니저 명령어 몇 줄이면 완료되는 이 과정 뒤에는 운영체제 내부에서 어떤 복잡한 일들이 일어날까요?
1. 설치 파일 실행 - 첫 단계
Windows에서 .exe 파일을, Mac에서 .dmg 파일을 더블 클릭하면 어떤 일이 벌어질까요?
User: 크롬 설치 파일 더블클릭
OS: "오, 실행 가능한 프로그램이네! 이걸 메모리에 올려서 실행해야겠다."
이 순간 운영체제는 해당 파일이 실행 가능한 형식인지 확인하고, 설치 프로그램을 메모리에 로드합니다. 이것은 하드 디스크에서 RAM으로 데이터를 복사하는 과정입니다. 설치 프로그램이 메모리에 로드되면, CPU는 해당 프로그램의 명령어를 실행하기 시작합니다.
2. 사용자 권한 확인 - 보안의 첫 관문
OS: "이 프로그램이 시스템을 변경하려고 하는데, 허용할까요?"
User: "예" 버튼 클릭
이 단계에서 운영체제는 사용자 계정 제어(UAC)를 통해 관리자 권한이 필요한 작업을 허용할지 확인합니다. 이는 권한 상승(privilege escalation)이라는 보안 메커니즘의 일부로, 모든 프로그램이 기본적으로 제한된 권한으로 실행되다가 필요할 때만 더 높은 권한을 요청하게 됩니다.
3. 시스템 환경 확인 - 호환성 체크
설치 프로그램: "이 컴퓨터가 내가 필요로 하는 조건을 갖추고 있는지 확인해야겠다."
설치 프로그램은 다음과 같은 항목을 확인합니다:
- OS 버전과 호환성
- 필요한 최소 하드웨어 사양
- 필수 종속성(dependencies) 존재 여부
- 디스크 공간 확인
이 과정은 운영체제의 시스템 레지스트리나 환경 변수에 접근하여 정보를 수집합니다.
4. 파일 추출 및 복사 - 짐 풀기
설치 프로그램: "모든 필요한 파일을 지정된 위치에 풀어놓자."
대부분의 설치 파일은 실제로는 압축 파일입니다. 이 단계에서는:
- 압축 해제 알고리즘이 작동하여 파일을 풉니다.
- 파일 시스템 API를 사용하여 파일을 지정된 디렉토리에 복사합니다.
- 파일 시스템 트리가 업데이트됩니다.
Windows에서는 주로 C:\Program Files\ 디렉토리에, Mac에서는 /Applications/ 폴더에 파일이 복사됩니다. 이 과정에서 파일 시스템의 디렉토리 구조에 새로운 노드(폴더와 파일)가 추가됩니다.
5. 시스템 레지스트리 업데이트 - 주소록 갱신
설치 프로그램: "OS에게 내가 여기 있다고 알려주자."
특히 Windows 시스템에서 중요한 단계입니다:
- 레지스트리는 키-값 쌍으로 구성된 계층적 데이터베이스입니다.
- 설치 프로그램은 HKEY_LOCAL_MACHINE\SOFTWARE\ 또는 HKEY_CURRENT_USER\SOFTWARE\ 아래에 프로그램 정보를 기록합니다.
- 이 정보에는 설치 경로, 버전, 구성 설정 등이 포함됩니다.
Mac과 Linux에서는 레지스트리 대신 구성 파일(.plist, .conf 등)을 사용하여 비슷한 정보를 저장합니다.
6. 환경 변수 설정 - 길 표시하기
설치 프로그램: "다른 프로그램들이 나를 쉽게 찾을 수 있도록 지도에 표시해놓자."
많은 프로그램이 시스템 환경 변수를 수정합니다:
- PATH 변수에 실행 파일 경로 추가 (명령줄에서 프로그램을 쉽게 실행할 수 있게 함)
- 특정 프로그램용 환경 변수 설정 (예: JAVA_HOME)
- 이 변경사항은 메모리와 구성 파일 모두에 반영됩니다.
이런 환경 변수는 일종의 전역 해시맵(hashmap)으로 생각할 수 있습니다.
7. 바로가기 생성 - 접근성 향상
설치 프로그램: "사용자가 나를 쉽게 찾을 수 있게 바로가기를 만들자."
이 단계에서는:
- 바탕화면, 시작 메뉴 또는 독(Dock)에 바로가기 파일이 생성됩니다.
- 이 바로가기는 실제로 작은 포인터 파일로, 실제 프로그램 경로를 가리킵니다.
- 파일 연결(file associations)이 설정되어 특정 확장자를 가진 파일을 이 프로그램으로 열 수 있게 합니다.
8. 서비스 등록 - 백그라운드 작업자 배치
설치 프로그램: "부팅할 때마다 자동으로 실행되도록 설정하자."
일부 프로그램은 시스템 서비스나 데몬으로 등록됩니다:
- Windows의 서비스 관리자 또는 Linux/Mac의 systemd/launchd에 서비스가 등록됩니다.
- 부팅 시퀀스에 이 서비스를 시작하는 단계가 추가됩니다.
- 이는 프로세스 관리 시스템의 작업 대기열에 새로운 항목을 추가하는 것과 같습니다.
9. 종속성 설치 - 필요한 재료 모으기
설치 프로그램: "내가 제대로 작동하려면 이것들도 필요해."
많은 프로그램이 다른 소프트웨어 구성 요소에 의존합니다:
- 공유 라이브러리 (.dll, .so, .dylib 파일)
- 런타임 환경 (예: .NET, Java Runtime)
- 이런 종속성이 없으면 설치 프로그램이 자동으로 다운로드하고 설치합니다.
이것은 일종의 의존성 그래프(dependency graph)를 따라 필요한 모든 노드를 확보하는 과정입니다.
10. 설치 완료 및 정리 - 마무리 작업
설치 프로그램: "모든 작업이 완료되었으니 임시 파일을 정리하고 마무리하자."
마지막으로
- 임시 파일이 삭제됩니다.
- 설치 로그가 생성됩니다.
- 필요하다면 시스템 재시작을 요청합니다.
- 설치 프로그램 자신이 종료됩니다.
CLI 패키지 관리자로 설치하게 되면?
CLI 패키지 관리자(apt, yum, brew, npm 등) 역시 명령어 한 줄로 위의 모든 단계를 자동화합니다.
User: apt install firefox
패키지 관리자: "알겠습니다. 필요한 모든 것을 알아서 처리할게요."
이 간단한 명령어 뒤에서 패키지 관리자는
- 중앙 저장소에서 패키지 정보를 검색합니다.
- 종속성을 해결합니다 (의존성 그래프 생성).
- 필요한 모든 파일을 다운로드합니다.
- 파일을 적절한 위치에 설치합니다.
- 시스템 구성을 업데이트합니다.
이는 그래프 이론, 해시 테이블, 트리 구조 같은 자료구조를 활용하여 이루어집니다.
프로그램 삭제 시
프로그램을 삭제할 때는 설치의 역순으로 진행됩니다.
User: "프로그램 삭제" 클릭
OS: "이 프로그램과 관련된 모든 것을 찾아서 제거할게요."
자료 구조로 본 삭제 프로세스
- 그래프 순회(Graph Traversal): 설치 중 생성된 파일 및 레지스트리 항목의 그래프를 역방향으로 순회합니다.
- 해시맵 조회(HashMap Lookup): 빠른 파일 및 레지스트리 항목 조회를 위해 해시맵을 사용합니다.
- 큐(Queue): 삭제할 항목을 순서대로 처리하기 위한 작업 대기열이 생성됩니다.
삭제 중 진행되는 일들
- 언인스톨러(제거 프로그램) 실행: 대부분의 프로그램은 자체 제거 프로그램을 포함합니다.
- 파일 시스템 정리: 프로그램 파일이 삭제됩니다 (파일 시스템 트리에서 노드 제거).
- 레지스트리 정리: 프로그램 관련 레지스트리 키가 삭제됩니다.
- 환경 변수 롤백: 변경된 환경 변수가 원래 상태로 복원됩니다.
- 바로가기 및 파일 연결 제거: 생성된 바로가기와 파일 연결이 제거됩니다.
- 서비스 등록 해제: 등록된 서비스가 중지되고 시스템에서 제거됩니다.
이 과정에 사용된 아키텍처와 기술은?
이 모든 과정이 원활하게 작동하는 데는 몇 가지 핵심 아키텍처와 기술이 있습니다.
1. 계층적 파일 시스템
파일 시스템은 트리 구조로 설계되어 있어 프로그램 파일을 체계적으로 저장하고 찾을 수 있게 해줍니다:
/ (루트)
└── Program Files/
└── Chrome/
├── chrome.exe
├── resources/
└── libs/
이 트리 구조는 깊이 우선 탐색(DFS)이나 너비 우선 탐색(BFS) 알고리즘으로 효율적으로 탐색할 수 있습니다.
2. 계층적인 키-값 저장소 형태의 레지스트리/설정 데이터베이스
HKEY_LOCAL_MACHINE/
└── SOFTWARE/
└── Google/
└── Chrome/
├── Version = "123.0.0"
└── InstallPath = "C:\Program Files\Chrome"
이 구조는 B-트리나 그 변형을 사용하여 빠른 검색, 삽입, 삭제를 지원합니다.
3. 패키지 관리 시스템
패키지 관리자는 다음과 같은 핵심 구성 요소를 가집니다:
- 의존성 해결기(Dependency Resolver): 방향성 비순환 그래프(DAG)를 사용하여 패키지 간 관계를 모델링합니다.
- 중앙 저장소(Repository): 패키지 메타데이터의 분산 데이터베이스입니다.
- 트랜잭션 엔진: ACID(원자성, 일관성, 고립성, 지속성) 속성을 보장하여 설치 과정이 중단되어도 시스템이 일관된 상태를 유지하게 합니다.
4. 디지털 서명과 해시 함수를 활용한 무결성 검증
- 패키지 파일의 해시값 계산 (SHA-256 등)
- 공개 키 암호화를 사용한 서명 검증
- 인증서 체인 검증
OS는 암호화 기술을 통해 설치 과정의 안전성을 보장합니다.
마치며
단순해 보이는 설치/삭제 작업 뒤에는 이처럼 복잡한 과정과 정교한 알고리즘이 작동하고 있습니다. 이같은 복잡성은 사용자에게는 보이지 않지만, 시스템의 안정성과 효율성을 보장하는 필수적인 요소입니다.
현대 패키지 관리자들은 다음과 같은 문제를 해결하기 위해 계속 발전하고 있습니다.
- 의존성 지옥 방지: 정교한 버전 관리와 충돌 해결 메커니즘
- 안전한 롤백: 설치 실패 시 시스템을 이전 상태로 복원
- 성능 최적화: 병렬 다운로드, 증분 업데이트 등으로 속도 향상
- 보안 강화: 서명 검증, 체크섬, 샌드박싱 기술 적용
다음에 프로그램을 설치하거나 삭제할 때, 단순한 클릭 또는 명령어 하나로 이루어지는 것처럼 보이지만, 그 이면에는 수십 년간 발전해온 컴퓨터 과학의 정수가 응축되어 있다는 점을 기억하시면 좋겠습니다.
그럼 이 글이 독자분의 CS 이해도와 응용력을 높이는 데 도움이 되었기를 바라며 글을 마치겠습니다.
'컴퓨터 공학 및 스킬 > 호기심 해결' 카테고리의 다른 글
CI, github actions에 대해 알게 된 것 총정리 ing (0) | 2024.03.31 |
---|