💻 프로그래밍

Linux

리눅스

오픈소스 운영체제. 서버의 표준. Ubuntu, CentOS, Alpine. 1991년 Linus Torvalds가 개발한 유닉스 계열 커널 기반 OS.

📖 상세 설명

Linux는 1991년 핀란드 대학생 Linus Torvalds가 개발을 시작한 오픈소스 운영체제 커널입니다. UNIX 철학을 계승하면서도 누구나 자유롭게 사용하고 수정할 수 있도록 설계되었습니다. 현재는 전 세계 수천 명의 개발자가 참여하는 역사상 가장 큰 협업 소프트웨어 프로젝트로 성장했습니다.

Linux는 GNU General Public License(GPL)에 따라 배포되는 대표적인 오픈소스 프로젝트입니다. GPL은 소스 코드의 자유로운 사용, 수정, 재배포를 보장하며, 파생 저작물도 동일한 라이선스로 공개해야 합니다. 이러한 "카피레프트" 철학이 Linux 생태계의 폭발적 성장을 이끌었습니다.

주요 Linux 배포판(Distribution)으로는 Ubuntu(초보자 친화적, 데스크톱/서버 겸용), CentOS/Rocky Linux(엔터프라이즈 서버용, RHEL 호환), Debian(안정성 중시, 서버 표준), Alpine(초경량, 컨테이너 최적화)이 있습니다. 각 배포판은 패키지 관리자(apt, yum, apk 등)와 기본 설정이 다르므로 용도에 맞게 선택해야 합니다.

Linux는 전 세계 서버의 90% 이상, 클라우드 인프라(AWS, GCP, Azure)의 핵심 OS로 사용됩니다. 또한 안드로이드 스마트폰, 라즈베리파이 같은 임베디드 시스템, AI/ML 워크로드, 슈퍼컴퓨터(TOP500 100%)에서도 Linux가 표준입니다. Docker 컨테이너와 Kubernetes도 Linux 커널 기술(cgroups, namespaces)을 기반으로 합니다.

💻 코드 예제

# ========================================
# Linux 기본 명령어 예제
# ========================================

# 1. 파일/디렉토리 조회 (ls)
ls -la /var/log           # 숨김 파일 포함, 상세 정보 표시
ls -lh                      # 파일 크기를 읽기 쉽게 표시 (KB, MB)
ls -lt                      # 수정 시간순 정렬

# 2. 텍스트 검색 (grep)
grep -r "error" /var/log    # 디렉토리 내 재귀 검색
grep -i "warning" app.log   # 대소문자 구분 없이 검색
grep -n "TODO" *.py         # 줄 번호와 함께 출력
grep -v "^#" config.conf    # 주석 제외한 라인만 출력

# 파이프와 함께 사용
cat /var/log/syslog | grep "failed" | tail -20

# 3. 파일 권한 변경 (chmod)
chmod 755 script.sh         # rwxr-xr-x (실행 스크립트용)
chmod 644 config.json       # rw-r--r-- (설정 파일용)
chmod 600 id_rsa            # rw------- (SSH 키, 소유자만)
chmod +x deploy.sh          # 실행 권한 추가
chmod -R 755 /var/www       # 디렉토리 재귀 적용

# 4. 시스템 서비스 관리 (systemctl)
systemctl status nginx      # 서비스 상태 확인
systemctl start nginx       # 서비스 시작
systemctl stop nginx        # 서비스 중지
systemctl restart nginx     # 서비스 재시작
systemctl enable nginx      # 부팅시 자동 시작
systemctl disable nginx     # 자동 시작 해제

# 서비스 로그 확인
journalctl -u nginx -f      # 실시간 로그 스트리밍
journalctl -u nginx --since "1 hour ago"

# 5. 실무 필수 추가 명령어
ps aux | grep python       # 프로세스 확인
top -c                      # CPU/메모리 실시간 모니터링
df -h                       # 디스크 사용량
free -h                     # 메모리 사용량
netstat -tulpn              # 열린 포트 확인
tail -f /var/log/syslog    # 실시간 로그 모니터링

🗣️ 실무 대화 예시

인프라 구축 회의에서 - 배포판 선택

"프로덕션 서버는 Ubuntu LTS 22.04로 통일합시다. 5년 장기 지원이라 보안 패치 걱정 없고, 대부분의 클라우드에서 공식 이미지를 제공해요. CentOS는 Stream으로 전환되면서 안정성 논란이 있으니 Rocky Linux나 AlmaLinux를 대안으로 고려해야 합니다. 컨테이너 베이스 이미지는 Alpine으로 가면 용량이 5MB 수준이라 빌드 속도가 확 빨라져요."

기술 면접에서 - 프로세스 vs 스레드

"Linux에서 프로세스는 독립적인 메모리 공간을 갖는 실행 단위이고, 스레드는 같은 프로세스 내에서 메모리를 공유하는 경량 실행 단위입니다. fork()로 프로세스를 생성하면 COW(Copy-on-Write)로 메모리를 복제하고, pthread_create()로 스레드를 만들면 힙과 전역 변수를 공유합니다. 컨텍스트 스위칭 비용은 스레드가 낮지만, 한 스레드의 버그가 전체 프로세스를 죽일 수 있어서 격리가 필요하면 프로세스를 씁니다."

장애 대응 중 - 서버 트러블슈팅

"서버 응답이 느려요. 먼저 top으로 CPU와 메모리 확인하고, dmesg | tail로 커널 에러 있는지 봅시다. df -h로 디스크 풀인지도 체크해야 해요. 로그 파일이 디스크를 다 채운 적 있거든요. 네트워크 문제면 netstat -an | grep ESTABLISHED 로 커넥션 수 확인하고, iotop으로 I/O 병목도 봐야 합니다. strace -p [PID]로 시스템 콜 레벨까지 추적할 수 있어요."

인프라 코드 리뷰 - Dockerfile 최적화

"이 Dockerfile에서 Ubuntu 베이스 이미지 대신 Alpine 쓰면 이미지 크기가 800MB에서 50MB로 줄어요. 그리고 RUN 명령어를 하나로 합치고 마지막에 apt-get clean && rm -rf /var/lib/apt/lists/* 해서 캐시 정리하세요. 멀티스테이지 빌드로 빌드 도구는 최종 이미지에서 제외하고요. 보안상 root 대신 일반 유저로 실행하는 것도 추가해주세요."

📊 주요 배포판 비교

배포판 패키지 관리 특징 용도
Ubuntu apt 초보자 친화, LTS 5년 지원 🏆 범용 (권장)
Debian apt 극도의 안정성, 느린 업데이트 서버, 보안 중시
Rocky/Alma dnf/yum RHEL 호환, 엔터프라이즈급 기업 서버, 금융
Alpine apk 5MB 초경량, musl libc 🐳 컨테이너 베이스
Arch pacman 롤링 릴리스, 최신 패키지 개발자 데스크톱

💡 실무 팁: 처음 시작하면 Ubuntu LTS, 프로덕션 서버는 Debian/Ubuntu LTS, 컨테이너는 Alpine, 엔터프라이즈는 Rocky Linux 추천. 패키지 관리자 명령어가 다르므로 배포판에 맞게 학습 필요.

⚠️ 주의사항

1
root 권한 남용 금지

root로 직접 로그인하거나 모든 명령에 sudo를 붙이는 습관은 위험합니다. rm -rf / 같은 실수 한 번에 시스템이 파괴됩니다. 일반 사용자 계정으로 작업하고, 꼭 필요할 때만 sudo를 사용하세요. SSH root 로그인은 비활성화하는 것이 보안 기본입니다.

2
방화벽 설정 필수

서버를 인터넷에 노출할 때는 반드시 방화벽(ufw, firewalld, iptables)을 설정하세요. 필요한 포트(22, 80, 443 등)만 열고 나머지는 차단해야 합니다. 클라우드에서는 Security Group과 함께 이중으로 설정하는 것이 안전합니다.

3
로그 모니터링 체계화

/var/log 디렉토리의 로그를 정기적으로 확인하고, logrotate로 로그 로테이션을 설정하세요. 로그 파일이 디스크를 가득 채우면 서버가 멈춥니다. 중요 서버는 중앙 로그 수집 시스템(ELK, Loki)을 구축하여 실시간 모니터링과 알림을 설정하는 것이 좋습니다.

🔗 관련 용어

📚 더 배우기