티스토리 뷰
개요
데이터 중심 애플리케이션 설계를 재독하며 스터디 중인데 함께 스터디하시는 LCH님이 Redis에서의 Lua script를 소개해주셨다.
재미있어서 정리해둔다.
Lua
Lua는 경량의 멀티패러다임 프로그래밍 언어로, 특히 임베디드 시스템, 서버 사이드 애플리케이션, 클라이언트 사이드 웹 애플리케이션 개발에 적합하다. 포르투갈어로 '달'을 의미하며, 브라질의 테칠리아 대학교에서 1993년에 개발되었다.
주요 특징
- 간결하고 표현력이 뛰어난 문법
- 메모리 사용량이 적은 경량
- 임베디드 시스템과의 호환성: C 언어로 작성되어 있으며, C 언어 기반의 시스템에 쉽게 통합될 수 있다.
- 게임 엔진, 애플리케이션, 임베디드 시스템 등 다양한 영역에서 확장 스크립팅 언어로 사용될 수 있는 이유 중 하나이다.
- 멀티패러다임 언어: 절차적, 객체지향, 함수형 프로그래밍을 포함한 다양한 프로그래밍 패러다임을 지원한다.
- 개발자가 문제를 해결하기 위해 다양한 접근 방식을 선택할 수 있다.
- 강력한 데이터 설명 기능: 테이블이라는 강력한 데이터 구조를 제공하는데, 테이블은 배열, 해시 테이블, 객체 등을 표현할 수 있으며, Lua 프로그래밍의 핵심 요소 중 하나이다.
- 확장성: 코루틴(coroutine)을 지원하여 비동기 프로그래밍이 용이하다. 또한, 메타메커니즘을 통해 기존의 데이터 구조와 함수에 사용자 정의 동작을 추가할 수 있다.
널리 사용되는 분야
- 웹 서버 스크립팅, 게임 개발, 데이터베이스 애플리케이션, 네트워크 프로그래밍 등 다양한 분야에서 사용됨.
- 특히, 게임 업계에서는 게임 내 스크립팅 언어로 많이 채택되고 있으며
- Redis와 같은 데이터베이스에서는 서버 사이드 스크립팅 언어로 활용된다.
Lua scripting in Redis vs. Stored Procedure
Lua scripting in Redis
Redis는 Lua 스크립팅 언어를 내장하여, 복잡한 연산이나 트랜잭션 처리를 한 번의 네트워크 호출로 수행할 수 있다.
- 효율성: 여러 명령어를 하나의 스크립트로 묶어서 실행하여 네트워크 지연을 줄이고, 명령어 사이의 중간 상태를 저장할 필요 없이 데이터를 빠르게 처리한다.
- 원자성(Atomicity): Lua 스크립트는 Redis에서 단일 연산으로 처리된다. 스크립트 실행 도중 다른 클라이언트의 명령어가 끼어들 수 없다는 것을 의미하여, 데이터의 일관성(consistency)을 보장한다.
- 유연성: 쉽게 배울 수 있는 스크립팅 언어이며, Redis 데이터 구조와의 상호 작용을 위한 강력한 기능을 제공한다.
Stored Procedure
전통적인 관계형 데이터베이스에서 사용된다.
데이터베이스 내에 저장되어 실행할 수 있는 일련의 SQL 문과 로직을 가지는 프로그래밍 코드 블록이다.
- 성능: 데이터베이스 서버에 저장되고 최적화되어 실행된다. 덕분에 애플리케이션과 데이터베이스 간의 네트워크 트래픽을 줄일 수 있다.
- 보안: 사용자는 저장 프로시저를 실행할 권한만 있으면 되고, 직접 테이블에 접근할 필요가 없다. 이는 데이터 접근을 제한하고 보안을 강화하는 데 도움이 된다.
- 재사용성과 일관성: 한 번 작성하면 다양한 애플리케이션에서 재사용할 수 있다. 이는 비즈니스 로직의 일관성을 유지하는 데 도움이 된다.
비교
Redis의 Lua scripting과 전통적인 데이터베이스의 Stored Procedure는 데이터 처리와 관련된 로직을 데이터베이스 서버 내에서 실행시키는 기능을 제공하지만, 사용 목적, 구현 방식, 그리고 활용 분야에서 차이점을 가진다.
- Lua 스크립팅은 키-값 저장소인 Redis에서 사용하고, Stored Procedure는 주로 관계형 데이터베이스(RDBMS)에서 사용한다.
- Lua 스크립팅은 Redis의 성능을 극대화하고, 데이터 처리를 최적화하기 위해 사용하며, Stored Procedure는 데이터 처리 로직을 데이터베이스 서버에 캡슐화하고, 보안 및 재사용성을 높이기 위해 사용한다.
- 구현 언어: Redis의 Lua 스크립팅은 Lua 언어를 사용하는 반면, 저장 프로시저는 SQL과 데이터베이스가 지원하는 특정 프로시저 언어(예: PL/SQL, T-SQL)를 사용한다.
반응형
'development' 카테고리의 다른 글
생각. 리드 호프만이 그의 AI 쌍동이를 만나다 (0) | 2024.04.29 |
---|---|
자주 쓰는 MacBook 용 애플리케이션들 (0) | 2024.03.31 |
데이터베이스: 2PL vs. 2PC (0) | 2024.03.25 |
개발자의 공부법 - 에 대한 생각 (0) | 2024.03.20 |
Chrome 개발자 도구로 Request 재구성 및 재전송하기 (0) | 2024.02.14 |
반응형
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- solid
- OpenAI
- 체호프
- 노션
- bun
- Bug
- ChatGPT
- 티스토리챌린지
- go
- folklore
- 클린 애자일
- strange
- Shortcut
- clean agile
- 독서후기
- 오블완
- 독서
- 2023
- intellij
- agile
- Gin
- golang
- 인텔리제이
- websocket
- notion
- github
- 영화
- API
- 제이펍
- 잡학툰
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
글 보관함