-
Notifications
You must be signed in to change notification settings - Fork 16
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Redis #185
Open
chs98412
wants to merge
3
commits into
main
Choose a base branch
from
redis
base: main
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Redis #185
Changes from all commits
Commits
Show all changes
3 commits
Select commit
Hold shift + click to select a range
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change | ||||
---|---|---|---|---|---|---|
@@ -1,5 +1,6 @@ | ||||||
# 레디스(Redis) | ||||||
|
||||||
|
||||||
Key, Value 구조의 비정형 데이터를 저장하고 관리하기 위한 오픈 소스 기반의 비관계형 데이터베이스 관리 시스템 (DBMS)이다. | ||||||
데이터베이스, 캐시, 메시지 브로커로 사용되며 인메모리 데이터 구조를 가진 저장소이다. | ||||||
|
||||||
|
@@ -14,6 +15,11 @@ Key, Value 구조의 비정형 데이터를 저장하고 관리하기 위한 오 | |||||
|
||||||
캐시는 한번 읽어온 데이터를 임의의 공간에 저장하여 다음에 읽을 때는 빠르게 결괏값을 받을 수 있도록 도와주는 공간이라 같은 요청이 여러 번 들어오는 경우 매번 데이터 베이스를 거치는 것이 아니라 캐시 서버에서 첫 번째 요청 이후 저장된 결괏값을 바로 내려주기 때문에 DB의 부하를 줄이고 서비스의 속도도 느려지지 않는 장점이 있다. | ||||||
|
||||||
### 로컬 캐시가 있는데도 Redis를 사용하는 이유가 뭘까? | ||||||
서버 어플리케이션은 대부분 자체 로컬 캐시를 지원한다. 다만 로컬 캐시는 단일 서버에서만 동작하므로 분산 시스템에서는 로컬캐시가 올바르게 동작하기 힘들다. | ||||||
Redis 서버를 따로 두어 관리하면 분산 환경에서도 캐시를 원활하게 이용할 수 있다. | ||||||
또한 북제와 샤딩을 지원하기 때문에 대규모 시스템에서 확장성을 유지할 수 있다. 반면 로컬캐시는 이러한 기능이 없다는 단점이 있다. | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||
|
||||||
|
||||||
### Redis의 특징 | ||||||
- Key, Value 구조이기 때문에 쿼리를 사용할 필요가 없다. | ||||||
|
@@ -35,7 +41,29 @@ Key, Value 구조의 비정형 데이터를 저장하고 관리하기 위한 오 | |||||
|
||||||
|
||||||
### Redis 사용시 주의할 점 | ||||||
- 서버에 장애가 발생했을 경우 그에 대한 운영 플랜이 꼭 필요하다. | ||||||
- 인메모리 데이터 저장소의 특성상, 서버에 장애가 발생했을 경우 데이터 유실이 발생할 수 있기 때문이다. | ||||||
- 메모리 관리가 중요하다. | ||||||
1. 장애 대응 | ||||||
- 인메모리 데이터 저장소의 특성상, 서버에 장애가 발생했을 경우 데이터 유실이 발생할 수 있다. | ||||||
-> 클러스터를 구성해서 복사본을 만들어둔다. | ||||||
- 장애가 일어났을 때 레디스를 사용하는 어플리케이션에 장애가 전파될 수 있다. | ||||||
-> 서킷브레이커 패턴을 이용해서 장애 전파 차단 | ||||||
<details> | ||||||
<summary>서킷브레이커 패턴</summary> | ||||||
<div markdown="1"> | ||||||
서킷브레이커는 장애가 발생했을 때 단순 예외처리를 하는것이 아니고, 특정 가용률 아래로 떨어지면 잠시동안 아예 시도를 하지 않는다. | ||||||
레디스를 예로들면 레디스 서버가 다운되어서 접근이 불가능하면, 잠시 레디스의 접근 자체를 하지 않는 방식으로 장애 전파를 차단한다. | ||||||
</div> | ||||||
</details> | ||||||
|
||||||
|
||||||
2. 메모리 관리 | ||||||
- 싱글 스레드의 특성상, 한 번에 하나의 명령만 처리할 수 있기 때문에, 처리하는데 시간이 오래 걸리는 요청, 명령은 피해야 한다. | ||||||
- 인메모리 데이터 스토어이므로 메모리 부족현상이 일어날 수 있다. | ||||||
- 따라서 하나의 인스턴스에 서버 어플리케이션, db어플리케이션, 레디스를 한 번에 두면 메모리 부족이 일어날 수 있으므로 따로 두는 것이 좋다. | ||||||
3. 정합성 관리 | ||||||
- 레디스 뿐만 아니라 캐시를 사용하는 경우, 실제 데이터베이스와는 다른 데이터가 조회될 수 있는 문제가 발생할 수 있다. | ||||||
- 비즈니스 요구사항에 맞춰 어느정도까지 실시간성을 맞출지 고려하여 적절하게 설정하는 전략이 필요하다. | ||||||
|
||||||
### 캐시 이외에 Redis가 주로 쓰이는 곳 | ||||||
1. 세션 스토어 : 사용자 세션 정보를 관리 | ||||||
2. 메시지 브로커 : 여러 시스템 간에 메시지를 전달하는 기능 | ||||||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
📌 컨벤션인듯 아닌듯 레포 어조 통일하기
위의
데이터베이스가 있는데도 Redis를 사용하는 이유가 뭘까?
도 수정해주세욥