【흑마 품평-3초 특가 쿠폰】RabbitMQ + Lua를 활용한 분산 처리
Redis 기반 분산 락의 한계와 해결 방안
재진입 불가 문제: 동일 스레드가 같은 락을 두 번 이상 획득할 수 없음. 예를 들어 메서드 A에서 메서드 B를 호출하고, 둘 다 락을 필요로 한다면, 첫 번째 호출에서 락을 획득한 후 두 번째 호출 시 락을 재획득하지 못해 데드락 발생 가능.
재시도 기능 부족: 락 획득 시도는 단 한 번만 수행되고 실패 시 즉시 반환되며, 재시 ...
6월 23일 01:11에 게시됨
Redis 기반 분산 락 구현과 고급 최적화 기법
Redis를 활용한 재고 관리 시스템에서 발생하는 동시성 문제를 해결하기 위한 다양한 락 메커니즘을 살펴본다. 특히 분산 환경에서 안전하게 동작하는 락 구현 방식에 초점을 맞춘다.
문제 상황: 비원자적 재고 차감
다음은 Redis에 저장된 재고를 차감하는 기본 코드다. 읽기와 쓰기가 분리되어 있어 동시 실행 시 데이터 불일치가 발생한다.
@Autowired
private Strin ...
6월 14일 16:38에 게시됨
OpenResty에서의 Lua 템플릿 렌더링 기법
템플릿 기반 동적 페이지 생성
웹 애플리케이션 개발에서 동적 컨텐츠 생성은 핵심 요소입니다. 예를 들어, 상품 정보 페이지처럼 복잡한 데이터 구조를 포함하는 시나리오에서는 템플릿 엔진이 필수적입니다. OpenResty 환경에서는 lua-resty-template라는 고성능 템플릿 엔진을 활용할 수 있으며, 이는 LuaJIT과 함께 사용 시 매우 빠른 렌더링 성능을 제공합니다.
이 ...
6월 13일 16:50에 게시됨
Nginx와 Lua를 활용한 맞춤형 WAF 구현
Nginx와 Lua를 활용한 맞춤형 WAF 구현
기능 목록
IP 화이트리스트와 블랙리스트 기능 지원, 블랙리스트에 등록된 IP 접근 차단
URL 화이트리스트 지원, 필터링이 필요 없는 URL 정의
User-Agent 필터링, 사용자 정의 규칙과 일치하는 항목 처리 후 403 반환
CC 공격 방어, 특정 URL에 대한 시간당 접근 횟수 제한 초과 시 403 반환
쿠키 필터링, 사 ...
6월 12일 16:11에 게시됨
Lua 가상머신: 실행 원리와 구현
5.1 Lua 스크립트 실행 흐름
스크립트 언어는 소스 코드를 분석하여 바이트코드(Bytecode)로 변환한 후, 가상머신(Virtual Machine)에서 이를 실행하는 구조를 갖는다. 가상머신이 하드웨어平台的 차이를 추상화해 주므로, 동일한 코드가 다양한 운영체제와 하드웨어 환경에서 동작할 수 있다.
Lua는 레지스터 기반 가상머신을 채택한 언어다. 여기서 말하는 레지스터는 ...
6월 8일 02:03에 게시됨
Lua와 C++ 간 상호작용 메커니즘 심층 분석
Lua 스택 구조 이해
Lua와 C++의 통신은 가상 스택을 기반으로 동작합니다. 이 스택은 후입선출(LIFO) 방식으로 동작하며, Lua에서는 다음과 같은 특성을 가집니다:
양수 인덱스: 1번이 항상 스택 바닥(bottom)
음수 인덱스: -1번이 항상 스택 꼭대기(top)
Lua 스택은 TValue 구조체 배열로 구성되며, 모든 데이터 타입이 {값, 타입} 형식으로 저장됩니다:
TValue stack[ ...
6월 1일 18:56에 게시됨
Nvim-Lspconfig 설정 가이드: Neovim에서 LSP 클라이언트 사용하기
1. 프로젝트 구조 및 설명
Nvim-lspconfig의 디렉토리 구조는 다음과 같습니다:
.
├── CONTRIBUTING.md
├── doc
│ └── lua
├── lualib
└── plugin
└── scripts
└── test
└── .codespellignore
└── .editorconfig
└── .gitignore
└── .luacheckrc
└─ ...
5월 30일 00:43에 게시됨
Lua 테이블 순회와 삭제 전략
순회 방식 비교
Lua 테이블을 순회하는 대표적인 네 가지 접근법을 살펴본다. 각 방식은 내부 메커니즘과 적용 상황이 다르다.
1. ipairs — 연속 정수 키 전용
인덱스 1부터 시작하여 1씩 증가하는 연속된 정수 키만 순회한다. 중간에 빈 틈이 발생하면 즉시 종료한다.
-- 예시: 정상 순회
local scores = { [1] = 85, [2] = 90, [3] = 78, [4] = 92 }
for idx, val in ...
5월 25일 10:23에 게시됨