웹 애플리케이션을 구축할 때는 다양한 기본 원칙과 아이디어를 고려하여 확장 및 최적화 기능을 확보하는 것이 필수적입니다.

Redis는 웹 애플리케이션의 전반적인 성능을 크게 향상시키는 것으로 입증된 매우 혁신적인 기술입니다. 다양한 기능을 통해 개발자는 웹 앱을 최적화하고 원활하고 효율적으로 실행할 수 있습니다.

Redis는 데이터베이스, 캐시, 메시지 브로커로 사용할 수 있는 인메모리 데이터 구조 저장소입니다. 문자열, 해시, 리스트, 집합 등 다양한 데이터 구조를 지원합니다. Node.js 웹 애플리케이션에서 Redis를 활용하려면 npm(Node Package Manager)에서 사용할 수 있는 “redis”라는 모듈을 사용하면 됩니다. 이 모듈은 Redis와 상호 작용할 수 있는 간단한 API를 제공합니다.

Redis란 무엇이며 언제 사용해야 하나요?

Redis는 사용자가 키를 사용하여 데이터를 저장하고 검색할 수 있는 다목적 오픈 소스 플랫폼으로, 작업 대기열, 데이터베이스, 캐시, 세션 관리자 또는 메시지 브로커로 활용할 수 있는 옵션이 있습니다.

Redis는 속도, 적응성, 사용자 친화성이 인상적으로 결합되어 소프트웨어 개발 에코시스템에서 매우 가치 있는 도구가 되었습니다.

언제 Redis를 사용해야 할까요?

다재다능한 기능으로 인해 다양한 애플리케이션에 적합하므로 Redis를 사용할 때는 신중을 기해야 하지만, 각각의 경우에 배포가 적절한지 신중하게 고려해야 합니다.

데이터에 빠르고 일관되게 액세스할 수 있고 대량의 데이터를 처리할 수 있으며 높은 쓰기 처리량을 지원하는 데이터 구조 저장소를 활용하는 것이 바람직한 상황에서는 Redis를 사용하는 것이 바람직할 수 있습니다.

인메모리 데이터 구조 저장소인 Redis는 데이터베이스 과부하를 완화하고 시스템 효율성을 향상시키기 위한 캐싱 메커니즘으로 널리 활용되고 있습니다.

특히 인증 및 상태 관리 등의 목적으로 사용자 세션을 저장하고 유지하는 프로세스는 Redis를 활용하여 손쉽게 수행할 수 있습니다.

Redis는 데이터를 임시로 보존하는 메커니즘을 제공하여 지정된 간격 후에 데이터를 자동으로 제거할 수 있도록 합니다. 이 기능은 JSON 웹 토큰 및 작업 대기열 항목과 같은 일시적인 정보를 저장하는 데 특히 유용합니다.

이 글도 확인해 보세요:  Vite로 React 앱을 설정하는 방법

메시징 브로커 역할, 데이터베이스 작업의 성능 향상, 목록, 집합, 해시 등의 데이터 구조를 효율적으로 저장하고 검색하는 등의 목적으로도 Redis를 활용할 수 있습니다.

Node.js에서 Redis를 사용하는 방법

Node.js는 강력하고 다양한 서버 측 애플리케이션을 구축하기 위한 플랫폼으로, 뛰어난 효율성과 확장성으로 인해 많은 개발자가 선호하는 플랫폼입니다. Redis와 같은 상호 보완적인 기술과 결합하여 Node.js는 최신 웹 개발 프로젝트에 필수적인 탁월한 성능과 확장성을 제공합니다.

Redis는 PHP, Golang, Node.js 등 다양한 프로그래밍 언어와 함께 활용할 수 있는 다목적 데이터베이스입니다. PHP 애플리케이션에서 데이터를 안정적으로 저장하는 수단으로 사용할 수 있으며, Golang 개발자가 데이터에 보다 효율적으로 액세스하고 관리할 수 있도록 최고 수준의 Redis 클라이언트를 제공합니다. Node.js 사용자의 경우, 높은 평가를 받는 두 가지 Redis 클라이언트 옵션인 node-redis와 ioredis가 있습니다.

node-redis와 ioredis의 두 패키지는 npm을 통해 쉽게 구할 수 있으며 비교적 간단하게 활용할 수 있습니다. 둘 다 비슷한 용도로 사용되지만, node-redis는 Redis 커뮤니티에서 지지하는 반면, ioredis는 개발자들 사이에서 더 인기가 있습니다.

Node.js에서 Redis에 연결하기

시작하려면 컴퓨터에 Redis가 설치되어 있어야 하고 Node.js 개발 환경이 설정되어 있어야 합니다. Redis.io 에서 설치 가이드를 확인하여 Linux, macOS 및 Windows에 Redis를 설치하세요.

프로젝트 내에 적합한 Redis 클라이언트 라이브러리를 설치하여 Redis와 통신할 수 있도록 하세요.

 npm install redis --save
npm install ioredis --save

첫 번째 명령은 “node-redis”에 대한 설치 프로세스를 실행하는 반면, 후속 명령은 “ioredis”에 대한 설치를 수행합니다.

최근에 설치한 클라이언트를 설정하려면 Redis가 작동하는지 확인해야 합니다. 이 작업은 터미널을 통해 Redis용 명령줄 인터페이스(redis-cli라고도 함)를 실행하여 수행할 수 있습니다.

 const redis = require("redis")

// initialize using default config
const RedisClient = redis.createClient()

const connectRedis = async () => {
    // connect to redis
    await RedisClient.connect()

    // handle error
    RedisClient.on('error', (err) => {
        console.error(`An error occurred with Redis: ${err}`)
    })

    console.log('Redis connected successfully...')
}

애플리케이션이 초기화되면 Redis 패키지의 createClient 함수를 사용하여 새로 인스턴스화된 Redis 인스턴스가 설정되며, 이를 통해 사용자 지정 사양을 가진 클라이언트를 배포할 수 있습니다.

이 글도 확인해 보세요:  개발자와 디자이너를 위한 10가지 UI/UX 영감 사이트

사용자는 Redis 서버의 호스트, 포트, 사용자 이름, 비밀번호 또는 연결 문자열과 관련된 특정 세부 정보를 입력하거나 미리 정의된 기본값을 활용할 수 있습니다. 예를 들어, 아무런 설정도 지정하지 않으면 기본 파라미터에 따라 로컬 컴퓨터의 포트 6379에서 Node-REDIS가 작동을 시작합니다.

다음 예제에서 알 수 있듯이 `createClient` 함수는 다양한 방식으로 활용될 수 있습니다:

 // using connection string
const RedisClient = redis.createClient("rediss://127.0.0.1:6379")

// using parameter object
const RedisClient = redis.createClient({
    socket: {
        host: "127.0.0.1",
        port: "6379"
    },
    username: "your redis username",
    password: "your password"
})

프로덕션 환경에서 Redis 배포의 보안을 보장하려면, 연결에 보안 URL 문자열을 사용하거나 제공된 매개 변수를 사용하여 안전한 Redis 인스턴스를 활용하는 것이 중요합니다. 어떤 접근 방식을 선택하든, 코드에서 민감한 자격 증명을 제외하고 대신 환경 변수를 사용해야 한다는 점에 유의하시기 바랍니다.

Node.js에서 기본 Redis 작업 수행

앞서 언급한 코드는 앞서 정의한 `connectRedis` 함수를 사용하여 Redis와의 연결을 설정하고, Node.js 애플리케이션을 통해 Redis 내에서 실행할 수 있는 몇 가지 기본 작업을 보여줍니다.

 const testRedis = async () => {
    await connectRedis()

    // Set and retrieve a value
    await RedisClient.set("name", "Timmy")
    const getCommand = await RedisClient.get("name")
    console.log(getCommand)

    // Delete values immediately or schedule them to expire
   // in a number of seconds
    await RedisClient.del("name");
    await RedisClient.setEx("location", 60, "Lagos")

    // Push onto the front or back of a list
    await RedisClient.lPush("days", "monday")
    await RedisClient.rPush("days", "tuesday")
    await RedisClient.lPush("days", "wednesday")
    const daysArray = await RedisClient.lRange("days", 0, -1)
    // prints [ 'wednesday', 'monday', 'tuesday' ]
    console.log(daysArray)

    // Remove an item from the back or front of a list
    await RedisClient.rPop("days")
    await RedisClient.lPop("days")
    const newDaysArray = await RedisClient.lRange("days", 0, -1)
    // prints [ 'monday' ]
    console.log(newDaysArray)
}

testRedis()

앞서 언급한 코드를 살펴보면 그 기본 특성이 드러나며, Redis를 활용하여 Node.js 애플리케이션 내에서 실행할 수 있는 다양한 작업에 대한 소개 역할을 합니다. 이 기술을 능숙하게 사용하려면 명령 집합과 관련 개념에 대한 포괄적인 이해가 필요합니다.

이 글도 확인해 보세요:  녹 매크로: 매크로를 사용하여 코드를 개선하는 방법

node-redis의 GitHub 리포지토리에 있는 README의 Redis 명령 섹션에서 다른 모든 명령과 해당 명령의 기능을 찾을 수 있습니다.

Redis를 사용하여 효율적인 애플리케이션 구축

Redis의 강력한 성능을 활용하여 개발자는 고성능 서버 측 애플리케이션을 구축할 수 있습니다. 인메모리 데이터 저장 기능과 다양한 데이터 구조 및 명령어 덕분에 애플리케이션의 효율성을 크게 향상시킬 수 있습니다.

애플리케이션의 전반적인 성능을 크게 향상시키고 사용자 경험을 개선할 수 있으므로 향후 Node.js 프로젝트에 Redis를 통합하는 것을 고려할 것을 적극 권장합니다.

By 최은지

윈도우(Windows)와 웹 서비스에 대한 전문 지식을 갖춘 노련한 UX 디자이너인 최은지님은 효율적이고 매력적인 디지털 경험을 개발하는 데 탁월한 능력을 발휘합니다. 사용자의 입장에서 생각하며 누구나 쉽게 접근하고 즐길 수 있는 콘텐츠를 개발하는 데 주력하고 있습니다. 사용자 경험을 향상시키기 위해 연구를 거듭하는 은지님은 All Things N 팀의 핵심 구성원으로 활약하고 있습니다.