반응형
작성일: 2026년 4월 10일

 

 

내가 사마귀 치료를 한 서사가 길지만, 간략하게 요약하면 이렇다.

[5년 전]
처음으로 엄지 발가락에 2mm 정도 크기의 사마귀가 보였음.
처음에는 사마귀인 줄 모를 정도로 좁쌀처럼 작았음.

[4년 전]
환부가 10mm 정도로 커서 양말을 벗으면 바로 사마귀가 보였음.  이때부터 피부과를 찾아봤음.
피부과에서 레이저 치료를 받았고, 9개월 정도는 매끈한 상태를 유지했음.

[3년 전]
다시 동일한 위치에 사마귀가 재발했음. (피부과 의사가 레이저 치료할 때, 1년 뒤에 사마귀가 재발할거라고 했음)
사마귀 치료로 유명한 한의원이 있어서 200만원 정도 내고 치료를 시작했음. (3개월 치료 프로그램)
3개월간 한방 치료를 받았지만 1%도 좋아지지 않았음.
원장 한의사가 3개월 연장 치료하면 100% 완치된다고 설득함. (즉, 200만원을 추가 결제하라는 뜻 ㅠㅠ)

그냥 한의원을 나왔음. 

한의사에게 완전 속았음. ㅠㅠ  (시간과 돈 낭비 ㅠㅠ)


[2년 전]
아들 딸과 토요일, 일요일마다 수영장에 가서 2시간씩 수영을 했음.
1년 넘게 이런 패턴으로 수영을 했었는데, 1년이 지날 때쯤 발가락에 있던 사마귀가 사라졌음 :)
그 뒤로 지금까지 사마귀는 재발하지 않고 있음.

[원인 분석 및 결론]
수영장에서 수영을 2시간씩 꾸준하게 했을 때, 사마귀(유두종 바이러스)가 치료된 이유가 무엇일까?
내가 생각하기에는;
- 직접적인 원인:
    2시간 동안 수영하면서 피부가 물에 퉁퉁부었고,
    그때 사마귀가 있는 부위를 살살 문질렸을 때 피부 조직이 평소보다 많이 떨어졌음.
    (어떤 날은 수영장에서 샤워하는 동안에 피부 상처 딱지가 떨어지듯 사마귀 환부의 피부가 떨어질 때도 있었음)
    이것을 1년 동안 반복하니까 사마귀 환부가 점점 작아지다가 사라진 듯.
- 간접적인 원인:
    주2회씩, 2시간씩 수영을 하니까 면역력이 좋아진 것 같음.
    그리고 수영장 수질 유지를 위해서 물에 약품을 섞었을텐데, 그 약품 때문에 피부에 있는 균과 바이러스들이 죽었을듯.

위의 3가지 원인이 복합적으로 작용해서 사마귀를 치료했다고 생각함. ㅎㅎㅎ
혹시 사마귀 치료로 어려움을 겪는 분이 있다면 위의 방법을 추천함 :)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

반응형
작성일: 2026년 3월 31일

 

나는 회사 업무 때문에 Oracle Cloud와 Amazon Cloud를 동시에 사용하고 있다.

동일한 Resource 사용을 하는 경우, Oracle Cloud가 Amazon Cloud보다 3배 가량 저렴해서 지난 3년 동안 만족하면서 사용했었다.

그런데 올해부터 가상 Resource 자체의 장애와 OCI Web Console의 먹통 현상이 있어서 짜증이 좀 났다.

특히, 오늘 Resource deletion에 대한 처리를 하려다가 OCI Web Console에서 계속 'Error' 메시지가 출력되면서 업무가 안 되고 있다.

그리고 나는 Oracle Support 사이트에 가서 "SR(Service Request)"를 하라고 안내를 받았다.

Oracle Support 사이트에 로그인하고, "Service Request" 버튼을 누르는 순간... 나의 화는 절정에 도달했다.

출근해서 오전 내내 Oracle Cloud Web Console의 Error 메시지만 봐서 화만 많이 난 상태인데,

Oracle Support 사이트에서는 AI가 응대하고 있는 것이다.

혹시나 AI가 Errror 이슈에 대해서 해결해주나 약간의 희망을 가지고 AI와 대화를 도전했으나

역시나 예상한대로 AI는 저장된 뻔한 답변만 되풀이 할 뿐이다.

이미 알고 있는 뻔한 대답을 듣자고 Oracle Support 사이트에 로그인한 것이 아니다.

 

그냥 이슈 해결을 위한 SR(Service Request) 입력 폼이나 보여 달라구... Oracle 이 개X의 자X들아!

 

 

1시간 동안 Oracle Cloud Web Console에서 시달리고, Oracle Support AI한테 30분 동안 시달렸더니 오늘은 일할 에너지가 남질 않는다. ㅠㅠ

 

진짜 이렇게 Cloud Infra를 관리할거면, Oracle은 왜 Cloud Infra와 Platform 사업을 하는거야?

 

 올해까지만 쓰고, Oracle Cloud를 해지할 결심 !
반응형
작성일: 2026년 3월 5일

 

 

이 문서는 Linux 커널이 네트워크 트래픽을 어떻게 받고 처리하는지, DMA·링 버퍼·softIRQ·NAPI·RPS까지 한 흐름으로 정리한 요약이다.

 

1. DMA 링 버퍼와 TX/RX 링의 관계

DMA 링 버퍼와 TX/RX 링은 같은 개념을 가리킨다. 네트워크 카드는 소프트웨어(커널 드라이버)가 할당한 메모리 영역을 DMA로 직접 접근하며, 이 공유 메모리 구조를 흔히 “DMA 링 버퍼” 또는 “TX/RX 링”이라고 부른다.

구성 요소

  • 링(Ring): RAM에 있는 고정 크기의 원형 큐. 각 항목은 디스크립터(또는 주소)로, 실제 패킷이 들어 있는 버퍼를 가리킨다.
  • TX 링: 전송할 데이터가 들어 있는 RAM 버퍼의 시작/끝 주소(디스크립터)를 담는다.
  • RX 링: NIC가 수신 패킷을 쓸 RAM 버퍼의 주소를 담는다. NIC는 DMA로 이 버퍼에 직접 쓴다.
  • NIC 레지스터: 링 버퍼가 위치한 RAM 주소를 NIC가 알 수 있도록 레지스터에 설정된다.

DMA Ring buffer와 TX/RX Ring 관계

 

 

링과 버퍼는 모두 DMA 가능 메모리로 할당된다. 링은 지속적으로 NIC와 공유되므로 coherent/consistent DMA, 버퍼는 흐름 단위이므로 streaming DMA로 다루는 경우가 많다.

 

네트워크 링 버퍼의 역할

네트워크 링 버퍼는 NIC가 DMA로 직접 접근하는 메모리 영역이다. 크게 두 부분이 있다.

  • 링(큐) 부분: 고정 크기의 원형 FIFO 큐. 각 항목은 디스크립터(또는 메모리 주소)로, 실제 데이터가 들어 있는 영역을 가리킨다.
  • 버퍼(메모리) 부분: 실제 패킷 데이터가 들어가는 영역. 커널이 할당하고 디스크립터를 통해 링과 연결한다.

RX 링 버퍼는 수신용, TX 링 버퍼는 송신용이다. 둘 다 특정 네트워크 인터페이스에 묶여 있으며, 해당 인터페이스로 송수신하는 모든 트래픽이 이 링을 공유한다.

2. softIRQ 시스템과 ksoftirqd 초기화

디바이스는 “처리할 일이 있다”는 것을 IRQ(인터럽트)로 알린다. 네트워크의 경우 NIC가 패킷 도착 시 IRQ를 발생시킨다. IRQ 핸들러는 최우선으로 실행되며 다른 IRQ를 막을 수 있기 때문에, 커널은 짧게만 처리하고 나머지 작업을 softIRQ로 미룬다.

softIRQ는 “IRQ 컨텍스트 밖”에서 실행되는 지연 처리 메커니즘이다. 네트워크 수신의 경우 이 작업이 ksoftirqd 커널 스레드에서 실행된다.

부팅 시 초기화 순서

  1. ksoftirqd 스레드 생성: CPU당 하나씩 kernel/softirq.c의 spawn_ksoftirqd → smpboot_register_percpu_thread로 생성된다. 실제 루프에서 돌리는 함수는 run_ksoftirqd이다.
  2. softnet_data: CPU당 하나씩 생성된다. 네트워크 처리에 필요한 구조체 참조(예: poll_list)를 담는다. NAPI 폴 워커는 napi_schedule 등으로 이 poll_list에 붙는다.
  3. NET_RX_SOFTIRQ 등록: net_dev_init에서 open_softirq로 NET_RX_SOFTIRQ를 등록하고, 핸들러로 net_rx_action을 지정한다. 수신 패킷의 실제 처리는 이 함수에서 이뤄진다.
Linux OS 부팅시, softIRQ 시스템 초기화 순서
CPU당 ksoftirqd와 softnet_data가 만들어진 뒤 NET_RX_SOFTIRQ가 net_rx_action과 연결된다.

 

3. 데이터 도착부터 softIRQ까지

패킷이 도착하면 NIC → DMA → IRQ → 드라이버 → NAPI 스케줄 → softIRQ 순으로 진행된다.

하드웨어/드라이버 측

  1. 패킷이 NIC에 도착한다.
  2. NIC가 DMA로 패킷 데이터를 RAM의 RX 링이 가리키는 버퍼에 쓴다(CPU는 관여하지 않음).
  3. NIC가 IRQ를 발생시킨다.
  4. 드라이버에 등록된 IRQ 핸들러가 실행된다.
  5. NIC에서 IRQ를 클리어해 이후 패킷에 대해 다시 IRQ를 낼 수 있게 한다.
  6. NAPI softIRQ 폴 루프를 napi_schedule로 시작한다. 이 호출은 비트 플래그를 세우고 현재 CPU의 poll_list에 해당 디바이스의 NAPI 구조체를 넣는 정도만 하고, 실제 무거운 작업은 softIRQ로 넘긴다.

데이터 도착부터 softIRQ 처리까지의 시퀀스.

 

NIC가 DMA로 쓴 뒤 IRQ만 걸고, 실제 수신 처리는 ksoftirqd에서 이뤄진다.

 

softIRQ 쪽 (ksoftirqd)

  1. napi_schedule로 해당 CPU의 poll_list에 NAPI 폴 구조체가 추가된다.
  2. 해당 CPU의 softIRQ pending 비트가 설정되어, 그 CPU의 ksoftirqd가 “처리할 패킷이 있다”는 것을 알게 된다.
  3. ksoftirqd 커널 스레드의 run_ksoftirqd가 동작한다.
  4. __do_softirq가 pending을 보고, 등록된 핸들러인 net_rx_action을 호출한다. 무거운 수신 처리 작업은 IRQ 핸들러가 아니라 이 softIRQ 컨텍스트(ksoftirqd)에서 수행된다.

정리하면, NIC는 DMA로 RX 링 버퍼에만 쓰고, CPU는 IRQ에서 최소한의 일만 한 뒤 softIRQ로 “나중에 처리”를 맡기고, 실제로 RX 링에서 패킷을 꺼내서 프로토콜 스택으로 넘기는 것은 net_rx_action → 드라이버 poll (예: igb_poll)이다.

4. net_rx_action와 수신 처리

net_rx_action은 현재 CPU의 poll_list에 있는 NAPI 구조체들을 순회하며, 각 디바이스의 poll 함수를 호출한다.

처리 흐름 요약

  1. net_rx_action이 NAPI 폴 리스트에서 NAPI 구조체를 꺼낸다.
  2. budget과 경과 시간을 확인해 softIRQ가 CPU를 독점하지 않도록 한다.
  3. 등록된 poll 함수를 호출한다(예: igb_poll). 이 함수가 RAM의 RX 링 버퍼에서 패킷을 가져온다.
  4. 패킷은 napi_gro_receive로 넘어가 GRO(Generic Receive Offload) 등을 처리한다.
  5. GRO에서 묶이거나, 그렇지 않으면 netif_receive_skb → 프로토콜 스택으로 전달된다.
net_rx_action 처리 흐름

 

NAPI(New API) poll이 RX 링에서 패킷을 꺼내 GRO를 거쳐 netif_receive_skb로 넘긴다.

 

net_rx_action/igb_poll이 멈추는 경우

  • 처리 시간이 너무 길어질 때
  • budget 한도에 도달했을 때 (CPU 사용 제한)
  • 더 읽을 데이터가 없을 때

budget 소진이나 시간 제한 때문에 아직 처리할 패킷이 있는데 루프가 끝나면 /proc/net/softnet_stat의 세 번째 필드(time_squeeze)가 증가한다. 이 값이 0보다 크면 한도에 걸린 것이다. CPU 여유가 있다면 netdev_budget을 올려서 net_rx_action이 더 많은 패킷을 처리하도록 할 수 있다.

# 기본값 300, 필요 시 증가
echo 900 > /proc/sys/net/core/netdev_budget

5. RPS (Receive Packet Steering)

RPS가 꺼져 있으면:

  • netif_receive_skb → __netif_receive_core → 탭(예: PCAP) → 프로토콜 핸들러(예: ip_rcv)로 직접 전달된다.

RPS가 켜져 있으면:

  • netif_receive_skb → enqueue_to_backlog. 패킷이 CPU별 입력 큐에 들어가고, 해당 원격 CPU의 NAPI 구조체가 그 CPU의 poll_list에 추가되며 IPI가 큐에 넣어진다. 그러면 원격 CPU의 ksoftirqd가 깨어나 같은 방식으로 net_rx_action → process_backlog로 그 CPU의 입력 큐에서 패킷을 꺼낸 뒤 __netif_receive_core → 프로토콜 스택으로 넘긴다. 즉, 수신 처리 부하가 여러 CPU에 나뉜다.

RPS 유무에 따른 경로

 

RPS를 쓰면 패킷이 CPU별 큐로 나뉘고 IPI로 다른 CPU의 ksoftirqd가 깨어나 부하가 분산된다.

멀티큐 NIC는 큐별로 다른 CPU에 IRQ를 붙여 softIRQ 부하를 나누고, RPS는 큐 수보다 CPU가 많을 때 추가로 부하를 분산할 때 유용하다.

 

6. 프로토콜 스택부터 사용자 소켓까지

__netif_receive_core 이후 경로는 대략 다음과 같다.

  1. IPv4의 경우 ip_rcv로 패킷 수신.
  2. netfilter 및 라우팅 최적화.
  3. 로컬로 오는 패킷은 상위 프로토콜(UDP 등)로 전달.
  4. UDP면 udp_rcv → udp_queue_rcv_skb, sock_queue_rcv로 사용자 소켓의 수신 버퍼에 큐잉. 그 전에 BPF 등이 처리될 수 있다.
Protocol Stack부터 User Socket 까지 흐름도

ip_rcv → netfilter/라우팅 → UDP → 소켓 큐 → 사용자 공간.

 

7. 모니터링 및 튜닝

링/큐 크기와 드롭

링은 고정 크기 원형 큐이므로, 처리보다 도착이 빠르면 큐가 가득 차 패킷이 드롭된다.

ethtool -S enp8s0f0 | grep drop

 

드롭이 늘면:

  • 멀티큐 사용: ethtool -l로 현재 설정, ethtool -L로 큐 개수 조정. 큐가 여러 개면 DMA/처리 부하가 여러 CPU에 나뉜다.
  • 큐(디스크립터) 길이 증가: ethtool -g로 최대/현재 값 확인, ethtool -G로 조정. 큐를 길게 하면 처리량은 늘 수 있지만 지연 변동이 커질 수 있고, 짧으면 지연은 줄일 수 있지만 드롭 위험이 있다.

softIRQ 소비 확인

cat /proc/net/softnet_stat | awk '{print $3}'

세 번째 필드가 time_squeeze이다. 0보다 크면 budget/시간 제한으로 아직 처리할 패킷이 있는데 루프가 끝난 경우다. CPU 여유가 있으면 netdev_budget을 올려 본다.

수신 처리 호출 스택 예시

# 예: netif_receive_skb_internal 부근 커널 스택
netif_receive_skb_internal+1
napi_gro_receive+186    # RX 링에서 꺼낸 직후
igb_poll+1153
net_rx_action+329
__do_softirq+222
...

 

 


 

관련 문서

https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/10/html/network_troubleshooting_and_performance_tuning/tuning-irq-balancing

 

Chapter 2. Tuning IRQ balancing | Network troubleshooting and performance tuning | Red Hat Enterprise Linux | 10 | Red Hat Doc

The kernel stores the interrupt counters in the /proc/interrupts file. To display the counters for a specific NIC, such as enp1s0, enter: grep -E "CPU|enp1s0" /proc/interrupts CPU0 CPU1 CPU2 CPU3 CPU4 CPU5 105: 141606 0 0 0 0 0 IR-PCI-MSI-edge enp1s0-rx-0

docs.redhat.com

 

 

https://tungdam.medium.com/linux-network-ring-buffers-cea7ead0b8e8

 

Linux network ring buffers

Trying to cover what I don’t know about Linux network

tungdam.medium.com

 

https://blog.packagecloud.io/illustrated-guide-monitoring-tuning-linux-networking-stack-receiving-data/

 

Illustrated Guide to Monitoring and Tuning the Linux Networking Stack: Receiving Data | Packagecloud Blog

This post illustrates guides to monitor and tune the Linux networking stack in great detail with the focus on receiving data.

blog.packagecloud.io

 

 

 

Network Socket Buffer 구조 및 데이터 이동 과정

 

 

SoftIRQ 처리 과정

 

반응형

 

작성일: 2026년 3월 5일

 

Linux OS에서 QCOW2, ISO, LOG 파일, 동영상 미디어 파일 등을 CLI 명령으로 복사할 때

복사 진행 정도를 확인하려면 아래의 방법을 이용하면 된다.

 

cp 명령 대신 rsync 명령을 사용

## 파일 1개 복사할 때
$ rsync --progress origin_file_name dest_file_name

## Directory 전체 복사할 때
##  참고: -a 옵션은 permission, timestamp 정보를 유지하도록 함
$ rsync -a --info=progress2 origin_dir_name dest_dir_name

 

progress 명령을 사용

이미 cp, mv 명령을 실행한 뒤, 다른 터미널에서 progress 명령을 실행하여 진행 상황을 본다.

$ sudo apt install progress

## 아래 명령은 cp, mv 등 파일 복사/이동에 관한 process 등을 자동으로 찾아서 진행률을 보여준다.
$ progress -mw

 

반응형
작성일: 2026년 3월 5일

 

 

Linux kernel source code를 다운로드하기

git clone --depth 1 https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git

 

위 git 명령은 최신 mainline 코드를 가져온다.

방금 다운로드한 kernel version을 확인하려면, Makefile을 열어서 파일 내용의 위 5줄을 읽어야 한다.

$ cat Makefile

VERSION = 7
PATCHLEVEL = 0
SUBLEVEL = 0
EXTRAVERSION = -rc2
NAME = Baby Opossum Posse

... 중간 생략 ...

 

만약 특정 version의 kernel source  code를 가져와서 build하고 싶다면, 아래 예시와 같이 `git fetch` 명령을 실행해야 한다. 

$ git fetch origin tag v6.19 --no-tags
$ git checkout v6.19

## 또는 아래와 같이 처음부터 `git clone`할 때, 특정 tag를 지정해서 가져온다.
$ git clone --depth 1 --branch v6.19 https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git linux-6.19

 

Kernel source code를 build하기 위해 필요한 utility program을 설치하기

sudo apt install -y build-essential libncurses-dev bison flex libssl-dev libelf-dev libdw-dev dwarves bc pkg-config rsync cpio zstd

 

Kernel source code를 Compile하기

`make menuconfig` 명령을 실행하여 필요한 빌드 옵션을 On/Off 설정한다.

`make munuconfig` 화면에서 build option을 설정했으면, Signature 체크용 인증서 정보를 삭제한다. (아래 명령을 참고)

./scripts/config --set-str SYSTEM_TRUSTED_KEYS "" --set-str SYSTEM_REVOCATION_KEYS ""

 

 

`make` 명령을 수행한다.

source code 분량이 많기 때문에 -j 옵션을 추가하여 make 명령을 수행해야 한다.

-j 옵션이 없는 상태로 compile하면, 하루 종일 build해야 한다.

make -j$(nproc)

또는 

make -j2

 

 

Tip: 참고할 내용

Kernel source code Build에 걸리는 시간:

[ CPU 8 Core를 사용할 때 ]

  - HW 사양: Intel i7-11700 @ 2.50GHz

  - Build time: 32분 걸림

[ CPU 1 Core를 사용할 때 ]

  - HW 사양: Intel i7-11700 @ 2.50GHz

  - Build time: 3시간 40분 걸림

 

Build된 kernel binary file을 Machine에 적용하는 방법

1. Module 설치

sudo make modules_install

위 명령은 .ko module file을 /lib/modules/6.19.0/ 같은 directory에 복사한다.

 

2. Kernel 설치 (Kernel image 복사, Grub 설정 변경)

sudo make install

위 명령은 bzImage 파일과 System.map 파일을 /boot directory에 복사하고

Ubuntu/Debian 같은 배포판 리눅스에서는 /sbin/installkernel 스크립트를 이용하여 initramfs 파일을 생성하고 update-grub 절차까지 수행한다.

 

3. Reboot 후 새 kernel 선택

sudo reboot

컴퓨터가 reboot되면서, GRUB 화면이 보일 것이다.

이때 [ Advanced options ] - [ Linux 6.19.0 ] 을 선택하고, OS booting 과정을 진행하면 된다.

 

4. 새 kernel 적용 여부 확인

$ uname -r
6.19.0-11-generic

 

내가 build한 kernel version과 같은지 확인한다.

반응형
작성일: 2026년 3월 5일

 

KVM 가상화 환경에서 VM을 생성하면, VM 내부의 NIC Queue 개수는 기본적으로 1개로 설정된다.

높은 Network bandwidth가 필요한 경우라면, NIC Queue를 늘려서 Network bandwidth를 늘려야 한다.

부수적으로 CPU core의 부하를 분산시키는 효과도 얻을 수 있다.

 

방법 A: VM 생성할 때 NIC Queue 개수를 지정하는 방법

virt-install \
  --name myvm \
  --memory 2048 \
  --vcpus 4 \
  --disk path=/var/lib/libvirt/images/myvm.qcow2,size=20 \
  --network network=default,model=virtio,driver.name=vhost,driver.queues=8 \
  --cdrom /path/to/installer.iso

 

driver.queues=8 파라미터를 추가하여 virt-install 명령을 수행한다.

그리고 NIC multi queue를 사용하려면, model=virtio도 추가해야 한다.

 

VM(즉, Guest OS) 내부에서도 NIC Queue 설정 작업을 해야 한다.

# 현재 채널 확인
ethtool -l eth0

# combined 채널 8개로 설정
ethtool -L eth0 combined 8

 

그리고 위와 같이 NIC queue 개수가 늘어났으면, ksoftirqd 데몬 프로세스의 CPU 사용률을 확인해야 한다.

실제로 NIC multi queue에 저장된 network packet을 여러 CPU core가 고르게 처리하는지 확인한다.

 

#!/bin/bash

# ksoftirqd PID만 추출하여 top으로 모니터링
pids=$(pgrep ksoftirqd)
if [ -z "$pids" ]; then
    echo "ksoftirqd 프로세스를 찾을 수 없습니다."
    exit 1
fi

# 여러 CPU용 ksoftirqd가 있으면 쉼표로 이어서 top -p에 전달
pid_list=$(echo "$pids" | tr '\n' ',' | sed 's/,$//')
exec top -p "$pid_list"

 

방법 B: 이미 운영 중인 VM instance에 대한 NIC Queue 개수를 지정하는 방법

아래와 같이 `virsh edit` 명령으로 VM instance의 NIC queue 개수를 지정할 수 있다.

$ virsh edit myvm


<interface type='network'>
  <source network='default'/>         ## 실제로 사용하는 network 이름을 찾아야 함.
  <model type='virtio'/>              ## 이 라인을 추가.
  <driver name='vhost' queues='8'/>   ## 이 라인을 추가. queue 개수는 내가 원하는 만큼.
  <address type='pci' domain='0x0000' bus='0x01' slot='0x00' function='0x0'/>
</address>
</interface>

 

그리고 한번 VM instance를 재시작해야 위 설정값이 VM instance에 적용된다.

$ virsh shutdown myvm

$ virsh start    myvm

 

VM(즉, Guest OS) 내부에서도 NIC Queue 설정 작업을 해야 한다.

# 현재 채널 확인
ethtool -l eth0

# combined 채널 8개로 설정
ethtool -L eth0 combined 8

 

 

 

 

 

 

반응형
작성일: 2026년 2월 11일

 

naver map, kakao map은 우리 나라의 보안 시설을 마스킹 처리해서 보여준다.

그리고 google map은 마스킹 처리를 하진 않지만, 뿌옇게 보여준다. (또는 저해상도 이미지로 보여줌)

 

mapcarta 지도(https://mapcarta.com)는 해외의 인공 위성 지도와 동일한 해상도로 국내 지역을 보여준다.

정부에서 보안 시설로 지정한 땅까지 높은 해상도로 보여주기 때문에 "이거 괜찮은건가?" 싶은 정도.

 

반응형
작성일: 2026년 2월 3일

 

북일고등학교를 졸업하고, 서울에 있는 대학교로 진학한 뒤로는 직장 생활까지 서울에서 하다보니 천안에 갈일이 별로 없다.

그러다 보니 점점 학창 시절의 기억이 희미해져 가고 있다.

 

그러다가 가끔 아들, 딸의 같은 학급 친구가 북일고등학교로 진학했다는 소식을 접하면서 문득 나의 고교시절이 떠올랐다.

가장 먼저 떠오르는 것은 개성이 강한 선생님.

북일고등학교는 선생님마다 개성이 뚜렸했다.

그 중에서 기억이 선명하게 남는 분들은 아래와 같다.

 

염라대왕 선생님

북일고등학교가 개교했을 때(1970년대 말)부터 계셨다고 들은 것 같다.

2000명이나 되는 전교생의 이름, 반, 번호까지 다 외웠다고 해서 염라대왕 이라는 별명이 붙었다.

그리고 염라대왕 선생님의 외모가 지옥의 문턱에서 이 선생님께 심판을 받아야 할 것 같은 외모였다.

(염라대왕 선생님의 목소리도 이 세상의 목소리가 아니였어 ^^)

수업하는 과목 자체에 대한 내용보다는 세상 사는 얘기, 정치 이야기, 철학 이야기를 많이 들려주었다.

  

삽자루 선생님

보직이 여러가지였던 것으로 기억하는데, 내 경우는 잠깐 교련 수업 때문에 마주친 적이 있다.

선생님의 모습을 보면, 왜 별명이 삽자루인지 알게 된다.

나는 삽자루 선생님에게 정식 수업을 듣지 않은 것이 참 다행이다.

 

황비홍

화학 선생님이다. 처음 몇달간 화학수업을 들으면서 왜 황비홍인지 몰랐다가 여름쯤 같은 반 친구가 수업 시간에 장난치다가 선생님께 채벌 받는 것을 보고...

"엇! 이것은 영화배우 황비홍이 하던 권법..."

채벌은 채벌인데... 참 슬프기보다는 웃고픈 채벌 현장.

영화 속 황비홍이 나와서 교실을 날아다니는 것 같았다.

내 친구는 맞기는 맞았는데, 황비홍의 화려한 권법에 정신없이 맞아서... 넋이 나갔었다.

 

정뻥

무엇을 설명해도 과도한 MSG(양념)이 쳐져 있어서 정뻥이라는 별명이 붙었다.

선생님이 설명하면, 90% 정도는 걸러서 듣고 10%만 취해야 한다는 것을 알게 되었다.

1학년 때 담임쌤이라서 더욱 기억이 선명하다.

 

코만도

코만도 선생님의 별명을 몰라도, 선생님을 처음 보자마자 "앗, 코만도처럼 생겼다"라고 말하게 된다.

외모는 살벌하게 생겼는데, 말씀은 유순해서... 분위기 적응하기 힘들었다.

(영화 속, 부산에서 활동하는 큰형님 같은 외모)

 

해골

해골 선생님도 외모 때문에 해골이라고 불렸는데, 실제로 수업에서는 천사 같은 분이었다.

목소리가 걸걸했던 것으로 기억남 ^^

 

쌍칼

쌍칼 선생님은 북일고 야구부 지도자이면서 일반 학생의 체육 수업도 지도했었다.

말씀이 유쾌하고 재미있는데, 외모나 행동을 보면 "이래서 쌍칼이구나"라는게 바로 느껴진다.

 

산적

그냥 첫 대면부터 "산에서 도적질하시는 분" 같이 생겼다. (죄송합니다 ^^)

턱수염과 헤어스따일~, 등빨이 TV에서 보던 임걱정(?) ㅋㅋㅋ

우리에게 유도를 지도했는데, 정말 유도 수업 시간에 산적 선생님을 보면 죽을 맛이다.

화려한 유도 기술로 인정사정 볼 것 없이 학생들이 던졌다 (업어치기 시범 대상으로 걸리면 죽음이었음)

차라리 유도 수업은 코만도 쌤이 좋았다.

 

로보캅

솔직히 로보캅이라고 부르면 안 되는 거였다. (우리 학생들이 선을 넘이서 별명을 붙인거다)

쌤이 큰 병으로 인해 다리뼈를 교정하는 수술을 했었는데, 그 뒤로 의료용 다리 보조기와 지팡이를 짚고 다니셨다.

다리 보조기가 철제로 되어 있어서 걸음걸이마다 "철컹~ 철컹~" 소리가 났었고,

수업 시간 전에 쌤이 교실로 다가오는 소리도 금방 알수 있었다.

그래서 아이들은 그 당시 히트했던 영화 "로보캅"을 연상해서 별명을 붙였다.

나쁜 의도는 아니였으나 쌤의 신체적 장애를 별명으로 붙인 것은 학생들의 잘못 ㅠㅠ

쌤이 독일어를 가르쳤는데, 독일어 수업은 나에게 10분 정도 시켰고 (내가 독일어를 예습해오고, 학급 친구들에게 가르쳐주는 방식으로 수업을 진행)

정작 로보캅 쌤은 고사성어로 20분 정도 수업을 했다. (효도하고, 정직하게 살고, 바른 것에 용기를 내라... 뭐 이런 내용이 대부분)

즉, 수업 타이틀은 "독일어"인데, 한자 수업 및 인생 수업만 20분하고... 그 뒤로 나머지 20분 정도는 잠자는 시간 ㅋㅋㅋ

학생들은 잠자는 시간을 보장 받아서 좋았던 독일어 수업 시간.

심지어 독일어 중간고사, 기말고사 문제도 알려줌.

수업 시간에 10분만 집중해서 쌤의 말만 잘 기억하면, 독일어는 적어도 90점 이상 나옴.

 

도선생

쌤의 성함이 "도OO"이어서 별명이 "도선생"이다.

쌤들간에 호칭이 "도선생"이었는데, 학생들도 그냥 "도선생님"이라고 불렀다.

별명이라기 보다는 공식 명칭 ㅎㅎㅎ

나의 수학적 해석 능력은 도선생님 때문에 많이 늘었다.

항상 어려운 문제 1개를 가지고 와서, 2시간 연강이면 1시간 동안 학생 스스로 문제 풀으라고 하고,

풀이를 완성한 학생이 교실 앞 칠판에 풀이를 적고 설명하도록 했다.

이런게 은근히 경쟁 심리를 자극함.

처음 한달은 문제가 너무 어려워서 하나도 못 풀었는데, 친구들의 수학 문제 풀이 설명을 듣고 곰곰히 생각하는 습관이 생겼다.

1학기가 지나고 나서는 문제 풀이를 내가 주도할 정도로 수학 실력이 급성장 ^^

 

모선생

제일 공포스러웠던 쌤. ㅠㅠ

모선생님의 얼굴을 보고, 목소리를 들으면 감정이라는 것이 있나 싶을 정도로 차갑다.

특이하게도 "교련 수업"과 "독일어 수업"을 지도했었다.

"교련 수업" 시간에는 육군 사관학교, 사단 신병교육대 훈련보다 더 혹독하게 훈련을 받았다.

3년 뒤에 군대에 갔을 때, 육군 훈련이 시시하다고 느껴질 정도 (나의 모든 고교 동기들이 똑같이 생각함)

얼차례 받다가 우는 친구들 많았다 ㅠㅠ

그리고 북일고등학교는 여름에 해양 훈련을 가는데, 해양 훈련 교관을 "모선생"님이 했다.

와~  진짜... 해양훈련 받다가

"학교 졸업하기 전에 사람이 죽는거 아니야?"

라는 생각이 들 정도였다. ㅠㅠ

모선생님이 악한 마음으로 지도한 것은 아니겠지만, 진짜 채벌과 얼차려 받다가 친구들이 "장애" 입을까 걱정이 될 정도 ㅠㅠ

모선생님에게 지각, 복장불량, 두발불량으로 걸렸다면, 그날 하루는 그냥 죽었다라고 생각해야 했다.

 

+ Recent posts