# Debian의 경우, sudo 우선 설치
apt install -y sudo
adduser junsik
passwd junsik
# sudo 그룹에 사용자 추가
usermod -aG sudo junsik
adduser junsik
passwd junsik
# sudo 그룹에 사용자 추가
usermod -aG wheel junsik
# 네트워크 장치 이름 확인 (예: enX0, eth0, ens18)
ip a
sudo vi /etc/network/interfaces
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
source /etc/network/interfaces.d/*
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
allow-hotplug enX0
iface enX0 inet static
address 172.27.39.85
netmask 255.255.255.0
gateway 172.27.39.1
dns-nameservers 8.8.8.8 1.1.1.1 9.9.9.9
# This is an autoconfigured IPv6 interface
#iface enX0 inet6 auto
sudo systemctl restart networking
cd /etc/netplan/
# Netplan 설정 파일 수정 (파일명은 달라질 수 있음)
sudo vi ./00-installer-config.yaml
network:
version: 2
renderer: networkd
ethernets:
eth0:
dhcp4: no
dhcp6: no
accept-ra: no
addresses:
- 172.27.39.80/24
nameservers:
addresses:
- 8.8.8.8
- 1.1.1.1
- 9.9.9.9
routes:
- to: 0.0.0.0/0
via: 172.27.39.1
# (권장) 클라우드 환경에서 VM 복제 시 IP 충돌 방지
sudo touch /etc/cloud/cloud-init.disabled
sudo netplan apply
# 네트워크 장치 이름 확인 (예: enX0, enp1s0)
nmcli connection show
sudo nmcli connection modify enX0 \
ipv4.method manual \
ipv4.addresses 172.27.39.112/24 \
ipv4.gateway 172.27.39.1 \
ipv4.dns "8.8.8.8 1.1.1.1 9.9.9.9" \
ipv6.method ignore \
autoconnect yes
sudo nmcli connection up enX0
sudo vi CentOS-Base.repo
# 모든 mirrorlist, baseurl 주석 후 아래 항목 추가
baseurl=http://vault.centos.org/7.9.2009/os/$basearch/
baseurl=http://vault.centos.org/7.9.2009/updates/$basearch/
baseurl=http://vault.centos.org/7.9.2009/extras/$basearch/
baseurl=http://vault.centos.org/7.9.2009/centosplus/$basearch/
sudo vi /etc/yum.repos.d/CentOS-Linux-AppStream.repo
sudo vi /etc/yum.repos.d/CentOS-Linux-BaseOS.repo
sudo vi /etc/yum.repos.d/CentOS-Linux-Extras.repo
# 없으면 스킵
sudo vi /etc/yum.repos.d/CentOS-Linux-Extras-common.repo
# 모든 mirrorlist, baseurl 주석 후 아래 항목 추가
baseurl=http://vault.centos.org/centos/8/AppStream/x86_64/os/
baseurl=http://vault.centos.org/centos/8/BaseOS/x86_64/os/
baseurl=http://vault.centos.org/centos/8/extras/x86_64/os/
baseurl=http://vault.centos.org/centos/8/extras/x86_64/os/
sudo apt update -y
sudo apt upgrade -y
sudo apt install -y wget curl git unzip tar net-tools dnsutils openssh-server
# Debian
sudo apt install -y vim-gtk3
# Ubuntu
sudo apt install -y vim
# CentOS 7의 경우, dnf 대신 yum 사용
sudo dnf update -y
sudo dnf install -y wget curl git unzip tar net-tools bind-utils openssh-server vim-enhanced
sudo apt install -y ufw
sudo ufw allow 22/tcp
sudo ufw enable
sudo ufw status verbose
sudo systemctl enable --now firewalld
sudo firewall-cmd --permanent --zone=public --add-port=22/tcp
sudo firewall-cmd --permanent --zone=public --remove-service=cockpit
sudo firewall-cmd --permanent --zone=public --remove-service=dhcpv6-client
sudo firewall-cmd --reload
sudo firewall-cmd --list-all
# 타임존 설정
sudo timedatectl set-timezone Asia/Seoul
# 프린터 서비스 비활성화
sudo systemctl disable --now cups
# mDNS 서비스 비활성화
sudo systemctl disable --now avahi-daemon
sudo apt install -y language-pack-ko
sudo update-locale LANG=ko_KR.UTF-8
locale
sudo apt install -y language-pack-ko
sudo localectl set-locale LANG=ko_KR.UTF-8
locale
# CentOS 7의 경우, 기존에 설치되어 있음. dnf(yum) 생략 가능
sudo dnf install -y glibc-langpack-ko
sudo localectl set-locale LANG=ko_KR.UTF-8
locale
대규모 트래픽과 다수의 프로세스를 안정적으로 처리하기 위해 시스템의 최대 한도를 늘리고 네트워크 스택을 튜닝합니다.
모든 OS에서 동일하게 적용됩니다.
# 설정 파일 생성
sudo vi /etc/sysctl.d/99-custom.conf
# IPv6 설정
net.ipv6.conf.all.disable_ipv6 = 1 # 전체 인터페이스 IPv6 비활성화
net.ipv6.conf.default.disable_ipv6 = 1 # 기본 인터페이스 IPv6 비활성화
net.ipv6.conf.lo.disable_ipv6 = 0 # 루프백은 IPv6 허용
# 파일 핸들 및 메모리 설정
fs.file-max = 2097152 # 시스템 전체 파일 핸들 최대 개수
vm.max_map_count = 262144 # mmap 가능한 영역 개수 제한 (Elastic, DB 등에서 필요)
vm.swappiness = 10 # 스왑 사용 최소화 (낮을수록 RAM 우선 사용)
vm.vfs_cache_pressure = 50 # 커널 VFS 캐시 유지 비율 (낮을수록 캐시 유지 ↑)
# 네트워크 커널 파라미터 (성능 튜닝)
net.core.somaxconn = 65535 # 대기 중인 연결 큐 크기 (listen backlog)
net.core.rmem_max = 16777216 # 소켓 수신 버퍼 최대 크기
net.core.wmem_max = 16777216 # 소켓 송신 버퍼 최대 크기
net.core.netdev_max_backlog = 65535 # 커널 네트워크 패킷 처리 대기 큐 크기
# TCP 버퍼 크기 (최소값, 기본값, 최대값)
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216
net.ipv4.tcp_max_syn_backlog = 8192 # SYN 큐 크기 (동시 접속 대기 가능 수)
net.ipv4.tcp_tw_reuse = 1 # TIME_WAIT 상태 소켓 재사용 허용
net.ipv4.tcp_fin_timeout = 15 # FIN-WAIT-2 타임아웃 (기본 60s → 15s)
net.ipv4.tcp_keepalive_time = 600 # Keepalive 시작 시간 (초)
net.ipv4.tcp_keepalive_intvl = 30 # Keepalive 패킷 전송 간격
net.ipv4.tcp_keepalive_probes= 10 # Keepalive 시도 횟수
net.ipv4.tcp_syncookies = 1 # SYN Cookie 활성화 (SYN Flood 방어)
net.ipv4.tcp_timestamps = 0 # TCP Timestamp 비활성화 (성능+보안 모두 고려)
# Netfilter (커널 conntrack/방화벽 연관)
net.netfilter.nf_conntrack_max = 1048576 # Conntrack 최대 연결 추적 개수
# 보안 관련 설정
kernel.sysrq = 0 # Magic SysRq 키 비활성화 (서버 안전성↑)
kernel.kptr_restrict = 1 # 커널 심볼 주소 표시 제한 (보안↑)
# Reverse Path Filtering (IP 스푸핑 방지)
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1
# 설정 파일 생성
sudo vi /etc/security/limits.d/99-custom.conf
* soft nofile 65536
* hard nofile 65536
root soft nofile 65536
root hard nofile 65536
* soft nproc 65536
* hard nproc 65536
root soft nproc 65536
root hard nproc 65536
# sysctl 설정 즉시 적용
sudo sysctl --system
# limits 설정은 '재로그인' 후 적용됩니다.
# 재로그인 후 'ulimit -n' (65536), 'ulimit -u' (65536) 명령어로 확인합니다.
# 'ip a' (eth0, enX0) 에 inet6 보이지 않아야 합니다.
root
계정의 원격 접속을 차단하고, 필요시 암호 기반 로그인을 비활성화하여 보안을 강화합니다.
# SSH 설정 파일 열기
sudo vi /etc/ssh/sshd_config
# 아래 항목을 찾아 수정하거나 추가 (보안 강화 권장)
PermitRootLogin no # root 계정 로그인 비활성화
PasswordAuthentication yes # SSH Key 사용 시 'no'로 변경 권장
sudo systemctl restart ssh
sudo systemctl restart sshd
모든 사용자의 셸 프롬프트에 Git 브랜치, Python 가상환경, 오류 코드 등을 표시하여 작업 효율을 높입니다.
# 설정 파일 생성
sudo vi /etc/profile.d/99-custom_prompt.sh
#!/bin/bash
# 이 부분을 수정하여 기능을 켜고 끌 수 있습니다.
SHOW_PYTHON_VENV=true
SHOW_EXIT_CODE=true
PROMPT_MULTILINE=false
# true: 브랜치명 옆에 변경 상태(*, +) 표시 (약간 느려질 수 있음)
# false: 브랜치명만 표시 (매우 빠름)
SHOW_GIT_DIRTY_STATUS=false
# --- 색상 설정 ---
C_BRIGHT_CYAN='\[\e[1;36m\]'
C_YELLOW='\[\e[0;33m\]'
C_RED='\[\e[0;31m\]'
C_BRIGHT_RED='\[\e[1;31m\]'
C_PURPLE='\[\e[0;35m\]'
C_GREEN='\[\e[0;32m\]'
C_RESET='\[\e[0m\]'
# --- 히스토리 설정 ---
export HISTTIMEFORMAT="[%Y-%m-%d %T] "
export HISTCONTROL=ignoreboth:erasedups
# 1. Git 정보 (성능 최적화 및 옵션 기능 추가)
parse_git_branch() {
local branch
branch=$(git symbolic-ref --quiet --short HEAD 2>/dev/null) || return
local dirty=""
if [[ "$SHOW_GIT_DIRTY_STATUS" = true ]]; then
if ! git diff --quiet --ignore-submodules HEAD &>/dev/null; then dirty="*"; fi
if ! git diff-index --quiet HEAD -- &>/dev/null; then dirty="${dirty}+"; fi
fi
if [ -n "$dirty" ]; then
echo " ${C_PURPLE}($branch${C_RED}$dirty${C_PURPLE})${C_RESET}"
else
echo " ${C_PURPLE}($branch)${C_RESET}"
fi
}
# 2. Python 가상 환경
parse_python_venv() {
if [[ "$SHOW_PYTHON_VENV" = true && -n "$VIRTUAL_ENV" ]]; then
echo " ${C_GREEN}[py:$(basename "$VIRTUAL_ENV")]${C_RESET}"
fi
}
# 3. 마지막 명령어 종료 코드
prompt_exit_code() {
local exit_code=$?
if [[ "$SHOW_EXIT_CODE" = true && $exit_code -ne 0 ]]; then
echo "${C_RED}[$exit_code]${C_RESET} "
fi
}
# --- 메인 프롬프트 ---
build_prompt() {
local ps_symbol=$([ "$(id -u)" -eq 0 ] && echo "#" || echo "$")
local user_part="${C_BRIGHT_CYAN}\u${C_RESET}"
local host_part="${C_YELLOW}\h${C_RESET}"
local dir_part="${C_BRIGHT_RED}\w${C_RESET}"
local py_venv="$(parse_python_venv)"
local git_branch="$(parse_git_branch)"
local exit_code_status="$(prompt_exit_code)"
local first_line="${exit_code_status}${user_part}@${host_part}:${dir_part}${git_branch}${py_venv}"
if [[ "$PROMPT_MULTILINE" = true ]]; then
export PS1="\n${first_line}\n${ps_symbol} "
else
export PS1="${first_line}${ps_symbol} "
fi
}
export PROMPT_COMMAND="build_prompt"
sudo chmod +x /etc/profile.d/99-custom_prompt.sh
source /etc/profile.d/99-custom_prompt.sh
# 설정 파일 생성
sudo vi /etc/profile.d/99-custom_alias.sh
if [ -n "$BASH_VERSION" ]; then
alias vi='vim'
fi
sudo chmod +x /etc/profile.d/99-custom_alias.sh
source /etc/profile.d/99-custom_alias.sh
# 설정 파일 생성
sudo vi /etc/profile.d/99-custom_alias.sh
if [ -n "$BASH_VERSION" ]; then
alias ll='ls -lha'
fi
sudo chmod +x /etc/profile.d/99-custom_alias.sh
source /etc/profile.d/99-custom_alias.sh
기본 vim은 기능이 최소화되어 있어 사용이 불편할 수 있습니다.
아래 설정은 모든 사용자에게 권장되는 기본값으로, 가독성을 높이고 탭 대신 스페이스를 사용하는 최신 코딩 표준을 준수하는 데 도움을 줍니다.
# Debian, Ubuntu 전역 사용자 적용
sudo vi /etc/vim/vimrc.local
# Rocky 9~10 전역 사용자 적용
sudo vi /etc/vimrc.local
# Rocky 8, CentOS 전역 사용자 적용, 파일 하단에 내용 추가
sudo vi /etc/vimrc
# 개별 사용자 적용
vi ~/.vimrc
" # 기본 편의 기능
syntax on " 구문 강조 기능 켜기
set showmatch " 매칭되는 괄호 표시
" # 탭 및 들여쓰기 설정
set expandtab " 탭 입력을 스페이스로 변환
set autoindent " 자동 들여쓰기
set smartindent " 언어 문법에 맞는 더 스마트한 들여쓰기 (if, for 등)
set tabstop=4 " 탭의 시각적 너비를 4칸으로 설정
set shiftwidth=4 " 자동 들여쓰기, >>, << 명령 시 4칸으로 설정
set softtabstop=4 " Tab, Backspace 키를 누를 때 4칸 단위로 동작하도록 설정
" # 검색 기능 강화
set hlsearch " 검색 결과 하이라이트
set incsearch " 입력하는 동안 실시간으로 검색 결과 표시
set ignorecase " 검색 시 대소문자 무시
set smartcase " 검색어에 대문자가 포함된 경우, 대소문자 구분하여 검색
" # 기타 편의 기능
set ruler " 우측 하단에 현재 커서 위치(행, 열) 표시
set laststatus=2 " 항상 상태 표시줄 보이기
.vimrc 파일은 셸 스크립트가 아니므로 source ~/.vimrc 명령어로 실행하면 오류가 발생합니다.
이 파일은 vim이 시작될 때 자동으로 읽어들이는 설정 파일입니다