클라우드 환경에서의 개발은 대부분 리눅스(Linux) 환경에서 이루어지므로 리눅스(Linux)에 대한 이해가 필수적이라고 할 수 있다.
실제로 AWS, GCP, Azure 등의 주요 클라우드 서비스 제공업체는 리눅스 기반의 가상 머신과 컨테이너 환경(예: EC2, GKE, AKS 등)을 중심으로 서비스가 구성되며, 서버 관리, 네트워크 설정, 자동화 스크립트 작성 등 핵심 작업들이 리눅스 명령어와 쉘 환경에서 수행되고 있다. 또한, Docker 및 Kubernetes 같은 클라우드 네이티브 기술 역시 리눅스와 밀접하게 연결되어 있어, 리눅스의 구조와 동작 원리를 이해하는 것이 중요하게 여겨지기에 리눅스(Linx)에 대한 이해를 먼저 하고자 한다.
1️⃣ 리눅스 개념과 역사
✅ 리눅스(Linux)란?
- 리눅스는 유닉스(UNIX)의 철학을 계승한 오픈소스 운영체제이다.
- 1991년 리누스 토르발즈가 만든 커널에서 시작되었다.
- 현재는 서버, 클라우드, 모바일, 임베디드까지 폭넓게 사용하고 있다.
유닉스(Unix)는 범용성과 이식성을 목표로 개발된 운영 체제로, C언어로 작성되어 다양한 하드웨어에서 실행 가능하다는 혁신적 특징을 가졌다.
✅ 유닉스(Unix) 철학
“작은 프로그램이 한 가지 일을 잘 하게 만들고, 이들을 조합해서 복잡한 작업을 한다.”
- 명령어 하나하나는 단순하지만, 파이프라인(|)으로 연결해 강력한 기능을 수행한다.
리눅스(Linux)는 이러한 유닉스의 설계 철학 을 계승하면서 GNU 프로젝트의 도구 들과 결합하여 완전한 오픈 소스 운영 체제로 발전해왔다.
유닉스와 리눅스를 자세히 비교해보자.
항목 | 유닉스(Unix) | 리눅스(Linux) |
라이선스 | 상용 소프트웨어 → 라이선스 비용 발생 | GNU GPL 기반의 오픈소스 → 무료 사용 가능 |
소스 코드 | 소스 코드 비공개 또는 제한적 접근 | 누구나 열람, 수정, 배포 가능 |
커널 구조 | 전통적인 모놀리식 커널 → 모든 기능이 커널 내에 통합됨 |
모듈화된 모놀리식 커널 → 필요한 기능만 동적으로 로드 |
대표 운영체제 | Solaris, AIX, HP-UX 등 | Ubuntu, CentOS, Fedora, Arch 등 |
사용 환경 | 기업용 서버, 메인프레임 등 → 엔터프라이즈 위주 |
서버 + 데스크탑 + 클라우드 + IoT까지 전방위 |
지원 및 커뮤니티 | 벤더(예: IBM, HP)의 지원 | 전 세계 개발자 커뮤니티에 의해 유지 및 발전 |
패키지 시스템 | 자체 시스템 (벤더별 도구) | APT (Debian), YUM/DNF (RedHat) 등 다양한 패키지 도구 |
개발자 자유도 | 제한적 (상용 환경) | 매우 높음 (커스터마이징, 스크립트, 배포 가능) |
교육/학습 자료 | 자료 접근 어려움, 특정 인증 필요 | 방대한 무료 자료와 실습 가능 |
역사 | 1970년대 AT&T 벨 연구소에서 개발 | 1991년 리누스 토르발즈의 커널 개발에서 시작됨 |
가장 큰 차이점은 오픈소스인 리눅스에 비해 유닉스는 라이센스 비용이 발생하는 상용 소프트웨어이기에 사람들이 많이 사용하기 어렵다는 한계점이 있었다. 그러한 이유로 현재까지 리눅스를 많은 사람들이 사용하고 있다고 할 수 있다.
2️⃣ 리눅스의 핵심 특징
✅ CLI 중심
- 마우스 없이 키보드 명령어로 시스템 제어
- 자동화, 원격접속에 필수
✅ 다중 사용자 & 다중 작업
- 여러 사용자가 동시에 로그인 가능 (예: SSH 접속)
- ps, top, jobs 명령어로 여러 작업 동시에 관리 가능
✅ 모든 것이 파일이다
- 디렉토리도 파일
- 하드웨어 장치도 파일(/dev/sda, /dev/null)
- 명령어도 파일(/bin/ls)
3️⃣ 리눅스 커널 아키텍처
✅ 커널이란?
- CPU, 메모리, 디스크 같은 하드웨어와 직접 소통하는 핵심 프로그램
- 사용자 → 쉘 → 커널 → 하드웨어 흐름
✅ 커널 구성 요소
구성 | 역할 |
프로세스 관리 | 실행/중단/대기 스케줄링 |
메모리 관리 | 가상 메모리, 스와핑 |
파일 시스템 | ext4, xfs 등 지원 |
네트워크 | TCP/IP 처리 |
드라이버 | 장치 연결 (프린터, USB 등) |
4️⃣ 실무 활용처
✅ 서버 운영
- 리눅스는 웹서버의 표준 OS
- Apache/Nginx + MySQL/PostgreSQL
✅ 클라우드 플랫폼
- AWS EC2의 기본 OS는 리눅스
- Terraform, Ansible도 리눅스 기반으로 자동화
✅ 컨테이너 기반 DevOps
- Docker와 Kubernetes는 리눅스 커널 기능 사용 (namespace, cgroup)
- CI/CD 자동화: GitHub Actions, GitLab CI에서 쉘 명령으로 작업함
5️⃣ 리눅스 기본 명령어
기능 | 명령어 | 예시 |
현재 위치 확인 | pwd | /home/ubuntu |
폴더 목록 보기 | ls -al | 숨김 파일까지 보기 |
이동 | cd /etc | 디렉토리 이동 |
폴더 생성 | mkdir test | |
파일 삭제 | rm file.txt | |
복사 | cp a.txt b.txt | |
이동 | mv a.txt dir/ | |
권한 설정 | chmod +x run.sh | 실행 가능하도록 |
리눅스(Linux)는 기본적으로 명령어를 이해하고 알고 있어야 다룰 수 있다.
위의 표에 간단한 명령어들을 적어두었지만 이 명령어들 말고도 많은 명령어가 있기때문에 아래에서 자세히 살펴볼 것이다.
예시:
리눅스 파일 시스템 및 기본 명령어
# 현재 작업 디렉토리 확인
pwd
# 작업 디렉토리 변경
cd /tmp
# 새 디렉토리 생성
mkdir linux_test
# 디렉토리 이동
cd linux_test
# 파일 생성 및 내용 확인
echo "linux test" > test.txt
cat test.txt
# 파일 복사 및 이동
cp test.txt test_copy.txt
mv test_copy.txt test_backup.txt
# 파일 삭제 및 디렉토리 정리
rm test.txt test_backup.txt
cd .. # ..은 상위 디렉토리로 이동
rmdir linux_test
예시:
쉘 스크립트 작성 및 실행
#!/bin/bash
echo "현재 날짜와 시간: $(date)"
# 사용자 입력 받아서 조건에 따른 메시지 출력
read -p "이름을 입력하세요: " name
if [ -z "$name" ]; then
echo "이름을 입력하지 않았습니다."
else
echo "안녕하세요, $name 님!"
fi
# 작성한 쉘 스크립트에 권한을 부여하고 실행
chmod +x myscript.sh
./myscript.sh
쉘 스크립트 관련해서는 아래에 간단한 설명이 첨부되어있다.
예시:
패키지 관리자 활용
# 패키지 목록 업데이트 / sudo는 관리자 권한으로 실행시킬 수 있는 명령어
sudo apt update
# 소프트웨어 설치 (curl 설치 예시) / -y: yes를 선택한다는 의미
sudo apt install curl -y
# 설치된 패키지 확인
curl --version
# 패키지 삭제
sudo apt remove curl -y
위의 예시는 ubuntu를 사용한다는 가정하에 작성된 예시이므로 만약 Fedora나 CentOS 등 다른 배포판 사용 시 yum update 또는 dnf install 명령어로 대체해야 한다.
예시:
컴파일러
// hello.c 파일을 생성
#include <stdio.h>
int main() {
printf("Hello, Linux World!\n");
return 0;
}
# gcc 컴파일 및 실행
gcc hello.c -o hello
./hello
사람이 작성한 코드(예: C언어) 등은 컴퓨터가 이해하지 못하기때문에 컴파일이라는 과정을 통해 기계어로 번역을 해주는 과정을 거쳐야한다.
여기서 예시로 사용한 gcc(GNU C Compiler)로 리눅스 환경에서 C언어를 컴파일 할 수 있는 도구이다.
예시:
시스템 모니터링 및 프로세스 관리
# 현재 실행중인 프로세스 목록 확인
ps aux
# 실시간 시스템 모니터링
top
# top과 유사하지만 가독성의 차이
htop
# 메모리 및 스왑 사용량 확인
free -h
예시:
/proc 파일 시스템 탐색
# 커널 버전 확인
cat /proc/version
# cpu 정보 확인
cat /proc/cpuinfo | grep "model name" | uniq
# 메모리 정보 확인
cat /proc/meminfo | head -n 10
해당 예시에서 말하는 /proc 파일 시스템은 리눅스 커널과 관련된 정보를 제공하는 역할이라고 이해하면 된다.
예시:
파일 권한 및 사용자/그룹 관리
# 현재 디렉토리 파일 권한 확인
ls -l
# 파일의 읽기, 쓰기, 실행 권한 변경
chmod 755 파일명
chmod u=rwx,go=rx 파일명
# 파일의 소유자 변경
sudo chown 사용자명 파일명
# 파일의 그룹 변경
sudo chgrp 그룹명 파일명
# 신규 사용자 추가
sudo useradd -m 새사용자명
sudo passwd 새사용자명
# 신규 그룹 추가 및 사용자 할당
sudo groupadd 새그룹명
sudo usermod -aG 새그룹명 사용자명
권한과 관련된 내용 짧게 다루기 힘들어서 추후 따로 학습 후 다룰 예정이다.
예시:
Crontab 및 스케줄러 활용
Crontab 및 스케줄러에 관한 내용을 다루기 전에 Cron과 Crontab이 무엇인지에 대해 알아보면,
Cron: 리눅스에서 주기적으로 어떤 작업을 자동으로 실행해주는 백그라운드 서비스(데몬)
Crontab: Cron Table의 줄임말로, Cron 작업을 설정하는 설정 파일 or 명령어
#!/bin/bash
echo "$(date): Hello, Cron!" >> ~/cron_test.log
# 저장한 스크립트 파일에 실행 권한을 부여
chmod +x cron_test.sh
# Crontab 편집(edit)
crontab -e
# 매분 실행될 수 있도록 코드 수정
* * * * * /home/사용자명/cron_test.sh
# 현재 등록된 Crontab 작업 확인
crontab -l
# 등록된 Crontab 작업의 로그 확인
tail -f ~/cron_test.log
예시:
네트워크 관리 및 진단
# 자신의 IP 주소 확인
ip addr show
ifconfig # 해당 명령어도 IP 주소를 확인할 수 있음
# 원격 서버 ping test
ping -c 4 google.com
# 현재 열려있는 포트 및 관련 프로세스 확인
netstat -tulnp
# DNS 조회
nslookup google.com
dig google.com # DNS 조회가 가능하나 설치가 필요
예시:
백그라운드 작업 및 프로세스 제어
# 300초동안 대기하는 작업을 백그라운드에서 실행 / &: 백그라운드 실행
sleep 300 &
# 백그라운드 작업 목록 확인
jobs
# 백그라운드 작업을 포그라운드로 가져오기 / %1: 1번째 작업을 선택하는 것을 의미
fg %1
# 백그라운드 작업 중지 및 재개
kill %1
# 특정 프로세스 종료 / |: 앞의 작업을 실행한 후 뒤의 작업이 실행되는 것을 의미
ps aux | grep sleep
kill PID번호
예시:
로그 파일 탐색 및 분석
대표적으로 로그 파일은 /var/log 에 위치하고 있다.
# 시스템 메시지 확인
less /var/log/syslog
# 실시간 로그 확인
tail -f /var/log/syslog
# 특정 키워드 검색
grep "error" /var/log/syslog
# 다른 로그 확인
dmesg | tail -n 20
6️⃣ 쉘 스크립트와 자동화
✅ 쉘 스크립트란?
- 명령어들을 .sh 파일로 저장하고 자동 실행 가능하도록 하는 스크립트
#!/bin/bash echo "안녕!" >> hello.log
✅ 실행 방법
chmod +x script.sh ./script.sh
7️⃣ 크론(Cron)으로 작업 자동화
✅ Crontab 작성
crontab -e
✅ 시간 설정 형식
# 분 시 일 월 요일 순서
* * * * * 명령어
✅ 예시
* * * * * /home/ubuntu/backup.sh
→ 매분마다 백업 스크립트 실행
8️⃣ 오픈소스와 라이센스
라이센스 | 특징 | 예시 |
GPL | 수정하면 소스 공개 의무 | 리눅스 커널 |
MIT | 거의 제약 없음 | React, jQuery |
Apache 2.0 | 특허 조항 포함 | Hadoop, Kafka |
오픈소스는 협업과 투명성 중심, 클라우드 시대에는 라이센스 갈등도 존재함 (Redis, MongoDB 등)
9️⃣ 리눅스 배포판(Distro)
계열 | 대표 배포판 | 패키지 시스템 |
Debian | Ubuntu, Mint | APT (.deb) |
RedHat | RHEL, CentOS, Fedora | YUM/DNF (.rpm) |
기타 | Arch, Slackware, Gentoo | 다양 |
실무에선 Ubuntu Server 또는 Amazon Linux, CentOS를 많이 사용함
🔟 부팅 과정 & Init 시스템
- 전원
- BIOS/UEFI → 하드웨어 초기화
- 부트로더(GRUB) → 커널 실행
- init(systemd) → PID 1 → 서비스들 실행 시작
systemctl 명령어로 서비스 상태 관리 가능
1️⃣1️⃣ 파이프라인
- | : 출력을 다음 명령어의 입력으로 전달
cat file.txt | grep "error" | wc -l
→ error가 몇 번 나왔는지 확인 가능함
여러 명령어 조합으로 복잡한 데이터 처리 가능
본 후기는 [카카오엔터프라이즈x스나이퍼팩토리] 카카오클라우드로 배우는 AIaaS 마스터 클래스 (B-log) 리뷰로 작성 되었습니다.