묻고 답해요
156만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨대기업 근무하며 경험한 Redis를 야무지게 사용하는 방법 [이론편]
sentinel이라는게 kafka의 주키퍼와 비슷한 개념인가요?
카프카에서도 주키퍼라는 것을 통해 클러스터의 노드들에게 주기적으로 ping을 보내 heartbeat?이란걸 체크하여 어떤 클러스터가 다운되었는지 확인하고 다운된 클러스터의 토픽이 리더 파티션이 있으면 다른 클러스터의 파티션에게 리더 파티션을 넘겨주는 역할을 하는 것으로 알고있는데 강의를 보니 sentinel이라는게 비슷한 역할을 하는것 같습니다. 제가 이해한게 맞나요?
-
해결됨대기업 근무하며 경험한 Redis를 야무지게 사용하는 방법 [실습]
Redis 로컬 안전한가요?
제가 로컬 Redis는 해킹에 위험하다라는 말을 들었는데 실습이라 괜찮은지 제가 잘못된 정보를 들은건지 잘 모르겠습니다!혹시 도커로 Redis를 사용하는것도 괜찮을까요?
-
해결됨대기업 근무하며 경험한 Redis를 야무지게 사용하는 방법 [이론편]
강의 내용 관련 이해가 잘 되지 않아 질문 남겨봅니다.
main 은 id를 가지고 있고, 이를 복제한 replica 들은 main 의 아이디로 그룹화되어 있음 그런데, main 이 어떠한 일로 인해(삭제 등) 새롭게 만들어지면 새로운 id 를 가지게 됨 이때 구 id 를 가지고 그룹화되어 있는 replica 들은 현재의 main 과 id 가 다르니 전체 동기화가 일어남 그러면, [구 id 를 가지고 그룹화되어 있는 replica 들] 은 계속 구버전 id 를 가지게 되는건가요?아니면, 동기화 후 새로운 id 로 다시 그룹화가 되는 걸까요?추가로, 강의 초반에 위 내용 관련해서 '카프카와 비슷하다'라는 설명이 나왔는데,카프카에 대해 잘 모르는 입장에서는 조금 혼란스러울 수 있을 것 같습니다.가능하시다면 추후 강의를 개선하실 계획이 있으실 경우이 부분을 조금 더 자세히 설명해주시면 좋을 것 같습니다.
-
해결됨대기업 근무하며 경험한 Redis를 야무지게 사용하는 방법 [이론편]
Cache-Aside 패턴에서 Cache Miss 시
안녕하세요 강사님!Look-Aside 패턴과 Thundering Herd 관련 강의(3:37~) 내용을 듣다가 궁금한 점이 있어 질문드립니다. 캐시-어사이드 패턴에서 캐시 미스가 발생했을 때, 강의 중 보여주신 그림에서는 ‘캐시가 직접 DB를 조회하고 데이터를 업데이트한 뒤 서버에 응답까지 전달하는 구조’처럼 표현해주셔서 다소 혼란스럽습니다. 제가 알고 있기로는 캐시-어사이드 패턴은 캐시 미스 발생 시 애플리케이션(서버)이 직접 DB를 조회하고, 조회한 데이터를 캐시에 갱신(PUT)한 뒤 클라이언트에 응답하는 방식으로 동작하는 것으로 알고 있습니다. 만약 MSA 환경에서 캐시 서버가 별도로 구성되어 있고, 데이터를 API 통신 형태로 제공하는 구조라면 그림으로 그리시면서 설명해주신 부분이 어느 정도 이해가 되지만, 해당 파트가 MSA 를 전제하고 설명하는 맥락은 아닌 것 같아서요. 혹시 이 부분에 대해 제가 잘못 이해한 부분이 있다면 피드백 주시면 감사하겠습니다!
-
해결됨대기업 근무하며 경험한 Redis를 야무지게 사용하는 방법 [실습]
사용하시는 터미널 툴이름이 궁금합니다
안녕하세요 강의 내내 너무 편해보여서 질문올립니다 ㅠ 터미널이 다중으로 보이는데 툴 이름을 여쭤볼 수 있을까요?
-
해결됨대기업 근무하며 경험한 Redis를 야무지게 사용하는 방법 [실습]
StringModel에 Key 저장 이유
안녕하세요. 좋은 강의 감사합니다. 강의 도중 StringModel을 구현하실 때 Key를 String type 필드로 선언하시는데, key-value 구조에서 왜 value에도 key를 다시 저장하는지 의도가 궁금하여 문의 드립니다!
-
미해결백엔드 개발자 성능 개선 초석 다지기
ngrinder 설치관련
안녕하세요 ngrinder 설치 할 때 window환경에서run_agent.bat 을 실행했는데 cmd창이 떴다고 바로 꺼지고 agentmanage에 아무것도 나오지 않습니다 제가 어떤 걸 놓쳤을까요??
-
해결됨대기업 근무하며 경험한 Redis를 야무지게 사용하는 방법 [실습]
docker redis로 테스트하기
Slave Node 실행할 때, docker redis로 실행해보고 싶은데 잘 안되어서 질문드립니다.docker run --rm -p 6379:6379 -it redis:7.4docker run --rm -d -p 6380:6380 -v C:/Users/종현/redis_conf/redis_6380.conf -it redis:7.4docker run --rm -d -p 6381:6381 -v C:/Users/종현/redis_conf/redis_6381.conf -it redis:7.4이렇게 git bash에 입력 후 확인해 보니컨테이너는 잘 떴습니다. 그런데 아래와 같이 슬레이브가 실행되지 않고 고유 redis로 실행된 것 같습니다.Master Node (docker reids 기본)2025-03-09 22:07:42 1:C 09 Mar 2025 13:07:42.395 * oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo 2025-03-09 22:07:42 1:C 09 Mar 2025 13:07:42.395 * Redis version=7.4.2, bits=64, commit=00000000, modified=0, pid=1, just started 2025-03-09 22:07:42 1:C 09 Mar 2025 13:07:42.396 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf 2025-03-09 22:07:42 1:M 09 Mar 2025 13:07:42.396 * monotonic clock: POSIX clock_gettime 2025-03-09 22:07:42 _._ 2025-03-09 22:07:42 _.-``__ ''-._ 2025-03-09 22:07:42 _.-`` `. `_. ''-._ Redis Community Edition 2025-03-09 22:07:42 .-`` .-```. ```\/ _.,_ ''-._ 7.4.2 (00000000/0) 64 bit 2025-03-09 22:07:42 ( ' , .-` | `, ) Running in standalone mode 2025-03-09 22:07:42 |`-._`-...-` __...-.``-._|'` _.-'| Port: 6379 2025-03-09 22:07:42 | `-._ `._ / _.-' | PID: 1 2025-03-09 22:07:42 `-._ `-._ `-./ _.-' _.-' 2025-03-09 22:07:42 |`-._`-._ `-.__.-' _.-'_.-'| 2025-03-09 22:07:42 | `-._`-._ _.-'_.-' | https://redis.io 2025-03-09 22:07:42 `-._ `-._`-.__.-'_.-' _.-' 2025-03-09 22:07:42 |`-._`-._ `-.__.-' _.-'_.-'| 2025-03-09 22:07:42 | `-._`-._ _.-'_.-' | 2025-03-09 22:07:42 `-._ `-._`-.__.-'_.-' _.-' 2025-03-09 22:07:42 `-._ `-.__.-' _.-' 2025-03-09 22:07:42 `-._ _.-' 2025-03-09 22:07:42 `-.__.-' 2025-03-09 22:07:42 2025-03-09 22:07:42 1:M 09 Mar 2025 13:07:42.397 * Server initialized 2025-03-09 22:07:42 1:M 09 Mar 2025 13:07:42.397 * Ready to accept connections tcpslave12025-03-09 22:07:43 1:C 09 Mar 2025 13:07:43.105 * oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo 2025-03-09 22:07:43 1:C 09 Mar 2025 13:07:43.105 * Redis version=7.4.2, bits=64, commit=00000000, modified=0, pid=1, just started 2025-03-09 22:07:43 1:C 09 Mar 2025 13:07:43.105 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf 2025-03-09 22:07:43 1:M 09 Mar 2025 13:07:43.105 * monotonic clock: POSIX clock_gettime 2025-03-09 22:07:43 _._ 2025-03-09 22:07:43 _.-``__ ''-._ 2025-03-09 22:07:43 _.-`` `. `_. ''-._ Redis Community Edition 2025-03-09 22:07:43 .-`` .-```. ```\/ _.,_ ''-._ 7.4.2 (00000000/0) 64 bit 2025-03-09 22:07:43 ( ' , .-` | `, ) Running in standalone mode 2025-03-09 22:07:43 |`-._`-...-` __...-.``-._|'` _.-'| Port: 6379 2025-03-09 22:07:43 | `-._ `._ / _.-' | PID: 1 2025-03-09 22:07:43 `-._ `-._ `-./ _.-' _.-' 2025-03-09 22:07:43 |`-._`-._ `-.__.-' _.-'_.-'| 2025-03-09 22:07:43 | `-._`-._ _.-'_.-' | https://redis.io 2025-03-09 22:07:43 `-._ `-._`-.__.-'_.-' _.-' 2025-03-09 22:07:43 |`-._`-._ `-.__.-' _.-'_.-'| 2025-03-09 22:07:43 | `-._`-._ _.-'_.-' | 2025-03-09 22:07:43 `-._ `-._`-.__.-'_.-' _.-' 2025-03-09 22:07:43 `-._ `-.__.-' _.-' 2025-03-09 22:07:43 `-._ _.-' 2025-03-09 22:07:43 `-.__.-' 2025-03-09 22:07:43 2025-03-09 22:07:43 1:M 09 Mar 2025 13:07:43.106 * Server initialized 2025-03-09 22:07:43 1:M 09 Mar 2025 13:07:43.106 * Ready to accept connections tcpreplicaof 127.0.0.1 6379 repl-ping-replica-period 10 repl-timeout 60 port 6380어떻게 해결해야 할까요?Window, 로컬 redis는 설치X
-
미해결백엔드 개발자 성능 개선 초석 다지기
캐싱 데이터가 안보입니다.
조회를 하고 cache확인 api를 호출해도 캐시데이터가 보이지 않습니다.. 어디를 확인해봐야할까요? chatGPT를 통해 물어보고 확인해본 아래다섯가지는 정상적입니다. 코드도 깃허브 코드에서 수정한것이 없어서 질문남깁니다spring.cache.type=ehcache 설정 확인 ehcache.xml 파일 존재 여부 및 경로 확인 Ehcache 의존성 (ehcache 라이브러리) 추가 여부 확인@EnableCaching 설정 확인 @Cacheable이 정상적으로 적용되었는지 확인
-
미해결백엔드 개발자 성능 개선 초석 다지기
ExecutorService와 CompletableFuture의 차이점과 역할
안녕하세요! 비동기 코드에 관해 질문이 있습니다. ExecutorService 는 스레드를 관리하는 역할을 하는것이고 CompletableFuture 가 실제로는 비동기 요청을 처리하는 것으로 이해하였는데 맞을까요? Future 은 예외 처리를 할 수 없기 때문에 잘 쓰이기 않을까요??CompletableFuture 가 지원하는 기능이 더 많기 때문에 주로 CompletableFuture 를 사용하나요?
-
해결됨대기업 근무하며 경험한 Redis를 야무지게 사용하는 방법 [실습]
화면에 글씨가 너무 작아요 ㅠㅠ
화면 글씨가 인간적으로 너무 작은거 같아요.. 아이패드 11로 보고 있는데..눈 빠질거 같아요 ㅠㅠ보는 사람을 배려해서 강의 제작 하셨으면 좋겠어요..
-
해결됨대기업 근무하며 경험한 Redis를 야무지게 사용하는 방법 [이론편]
동영상 질문
원래 설명만하고 화면은 고정인가요?? 화면 하나만 띄우고 설명만 있는거 같아서 저만 그런가 하고요..
-
해결됨대기업 근무하며 경험한 Redis를 야무지게 사용하는 방법 [실습]
좋은 강의 감사합니다. 질문있습니다
안녕하세요. 강의 잘 듣고 있습니다.강의를 들으면서 몇가지 질문이 있어서 남깁니다1. CacheManager + @Cacheable 과 같은 어노테이션으로 레디스 캐싱을 쓰는 방법은 실제 근무했던 기업에서 많이 사용하는 방법인가요? - 위의 질문의 요지는 말 그대로 Template를 사용한 방법과 CacheManager가 제공하는 어노테이션를 활용한 경우가 많은지 궁금합니다 - 위와 관련해서 한가지 더 질문 드리자면, 보통 값을 저장할 때 객체를 직렬화해서 저장하게 되는 경우가 많은데, 수백개가 넘는 객체를 모두 정의할 수 없는 환경에서 GenericJackson2JsonRedisSerializer를 사용하는 것으로 알고 있습니다. 하지만, 이런 경우에는 다른 서버에서는 패키지 구조가 맞지 않아서 사용하지 못하는데 이런 경우에는 어떻게 하나요?2. 리스트 결과물 (ex. 00 목록 조회 등)은 보통 어떤 자료구조를 사용하나요?
-
미해결백엔드 애플리케이션 성능 개선하기 - 기초편
질문있습니다!!
스노우 플레이크를 통해 id값을 만들어 내는 이유가 인덱싱(타임 스탬프 순으로의 정렬)과 절대 중복될 수 없는 key 값을 만들어내서, 기존 생성API의 메커니즘인 Select(중복 여부 조건 검사) -> Insert의 방식에서 스노우 플레이크로 인해 중복이 될 수 없으니 Select 쿼리에 대한 비용을 줄이는 것으로 성능을 개선하는 방식이다. 그리고 여기에 추가로 비동기로 URL 생성을 진행했하고 클라이언트는 응답을 미리 받고, 실질적으로 Insert 쿼리를 날려 DB에 저장하는 부분은 백그라운드로 진행함으로써 Latency를 앞당기는 것으로 성능을 개선했다고 이해하면 될까요??
-
해결됨대기업 근무하며 경험한 Redis를 야무지게 사용하는 방법 [실습]
질문있습니다
RedisConfig 클래스에서 @Bean을 이용해서 @Bean public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) { RedisTemplate<String, Object> redis = new RedisTemplate<>(); redis.setConnectionFactory(factory); redis.setKeySerializer(new StringRedisSerializer()); redis.setHashKeySerializer(new StringRedisSerializer()); redis.setHashValueSerializer(new StringRedisSerializer()); redis.setValueSerializer(new StringRedisSerializer()); return redis; }해당 코드를 통해 RedisTemplate를 빈으로 등록한걸 확인했는데요.근데 왜 RedisCommon 클래스 쪽에선 해당 Bean을 사용하지 않고 RedisTemplate<String,String> 을 사용하나요?Bean으로 등록한건 RedisTemplate<String,Object>인데 그럼 스프링에서는 만들어 놓은 RedisTemplate<String,Object>을 사용하지 않고 새로운 RedisTemplate<String,String>을 만들어서 주입하는 걸로 알고있습니다.저 Bean으로 등록해놓은 RedisTemplate<String,Object>의 직렬화 및 역직렬화에 사용될 객체를 집어넣어주는 코드는 Redis 전체 설정인가요?? 저렇게 하면 RedisTemplate<String,String>에도 적용이 되는건가요??- 강사님의 이론편을 안봐서 제가 이해가 잘 안가는 것 일 수도 있습니다 ㅠㅠ실제로 RedisConfig 클래스에서 정의한 RedisTemplate<String, Object>와 RedisString에서 정의한 RedisTemplate<String,String>의 해시코드를 비교해봤는데 서로 다른 값이 나왔습니다.@Service @RequiredArgsConstructor public class RedisString { private final RedisTemplate<String, String> template; private final RedisTemplate<String, Object> template2; // RedisTemplate@544e3679RedisConfig에서 스프링의 빈 초기화시 로그 // RedisTemplate@544e3679RedisString에서 찍은 template2 로그 // StringRedisTemplate@6d5bb599 RedisString에서 찍은 template 로그
-
해결됨실전! Redis 활용
Stale Cahe Invalidation 방법에 대한 질문 요청 드립니다
강사님 안녕하세요. 해당 강의 부분 듣고 궁금한 점이 하나 생겨서 질문 요청 드립니다.제가 특정 rdb의 데이터를 레디스에 캐싱 후 데이터 조회마다 사용하고 데이터의 변경이 있을 경우에 레디스에 반영해주는 방법을 사용하곤 했는데, 개발자가 인지 못한 db 데이터의 수정이나 오염이 있을 경우 강의에서 말씀해주신 것 처럼 정합성이 깨지고 문제가 발생할 것 같은데 이에 대한 방법으로 어떻게 처리하시는 걸 선호하시나요? 주기적인 배치를 통한 데이터 정합성 검사? db에서 데이터의 변경이 있었는지 version 같은 컬럼을 두고 확인?해당 문제에 대한 처리 방법이 좋을지 강사님의 의견이 궁금합니다!
-
해결됨실전! Redis 활용
pipeline 다이어그램 m/s 오타 제보
안녕하세요 동현님!다이어그램을 설명하는 과정에서 밀리세컨드라고 말씀하셨는데, m/s 라고 표기 되어 있어요!m/s 는 meter per second 를 의미하는 것으로 알고 있습니다! 강의를 수정하기 어려우면 ppt 자료에라두 ms 로 정정하는게 좋을 것 같습니다! 명절 연휴에 강의 너무너무 잘 듣고 있습니다!!감사합니다.
-
해결됨대기업 근무하며 경험한 Redis를 야무지게 사용하는 방법 [이론편]
Redis의 클러스터 동작 방식 ( Hash Slot과 관련 )
강의를 들으면서 제가 아는 해시 테이블의 개념과 조금 헷갈려서 질문을 남깁니다. 일반적으로 해시 테이블은 특정한 값이 들어오면 어떤 연산을 통해 해싱을 합니다. 그리고 해싱된 값을 통해 이 데이터가 어떠한 버킷의 어떤 슬롯에 담기는지를 정하게 됩니다.그리고 여기에서 논리적으로 해시충돌이 일어나면 이를 해결할 수 있습니다. 여기에서는 데이터가 실제로 담기기 때문에 이러한 충돌이 발생할 수 있고 해결 또한 해야하죠. 근데 Redis의 클러스터에서는 어떤 데이터가 들어온다면 모듈러 연산을 통해 얻은 해시 값이 특정 노드에 속하는지를 판단한다고 강의를 들었습니다. 예) 노드 A : 0~ 4819 노드 B: 4820~16383 이 때 해싱을 통해 얻은 값이 4819라면 해당 데이터는 노드A에 속하게 되고 노드A에 연결된 DB에 데이터가 저장이 되겠죠 ?( DB의 Cluster 구동 방식을 검색해보니 각각의 노드마다 DB를 별도로 샤용한다고 했습니다. )이 때 해쉬 슬롯은 단순히 너는 노드A로 가라. 너는 노드B로 가라 라고 연결다리 역할만 하는건지 궁금합니다.실제로 해쉬 슬롯은 노드를 나누기 위한 논리적인 숫자에 불과하며 실제 슬롯에는 그 어떠한 값도 저장하고 있지 않는 것인지가 너무 헷갈립니다.. 제가 해쉬 테이블의 개념만 너무 생각해서 그런건지 잘 모르겠습니다 ..
-
해결됨실전! Redis 활용
Streams 삭제 관련 질문
안녕하세요! 동현님강의 잘 듣구 있습니다~!! Streams 자료구조를 설명할 때 append-only log 에 consumer groups 과 같은 기능을 더한 자료구조라고 설명해주셨는데요.append-only log 는 데이터를 오직 추가(append)만 할 수 있는 자료구조라고 추가로 설명해주셨습니다! 그런데 xdel 같은 명령어로 이벤트를 삭제할 수 있다고 설명해주셨는데요.오직 추가만 할 수 있는 자료구조 라고 인식했는데, 갑자기 삭제 명령어가 있어서 헷갈립니다! 감사합니다.
-
해결됨실전! Redis 활용
ZSet 다이어그램 질문
안녕하세요~!zadd를 통해서 TeamC 의 score는 50으로 저장한 것 같은데, 다이어그램은 100으로 되어 있어서 질문 남깁니다!