Cert Notes/ 출퇴근 학습 노트
로드맵
KOEN
리눅스마스터 1급 · 1급리눅스마스터 1급
  • Week 1
    • 1.운영체제와 리눅스: 커널이 하는 일
    • 2.자유 소프트웨어와 배포판: 라이선스가 만든 생태계
    • 3.설치와 부팅: 전원을 켜는 순간부터
    • 4.파일시스템 구조와 파일의 종류: 모든 것은 파일이다
    • 5.Week 1 종합 복습: 개념을 꿰뚫는 시간
  • Week 2
    • 1.파일과 디렉터리 명령: 리눅스 파일 시스템을 손끝으로 다루기
    • 2.텍스트 처리: 유닉스의 진짜 힘, 파이프라인으로 데이터를 다듬다
    • 3.vi/vim 정밀 정복: 손을 떼지 않고 편집하는 에디터의 미학
    • 4.압축과 아카이브, 그리고 도움말: 파일을 묶고 줄이고, 스스로 배우는 법
    • 5.Week 2 종합 복습: 명령행에서 살아남기 위한 모든 것
  • Week 3
    • 1.셸의 정체: 명령을 해석하는 프로그램과 변수의 세계
    • 2.흐름을 잇고 비트는 기술: 리다이렉션, 파이프, 메타문자
    • 3.셸을 길들이다: 별칭, 히스토리, 그리고 작업 제어
    • 4.셸 스크립트: 명령을 코드로 엮는 첫걸음
    • 5.Week 3 종합 복습: 셸과 스크립트의 큰 그림
  • Week 4
    • 1.계정 파일 4종: /etc/passwd · /etc/shadow · /etc/group · /etc/gshadow 필드 해부
    • 2.계정 관리 명령과 권한 상승: useradd부터 sudo까지
    • 3.권한의 산수: rwx · 8진수 chmod · 소유권 · umask 계산
    • 4.특수 권한과 ACL: SetUID · SetGID · Sticky bit · getfacl/setfacl
    • 5.Week 4 종합 복습: 계정·권한 체계를 한 장으로 꿰기
  • Week 5
    • 1.파일시스템 종류와 구조: ext2/3/4 · xfs · btrfs · 저널링 · inode와 블록
    • 2.파티션과 마운트: fdisk · gdisk · parted · mkfs · mount/umount · /etc/fstab 6필드
    • 3.LVM과 스왑: PV·VG·LV 계층 · pvcreate부터 lvextend·resize2fs · mkswap·swapon
    • 4.RAID와 쿼터, 디스크 점검: RAID 0/1/5/6/10 · mdadm · quota/edquota · fsck/df/du/lsblk/blkid
    • 5.Week 5 종합 복습: 파일시스템·파티션·LVM·스왑·RAID·쿼터 총정리와 실전 연습
  • Week 6
    • 1.프로세스 관리: PID부터 시그널·우선순위까지
    • 2.데몬과 프로세스 생애: fork·exec부터 좀비·고아까지
    • 3.시스템 초기화: init·런레벨에서 systemd·target까지
    • 4.작업 예약: cron의 5필드부터 at·batch까지
    • 5.Week 6 종합 복습: 프로세스·초기화·예약을 한 장으로 꿰기
  • Week 7
    • 1.패키지 관리: RPM·YUM/DNF와 DEB·APT 두 계열을 한 손에
    • 2.소스 컴파일과 라이브러리: tar→configure→make→make install의 의미
    • 3.커널과 모듈: 시스템의 심장과 그 확장 부품 다루기
    • 4.장치 관리와 프린터: /dev·udev로 하드웨어 다루고 CUPS로 인쇄하기
    • 5.Week 7 종합 복습: 백업과 시스템 관리의 큰 그림
    • 6.가상화 관리: 하이퍼바이저·KVM·컨테이너로 한 서버를 여럿처럼 쓰기
  • Week 8
    • 1.네트워크 기초: OSI 7계층과 IP 주소·서브넷 계산
    • 2.네트워크 설정: 인터페이스·게이트웨이·DNS를 손으로 잡기
    • 3.네트워크 진단: ping부터 tcpdump까지 문제를 좁히는 명령들
    • 4.네트워크 장비·프로토콜·이중화: 계층으로 꿰는 인프라
    • 5.Week 8 종합 복습: 네트워크를 계층 한 장으로 꿰기
  • Week 9
    • 1.DNS와 BIND: 이름을 주소로 바꾸는 인터넷의 전화번호부
    • 2.DHCP와 NTP: 주소를 나눠 주고 시계를 맞추는 두 서비스
    • 3.Apache 웹 서버: httpd.conf와 가상 호스트의 모든 것
    • 4.Nginx와 리버스 프록시: 이벤트 기반 웹 서버의 설계
    • 5.Week 9 종합 복습: 이름·주소·시간·웹을 한 장으로
    • 6.데이터베이스 서비스: MySQL/MariaDB 설치부터 백업·복구까지
  • Week 10
    • 1.메일 서비스: MTA·MDA·MUA와 SMTP·POP3·IMAP의 삼각 구도
    • 2.파일 전송 서비스: FTP의 능동·수동 모드와 vsftpd
    • 3.원격 접속의 표준: SSH와 sshd_config, 키 인증, 포트 포워딩
    • 4.원격 GUI: VNC와 X 윈도 시스템의 클라이언트·서버 역전
    • 5.Week 10 종합 복습: 네트워크 서비스를 포트 한 장으로 꿰기
  • Week 11
    • 1.Samba: 윈도와 리눅스를 잇는 파일·프린터 공유
    • 2.NFS: 유닉스 세계의 표준 파일 공유
    • 3.방화벽: iptables와 firewalld
    • 4.접근 제어와 보안: TCP Wrapper, SELinux, 로그 관리
    • 5.Week 11 종합 복습: 공유, 방화벽, 보안의 큰 그림
  • Week 12
    • 1.명령어 옵션 빈출 정리: 실기 단답으로 굳히는 핵심 명령
    • 2.설정 파일 경로·핵심 지시어 총정리: 빈칸 채우기를 위한 정밀 암기
    • 3.디스크·LVM·권한 작업형: 시나리오를 명령 순서로 풀어내기
    • 4.프로세스·스케줄링·systemd 작업형: 운영 명령을 시나리오로 굳히기
    • 5.시스템 작업형 모의고사 + 오답노트: 12문항으로 굳히기
  • Week 13
    • 1.네트워크 설정·진단 작업형: 손으로 IP를 세우고 길을 뚫는다
    • 2.서비스 설정파일 단답: 지시어 하나가 합격을 가른다
    • 3.셸 스크립트 작성형: 조건·반복·함수로 실무를 자동화한다
    • 4.보안·방화벽·로그 작업형: 규칙을 쓰고 컨텍스트를 바로잡는다
    • 5.네트워크·서비스 작업형 모의 + 오답노트
  • Week 14
    • 1.1차 과목① 종합 모의: 리눅스 실무의 이해 약점 정리
    • 2.1차 과목② 종합 모의: 리눅스 시스템 관리 약점 정리
    • 3.1차 과목③ 종합 모의: 네트워크와 서비스의 활용 약점 정리
    • 4.2차 실기 종합 모의: 단답·작업형 실전 훈련
    • 5.최종 오답·암기카드 총정리와 시험 당일 전략 (70일 마무리)
합격 후기
← 리눅스마스터 1급/Week 1/Day 2
리눅스마스터 1급· AssociateWeek 1 · Day 2읽기 약 16분

Day 2 - 자유 소프트웨어와 배포판: 라이선스가 만든 생태계

📌 핵심 정리

  • 자유 소프트웨어(FSF, 1985)는 윤리적 자유를, 오픈소스(OSI, 1998)는 실용적 개발 방법론을 강조한다. 코드는 거의 같다.
  • 카피레프트 = 저작권법을 역이용해 자유를 강제 보존. 파생물도 같은 라이선스로 공개해야 한다(전염성).
  • GPL(전체 공개 의무) / LGPL(동적 링크 시 앱 비공개 가능) / BSD·MIT·Apache 2.0(공개 의무 없음)의 구분이 핵심 출제 포인트.
  • 배포판 3대 계열: 레드햇(RPM+dnf/yum), 데비안(DEB+apt), SUSE(RPM이지만 zypper+YaST).
  • 패키지 도구는 **저수준(rpm·dpkg, 의존성 수동) ↔ 고수준(dnf/yum·apt, 저장소 기반 자동)**으로 짝을 이룬다.

자유 소프트웨어 vs 오픈소스 — 같은 코드, 다른 철학

라이선스와 배포판 계열은 1급 단골 출제 영역이다. 출발점은 "공짜 소프트웨어"와 "오픈소스"가 역사적·철학적으로 다른 두 운동이라는 사실이다.

자유 소프트웨어(Free Software)

  • 1985년 리처드 스톨먼이 설립한 **자유 소프트웨어 재단(FSF)**에서 시작.
  • 여기서 "Free"는 무료가 아니라 자유(freedom) — 스톨먼의 유명한 문구 "free as in free speech, not as in free beer(공짜 맥주가 아니라 언론의 자유)".
  • 네 가지 자유를 핵심으로 한다.
    • 자유 0: 목적에 상관없이 프로그램을 실행할 자유
    • 자유 1: 프로그램의 작동 원리를 연구하고 수정할 자유(소스 코드 접근 필요)
    • 자유 2: 복제본을 재배포할 자유
    • 자유 3: 수정한 버전을 배포할 자유

오픈소스(Open Source)

  • 1998년 **오픈소스 이니셔티브(OSI)**가 주도.
  • 에릭 레이먼드 등은 "자유"의 이념적·정치적 색채가 기업 참여를 막는다고 보고, 더 실용적이고 비즈니스 친화적인 "오픈소스"라는 용어를 내세웠다.
  • 강조점: 기술적 우수성과 협업 모델.

📚 유래/사례: 스톨먼이 자유 소프트웨어 운동을 시작한 계기는 사소한 사건이었다. MIT 시절 그는 제록스 프린터의 종이 걸림을 알려주는 기능을 추가하려 했지만, 제조사가 소스 코드 공개를 거부했다. "내 손에 있는 도구를 내가 고칠 수 없다"는 좌절이 평생의 운동으로 이어졌다. 작은 프린터 한 대가 거대한 자유 소프트웨어 운동의 씨앗이 된 셈이다.

카피레프트 — GPL의 핵심 무기

  • 일반 저작권(copyright)은 "권리를 보유(reserved)"해 복제·수정을 막는다. **카피레프트(Copyleft)**는 저작권법을 역이용해 자유를 강제로 보존한다.
  • 핵심 규칙: "자유롭게 쓰고 고칠 수 있다. 단, 배포하는 파생물도 반드시 같은 자유를 보장해야 한다."
  • 자유를 받은 사람은 그 자유를 다음 사람에게도 넘겨주어야 한다 → 이 전염성(viral) 때문에 카피레프트 코드를 가져다 쓰면 결과물도 같은 라이선스로 공개할 의무가 생긴다.
  • 이를 구현한 대표 라이선스가 **GPL(GNU General Public License)**이다.

💡 개념: "Copyleft"는 "Copyright"의 반대말 말장난이다. Right(오른쪽/권리)를 Left(왼쪽)로 뒤집어, 권리를 독점하는 대신 자유를 보존한다는 뜻을 담았다. FSF 로고에 "All rights reversed(모든 권리 역전)"라고 써 있는 것도 같은 농담이다.

주요 오픈소스 라이선스 비교

라이선스는 크게 **카피레프트 계열(GPL)**과 **허용적(permissive) 계열(BSD, MIT, Apache)**로 나뉜다. 시험에서는 "파생물 공개 의무"의 유무를 정확히 구분하는 것이 핵심이다.

라이선스계열파생물 소스 공개특징
GPL강한 카피레프트의무(전체)링크된 코드까지 GPL 강제
LGPL약한 카피레프트라이브러리만동적 링크 시 비공개 앱과 결합 가능
BSD허용적의무 없음저작권 표시만 유지하면 자유 사용
MIT허용적의무 없음가장 간결, 상업적 폐쇄 소스 가능
Apache 2.0허용적의무 없음특허 보호 조항 포함
  • GPL: 가장 강력한 카피레프트. GPL 코드를 포함하거나 링크한 프로그램은 전체를 GPL로 공개해야 한다. 리눅스 커널이 GPLv2를 채택했으므로 커널에 통합되는 드라이버 등은 원칙적으로 GPL을 따라야 한다.
  • LGPL(Lesser GPL): GPL을 완화한 "약한 카피레프트". 주로 라이브러리에 적용되며, 폐쇄 소스 프로그램이 LGPL 라이브러리를 동적 링크해 쓰는 것을 허용한다. 단 라이브러리 자체를 수정하면 그 부분은 공개해야 한다.
    • glibc(C 표준 라이브러리)가 LGPL인 이유: 모든 프로그램이 glibc를 링크하는데 GPL을 강제하면 리눅스에서 폐쇄 소스 프로그램을 만들 수 없게 되기 때문.
  • BSD/MIT: 허용적 라이선스의 대표. "저작권 표시만 유지하면 무엇이든 해도 좋다" → 수정본을 폐쇄 소스 상업 제품으로 만들어도 된다. 기업이 선호한다. macOS 커널 일부가 BSD에서 왔고, 수많은 상업 제품이 BSD/MIT 코드를 품고 있다.
  • Apache 2.0: MIT처럼 허용적이지만 명시적인 특허 라이선스 부여 조항으로 기여자의 특허 소송으로부터 사용자를 보호한다. 안드로이드, 쿠버네티스 등이 채택.
# 시스템에 설치된 패키지의 라이선스 정보 확인
# RPM 계열
rpm -qi bash | grep License
# Debian 계열 - 패키지 저작권 문서 위치
ls /usr/share/doc/bash/copyright

⚠️ 함정: 시험에서 "LGPL 라이브러리를 동적 링크한 폐쇄 소스 프로그램은 소스를 공개해야 하는가?"라는 함정이 자주 나온다. 답은 공개하지 않아도 된다이다. LGPL의 핵심이 바로 이 점이다. 반면 GPL 라이브러리를 링크하면 전체를 공개해야 한다. "동적 링크 + LGPL = 비공개 가능"을 기억하자.

🔍 더 깊이: GPL에는 버전이 있다. GPLv2(1991)와 GPLv3(2007)가 대표적이다. GPLv3는 "Tivoization(하드웨어로 GPL 소프트웨어 수정을 막는 행위)"을 금지하고 특허 조항을 강화했다. 리누스 토르발스는 GPLv3의 일부 조항에 반대해 리눅스 커널을 여전히 GPLv2에 묶어두고 있다. 이는 리눅스 커널의 중요한 라이선스 특징이다.

배포판이란 무엇인가

Day 1에서 "리눅스는 커널만"이라 배웠다. 우리가 설치하는 우분투·CentOS는 배포판(distribution, distro), 즉 다음을 하나로 묶은 완제품이다.

  • 리눅스 커널

  • GNU 시스템 도구(bash, coreutils, gcc 등)

  • 패키지 관리 시스템(설치·업데이트·의존성 관리)

  • 데스크톱 환경(GNOME, KDE 등, 서버판은 생략)

  • 기본 응용 프로그램과 설정

  • 배포판마다 철학과 대상이 다르다: 안정성 최우선 서버용, 최신 기술을 빠르게 도입하는 데스크톱용, 학습용, 보안 특화 등 수백 개.

  • 시험에서 중요한 것은 **계열(family)**이다. 대부분의 배포판은 세 뿌리에서 갈라졌고, 같은 계열은 패키지 관리 방식과 디렉터리 구조가 비슷하다.

레드햇(Red Hat) 계열 — RPM의 세계

  • 기업 서버 시장의 강자. 1994년 설립된 레드햇사의 RHEL(Red Hat Enterprise Linux)이 중심.
  • 특징: RPM(Red Hat Package Manager) 패키지 형식 + 의존성을 자동 해결하는 YUM/DNF.
배포판위치설명
RHEL상용레드햇의 유료 엔터프라이즈 제품, 기술 지원 포함
CentOS무료 클론RHEL 소스 기반 무료판(현재 CentOS Stream으로 전환)
Fedora선행 개발최신 기술 테스트베드, RHEL의 상류(upstream)
Rocky/AlmaLinux무료 클론CentOS의 노선 변경 후 등장한 RHEL 호환 클론
Amazon Linux클라우드AWS 최적화 RHEL 계열
  • 패키지 관리는 두 단계다.
    • 저수준 rpm: 개별 .rpm 파일을 설치하지만 의존성을 자동 해결하지 못한다.
    • 고수준 yum(구버전)·dnf(신버전): 저장소(repository)에서 패키지와 의존성을 함께 내려받아 자동 설치.
# 저수준 - 개별 패키지 파일 설치(의존성 수동)
rpm -ivh package.rpm        # install, verbose, hash
rpm -qa                     # 설치된 모든 패키지 조회
rpm -e package              # 패키지 제거
 
# 고수준 - 의존성 자동 해결(저장소 기반)
dnf install httpd           # 또는 yum install httpd
dnf update                  # 전체 업데이트
dnf remove httpd
dnf search keyword

📚 유래/사례: "Fedora"라는 이름은 레드햇 로고의 빨간 중절모(fedora hat)에서 왔다. Fedora는 레드햇의 실험실 역할을 한다. 여기서 검증된 최신 기술이 안정화되면 RHEL에 들어간다. 즉 Fedora → RHEL → CentOS(클론)로 기술이 흘러내려가는 구조다.

데비안(Debian) 계열 — DEB와 APT의 세계

  • 커뮤니티 중심으로 자유 소프트웨어 정신을 가장 충실히 따르는 계열.
  • 1993년 이안 머독(Ian Murdock)이 시작. 이름은 그와 당시 여자친구 데브라(Debra)의 이름을 합친 것(Deb + Ian).
  • 형식/도구: DEB(.deb) 패키지 + APT(Advanced Package Tool).
배포판위치설명
Debian기반안정성 극대화, 모든 데비안 계열의 뿌리
Ubuntu데스크톱/서버캐노니컬사가 만든 가장 대중적인 배포판
Linux Mint데스크톱우분투 기반, 사용 편의성 강조
Kali Linux보안데비안 기반 모의 침투 테스트 특화
Raspberry Pi OS임베디드라즈베리파이용 데비안 기반
  • 저수준 dpkg: 개별 .deb 파일을 다루지만 의존성 자동 해결 불가.
  • 고수준 apt(또는 apt-get): 저장소에서 의존성까지 자동 처리.
# 저수준 - 개별 패키지 파일(의존성 수동)
dpkg -i package.deb         # 설치
dpkg -l                     # 설치된 패키지 목록
dpkg -r package             # 제거
dpkg -L package             # 패키지가 설치한 파일 목록
 
# 고수준 - 의존성 자동 해결(저장소 기반)
apt update                  # 저장소 패키지 목록 갱신
apt install nginx           # 설치
apt upgrade                 # 업그레이드
apt remove nginx            # 제거

💡 개념: RPM 계열과 DEB 계열의 대응 관계를 표로 외워두면 시험에 매우 유용하다. 저수준: rpm ↔ dpkg. 고수준(의존성 자동): dnf/yum ↔ apt/apt-get. 패키지 확장자: .rpm ↔ .deb. 이 대응을 묻는 문제가 거의 매 회차 출제된다.

SUSE 계열 — 유럽의 강자

  • 1992년 독일에서 시작된 유럽 중심 배포판.
  • RPM 패키지 형식을 사용해 레드햇 계열과 형식을 공유하지만, 독자적인 시스템 관리 도구 **YaST(Yet another Setup Tool)**와 패키지 관리자 zypper를 쓴다.
배포판위치설명
SLES상용SUSE Linux Enterprise Server, 기업용
openSUSE무료커뮤니티판(Leap: 안정, Tumbleweed: 롤링릴리스)
zypper install apache2      # SUSE의 패키지 설치
zypper update               # 업데이트
yast                        # 텍스트/GUI 통합 시스템 설정 도구

🔍 더 깊이: SUSE는 RPM을 쓰지만 레드햇 계열로 분류하지 않고 독립 계열로 보는 것이 일반적이다. 패키지 "형식"(.rpm)과 패키지 "관리 도구"(zypper vs dnf), 그리고 시스템 관리 철학(YaST)이 모두 다르기 때문이다. 시험에서 "SUSE는 어떤 패키지 형식을 쓰는가"라는 함정 문제가 나오면 답은 RPM임에 주의하자. 계열은 다르지만 형식은 RPM이다.

패키지 관리의 본질 — 의존성 지옥의 해결

  • 저수준(rpm, dpkg)과 고수준(dnf, apt)이 따로 있는 이유는 의존성(dependency) 때문이다.
  • 프로그램 A → 라이브러리 B → 다시 C … 식으로 의존성이 사슬처럼 얽힌다. 저수준 도구로 하나씩 설치하면 필요한 의존성을 사람이 일일이 찾아 순서대로 설치해야 하는 **"의존성 지옥(dependency hell)"**에 빠진다.
  • 고수준 도구는 **저장소(repository)**라는 중앙 패키지 창고와 메타데이터로 이를 해결한다. apt install nginx 한 번이면 nginx가 필요로 하는 모든 라이브러리를 자동으로 찾아 함께 설치한다. 현대 리눅스 배포판이 쓰기 편한 핵심 이유다.

⚠️ 함정: rpm -ivh로 패키지를 설치하다 "Failed dependencies" 오류가 나는 것은 정상이다. 저수준 도구는 의존성을 해결하지 못하기 때문이다. 이때 --nodeps 옵션으로 강제 설치하면 프로그램이 깨질 수 있으므로, 의존성이 필요하면 반드시 dnf/yum 같은 고수준 도구를 써야 한다는 점이 출제 포인트다.

다음 시간에는 실제로 리눅스를 설치할 때 마주치는 파티션 설계, 부트로더 GRUB2, 그리고 전원을 켜는 순간부터 시스템이 살아나는 부팅 과정을 다룬다.

📖 용어

  • 카피레프트(Copyleft) : 저작권을 뒤집어 쓴 장치. 자유를 준 대신, 파생물도 같은 자유를 넘기라고 강제한다.
  • GPL : 가장 강한 카피레프트 라이선스. 이 코드를 쓰면 결과물 전체를 GPL로 공개해야 한다.
  • LGPL : 라이브러리용 완화판. 동적 링크만 하면 내 앱 소스는 공개하지 않아도 된다.
  • 허용적(permissive) 라이선스 : BSD·MIT처럼 저작권 표시만 남기면 폐쇄 소스 상업 제품으로 만들어도 되는 라이선스.
  • 배포판(distribution) : 커널 + GNU 도구 + 패키지 관리자 + 응용 프로그램을 묶어 설치 가능하게 만든 완제품.
  • RPM : 레드햇·SUSE가 쓰는 패키지 형식(.rpm)이자 저수준 설치 명령.
  • DEB / dpkg : 데비안 계열의 패키지 형식(.deb)과 그것을 다루는 저수준 명령.
  • 저장소(repository) : 패키지와 의존성 정보를 모아둔 중앙 창고. apt·dnf가 여기서 내려받는다.
  • 의존성 지옥 : 필요한 라이브러리를 사람이 일일이 찾아 설치해야 하는 상황. 고수준 도구가 이를 없앴다.
  • YaST : SUSE만의 통합 시스템 설정 도구. 텍스트 모드와 GUI 모두 지원한다.

📝 연습 문제

선택지를 클릭하면 정답·해설이 펼쳐집니다.

문제 1

다음 중 카피레프트(Copyleft)와 GPL 라이선스에 대한 설명으로 옳은 것은?

문제 2

폐쇄 소스 상업용 프로그램이 어떤 라이브러리를 동적 링크하여 사용하면서도 자신의 소스 코드를 공개하지 않을 수 있게 해주는 라이선스는?

문제 3

레드햇 계열과 데비안 계열의 패키지 관리 도구 대응 관계로 옳은 것은?

문제 4

다음 배포판과 그 계열의 연결이 옳지 않은 것은?

문제 5

SUSE 계열 배포판에 대한 설명으로 옳은 것은?

문제 6

자유 소프트웨어(Free Software) 운동에서 말하는 "Free"의 의미와 네 가지 자유에 대한 설명으로 옳은 것은?

이전운영체제와 리눅스: 커널이 하는 일Week 1 · Day 1다음 설치와 부팅: 전원을 켜는 순간부터Week 1 · Day 3

이 페이지

  • 핵심 정리
  • 자유 소프트웨어 vs 오픈소스 — 같은 코드, 다른 철학
  • 카피레프트 — GPL의 핵심 무기
  • 주요 오픈소스 라이선스 비교
  • 배포판이란 무엇인가
  • 레드햇(Red Hat) 계열 — RPM의 세계
  • 데비안(Debian) 계열 — DEB와 APT의 세계
  • SUSE 계열 — 유럽의 강자
  • 패키지 관리의 본질 — 의존성 지옥의 해결
  • 용어
  • 연습 문제