학습일지/K-Digital Traing

[KDT] AIaaS 마스터클래스 4주차 - 리눅스에 대해

tierr 2025. 4. 18. 16:08

리눅스란?

1991년, 리누스 토르발스 (Linus Torvalds) 가 만든 오픈소스 커널이
전 세계 개발자들과 협업하며 탄생한 유닉스(Unix)를 기반으로 개발된 오픈 소스 운영체제.
주로 서버, 클라우드, IoT, 개발 환경 등 다양한 곳에서 사용되며, 무료이면서도 강력한 커스터마이징이 가능한 것이 특징

 

📌 리눅스의 핵심 특징

  • 🆓 오픈 소스: 누구나 수정·배포 가능
  • 🔐 보안성: 사용자 권한 기반의 강력한 보안 구조
  • 💡 다중 사용자/다중 작업 지원
  • 🔄 커맨드라인 기반 조작: CLI 환경에서 운영 효율 극대화
  • 💻 배포판 다양성: Ubuntu, CentOS, Rocky, Fedora 등 목적에 따라 선택 가능

🧠 유닉스(UNIX)란?

유닉스는 1969년 미국 AT&T 벨 연구소(Bell Labs)에서 개발된 멀티태스킹, 멀티유저 운영체제.
초기에는 대형 컴퓨터용으로 설계되었지만, 그 설계 철학과 구조는 지금까지도 리눅스, macOS, BSD 등 다양한 OS에 영향을 주고 있음

 

📌 유닉스의 특징

  • 👥 다중 사용자 지원: 여러 사용자가 동시에 시스템 사용 가능
  • 🔄 다중 작업 처리: 여러 작업을 동시에 실행할 수 있음
  • 🧱 모듈화 구조: 작고 단순한 프로그램들을 조합해 강력한 기능 구현
  • 📁 모든 것을 파일로: 장치, 입출력 등을 파일처럼 취급 (일관된 인터페이스 제공)
  • 🖥️ C 언어 기반 개발: 이식성과 확장성 확보

⚔️ 유닉스 vs 리눅스 비교

항목 유닉스 (UNIX) 리눅스 (Linux)
📅 등장 시기 1969년, AT&T 벨 연구소 1991년, 리누스 토르발스
💸 라이선스 상용 (유료) 중심 오픈 소스 (무료)
🔓 소스 코드 비공개 공개 (자유롭게 수정·배포 가능)
💡 설계 철학 안정성, 신뢰성 중심 유닉스를 모방한 오픈 대안
🧱 기반 언어 C 언어 C 언어 + 오픈소스 도구
🖥️ 사용처 대형 서버, 메인프레임 (엔터프라이즈 환경) 서버, 데스크탑, 클라우드, 모바일 등 광범위한 사용
* 커널 구조 전통적인 모놀리식 커널 구조 모듈화된 커널 아키텍쳐
🔧 대표 OS AIX, HP-UX, Solaris 등 Ubuntu, CentOS, Rocky, Fedora 등

* 커널 구조에 관해서는 아래 링크에 정리했으니 참조

https://tierr.tistory.com/58

 

📚 커널 구조 비교: 전통 모놀리식 vs 모듈화 모놀리식 vs 마이크로커널

운영체제의 핵심인 커널은 구조에 따라 세 가지 유형전통 모놀리식 커널 (Traditional Monolithic Kernel)모놀리식 + 모듈화 커널 (Monolithic + Modular Kernel)마이크로 커널 (Microkernel)✅ 커널 구조 3가지 한눈

tierr.tistory.com

 

📌 핵심 차이 요약

  • 리눅스는 유닉스를 모델로 한 무료 운영체제
  • 유닉스는 전통적이고 안정적인 상용 시스템,
    반면 리눅스는 유연하고 커뮤니티 중심의 발전형

🧠 리눅스 커널 아키텍처란?

리눅스 커널 아키텍처는 운영체제의 핵심이자 뇌🧠 같은 부분으로, 하드웨어와 소프트웨어 사이를 연결하는 핵심 구조를 말해요.
리눅스는 모놀리식 커널(monolithic kernel) 구조를 따르며, 모듈화된 아키텍처를 채택하고 있어 필요한 기능만 선택적으로 로드할 수 있습니다. 

 

🔧 리눅스 커널 아키텍처 구성 요소

  1. 📥 프로세스 관리 (Process Management)
    • 프로세스 생성, 스케줄링, 컨텍스트 스위칭 등
    • 여러 작업을 동시에 실행하게 해줌 (멀티태스킹 핵심)
  2. 💾 메모리 관리 (Memory Management)
    • 가상 메모리, 페이징, 캐시 등 효율적인 메모리 사용
    • malloc, free 같은 동작을 실제 물리 메모리로 연결
  3. 📂 파일 시스템 (File System)
    • EXT4, XFS, Btrfs 등 다양한 파일시스템 지원
    • 디스크 I/O를 효율적으로 관리
  4. 📡 네트워크 스택 (Networking)
    • TCP/IP, UDP 등 네트워크 프로토콜 구현
    • 패킷 송수신, 소켓 처리
  5. 🧱 디바이스 드라이버 (Device Drivers)
    • 하드웨어와 직접 통신하는 모듈
    • USB, GPU, 사운드 카드 등과의 인터페이스 담당
  6. 🔒 시스템 호출 인터페이스 (System Call Interface)
    • 유저 공간에서 커널 기능을 호출할 수 있는 문
    • 예: read(), write(), fork() 등

💼 리눅스의 활용처 (실무 적용 분야)

리눅스는 서버용 OS를 넘어 클라우드, 임베디드, 보안, 개발 등 다양한 산업 현장에서 핵심적으로 사용됩니다. 아래에 실무 중심으로 정리해볼게요.

활용 분야 예시 설명
☁️ 서버/웹호스팅 Apache, Nginx, Node.js 서버 운영 고성능 웹 서비스 운영의 표준 환경
🧰 DevOps/클라우드 AWS EC2, Kubernetes, Docker CI/CD 파이프라인, 인프라 자동화
🔐 보안/네트워크 장비 방화벽, IDS/IPS, VPN 서버 등 보안 어플라이언스 대부분 리눅스 기반
📱 모바일 OS Android (리눅스 커널 기반) 전 세계 모바일의 주류 OS 뿌리
⚙️ 임베디드 시스템 스마트TV, 냉장고, 자동차 내비게이션 등 ARM 기반 저사양 하드웨어에서 효율적 운영
🔬 AI/데이터 과학 Python, Jupyter, PyTorch, TensorFlow 모델 개발 및 대규모 학습 환경 구축
🖥️ 개발 환경/IDE VSCode, Git, Terminal 기반 개발 소프트웨어 개발자들이 가장 선호
🎮 게임서버 운영 게임사 서버 인프라 운영 게임 매칭, 랭킹, 로그인 서버 등 대규모 트래픽 처리

* 서버 운영 및 데이터 센터 환경
- 대규모 웹 서버, 데이터센터, 클라우드 환경에 필수적으로 사용
- 높은 안정성과 성능 덕분에 미션 크리티컬한 서비스에 적합
- 다양한 서비스(웹, DB, 파일 서버 등)를 하나의 플랫폼에서 운영할 수 있음
- 자동화 도구와 스크립트 활용으로 관리 비용과 시간 절약이 가능함
- 로그 모니터링, 백업, 보안 강화 등의 도구들이 잘 갖춰져 있음

 

* DevOps 및 클라우드 인프라
- 컨테이너(예: Docker) 및 오케스트레이션(Kubernetes)과의 호환성이 우수
- CI/CD 파이프라인 구축에 필수적인 도구로 자리잡고 있음
- 클라우드 플랫폼(AWS, GCP, Azure)에서 기본 OS로 활용됨
- 자동화 스크립트와 도구 연동으로 배포 및 운영 효율성을 높임
- DevOps 문화 확산에 맞춰 지속적 통합과 배포 환경을 지원

 

* 임베디드 시스템 및 IoT 산업 활용
- 경량화된 배포판을 통해 임베디드 시스템에 최적화
- 스마트 기기, 라우터, 산업용 장비 등 다양한 IoT 기기에 적용됨
- 맞춤형 커스터마이징이 가능하여 다양한 산업 요구사항을 충족
- 비용 효율성이 높아 대규모 IoT 환경 구현에 유리
- 안정적 운영과 확장성이 IoT 솔루션의 핵심 경쟁력으로 작용


🔍 리눅스 활용: 프로덕션 서버 vs 로컬 개발 환경 비교 정리

구분 프로덕션 서버 환경 로컬 개발 환경
🔧 목적 안정적 서비스 운영 개발, 테스트, 디버깅
🛠️ 운영체제 Ubuntu Server, CentOS, Rocky 등 경량 서버용 배포판 Ubuntu Desktop, WSL, macOS + 터미널 등
🧩 주요 도구 Nginx, Apache, Docker, Kubernetes, Systemd, 로그 수집기 Git, VSCode, Docker Desktop, SSH, Bash/Zsh
🔐 보안 고려 방화벽 설정, SSH 키 접속, 유저 권한 제한, 모니터링 강화 로컬 방화벽, Docker 네트워크 제한 등 가벼운 보안 적용
🌀 자동화 CI/CD 배포, 시스템 모니터링, 백업 스크립트 등 쉘 스크립트, 테스트 자동화, 로컬 Git hook 등
🧪 테스트 실사용자 대상 실제 트래픽 처리, 장애 대응 유닛 테스트, API 테스트, 컨테이너 기반 샌드박스 환경
📈 안정성 재부팅 최소화, 리소스 최적화, 로그/모니터링 필수 언제든지 재시작 가능, 실험/리팩터링 중심

🆓 오픈 소스(Open Source)란?

오픈 소스는 소스 코드가 공개되어 누구나 열람·사용·수정·배포할 수 있는 소프트웨어

핵심 특징

  • 소스 코드 접근 가능
  • 누구나 자유롭게 수정·재배포 가능
  • 커뮤니티 중심 개발
  • 상업적 사용도 가능 (라이선스에 따라 다름)

💡 예시: 리눅스 커널, Kubernetes, VS Code, MySQL 등

 

📜 오픈 라이선스(Open License)란?

오픈 소스 소프트웨어를 사용할 때 따라야 하는 법적 조건(약속)을 정한 것.
오픈 소스라도 라이선스 조건을 반드시 따라야 한다. (오픈 소스 ≠ 아무렇게나 써도 되는 것)

 

주요 오픈 소스 라이선스 정리

라이선스 자유도 소스 공개 의무 특징 및 주의점 대표 사용 예시
MIT 매우 높음 ✅ ❌ 없음 (단, 출처 표기 필요) 단순하고 유연함.
기업도 선호
React, jQuery, VS Code
Apache 2.0 높음 ✅ ❌ 없음 (단, NOTICE 파일 유지) 특허 보호 조항 포함.
상업적 사용 안정적
Kubernetes, TensorFlow
GPL (v2, v3) 중간 ~ 낮음 ❌ ✅ 반드시 공개 (강한 카피레프트) 수정하거나 링크한 코드도 오픈 필요 Linux 커널, WordPress
LGPL 높음 ✅ ⚠️ 링크 시 공개는 필요 없음, 수정 시만 공개 GPL보다 완화된 조건 FFmpeg, GTK
BSD 매우 높음 ✅ ❌ 없음 MIT와 유사.
단,일부 변형된 BSD는 광고 조항 포함
FreeBSD, Nginx
MPL 2.0 중간 ✅ 🔄 수정한 파일만 공개, 나머지는 비공개 가능 모듈 단위 오픈에 유리 Firefox, Thunderbird

* Copyleft 라이선스 : 수정된 소스 코드를 공개해야 하고, 수정된 소스 코드도 동일 라이선스로 배포하도록 요구

* Permissive 라이선스 : 소스코드 공개 의무 없음. 상대적으로 제한이 적어 상업활용 가능

 

📌 실무 팁 요약

  • ✔️ MIT / Apache 2.0: 상업적 사용에 매우 유리. 기업에서 선호
  • ⚠️ GPL 계열: 오픈소스 정신 강함. 상용 SW에선 라이선스 충돌 위험
  • 🔄 MPL: 파일 단위 공개라 유연함. 중간 지점 성격

 

🧠 한 줄 정리

“MIT와 Apache는 자유롭고, GPL은 공유 정신이 강하며, MPL은 절충안”


☁️💥 오픈소스 단체 vs 클라우드 업체: 갈등 배경

클라우드 업체들(AWS, Azure, Google Cloud 등)이 오픈소스 소프트웨어를 과도하게 활용하면서도
충분한 기여나 수익 공유를 하지 않는 문제가 오래전부터 지적되어 왔다.

문제 클라우드 대기업들이 오픈소스 프로젝트를 가져다가 **자체 서비스화(Managed Service)**하면서 수익을 독점
오픈소스 진영 입장 "우리가 만든 건데, 너희가 돈 벌고 우린 유지보수하느라 지친다!" 😡
클라우드 업체 입장 "라이선스 조건을 지켰고, 많은 사용자에게 혜택을 주고 있다!" 😅

🧪 실제 사례들

  1. 🧱 Elastic vs AWS
    • AWS가 Elasticsearch를 자체 서비스화 → Elastic은 SSPL이라는 새로운 라이선스로 대응 (사실상 오픈소스 아님)
    • Elastic 측: “기여 없이 가져다 돈 버는 건 착취다!”
  2. ☁️ MongoDB
    • 클라우드 사업자들의 무단 사용 방지를 위해 **SSPL (Server Side Public License)**로 변경
    • 기존 GPL보다 훨씬 더 강한 규제: 클라우드에서 쓰려면 전체 SaaS 코드 공개 요구
  3. 📊 Redis Labs
    • Redis 모듈 일부를 Commons Clause 포함 라이선스로 변경해, 상업적 클라우드 판매 제한

⚖️ 이로 인한 라이선스 변화 흐름

GPL, Apache, MIT 등 순수 오픈소스  →  SSPL, BSL, Commons Clause 등 '클라우드 제한형' 라이선스 등장

🐧 리눅스 배포판(Distro)이란?

리눅스는 커널만으로는 작동할 수 없고, 운영체제로서 동작하기 위해 다양한 구성 요소가 필요하다.
그래서 커널 + 유틸리티 + 패키지 관리자 + 기본 설정 등을 패키징해서 제공하는 완성형 OS를
리눅스 배포판(Distro, Distribution)이라고 부른다.

🔧 배포판 구성 요소 예시

구성 요소 설명
🧠 리눅스 커널 운영체제의 핵심 (공통)
📦 패키지 관리자 apt, yum, dnf, pacman 등 소프트웨어 설치 도구
🛠️ 유틸리티 툴셋 bash, coreutils, systemd 등 필수 도구
💻 데스크탑 환경 (선택) GNOME, KDE, XFCE 등 GUI 인터페이스
📜 기본 설정 파일 시스템 구조, 서비스 방식 등

📚 주요 리눅스 배포판 종류 및 특징

계열 대표 배포판 설명
📗 Debian 계열 Debian, Ubuntu, Linux Mint 안정성 중심, .deb 패키지 사용, apt 패키지 관리자
🔴 Red Hat 계열 RHEL, CentOS, Rocky, AlmaLinux, Fedora 기업용 중심, .rpm 패키지 사용, yum, dnf 사용
🐧 Arch 계열 Arch Linux, Manjaro 최신 패키지, 가벼움, 고급 사용자용
🟡 SUSE 계열 openSUSE, SLES 기업 환경에 특화된 시스템 관리 도구 (YaST 등)

* Debian 계열
- APT 패키지 관리 시스템 (.deb 패키지)
- 안정성과 방대한 패키지 저장소
- 초보자부터 전문가까지 폭넓은 사용층
- Ubuntu Server는 데비안 기반으로 서버, 클라우드, 인프라 등에 많이 사용이 됨

 

* Red Hat 계열
- RPM 기반 시스템(yum / dnf)이 효율적으로 관리되며, 대규모 서버 운영에 유리
- 상용 지원, 인증된 보안 업데이트, 공식 기술 지원 체계
- 미션 크리티컬한 서버 환경에 적합 (금융, 제조, 통신 등)
- 초보자부터 전문가까지 폭넓은 사용층
- Ubuntu Server는 데비안 기반으로 서버, 클라우드, 인프라 등에 많이 사용이 됨

🧪 실무에서 주로 쓰는 배포판?

분야 추천 배포판
☁️ 클라우드/서버 Ubuntu Server, CentOS Stream, Rocky Linux
🧑‍💻 개발자 환경 Ubuntu Desktop, Fedora, Manjaro
🏢 엔터프라이즈 기업용 RHEL, SLES
🧠 최신 기술 실험 Arch, Fedora Rawhide

 

📎 한 줄 요약

“리눅스 배포판은 커널 기반 위에 다양한 도구를 얹은 완성형 운영체제이며,
목적에 따라 안정성·편의성·최신성 중 하나를 골라 사용할 수 있다!”


📦 리눅스 패키지 관리자 비교: APT vs YUM vs DNF

리눅스에서 소프트웨어를 설치/업데이트/제거할 때 사용하는 패키지 관리자는 배포판에 따라 다르다

✅ 기본 개요

항목 APT YUM DNF
전체 이름 Advanced Package Tool Yellowdog Updater, Modified Dandified YUM
주 사용 배포판 Debian, Ubuntu 계열 RHEL, CentOS 7, Oracle Linux RHEL 8+, CentOS 8+, Fedora
패키지 확장자 .deb .rpm .rpm
명령어 스타일 apt install, apt update 등 yum install, yum update 등 dnf install, dnf update 등

⚙️ 기술적 차이

기능/특징 APT YUM DNF
의존성 해결 좋음 좋음 더 정교하고 빠름
속도 빠름 느림 빠름 (멀티스레드 지원)
플러그인 확장성 보통 많음 많고 강력 (모듈화 구조)
최신성 활발한 유지보수 더 이상 개발 종료됨 ❌ YUM을 대체해 발전 중 ⏫

📌 실무 요약

상황 추천
Ubuntu/Debian 기반 서버/로컬 개발 apt 사용
CentOS 7 이하, Oracle Linux yum 사용 (※ 오래된 시스템)
RHEL 8, CentOS Stream, Fedora 최신 dnf 사용 (YUM의 미래 버전)

💡 명령어 비교 예시

작업 APT YUM DNF
패키지 설치 apt install nginx yum install nginx dnf install nginx
업데이트 apt update && apt upgrade yum update dnf upgrade
삭제 apt remove nginx yum remove nginx dnf remove nginx
캐시 삭제 apt clean yum clean all dnf clean all

 

📎 한 줄 요약

APT는 Debian/Ubuntu 계열, YUM은 RHEL 7 이하, DNF는 RHEL 8+의 표준 패키지 관리자!


🧠 리눅스 커널, 쉘, GNU – 컴퓨터의 기본 구조와의 관계

리눅스를 구성하는 핵심 요소들인 커널(Kernel), 쉘(Shell), GNU 유틸리티는 각각 컴퓨터 시스템의 계층 구조에서 특정 역할을 맡고 있어. 이를 컴퓨터의 기본 구조와 연결해서 한눈에 정리해볼게!

 

🖥️ 컴퓨터 시스템 구조 (계층도 관점)

🧑 사용자 (User)
⬇️
💬 쉘 (Shell: 사용자 인터페이스)
⬇️
🧰 GNU 유틸리티 & 명령어 (ls, cat, etc.)
⬇️
🧠 리눅스 커널 (Kernel)
⬇️
💾 하드웨어 (CPU, 메모리, 디스크, 네트워크)

🔍 구성 요소별 설명

구성 요소 역할 예시
👤 사용자 (User) 명령어 입력, 프로그램 실행 ls, python, git
💬 쉘 (Shell) 사용자 ↔ 커널 사이 명령어 해석기 bash, zsh, sh, fish
🧰 GNU 유틸리티 쉘이 호출하는 기본 명령어 및 도구들 ls, cp, grep, awk, make, gcc
🧠 커널 (Linux Kernel) 운영체제의 핵심: 하드웨어 제어, 자원 관리,
프로세스/메모리/파일 시스템 제어
시스템 콜: open(), read() 등
💻 하드웨어 CPU, 메모리, 스토리지, I/O 장치 등 실제 장비 SSD, RAM, Network Card 등

 

🐧 리눅스 시스템의 핵심 3요소

구성 설명
커널 (Kernel) 시스템 자원 관리의 중심. 하드웨어와 직접 통신
GNU 도구 모음 유닉스 스타일 명령어들을 대체하는 오픈소스 도구들 (리눅스만으로는 없음)
쉘 (Shell) 사용자와 시스템을 연결하는 명령어 해석기 (CLI 환경 제공)

즉, 우리가 보통 "리눅스"라고 부르는 것은 실제로는
리눅스 커널 + GNU 유틸리티 + 쉘 환경이 합쳐진 운영체제!


📎 한 줄 요약

“리눅스는 커널(두뇌), GNU(도구), 쉘(입력창)이 함께 구성된 운영체제로,
컴퓨터 시스템의 하드웨어와 사용자를 연결하는 다리 역할을 한다”

 


🔍 커널(Kernel)과 쉘(Shell)의 차이와 관계 정리

커널(Kernel)과 쉘(Shell)은 서로 다른 역할을 하지만 서로를 통해 시스템이 작동한다.

⚙️ 관계 구조 요약

[사용자]
 ⬇️ 
[쉘: 명령어 해석기]
 ⬇️ 
[커널: 시스템 실행 담당]
 ⬇️ 
[하드웨어]
 

🔁 한 눈에 비교

항목 🧠 커널 💬 쉘
위치 시스템 내부 (운영체제 핵심) 사용자 인터페이스 (외부)
역할 자원 관리, 하드웨어 제어 사용자 명령 해석 및 전달
사용자 접근 직접 접근 불가 (시스템 콜로만 가능) 직접 사용 가능 (bash, zsh 등)
예시 Linux kernel bash, zsh, sh, fish 등

🧠 커널 (Kernel)

항목 설명
🧩 정체 운영체제의 핵심(심장)
🎯 역할 하드웨어 자원(CPU, 메모리, 디스크 등)을 관리하고, 시스템 전체를 제어
🔧 기능 프로세스 스케줄링, 메모리 관리, 파일 시스템, 네트워크, 디바이스 제어 등
📞 호출 방식 시스템 콜(system call)을 통해 접근 가능 (read(), fork() 등)
🐧 예시 리눅스 커널, Windows NT 커널, XNU(macOS) 등

💬 쉘 (Shell)

항목 설명
🧩 정체 명령어 해석기(인터페이스)
🎯 역할 사용자의 입력(명령)을 해석하여 커널에 전달하고 결과 출력
🔧 기능 명령어 실행, 파이프 처리, 변수 관리, 스크립트 실행 등
📞 동작 방식 사용자가 입력한 명령을 GNU 유틸리티나 커널에 전달
💡 종류 bash, zsh, sh, fish, tcsh 등 다양한 쉘 존재

 

 

📎 한 줄 요약

커널은 OS의 심장, 은 사용자와 커널 사이의 통역사”
둘이 함께 움직여야 리눅스 시스템이 제대로 작동함 💡


💬 쉘(Shell)의 기능과 중요성 정리

쉘은 리눅스 시스템에서 사용자와 커널 사이를 연결하는 명령어 해석기이자,
효율적인 시스템 제어 도구입니다. 단순한 입력창 그 이상으로, 리눅스를 실무에서 다룰 때 매우 중요한 역할

 

⚙️ 쉘의 주요 기능

기능 설명 예시
🔡 명령어 해석 사용자가 입력한 명령어를 분석해 실행 ls, cd, mkdir, echo
📜 스크립트 실행 반복 작업을 자동화하는 스크립트 작성 및 실행 bash script.sh, cron 작업 등
📂 파일·디렉터리 관리 경로 이동, 파일 복사/삭제 등 파일시스템 조작 cp, rm, mv, find
🧪 입출력 리디렉션 명령의 출력/입력을 파일로 연결 ls > list.txt, cat < file.txt
🔗 파이프라인 처리 명령어 결과를 다른 명령어로 전달 `cat file
🧠 변수 및 조건문 변수 선언, 조건/반복문 등을 활용한 논리 처리 if, for, while, $VAR
🧱 프로세스 제어 백그라운드 실행, 일시 정지, 종료 등 &, kill, jobs, fg, bg
🧩 환경 구성 사용자별 환경 설정 (.bashrc, .zshrc) alias 설정, 경로 추가 등

 

🧠 쉘의 중요성 (왜 중요한가?)

항목 이유
💡 시스템 제어의 핵심 도구 커널에 직접 접근할 수 없기 때문에, 쉘을 통해 시스템 기능을 이용함
🤖 자동화 가능 쉘 스크립트를 이용해 반복 업무 자동화 (DevOps, 배포, 백업 등 핵심)
🧰 도구 통합 다양한 명령어와 유틸리티를 조합하여 복잡한 작업도 간단하게 처리 가능
🔧 시스템 관리의 기본기 서버 운영, 장애 대응, 설정 변경 등 실무의 출발점
🌐 원격 서버 환경에서 GUI 없음 대부분의 리눅스 서버는 터미널 환경에서 쉘만으로 조작함
📦 DevOps와의 연관성 CI/CD, Dockerfile, Kubernetes 등 거의 모든 인프라 자동화는 쉘 스크립트 기반

 

📎 한 줄 요약

"쉘은 리눅스 시스템을 사용하는 입구이자, 자동화와 효율화를 실현하는 핵심 도구다."


현재 사용 중인 쉘 환경을 확인할 때 자주 쓰는 리눅스 명령어

# 리눅스, 유닉스 계열 운영체제에서 가능한 명령어 (Windows는 X)

# 환경변수에 기본 설정된 로그인 셸
echo $SHELL

# 현재 실행 중인 셸/스크립트 이름
echo $0

커널Kernel
- 커널: 하드웨어 자원을 직접 제어하고 관리하는 핵심 소프트웨어
- 오픈소스이니 직접 코드 확인 가능
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/?h=v6.15-rc1

아래 내용만 기억해두기
- 커널은 C언어 코드 중심으로 되어있고
- 커널은 프로세스 관리하고
- cpu의 상태를 관리하는 등
- 하드웨어와 직접적으로 연관된 일들을 함


🧰 GNU란? (GNU is Not Unix)

GNU(GNU’s Not Unix)는 유닉스와 호환되지만 오픈소스로 자유롭게 사용할 수 있는 운영체제를 만들기 위한 프로젝트.
1983년, 리처드 스톨만(Richard Stallman)이 시작했고, 자유 소프트웨어 운동(Free Software Movement)의 출발점이다.

자유롭게 쓸 수 있는 유닉스와 같은 운영체제를 만들자!

🔧 구성 요소 (예시)

범주 예시 설명
bash, sh 명령어 인터페이스
파일 도구 ls, cp, rm, cat 파일 조작 기본 유틸리티
컴파일러 gcc C 언어 컴파일러 (GNU Compiler Collection)
디버깅 gdb GNU 디버거
빌드 도구 make, autoconf 컴파일 자동화 도구
기타 tar, grep, awk 유닉스 명령어 대체 버전

 

🐧 GNU + Linux = ?

  • GNU 프로젝트는 거의 모든 운영체제 구성요소를 만들었지만, 커널(kernel)은 완성되지 못함
  • 그러다 1991년 리누스 토르발스리눅스 커널을 개발했고,
    GNU 도구들과 결합되면서 우리가 오늘날 쓰는 GNU/Linux 시스템이 탄생함
  • 그래서 실제로 우리가 사용하는 리눅스 시스템은 Linux 커널 + GNU 유틸리티 = GNU/Linux 라고 불러야 함

 

🧑‍⚖️ GNU 철학: 자유 소프트웨어 4대 자유

  1. 프로그램을 어떤 목적으로든 실행할 자유
  2. 프로그램의 작동 원리를 연구하고 변경할 자유
  3. 복사하여 나눠줄 자유
  4. 개선하여 공개할 자유
이 철학은 GPL 라이선스(General Public License)를 통해 구현되었다.

🧠 커널(Kernel)과 하드웨어의 관계 정리

운영체제의 핵심인 커널(Kernel)은 하드웨어와 소프트웨어(사용자/프로그램) 사이를 연결하는 중간 관리자 역할을 해요.
즉, 사용자가 직접 하드웨어를 건드리지 않고도 안정적으로 자원을 요청·사용할 수 있게 해주는 뇌🧠 같은 존재죠.

 

🧩 컴퓨터 시스템 구조 (관계 흐름도)

[사용자 / 응용 프로그램]
       ⬇️
  [커널 (Kernel)]
       ⬇️
[하드웨어 (CPU, 메모리, 디스크 등)]

🧠 커널이 하드웨어와 어떻게 연결되는가?

구성 요소 설명 예시
🧠 커널(Kernel) 하드웨어를 제어하는 핵심 소프트웨어 Linux, Windows NT, XNU(macOS)
🧩 디바이스 드라이버 하드웨어별 제어 코드를 커널과 연결하는 모듈 프린터, 그래픽카드, 키보드 드라이버 등
🔄 시스템 콜(System Call) 사용자 프로그램이 커널을 호출하는 인터페이스 read(), write(), open() 등
💻 하드웨어 물리적인 컴퓨터 자원 CPU, RAM, SSD, NIC 등

🧰 커널이 제어하는 주요 하드웨어 자원

자원 커널의 역할
🧮 CPU 프로세스 스케줄링, 컨텍스트 스위칭
💾 메모리(RAM) 가상 메모리 관리, 주소 공간 분리
📂 디스크 파일 시스템 관리, 디스크 I/O
📡 네트워크 장치 패킷 처리, 소켓 통신
⌨️ 입출력 장치 사용자 입력 처리, 장치 간 인터럽트 관리

📎 한 줄 요약

“커널은 하드웨어와 사용자를 연결하는 다리로,
하드웨어를 안전하고 효율적으로 사용하게 해주는 운영체제의 핵심이다.”


🗂️ Everything is a file – “모든 것은 파일이다”

“Everything is a file”은 리눅스와 유닉스 시스템에서 하드웨어든 소프트웨어든 거의 모든 자원을 ‘파일’처럼 다룬다는 철학.
즉, 입출력 통신, 장치, 프로세스, 설정, 네트워크 소켓까지 모두 파일 시스템을 통해 접근하도록 설계되어 있음.

📂 예시로 보는 개념

자원 종류 예시 설명
📄 일반 파일 /home/user/text.txt 우리가 아는 문서, 코드, 로그 파일
명령어 ls which ls 를 하면 /usr/bin/ls 라는 파일인걸 알 수 있음
📁 디렉터리 /etc/, /usr/bin/ 폴더 역시 파일로 취급
🎧 장치(Device) /dev/sda, /dev/ttyUSB0 하드디스크, USB, 터미널 장치
🔧 시스템 정보 /proc/cpuinfo, /proc/meminfo 커널이 제공하는 가상 시스템 정보
🌐 네트워크 /proc/net/, /dev/tcp/ 네트워크 상태 정보도 파일처럼 접근
🧠 프로세스 /proc/<pid>/ 실행 중인 모든 프로세스는 디렉터리처럼 조회 가능

🧰 실제 활용 예시

cat /proc/cpuinfo       # CPU 정보 확인
echo "1" > /proc/sys/net/ipv4/ip_forward   # 커널 네트워크 옵션 변경
ls /dev/                # 장치 목록 보기

✅ 이 철학의 장점

장점 설명
🧩 일관된 인터페이스 하드웨어, 시스템 자원도 open, read, write로 다룰 수 있음
🛠️ 도구 재사용 가능 cat, grep, echo 등 기본 명령어로 거의 모든 자원 접근 가능
🤖 자동화 쉬움 셸 스크립트에서 모든 자원을 파일처럼 조작 가능
💡 유연성과 단순성 시스템 구조 이해가 쉬워지고 확장도 간편해짐

 

📎 한 줄 요약

“리눅스/유닉스 시스템에서는 하드웨어든 프로세스든 모두 파일처럼 다룬다.
이 덕분에 일관된 방식으로 모든 자원을 쉽게 조작할 수 있다.”


🚀 리눅스 부팅 과정 5단계 요약

단계 설명
0. 전원 켜기 시스템에 전원이 공급되어 BIOS 칩이 활성화
1. BIOS / UEFI 하드웨어 초기화, 부팅 가능한 디스크 탐색 (POST 수행)
2. 부트로더 (GRUB 등) 어떤 커널을 로드할지 선택, 커널과 initramfs 전달
3. 커널 초기화 리눅스 커널이 메모리에 로드되고, 하드웨어 제어 시작
4. Init 시스템 시작 (systemd) PID 1 프로세스로 서비스 및 대상(target) 실행
5. 사용자 환경 시작 CLI 로그인 또는 GUI 데스크탑 환경 진입

🧠 BIOS vs UEFI – 리눅스 부팅의 출발점 정리

리눅스 부팅 과정의 1단계, 바로 컴퓨터가 전원을 켤 때 제일 먼저 실행되는 프로그램이
BIOS 또는 UEFI야. 이 둘은 기능이 유사하지만, 세대와 구조가 다른 펌웨어 시스템이야.

🔍 BIOS (Basic Input/Output System)

항목 설명
📅 등장 시기 1980년대부터 사용된 전통 펌웨어
💻 역할 하드웨어 초기화 + 부팅 가능한 장치 탐색 (MBR 방식)
📦 특징 16비트, 제한된 UI, 느린 속도
📏 용량 한계 2TB 이하 하드디스크만 지원 (MBR 파티션 구조 제한)
⚠️ 한계 최신 하드웨어와 보안 기술 지원 부족

⚙️ UEFI (Unified Extensible Firmware Interface)

항목 설명
📅 등장 시기 2000년대 이후 BIOS를 대체
💡 역할 하드웨어 초기화 + 부트 매니저 역할까지 (GRUB 없이 자체 부팅도 가능)
🚀 특징 32/64비트 지원, GUI 가능, 마우스 사용 가능
📏 디스크 지원 2TB 이상, GPT(GUID Partition Table) 기반
🔒 보안 기능 Secure Boot, 부팅 무결성 검사 등 최신 기능 지원
🧩 커널 연동 GRUB2 또는 systemd-boot 등과 호환

🆚 BIOS vs UEFI 요약 비교

항목 BIOS UEFI
구조 16비트, 레거시 32/64비트, 최신
디스크 방식 MBR GPT
부팅 속도 느림 빠름
보안 기능 없음 Secure Boot 등 지원
최대 디스크 2TB 9ZB 이상 (사실상 무제한)
설정 화면 텍스트 UI GUI 가능

📎 한 줄 요약

BIOS는 구세대 부팅 시스템,
UEFI는 최신 하드웨어에 맞춘 빠르고 안전한 펌웨어 시스템이다.
요즘 리눅스 시스템은 거의 모두 UEFI 기반으로 설치되고 있어!


🚀 부트로더(Bootloader)란?

부트로더는 운영체제가 본격적으로 시작되기 전에 어떤 커널을 실행할지 결정하고, 로딩을 담당하는 프로그램
리눅스에서 가장 흔하게 사용하는 부트로더는 GRUB입니다.

🧠 부트로더의 역할

기능 설명
🧭 운영체제 선택 하나 이상의 OS가 설치된 경우, 어떤 OS를 부팅할지 선택
📦 커널 로딩 디스크에서 리눅스 커널(vmlinuz)을 메모리로 불러옴
🧩 initrd/initramfs 로딩 초기 RAM 디스크 로딩 → 루트 파일시스템 마운트 준비
⚙️ 부트 파라미터 전달 커널에 명령줄 인자 전달 (예: quiet, single, root= 등)
🎛️ 부팅 메뉴 제공 부팅 시 타이머, 복구 모드, 이전 커널 선택 가능 등

🔧 리눅스에서 흔한 부트로더

이름 설명
GRUB (GRUB2) 대부분의 리눅스 배포판에서 사용. GUI/CLI 부트 메뉴 제공
systemd-boot UEFI 환경 전용, 가볍고 빠름 (Arch, Fedora 일부에서 사용)
LILO (구식) 예전 리눅스에서 쓰이던 부트로더. 현재는 거의 사용 안 함

💻 GRUB 부팅 예시 화면

GNU GRUB version 2.06

* Ubuntu
  Advanced options for Ubuntu
  Memory test (memtest86+)
 

커널 버전 선택, 복구 모드 진입, e 눌러 파라미터 수정 가능

📎 한 줄 요약

부트로더는 운영체제를 메모리로 불러오는 가교로,
GRUB이 대표적인 리눅스 부트로더입니다.


⚙️ Init 시스템이란?

Init 시스템은 리눅스에서 커널이 부팅된 후 가장 먼저 실행되는 사용자 공간 프로세스(PID 1)로,
시스템의 서비스와 프로세스를 초기화하고 관리하는 핵심 구성요소
# 확인 명령어
ps -p 1 -o comm=
# 예시 출력: systemd

🔧 Init 시스템의 주요 역할

역할 설명
🚀 부팅 시 서비스 실행 네트워크, 로그, 마운트 등 백그라운드 데몬 실행
🔁 런레벨/타겟 관리 어떤 시스템 상태(예: GUI, 텍스트 모드)로 진입할지 제어
🧼 시스템 종료 처리 종료 시 모든 프로세스를 정리하고 정돈된 종료 수행
🔧 서비스 상태 관리 서비스 시작/중지/재시작/모니터링 담당

📚 대표 Init 시스템 비교

Init 시스템 설명 배포판
SysVinit 전통적인 init 방식 (스크립트 기반, 직렬 실행) 예전 Debian, CentOS 6 등
Upstart 이벤트 기반, 병렬 지원 (과도기적 시스템) 예전 Ubuntu 14.04 등
systemd 현대 리눅스 표준, 병렬 실행 + 의존성 관리 Ubuntu, CentOS 7+, Fedora, Debian 최신 등

✅ systemd 특징 (현대 표준)

  • 병렬 서비스 실행 → 빠른 부팅
  • 서비스 간 의존성 관리
  • journalctl로 로그 통합 관리
  • target 기반으로 런레벨 관리 대체
  • 명령어: systemctl start|stop|enable|status 등

🧩 요약 흐름

[Linux Kernel 로딩]
     ⬇
[Init 시스템(PID 1)] → 각종 서비스 시작
     ⬇
[로그인 화면 또는 GUI]

📎 한 줄 요약

“Init 시스템은 리눅스 부팅 후 가장 먼저 실행되어
서비스 시작, 시스템 상태 전환, 종료 처리 등을 담당하는 핵심 관리자입니다.”


🔢 PID 1이란?

PID 1은 리눅스 시스템에서 커널이 부팅된 직후 가장 먼저 실행하는 사용자 공간 프로세스에 부여되는 고정된 프로세스 번호.
이 프로세스는 Init 시스템이며, 시스템 전체의 서비스, 자식 프로세스, 종료 절차를 책임진다.

 

🔧 PID 1의 역할

역할 설명
🧬 최초 사용자 공간 프로세스 커널은 init 또는 systemd를 PID 1로 실행
👨‍👦 부모 프로세스 고아가 된 모든 프로세스는 PID 1이 맡아 관리
🧩 서비스 관리자 시스템 서비스, 데몬, 런레벨(target) 제어
🔚 종료 시그널 전파 시스템 종료 시 모든 프로세스에 종료 신호 전달

📦 어떤 프로그램이 PID 1일까?

Init 시스템 PID 1 프로세스 이름
SysVinit init
systemd systemd
Docker 컨테이너 보통 sh, bash, 또는 지정된 실행파일
WSL 내부적으로 init 또는 wslhost가 PID 1 역할 수행

🔍 확인 방법

ps -p 1 -o pid,comm
출력 예시:
  PID COMMAND
    1 systemd

📎 한 줄 요약

PID 1은 리눅스 사용자 공간의 최초 프로세스이자,
시스템 전체의 서비스와 프로세스 관리를 책임지는 ‘최고 부모 프로세스’입니다.”


본 후기는 [카카오엔터프라이즈x스나이퍼팩토리] 카카오클라우드로 배우는 AIaaS 마스터 클래스 (B-log) 리뷰로 작성 되었습니다.