6. 파일 디스크립터 제한
파일 스크립터(File Descriptor)
파일 디스크립터는 데이터 입출력이나 소켓을 이용한 네트워크 입출력 처리 시 OS로부터 할당받는 것을 의미한다. OS는 사용자나 시스템 수준에서 생성할 수 있는 파일 디스크립터 개수를 제한한다. 예시로 파일 디스크립터 개수 제한이 1024라면 프로세스는 파일과 소켓을 합쳐 1024개를 초과할 수 없다. 그 이상의 클라이언트 연결 시도시 'Too Many Open Files'와 같은 오류 메시지와 함께 소켓 생성에 실패한다.
파일 디스크립터 개수 제한 확인
프로세스가 생성할 수 있는 파일 디스크립터 개수 제한은 여러 방법으로 확인할 수 있는데 명령어는 다음과 같다.
ulimit 옵션
ulimit -a
명령어 실행 후 open files 값이 현재 파일 디스크립터 개수 제한 값이다.
ulimit -n
ulimit -n 개수 : 사용자의 파일 디스크립터 제한을 변경하기 위해 사용하는 명령어, 현재 사용자 세션을 기준으로 파일 디스크립터 제한을 설정한다, 세션을 기준으로 적용되므로 다른 세션에는 적용되지 않으며, 로그아웃하고 다시 접속하면 기본 값이 적용된다.
/etc/security/limits.conf 파일
사용자의 기본 파일 디스크립터 제한을 변경하려할 때 이 파일을 수정한다.
* soft nofile 100000
* hard nofile 100000
- * : 모든 사용자에 적용한다는 뜻
- nofile : 파일 디스크립터 개수를 의미
- soft : 프로세스가 기본으로 사용하는 값
- hard : soft로는 부족할 경우 사용하는 값, 사용자는 hard로 지정한 값 이상으로는 사용할 수 없다.
systemctl show
systemd로 실행되는 서비스의 기본 파일 디스크립터 제한을 확인하는 명령어이다.
systemd로 실행되는 서비스는 ulimit이나 limits.conf 파일에 설정한 값을 사용하지 않는다.
systemd는 /etc/systemd/system.conf 파일에 있는 DefaultLimitNOFILE 값을 서비스의 기본 파일 디스크립터 제한 값으로 사용된다.
$ systemctl show -p DefaultLimitNOFILE
DefaultLimitNOFILE=524288
system.conf 파일을 수정하면 systemctl daemon-reload 명령어로 설정을 반영한다.
LimitNOFILE
각 서비스마다 다른 파일 디스크립터 값을 지정할 수도 있다. 개별 서비스 설정 파일에 다음과 같이 LimitNOFILE 설정을 추가하면 된다. 개별 서비스 설정 파일은 /etc/systemd/system 디렉토리나 /usr/lib/systemd/system 디렉토리에 있다.
[Service]
LimitNOFILE=1048576
sysctl fs.nr_open
한 프로세스가 가질 수 있는 파일 디스크립터 제한 개수를 확인하는 명령어이다.
$ sysctl fs.nr_open
fs.nr_open = 1073741816
일반적으로 fs.nr_open 값은 충분히 큰 값이지만, 더 큰 값이 필요하다면 /etc/sysctl.conf 파일에 fs.nr_open 설정을 변경한다.
sysctl fs.file-max
시스템 전체의 파일 디스크립터 개수 제한하는 명령어이다.
$ sysctl fs.file-max
fs.file-max = 9223372036854775807
이 값이 충분히 크다면 늘릴 필요가 없다. 이 값이 작아서 변경하고 싶다면 /etc/sysctl.conf 파일에 fs.file-max 설정을 변경하면 된다.
[/etc/sysctl.conf 파일]
fs.file-max=1048576
[sysctl.conf 파일 수정 후]
sysctl -p
프로세스 파일 디스크립터 제한 값 확인 명령어
- cat /proc/프로세스ID/limits
- prlimit --pid 프로세스ID
lsof
실제 프로세스가 사용 중인 파일 디스크립터 개수 확인 명령어이다.
$ lsof -p 프로세스ID
$ lsof -p 프로세스ID | wc -l
7. 크론으로 스케줄링
크론(Cron)은 리눅스를 포함한 유닉스 계열 OS의 시간 기반 스케줄러이다. 크론은 크론탬에 정의된 스케줄에 맞춰 작업을 실행한다.
crontab -l
크론탭에 정의된 작업 목록 조회 명령어이다.
$ crontab -l
0 1 * * * /data/project/run-db-job.sh => 매일 1시에 파일 실행
0 4 * * * /data/project/remove-old-log.sh => 매일 4시에 파일 실행
crontab -e
크론탭 설정 명령어이다. 일반적으로 크론탭 편집기는 vi를 사용한다.
크론탭 문법
실행 명령어는 보통 5개의 아스타(*)로 이루어져 있는데, 각 *는 매 시간을 의미한다.

- 0 0 * * * : 매일 0시 0분에
- 30 1 1 * * : 매월 1일 1시 30분에
- 5 4 * * 0 : 매주 일요일 4시 5분에
콤마
콤마로 구분해서 개별 값을 지정할 수도 있다.
- 0 1,2,3 * * * : 매일 1시 0분,2시 0분, 3시 0분에
- 0,30 5 * * * : 매일 5시 0분, 5시 30분에
구간
구간을 지정할 때는 '값1-값2' 형식을 사용한다.
- 30 1-3 * * * : 매일 1시에서 3시의 매시 30분에(1시 30분, 2시 30분, 3시 30분)
슬래시
슬래시를 이용해 시간 간격을 지정할 수 있다.
- */10 1 * * * : 매일 1시의 0분부터 1시 50분까지 10분 간격으로 실행
- 0 */2 * * * : 0시부터 2시간 간격으로 0분에 실행
>, 리디렉션
크론탭에서 명령어가 콘솔에 출력한 내용을 확인하고 싶을 때는 리디렉션을 사용한다.
크론탭으로 실행한 명령어의 콘솔 출력 내용을 별도 파일에 남기면 나중에 문제가 생겼을 때 원인을 분석하는 데 도움이 된다.
0 4 * * * /data/project/run.sh > data/project/out.log 2>&1
크론탭 명령어 실행권한
크론탭 명령어에 대한 실행 권한이 없으면 /etc/cron.deny 파일 또는 /etc/cron.d/cron.deny 파일에 계정이 기재되어 있는지 확인한다. cron.deny 파일에 등록된 계정은 크론탭을 설정할 수 없다.
만약 /etc/cron.allow 파일 또는 /etc/cron.d/cron.allow 파일이 존재하면 해당 파일에 계정이 등록되어 있어야 크론탭을 설정할 수 있다.
at 명령어
일회성 작업 스케줄링을 해야할 경우는 cron 대신 at 명령어를 사용한다. at 명령어는 지정한 일자와 시간에 명령어를 실행하는 기능을 제공한다.
8. alias 등록하기
alias는 명령어에 대한 별칭으로, 특정 디렉토리 경로를 별칭으로 지정해 매번 경로를 입력해야하는 번거로움을 줄여준다.
$ alias cdweb='cd /var/www/html'
.bashrc 파일 alias 설정
매번 alias를 설정하지 않고 로그인할 때 자동으로 alias를 적용하고 싶다면 쉘의 구성 파일에 alias를 등록하면 된다.
로키 리눅스, CentOs, 우분투는 기본적으로 bash를 사용하므로 홈 디렉토리에 위치한 .bashrc 파일 하단에 alias 설정을 추가한다.
# .bashrc
# Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
#alias
alias cdweb='cd /var/www/html'
alias
인자 없이 alias 명령어만 실행하면 현재 정의되어 있는 모든 별칭을 볼 수 있다.
$ alias
alias cdweb='cd /var/www/html'
alias egrep='egrep --color=auto'
alias 인자
별칭에 대한 인자를 설정한다.
.bash_profile파일, .bashrc 파일
.bash_profile 파일과 .bashrc 파일은 둘 다 Bash 셸에서 사용자 환경을 구성할 때 사용되는 설정 파일이다. 이 두 파일은 실행되는 시점과 용도가 다르다.
- .bash_profile 파일
- 사용자가 로그인할 때 한 번 실행된다.
- PATH처럼 전체 세션에 필요한 환경 변수를 설정한다.
- 해당 파일 안에 .bashrc 파일을 실행하는 코드가 포함되어 있어, 로그인 시점에 .bashrc 설정도 함께 적용된다.
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
- .bashrc 파일
- 새로운 bash 셸을 시작하거나 터미널 창을 열 때 실행된다.
- 주로 별칭과 같이 각 세션마다 적용할 설정을 이 파일에 지정한다.
9. 네트워크 정보 확인
IP 정보 확인하기
ifconfig
ifconfig 명령어를 실행하면 각 네트워크 인터페이스별로 IP 주소를 포함한 정보를 보여준다.

조회 속성은 다음 정보를 의미한다.
- eth0 : 일반적인 네트워크 인터페이스
- lo: 로컬 루프백 인터페이스
- inet: IP 주소
- inet6 : IPv6 주소
- ether : MAC 주소
그 외에 RX(Receive, 수신), TX(Transport, 전송)로 수신/전송된 패킷 수와 바이트 크기를 확인할 수 있다.
nc 명령어로 연결 확인하기
nc 명령어는 특정 포트로 연결이 잘 되는지 확인할 때 사용할 수 있는 명령어이다.
예시) nc 이용해서 443포트로 연결되는지 확인
$ nc -z -v www.daum.net 443
Ncat: Version 7.92 ( https://nmap.org/ncat )
Ncat: Connected to 211.249.220.24:443.
Ncat: 0 bytes sent, 0 bytes received in 0.07 seconds
- -z : 데이터 전송 없이 특정 포트가 열려있는지 확인
- -v : 추가 정보 출력, 연결 성공 시 메시지 출력 용도
- -u : UDP 포트 Open 여부 확인
nc를 사용하면 특정 포트를 사용하는 서버를 구동할 수도 있다. 이를 사용하면 실제 서버 프로세스를 구동하기 전에 두 노드 간에 통신이 제대로 동작하는지 확인할 수 있다.
$ nc -l 0v -p 1234
Ncat: Version 7.50 ( https://nnmap.org/ncat )
Ncat: Listening on :::1234
Ncat: Listening on 0.0.0.0:1234
- -l : 리스닝 모드, 서버 모드
- -p : 클라이언트 요청 수신 포트
- 클라이언트가 연결하면 nc 프로그램이 종료되므로 연결 확인이 필요할 때마다 실행해야 한다.
curl, wget
외부 서버 API 호출 결과 확인하는 명령어이고, 손쉽게 GET이나 POST 요청/응답이 가능하다.
netstat 명령어로 포트 사용 확인
netstat 명령어는 현재 사용 중인 소켓의 IP와 포트를 확인할 수 있다. 현재 서버에 열려 있는 서버 포트를 확인할 수 있다.

netstat 옵션은 다음과 같다.
- -l : 리스닝 서버 소켓 출력
- -p : 소켓을 사용하는 PID/프로그램 이름 출력
- -u : UDP 소켓 출력
- -t : TCP 소켓 출력
- -n : 포트나 주소를 숫자로 출력
- -a : 현재 사용 중인 전체 포트 확인
예시) netstat -anp grep
현재 사용 중인 포트를 쉽게 확인할 수 있다.
neststat -anp 현재 사용 중인 전체 포트, 포트/주소를 숫자로 출력, 소켓을 사용하는 PID/프로그램 이름 출력
$ netstat -anp | grep 12931
정리
ifconfig는 IP 주소를 확인할 때,
nc는 연결 확인할 때,
netstat은 포트를 확인할 때
사용하는 명령어이다.
'기타 > 책' 카테고리의 다른 글
| [주니어 백엔드 개발자가 반드시 알아야 할 실무지식] 11. 서버 구조/설계 (0) | 2026.05.03 |
|---|---|
| [주니어 백엔드 개발자가 반드시 알아야 할 실무지식] 10. 네트워크 기초 (0) | 2026.05.03 |
| [주니어 백엔드 개발자가 반드시 알아야 할 실무지식] 9.1 서버 (0) | 2026.04.26 |
| [주니어 백엔드 개발자가 반드시 알아야 할 실무지식] 8.3 보안 기타 (0) | 2026.04.25 |
| [주니어 백엔드 개발자가 반드시 알아야 할 실무지식] 8.2 데이터 암호화 (1) | 2026.04.25 |