단일 프로세스 아키텍처: 현대적인 웹 개발을 위한 우아한 솔루션

2025-04-21

블로그 소프트웨어를 업데이트하는 동안 저자는 현대적인 웹의 복잡성을 처리하기 위해 CGI 기반 접근 방식보다 단일 프로세스 아키텍처가 더 간단하다는 것을 발견했습니다. 단일 프로세스는 공유 상태에 대한 쉬운 액세스를 허용하여 악의적인 트래픽 감지, 요청 속도 제한, 캐싱 구현과 같은 작업을 간소화합니다. 메모리 및 CPU 사용량은 우려 사항이지만, 구현의 용이성으로 인해 예측할 수 없는 것을 포함한 다양한 유형의 악용에 대처할 때 단일 프로세스 아키텍처가 유리합니다. 저자는 웹 악용이 증가함에 따라 단일 프로세스 아키텍처가 점점 더 중요해질 것이라고 생각합니다.

더 보기

ZFS 압축의 역설: 논리 블록 vs. 물리 블록

2025-04-17

압축이 활성화된 ZFS 파일 시스템에서 `dd` 명령어를 사용하여 만든 256KB 크기의 영(0) 파일이 이상한 동작을 보입니다. `ls -l` 명령어는 256KB로 표시하지만, `ls -s`와 `ls -slh` 명령어는 훨씬 작은 크기, 거의 0으로 표시합니다. 이는 ZFS의 효율적인 압축으로 인해 물리적 블록 수가 최소화되기 때문입니다. 이 글에서는 파일 크기를 측정하는 방법으로 논리적 크기(바이트), 물리적 블록 수, 논리적 블록 수의 세 가지 방법을 살펴보고, POSIX의 `st_blocks` 필드가 어떤 크기를 보고해야 하는지 명확하게 지정하지 않기 때문에 파일 시스템 간에 파일을 이동하면 `st_blocks` 값이 변경될 수 있으며, 경우에 따라 파일 크기가 늘어나 새로운 파일 시스템에 맞지 않을 수도 있음을 지적합니다.

더 보기
개발

개인적인 Unix 패키지 관리 방식

2025-04-13

작성자는 Unix 시스템에서 개인 소프트웨어 패키지를 관리하는 영리한 방법을 공유합니다. 서로 다른 아키텍처의 소프트웨어를 `~/lib/` 디렉토리 트리에 저장하며, 각 프로그램은 별도의 버전이 지정된 하위 디렉토리(예: `emacs-30.1`)에 설치됩니다. `~/bin/bin.` 디렉토리에는 이러한 프로그램을 가리키는 심볼릭 링크 또는 래퍼 스크립트가 있어 버전 간 전환이 용이합니다. pipx나 Cargo와 같은 도구의 경우 기본 설치 위치를 유지하지만, 경로 충돌을 피하기 위해 `~/bin/bin.`에 링크를 생성합니다. 이 설정은 완벽하지 않지만 시스템 패키지 관리자를 통해 사용할 수 없거나 너무 오래된 소프트웨어를 관리하는 데 매우 유용합니다.

더 보기

Ubuntu 24.04에서 SSH 비밀번호 비활성화 버그

2025-04-06

Ubuntu 24.04 서버에서 인터넷을 통한 SSH 비밀번호 접근을 비활성화하고 로컬 LAN 접근은 허용하는 설정은 sshd_config를 사용하면 간단해 보입니다. 하지만 /etc/ssh/sshd_config.d/에 사용자 지정 설정 파일을 추가해도 SSH 데몬을 다시 시작한 후 설정이 무효화되는 문제가 발생했습니다. 원인은 sshd_config의 "선착순" 구성 규칙과 시스템에서 자동 생성된 50-cloud-init.conf 파일 내의 PasswordAuthentication yes 설정입니다. 이 파일이 먼저 로드되므로 사용자 지정 설정이 덮어쓰여집니다. 사용자 지정 설정 파일의 이름을 10-no-passwords.conf로 변경하여 먼저 로드되도록 하면 문제가 해결됩니다.

더 보기
개발

광섬유 과다 프로비저닝: 예방이 최선의 치료

2025-03-25

방이나 건물 사이의 광섬유 케이블을 계획할 때는 처음에 필요한 양보다 더 많은 광섬유를 설치하는 것이 좋습니다. 미래 확장, 대역폭 업그레이드 및 새로운 프로토콜에는 추가 용량이 필요합니다. 또한 광섬유 고장이 발생하며(때로는 불가사의하게) 예비 쌍이 있으면 신속한 복구가 가능합니다. 단일 모드 광섬유와 멀티 모드 광섬유는 용도가 다르지만 충분한 중복성을 갖는 것이 가동 중지 시간과 비용을 최소화하는 데 필수적입니다.

더 보기

Loki의 구조화된 메타데이터: 운영상의 악몽

2025-03-19

Grafana Loki는 종종 '로그를 위한 Prometheus'라고 불리지만, 초기에는 Prometheus와 유사한 데이터 모델을 채택했습니다. 그러나 이는 시스템 로그(syslog 또는 systemd journal)에 치명적인 결과를 초래했습니다. Prometheus와 달리 Loki는 각 레이블 값 집합을 별도로 저장하고 로그 저장소를 압축하지 않으므로 카디널리티 폭발이 발생합니다. 이를 해결하기 위해 Loki는 '구조화된 메타데이터'를 도입했지만, 3.0.0 버전 기준으로 아직 미완성 상태입니다. 구조화된 메타데이터 레이블은 일반적인 Loki 레이블로 취급되지 않으므로 다른 쿼리 구문이 필요합니다. 기존 레이블에서의 마이그레이션은 복잡하고 예기치 않은 고카디널리티 레이블 생성 위험이 있습니다. 업그레이드에는 주의가 필요하며, 기존 데이터 마이그레이션은 매우 비용이 많이 듭니다. 새로운 프로젝트에서 사용할 경우 이러한 제약 조건을 충분히 고려해야 합니다.

더 보기

JSON: Unix 시스템에서의 기계 판독 가능 출력을 위한 실용적인 선택

2025-02-24

Postfix 메일 큐에서 이메일을 삭제한 경험을 바탕으로 저자는 기계 판독 가능 출력 형식으로 JSON을 사용할 것을 주장합니다. JSON은 완벽하지 않지만 Unix 시스템에서 명확성, 광범위한 호환성, 풍부한 도구 지원, 다른 형식으로의 쉬운 변환 등 여러 가지 실용적인 장점을 제공합니다. 저자는 새로운 프로그램의 경우 JSON만을 기계 판독 가능 출력 형식으로 사용하는 것이 가장 간단한 방법이며, 사용자 정의 형식 설계의 복잡성을 피하고 Unix 프로그램 간의 상호 운용성을 증진한다고 제안합니다.

더 보기

숨겨진 거대 캐시: 디스크 공간이 사라지는 이유

2025-02-08

많은 Unix 프로그램은 `.cache`나 `.local`과 같은 숨겨진 디렉토리에 데이터를 캐싱하는데, 이로 인해 사용자는 많은 디스크 공간을 차지하는 이러한 거대한 캐시 파일을 찾고 삭제하기 어렵습니다. 저자는 공유 파일 서버 환경에서 대학원생들이 이러한 숨겨진 캐시 때문에 혼란을 겪고 수백 GB의 디스크 공간이 자신도 모르게 소비되는 것을 목격했습니다. 이 글에서는 개발자들에게 캐시를 눈에 보이는 디렉토리에 저장하도록 촉구하고, 디스크 공간 사용 도구는 이러한 숨겨진 디렉토리의 콘텐츠를 명시적으로 표시해야 한다고 제안합니다.

더 보기

VPN 접근을 악용한 정교한 피싱 공격

2025-01-29

토론토 대학교 컴퓨터 과학과는 매우 정교한 피싱 공격을 받았습니다. 공격자는 학과 이메일 주소를 위장하여 사용자의 비밀번호를 성공적으로 탈취했습니다. 놀랍게도 공격자는 훔친 자격 증명을 사용하여 짧은 시간 안에 학과 VPN에 등록한 후 내부 전용 SMTP 게이트웨이를 통해 스팸 메일을 발송했습니다. 이는 공격자가 사전에 표적의 VPN 및 이메일 환경을 충분히 조사했음을 보여주며, 점점 더 정교해지는 공격 기술과 강력한 사이버 보안 방어의 필요성을 강조합니다.

더 보기
기술 VPN 악용

인터넷 연결 SSH의 암호 인증 비활성화: 보안 강화 또는 과잉?

2025-01-18

이 글에서는 인터넷에 연결된 SSH의 암호 인증을 비활성화하는 것의 장점과 단점을 비교 분석합니다. 강력한 암호는 브루트포스 공격으로부터 보호하지만, 저자는 암호 인증을 비활성화하면 도난당한 자격 증명, SSH 서버 취약점, 기본 계정을 노리는 공격 등에 대한 추가적인 보안 계층을 얻을 수 있다고 주장합니다. 하지만 이로 인해 키 페어 없이 로그인할 수 없는 등의 불편함이 발생할 수도 있습니다. 저자는 개별 상황에 따라 장단점을 신중하게 고려할 것을 제안합니다.

더 보기

/etc/glob: 초기 Unix 쉘 글로빙의 숨겨진 이야기

2025-01-13

이 글은 초기 Unix 시스템에서 `/etc/glob`의 역사와 기능을 자세히 살펴봅니다. V7 Bourne Shell 이전에는 Unix 쉘의 와일드카드 확장(globbing)이 쉘 자체에서 처리되지 않고 외부 프로그램 `/etc/glob`에 위임되었습니다. `/etc/glob`는 명령어와 인수를 받아 와일드카드를 확장한 후 명령어를 실행했습니다. 이 글에서는 다양한 Unix 버전에서 `/etc/glob`의 작동 방식, 이스케이프 문자 처리, 외부 프로그램을 사용한 이유(초기 시스템의 리소스 제약 때문일 가능성이 높음) 등을 자세히 설명합니다.

더 보기

WireGuard 설정: 간단한 것부터 복잡한 것까지

2025-01-05

이 블로그 게시물에서는 완전히 격리된 내부 IP 주소 공간을 가진 가장 간단한 설정부터 WireGuard 터널 안팎에서 액세스할 수 있는 엔드포인트를 가진 가장 복잡한 "VPN" 설정까지 다양한 WireGuard 설정의 복잡성을 살펴봅니다. 저자는 라우팅 충돌 및 재귀적 라우팅과 같은 각 설정의 어려움과 잠재적인 문제점을 자세히 설명합니다. 이 기사에서는 사전 계획의 중요성을 강조하고 WireGuard 환경을 설계할 때 복잡한 라우팅을 피하기 위해 더 간단한 설정을 선택하는 것이 좋다고 제안합니다.

더 보기

Linux OpenZFS에서 zpool import/export의 잠재적 문제

2024-12-26

Linux OpenZFS(2.3.0 기준)에서 ZFS 풀의 임포트와 익스포트 관련 잠재적 문제가 있습니다. ZFS 풀에 'sharenfs' 속성이 설정된 파일 시스템이 없더라도 `zpool import`와 `zpool export`는 `exportfs -ra`를 실행합니다. 이로 인해 수동으로 추가하거나 수정한 NFS 익스포트가 삭제될 수 있으며, 사용자 지정 NFS 익스포트 설정을 사용하는 고가용성 시스템 등의 환경에 영향을 미칩니다. 이 문제는 OpenZFS가 NFS 익스포트 변경이 필요한지 여부와 관계없이 `exportfs -ra`를 무조건 실행하기 때문에 발생합니다.

더 보기
개발

서버 재부팅 실패: 쿨다운 재부팅으로 커널 충돌 해결

2024-12-25

작성자는 단순 재부팅으로 해결할 수 없는 커널 충돌이 발생한 두 대의 동일한 서버를 발견했습니다. 충돌 시 서버는 시스템 펌웨어 단계에서 일련의 머신 체크 예외 오류를 출력하여 CPU 하드웨어 문제를 시사했습니다. 전원을 끄고 몇 분간 방치한 후 재부팅하여 문제를 해결했습니다. 이는 짧은 정전이라도 일부 x86 시스템 구성 요소가 완전히 재설정되지 않을 수 있으며 완전한 복구에는 쿨다운 시간이 필요함을 보여줍니다.

더 보기

10년 된 파일 서버의 제2의 삶: 비용 효율적인 스토리지 솔루션

2024-12-17

한 회사가 10년 이상 된 파일 서버를 운영 환경에서 여전히 사용하고 있습니다. 오래되었고 BMC가 KVM-over-IP에 Java를 필요로 하지만, 16개의 디스크 베이와 10G 이더넷 포트 덕분에 재활용에 적합합니다. 자체 디스크 방식의 저렴한 스토리지 서버로 사용되어, 오래되고 RAM이 제한적임에도 불구하고 대용량 저성능 스토리지 요구사항을 충족합니다. 이는 요구사항이 일치할 때 오래된 하드웨어의 재활용 가치를 보여줍니다.

더 보기

예약된 재부팅: 예방적 접근 방식

2024-12-13

대학 연구팀은 시스템 관리에서 어려운 문제에 직면했습니다. 서버가 오랫동안 실행되어 재부팅이 필요했지만, 잦은 재부팅은 사용자 경험을 저해하기 때문입니다. 일반적으로 재부팅을 피했지만, 장시간 실행으로 인해 대규모 재부팅을 해야 했습니다. 유사한 문제를 방지하기 위해 연간 재부팅 일정을 수립했습니다. 최소한 1년에 3번, 대학 수업 일정에 맞춰 재부팅하여 예방적 유지보수와 사용자 경험의 균형을 맞추고 있습니다.

더 보기