[DB-009][중급] 메모리에서 빠르게 데이터 다루기 > IT 기술 공유

본문 바로가기
사이트 내 전체검색

IT 기술 공유

[DB-009][중급] 메모리에서 빠르게 데이터 다루기

페이지 정보

profile_image
작성자 기술팀장
댓글 0건 조회 102회 작성일 26-09-04 03:34

본문

[이번 수업]

Redis가 메모리에서 데이터를 다루는 방법을 배우고 문자열·해시·카운터·만료를 직접 실습합니다. 캐시 사용법보다 자료구조 선택과 원자적 갱신, 영속성의 경계를 중심으로 봅니다.

[선수지식]

DB-002의 데이터 추가·조회, DB-008의 NoSQL 선택 기준, BACK-008의 캐시와 만료 개념을 알고 Docker를 실행할 수 있으면 됩니다.

[학습목표]

1. 값의 모양에 맞는 Redis 자료형을 고른다.
2. 만료 시간과 원자적 카운터를 사용한다.
3. 메모리 저장과 디스크 영속성을 구분한다.

[핵심개념]

Redis는 주로 메모리의 데이터를 명령으로 다루는 자료구조 서버입니다. 키는 `영역:대상:식별자`처럼 일관되게 짓습니다. 문자열은 단순 값과 카운터, 해시는 한 객체의 필드·값, 리스트는 입력 순서가 있는 묶음, 집합은 중복 없는 값, 정렬 집합은 점수 순위에 알맞습니다. 자료형이 업무 의미와 맞으면 애플리케이션 코드가 단순해집니다.

`SET key value EX 60`은 값과 60초 만료를 함께 설정합니다. 만료는 오래된 임시 데이터를 자동 정리하지만 영구 보존을 대신하지 않습니다. `INCR`은 서버에서 카운터를 원자적으로 올립니다. 원자적이라는 말은 다른 요청이 중간 상태에 끼어들지 못해 읽고 더하고 쓰는 경쟁을 줄인다는 뜻입니다. 여러 명령을 하나의 작업으로 묶을 때는 트랜잭션이나 스크립트가 필요할 수 있습니다.

Redis를 메모리 전용 저장소라고 단정하면 안 됩니다. RDB는 특정 시점의 스냅샷을 만들고 AOF는 쓰기 명령을 로그에 남겨 재시작 때 재생합니다. 아무 영속성도 쓰지 않는 구성도 있습니다. 허용 가능한 데이터 손실 범위, 복구 시간, 쓰기 비용에 맞춰 정하고 별도 백업과 복구 시험을 합니다. 메모리 한도에 이르면 설정한 축출 정책에 따라 키가 제거되거나 쓰기가 거절될 수 있으므로 사용량과 제거 횟수를 관찰합니다.

[따라하기]

Docker가 실행 중인지 확인하고 아래 명령을 한 줄씩 실행합니다. Windows는 PowerShell, macOS·Linux는 터미널을 쓰며 명령은 같습니다. 컨테이너 포트를 외부에 공개하지 않는 로컬 실습입니다.

```text
docker run --rm -d --name db009-redis redis:8-alpine
docker exec db009-redis redis-cli SET cache:home v1 EX 60
docker exec db009-redis redis-cli TTL cache:home
docker exec db009-redis redis-cli HSET item:101 name keyboard stock 5
docker exec db009-redis redis-cli HGETALL item:101
docker exec db009-redis redis-cli INCR visits:today
docker exec db009-redis redis-cli INCR visits:today
docker stop db009-redis
```

첫 명령은 공식 이미지의 현재 Redis 8 안정 계열을 내려받아 실행합니다. 예상 결과는 `OK`, 0~60 사이의 남은 초, 해시에 새로 추가된 필드 수 `2`, `name keyboard stock 5`, 카운터 `1`, `2` 순서입니다. 마지막에는 컨테이너 이름이 나오며 `--rm` 때문에 실습 데이터도 제거됩니다. TTL이 `-2`라면 입력이 늦어 키가 이미 만료된 것이므로 SET부터 다시 실행합니다.

[흔한 실수]

모든 데이터를 문자열 JSON 하나로 넣지 말고 필요한 연산에 맞는 자료형을 고릅니다. 만료 없는 임시 키는 메모리를 계속 차지합니다. 운영 환경에서 전체 키를 한꺼번에 찾는 `KEYS *` 대신 점진적으로 순회하는 SCAN 계열을 사용합니다. Redis 응답이 빠르다는 이유로 네트워크 왕복 수와 큰 값의 직렬화 비용을 무시하지 않습니다.

[보안 주의]

실습은 본인 소유 로컬 Docker 환경에서만 합니다. 실제 서버는 인터넷에 직접 노출하지 않고 방화벽, TLS, 인증과 최소 권한 ACL을 적용합니다. 키와 값에 비밀번호·토큰·개인정보를 그대로 넣지 않으며 입력 크기와 자료형을 검증합니다. 공유 서버에서 FLUSHALL 같은 전체 삭제 명령을 실습하지 않습니다.

[직접 해볼 과제]

`SADD item:101:tags db cache db`를 실행한 뒤 `SMEMBERS item:101:tags`로 중복이 사라지는지 확인하세요. 카운터에도 30초 만료를 붙이고 TTL 변화를 기록합니다.

[확인문제]

1. 객체의 여러 필드를 각각 읽고 바꿀 때 알맞은 자료형은 무엇인가요?
2. 두 번의 동시 요청이 카운터 값을 잃지 않게 하는 명령은 무엇인가요?
3. RDB와 AOF를 설정해도 별도 백업과 복구 시험이 필요한 이유는 무엇인가요?

[다음 학습]

OS-009에서 SSH 접속 원리와 키를 안전하게 관리하는 방법을 배웁니다.

[공식 참고 자료]

Redis data types
https://redis.io/docs/latest/develop/data-types/

Redis SET command
https://redis.io/docs/latest/commands/set/

Redis INCR command
https://redis.io/docs/latest/commands/incr/

Redis persistence
https://redis.io/docs/latest/operate/oss_and_stack/management/persistence/

Redis key eviction
https://redis.io/docs/latest/develop/reference/eviction/

Redis security
https://redis.io/docs/latest/operate/oss_and_stack/management/security/

Redis Docker 실행
https://redis.io/docs/latest/operate/oss_and_stack/install/install-stack/docker/

댓글목록

등록된 댓글이 없습니다.

회원로그인

회원가입

사이트 정보

회사명 : 회사명 / 대표 : 대표자명
주소 : OO도 OO시 OO구 OO동 123-45
사업자 등록번호 : 123-45-67890
전화 : 02-123-4567 팩스 : 02-123-4568
통신판매업신고번호 : 제 OO구 - 123호
개인정보관리책임자 : 정보책임자명

접속자집계

오늘
4,008
어제
6,862
최대
16,772
전체
769,959
Copyright © 소유하신 도메인. All rights reserved.