전체 글 132

[MySQL] 대용량 로그 테이블 성능 저하 해결: Range 파티셔닝(Partitioning) 설계 및 무중단 자동화 가이드

서버를 개발하고 운영하다 보면 통화 기록(CDR), 수신 전문 로그, 메시지 발송 이력처럼 하루에도 수십만에서 수백만 건씩 쌓이는 대용량 테이블을 다루게 됩니다.데이터가 수천만 건에 도달하면 단순히 인덱스를 걸어두는 것만으로는 한계가 옵니다.SELECT 조회 시 B-Tree 인덱스 깊이 증가 및 버퍼 풀(Buffer Pool) 경합으로 인한 I/O 지연보관 기간이 만료된 데이터를 지우기 위해 DELETE FROM ... WHERE recv_date InnoDB 락(Lock) 경합, 언두 로그(Undo Log) 폭증, 디스크 I/O 병목이런 문제를 해결하는 표준 해법이 바로 MySQL Range 파티셔닝(Range Partitioning)입니다. 물리적으로 데이터를 날짜/기간 단위 분할 파일로 나누어 관리..

Mysql,MariaDB 2026.09.18

Docker 컨테이너 로그 폭증 해결|json-file 로그 로테이션 설정으로 디스크 Full 막는 법

Docker 컨테이너를 운영하다 보면 어느 날 갑자기 서버 디스크가 가득 차면서 아래와 같은 오류가 발생할 수 있습니다.text No space left on device또는 애플리케이션 로그에서는 다음과 같은 증상이 나타날 수 있습니다.text failed to write logwrite /var/lib/docker/...: no space left on device이전에는 디스크가 충분했는데, 며칠 또는 몇 주 뒤 갑자기 용량이 부족해졌다면 Docker 컨테이너 로그가 계속 쌓이고 있는지 먼저 확인해야 합니다.특히 Node.js, Python, Java, Spring Boot, Nginx, API 서버, 배치 프로그램처럼 표준 출력(stdout)과 표준 오류(stderr)에 로그를 많이 남기는 컨테이..

LINUX 2026.09.18

pip install이 3분씩 걸린다면: uv로 파이썬 환경 구축을 10초로 줄이기

파이썬 프로젝트를 새로 내려받고 나서 가장 먼저 하는 일은 대체로 정해져 있습니다. python -m venv .venv로 가상환경을 만들고, source .venv/bin/activate로 진입하고, pip install -r requirements.txt를 친 뒤 커피를 타러 갑니다. 의존성이 30개만 넘어가도 설치에 2~3분은 우습게 걸리고, CI에서는 이 과정이 매 빌드마다 반복됩니다. 이 지루한 루틴을 거의 통째로 대체할 수 있는 도구가 uv입니다.uv가 뭐가 다른가uv는 Rust로 작성된 파이썬 패키지 관리자입니다. 중요한 건 언어가 아니라 역할의 범위입니다. 기존에는 가상환경은 venv, 설치는 pip, 파이썬 버전은 pyenv, 의존성 잠금은 pip-tools나 poetry가 각각 담당했습..

IT정보,보안 2026.09.18

README에 적힌 명령어를 아무도 안 읽는다면: Makefile로 프로젝트 진입점 통일하기

새 팀원이 첫 빌드까지 3시간 걸리는 이유신규 입사자에게 저장소 주소를 알려준 뒤 벌어지는 일은 대체로 비슷합니다. README를 열어 설치 절차를 따라 하다가 중간에서 막히고, 슬랙에 질문을 올리고, 누군가 '아 그거 지금은 안 쓰는 명령어예요'라고 답합니다. 문서는 작성한 시점에서 멈춰 있는데 프로젝트는 계속 움직였기 때문입니다.문제의 본질은 문서 품질이 아닙니다. 실행되지 않는 문서는 반드시 썩는다는 점입니다. 반대로 매일 누군가 실행하는 코드는 깨지는 순간 바로 발각됩니다. 그래서 프로젝트 명령어는 문서가 아니라 실행 가능한 파일 한 개에 모아두는 편이 낫습니다. 그 역할로 가장 저렴하고 이식성 좋은 도구가 Makefile입니다.Makefile을 빌드 도구가 아니라 '목차'로 보기Makefile이..

IT정보,보안 2026.09.17

도커 이미지가 1GB를 넘어간다면: 멀티스테이지 빌드로 100MB대까지 줄이는 4단계

배포할 때마다 이미지 푸시가 몇 분씩 걸린다면, 한 번쯤 docker images를 쳐볼 때입니다. 실행에 필요한 코드는 수 MB인데 이미지가 1.2GB를 찍고 있는 경우가 생각보다 흔합니다. 이미지가 크면 푸시·풀 시간이 길어지고, 배포 롤백이 느려지고, 불필요한 빌드 도구가 그대로 운영 서버에 올라가 보안 표면까지 넓어집니다. 이 글에서는 실제로 효과가 큰 순서대로 네 단계를 정리합니다.이미지는 왜 이렇게 커질까원인은 대부분 세 가지 중 하나입니다.빌드 전용 도구가 최종 이미지에 남는다 — 컴파일러, 개발 의존성, 테스트 라이브러리는 실행에 필요 없는데도 같이 들어갑니다.컨텍스트를 통째로 복사한다 — COPY . . 한 줄로 .git 디렉터리, 로컬 node_modules, 로그 파일까지 이미지 안에..

IT정보,보안 2026.09.17

어제까진 됐는데 오늘 안 된다면: git bisect로 버그를 만든 커밋을 10번 안에 찾는 법

분명히 지난달 배포 버전에서는 잘 되던 기능이 지금은 동작하지 않습니다. 그 사이에 쌓인 커밋은 수백 개인데, 무엇이 원인인지 짐작도 가지 않습니다. 커밋 로그를 위에서부터 하나씩 읽어 내려가거나, 의심 가는 커밋을 감으로 체크아웃해 보는 분이 많습니다. 이럴 때 쓰라고 Git에 들어 있는 기능이 git bisect입니다.git bisect는 어떻게 동작할까?git bisect는 이름 그대로 커밋 범위를 반으로 나눠 가며 찾는 이진 탐색 도구입니다. 사용자가 알려줄 것은 두 가지뿐입니다.bad: 버그가 있는 커밋 (보통 현재 HEAD)good: 버그가 없던 게 확실한 커밋 (예: 지난 릴리스 태그)그러면 Git이 두 커밋 사이의 중간 지점을 체크아웃해 주고, 사용자는 그 상태에서 버그가 있는지만 확인해 ..

IT정보,보안 2026.09.17

[폐쇄망/오프라인] 외부 인터넷 차단된 Linux 서버에 Python pip 패키지 및 Docker 이미지 완벽 이전 가이드 (feat. 의존성 휠 패키징)

망분리 환경(에어갭, Air-Gapped)이나 보안 규정이 엄격한 사내 서버에서는 외부 인터넷망과 완전히 차단되어 있어 pip install이나 docker pull 명령을 직접 실행할 수 없습니다.인터넷이 되는 외부 PC에서 패키지를 단순히 다운로드해 옮기다 보면, C 컴파일 의존성(C-Extensions)이나 OS 아키텍처 차이 때문에 타깃 서버에서 빌드 에러가 발생하는 경우가 허다합니다.이번 글에서는 외부망 PC에서 타깃 폐쇄망 서버의 OS 환경과 동일하게 종속성을 포함하여 안전하게 패키지/이미지를 내려받고, 폐쇄망 서버에서 단 한 번의 명령으로 오프라인 설치하는 실무 표준 방법을 정리합니다.1. 폐쇄망 Python 환경 구축의 핵심 원리: Wheel(.whl) 바이너리Python 라이브러리 중 n..

LINUX 2026.09.17

Python ModuleNotFoundError: No module named 완벽 해결 가이드

파이썬 스크립트를 실행했는데 이런 에러를 만난 적이 있으실 겁니다. ModuleNotFoundError: No module named 'requests'분명히 pip install로 설치했는데도 이 에러가 계속 뜨는 경우가 많아서, 초보자뿐 아니라 경력자도 자주 헤매는 에러입니다. 이 글에서는 원인별로 순서대로 정리합니다.원인 1: 애초에 설치가 안 됨 (가장 기본) bashpip install requests설치가 잘 됐는지 확인: bashpip show requestsWARNING: Package(s) not found 메시지가 뜨면 설치 자체가 안 된 것이므로 다시 설치합니다.원인 2: 여러 개의 파이썬/pip가 섞여 있음 (가장 흔한 진짜 원인)시스템에 파이썬이 여러 버전 깔려있는 경우(예: py..

Python 2026.09.17

FreeSWITCH 팩스 T.38 우선 전송 후 G.711 폴백 설정|mod_spandsp 실무 가이드

IP 팩스 서버를 운영하다 보면 아래와 같은 문제가 자주 발생합니다.text 상대방이 T.38을 지원한다고 했는데 팩스가 실패한다.어떤 번호는 성공하고 어떤 번호는 중간에 끊긴다.SIP 통화는 연결되지만 팩스 전송 결과가 실패다.T.38을 켜면 안 되고, 끄면 일부 구간에서만 된다.이런 문제는 단순히 “T.38을 켜야 한다” 또는 “G.711로 보내야 한다”로 해결되지 않는 경우가 많습니다.가장 실무적인 방식은 아래 전략입니다.text 1. T.38 전환을 우선 요청한다.2. 상대 장비 또는 SIP 사업자가 T.38을 수락하면 T.38로 전송한다.3. T.38 협상이 불가능하거나 실패하면 G.711 팩스로 폴백한다.4. 송신 결과·SIP 응답·T.30 결과를 로그와 DB에 남긴다.이 글에서는 FreeSW..

ubuntn(우분투) 2026.09.17