묻고 답해요
169만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판
Kafka Cluster 구성도 질문
6:27분 쯤 강의 내역에서각 브로커가 파티션을 분사하는 과정에서브로커 3에 topic3이 갑자기 생겼는데 그림에서 오타인 걸까요 ?
-
해결됨2026년! 백엔드 개발자를 위한 Redis 실전 가이드: 기초부터 실무 패턴까지
레디스로 재고 관리
안녕하세요.최근 수백만 동시 접속을 처리하는 예매 시스템 아키텍처 관련 강의와 유튜브 영상을 참고하면서, 작은 프로젝트로 선착순 쿠폰 발급 시스템을 직접 구현해보며 학습하고 있습니다.현재는 Redis를 활용해 선착순 쿠폰 발급을 구현하는 구조를 고민하고 있는데, 몇 가지 아키텍처 설계에 대해 궁금한 점이 있어 질문드립니다.1. Redis + DB 원자성 관련Redis에서 쿠폰 발급 가능 수량을 감소시키고, 동시에 DB에도 반드시 반영(쿠폰 발급 및 사용자 할당 기록)해야 하는 상황을 가정하고 있습니다.이 경우 Redis의 재고 감소와 DB 반영을 하나의 트랜잭션처럼 원자적으로 묶어야 할 것 같은데, 현실적으로는 분산 환경 특성상 이를 직접적으로 묶는 것이 어렵다고 이해하고 있습니다.그래서 일반적으로는Lua Script로 Redis 내부에서쿠폰 재고 감소중복 발급 방지 처리Redis Stream(또는 Queue)에 발급 이벤트 기록을 원자적으로 수행하고,이후 별도의 스케줄러(또는 Worker)가 해당 Stream을 읽어서 DB에 반영하는 방식으로 설계하는 것이 맞는지 궁금합니다.2. 메시지 큐(Kafka 등) 사용 시 구조또한 쿠폰 발급 결과를 Kafka 같은 메시지 큐로 전달하는 방식도 있을 것 같은데,이 경우에도 동일하게Lua Script로 Redis 내부에서쿠폰 재고 감소중복 발급 방지 처리Redis Stream(또는 Queue)에 발급 이벤트 기록이후 스케줄러가 stream읽어서 Kafka로 전달Consumer가 DB에 반영과 같은 구조로 가져가는 것이 일반적인지 궁금합니다.
-
해결됨2026년! 백엔드 개발자를 위한 Redis 실전 가이드: 기초부터 실무 패턴까지
Lock 해제 문의 드립니다.
Lock 해제 코드에서다른 사용자가 생성한 락을 삭제하지 않기 위해 본인의 identifier이랑 락의 value를 비교해서 삭제하는 로직 부분에서 궁금한 내용이 있습니다. 멀티스레드, 프로세스 환경에서 충분히 일어날 일 이라고 하셨는데 내가 락을 얻으면 다른 사용자는 락을 얻지 못해 value는 항상 나의 identifier이 들어있어야 하는게 아닌가? 라는 생각이 드는데 rd.set(lock_name, identifier, nx=True, px=lock_timeout_ms)이 코드 방식으로 락을 만들면 여러 사용자가 특정 환경에 락을 얻을 수 있는건가요?
-
해결됨6주 완성! 백엔드 이력서 차별화 전략 4가지 - 똑같은 이력서 속에서 돋보이는 법
답을언제쯤받아볼수있나요
?
-
해결됨6주 완성! 백엔드 이력서 차별화 전략 4가지 - 똑같은 이력서 속에서 돋보이는 법
프로젝트가 없어요..
프로젝트한게 없는데 어떻게 하죠??..포트폴리오를 작성하려는데..프로젝트한게없어서 강의들으면서 한걸 써도 된아요??
-
해결됨2026년! 백엔드 개발자를 위한 Redis 실전 가이드: 기초부터 실무 패턴까지
레디스로 대기큐 구현 질문
학습 중 궁금한 점이 있으시면 편하게 질문 주세요. 참고로 질문이 구체적일 수록 더 정확한 답변을 드릴 수 있습니다. 😊 안녕하세요. 강의를 듣고 있는 개발자입니다. 이전에 유튜브에서 선착순 예매 관련 영상을 봤었는데 해당 영상에서 레디스를 이용해서 대기큐를 구현하는 것을 설명해주셨는데 그거에 대해서 질문이 있습니다. 레디스의 소티드 셋에 넣고 폴링을 통해서 상태를 확인한다.타 스케줄러가 소티드셋에서 꺼내서 액티브로 바꾼다 라는 설명이 있었는데, 정확히 어떤식으로 구현하는 건지가 궁금합니다. 스케줄러가 꺼내고 액티브 유저 set으로 집어 넣는건가요?그리고 소티드셋에서 꺼내서 엑티브 유저로 만드는 작업은 원자적으로 처리되게 하는건가요?
-
미해결2026년! 백엔드 개발자를 위한 Redis 실전 가이드: 기초부터 실무 패턴까지
API LIMIT
안녕하세요.항상 좋은 강의 감사합니다. API LIMIT을 보면 ABUSING이랑 비슷한 개념이라고 느꼈습니다. 예를 들어, 어떤 유튜브 라이브에서 좋아요 리액션을 너무 많이 눌렸을 때, API LIMIT 알고리즘으로 고정 윈도우 방식이 적절하다고 생각했습니다. INCR 이 빈번한 작업이기 때문이죠. 근데 악성 BOT(봇)으로 좋아요를 악의적으로 누를 수도 있는데 이때는 ABUSING(어뷰징) 처리를 해야한다면 API LIMIT과 동일하게 가져가는게 맞을지설명주신 API LIMIT도 제한 구간 10초당 몇개 를 구간과 임계치를 설정하는데, 보통 어떤 기준으로 실무에서 설정하는지 궁금합니다. 운영하면서도 모니터링하면서 조절할거 같은데 유튜브 라이브의 임계치 구간을 설명한다고 가정하면 인간의 마우스나 손으로 눌렸을 때 1초당 10번 이하? 이렇게 추상적인 실험 데이터도 정하는게 맞는지도 궁금합니다.감사합니다.
-
미해결2026년! 백엔드 개발자를 위한 Redis 실전 가이드: 기초부터 실무 패턴까지
캐시 무효화
DB부하를 줄이는 전략에서 DB의 데이터 사용자 이름을 변경 할 때, 기존 캐식 삭제 보다 기존 캐시의 JSON 프로필 이름만 수정하는 게 더 비효율적인가요? 기존 캐식 삭제 > 새로운 캐시 생성 VS 기존 캐시의 수정
-
미해결2026년! 백엔드 개발자를 위한 Redis 실전 가이드: 기초부터 실무 패턴까지
Redis와 Kafca의 Pub/Sub 차이
항상 좋은 강의 감사합니다.Redis와 Kafca의 Pub/Sub 차이가 궁금합니당.예를 들어, 인스타 라이브에서 사용자의 리액션 좋아요를 Redis에 두고 post로 좋아요를 업데이트 칠 때, MYSQL 좋아요 수도 같이 증가하기 위해 Redis와 Kafca의 Pub/Sub 의 차이점이 있을까요?좋아요 api가 redis의 좋아요 수 증가 > kafca 메시지 발행 > mysql 구조라 가정했을 때, 대규모트래픽에서 kafca와 redis의 Pub/Sub의 차이랑 뭐가 더 적절한 선택인지 궁금합니다.감사합니다.
-
미해결스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판
@Version 어노테이션이 붙은 필드는 낙관적 락이든 비관적 락이든 업데이트가 됩니다.
설명중에 @Version 필드를 낙관적 락에서 이용할 수 있어가지고~ 라고 하셧는데 실제 돌려보니 비관적락 2에도 DB 업데이트가 되었습니다. AI 에게 물어보니 @Version 어노테이션이 붙은 필드는 JPA 사용시 @Lock 어노테이션 사용여부 상관없이 업데이트가 된다고 합니다. 혹 다른 qna 에도 같은 내용이 있는지 확인은 모두 안해 보았습니다. ========================응, 같은 엔터티 row에 실제 UPDATE가 나가면 @Version 필드는 증가한다고 보면 돼.락 방식이 낙관적이든 비관적이든 핵심은 이거야.@Version private Long version;이 필드가 있는 엔터티가 dirty checking으로 변경 감지되고, flush/commit 때 UPDATE 대상이 되면 JPA/Hibernate가 version 값을 같이 갱신해.========================
-
미해결2026년! 백엔드 개발자를 위한 Redis 실전 가이드: 기초부터 실무 패턴까지
너무 흥미진진합니다..
RDBMS 로만 생각이 고정되어있었는데-캐싱으로도 이렇게 문제들을 해결할수 있는거군요...
-
미해결2026년! 백엔드 개발자를 위한 Redis 실전 가이드: 기초부터 실무 패턴까지
순위가 동률일 때의 처리에 대해 질문드립니다.
안녕하세요, 강의 잘 듣고 있습니다. 양질의 강의 감사드립니다.Sorted Set을 활용한 리더보드 강의 시청 후 궁금한 점이 생겨 질문 남깁니다.Redis 공식 문서에 따르면 Score가 동률일 때 사전순(lexicographical)으로 처리된다고 명시되어 있는데요, 실제 비즈니스 환경에서는 사전순이 아닌 여러 기준을 복합적으로 비교해야 하는 경우가 많을 것 같습니다.Score가 64비트 부동소수점임을 활용해, 자릿수별로 기준을 나누는 방안(예: 1~8자리는 기본 점수, 9~12자리는 2순위 기준, 13~15자리는 3순위 기준 ...)도 생각해 보았습니다. 다만 동률 비교 기준이 많아지거나 기본 점수 자체가 클 경우 double 정밀도 한계로 인해 적용이 어렵겠다는 생각이 들었습니다.실무에서는 이러한 복잡한 동률 상황을 어떤 방식으로 처리하는지 팁을 여쭤봐도 될까요?감사합니다.
-
미해결스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 캐시 전략
Service Create/Update Record 운용과 Delete Record 미운용의 차이 질문
안녕하세요, 선생님! 강의 들으면서 Service 및 Cache Handler 구성간 Create/Update <-> Delete 간의 Return Record 여부 차이에 대해 질문드리고자 합니다. 서비스도 그렇고, 핸들러도 그렇고, Return type이 Create/Update는 전달받은 Record를 Entity Context에 적용한 객체인데, delete의 경우 void로 운용하시는 것을 보고 어떤 차이점이 있는지 궁금하여 질문드리게 되었습니다. create, update 모두 반영 이후의 내역을 바로 반환하여 보여준다는 의미로 생각하였는데, delete를 보면 그런 것 같지는 않아서 따로 다른 의미가 있는지(실무에서 이렇게 많이 사용한다던가), 별 의미가 없는지 구체적으로 문의드리고자 합니다. 감사합니다.
-
해결됨6주 완성! 백엔드 이력서 차별화 전략 4가지 - 똑같은 이력서 속에서 돋보이는 법
조회속도 개선에서 더 개선하는 방법이 궁금합니다.
안녕하세요. 인덱스를 활용한 조회 성능 개선을 공부하던 중 궁금한 점이 생겨 질문드립니다.현재 저는 OFFSET 기반 pagination을 사용하는 서비스를 개발하고 있으며, 다음과 같은 환경에서 성능 테스트를 진행했습니다.데이터: 약 1,000만 건서버: EC2 t3.smallDB: RDS t4g.microk6 vus1001. 문제 상황초기에는 OFFSET 제한 없이 마지막 페이지까지 이동 가능하도록 구현했습니다.하지만 데이터가 1,000만 건 수준으로 증가하자, 깊은 페이지로 갈수록 조회 속도가 급격히 느려지는 문제를 확인했습니다.2. 고민 및 제약일반적으로 이 문제는 Keyset Pagination(커서 기반)으로 해결하라고 많이 알려져 있습니다.하지만 제 서비스는👉네비게이션 바를 통한 페이지 직접 이동 (ex. 1, 10, 100 페이지 클릭)이 필요하기 때문에 Keyset 방식만으로는 요구사항을 만족시키기 어렵다고 판단했습니다.3. 적용한 개선 방법다음과 같은 방식으로 성능 개선을 진행했습니다.OFFSET 최대 범위를 제한 (최대 10,000 페이지 / OFFSET 100,000)커버링 인덱스 적용조회 방식 개선먼저 ID만 조회 → 이후 필요한 10건만 상세 조회전체 게시글 수(count)는 캐싱 처리4. 성능 개선 결과[Page 10] avg: 1.4s → 700ms p95: 4.5s → 1.8s [Page 100] avg: 17s → 1.18s p95: 24s → 3.3s [Page 1000] avg: 32.1s → 1.7s p95: 59s → 4.27s SQL 쿼리는 분석결과 약 1700MS -> 70MS 까지 단축한 것 같습니다.5. 추가 제약사항로그인 사용자와 비로그인 사용자의 조회 결과가 다름(사용자별 구독 게시글이 포함됨)따라서 캐시는 비로그인 사용자에만 적용위 성능 수치는 로그인 사용자 기준6. 현재 고민위와 같이 개선했지만,👉 여전히 성능이 충분하지 않다고 느끼고 있습니다.특히 궁금한 점은 다음과 같습니다.7. 질문OFFSET 기반 pagination을 유지하면서👉추가로 성능을 개선할 수 있는 방법이 있을까요?다음과 같은 방법들을 고려했는데, 방향성이 맞는지 궁금합니다.RDS를 2개를 사용하여 조회 성능 데이터를 각각 2개의 db가 처리하도록 한다?Keyset + OFFSET 혼합 방식(일반적인 페이지 이동은 Keyset Pagination을 사용하고,사용자가 특정 페이지를 직접 입력하거나 점프하는 경우에만제한적으로 OFFSET 기반 조회를 사용하는 혼합 방식)RDS 스펙 업그레이드또한 에펨코리아(https://www.fmkorea.com/)와 같은 대형 커뮤니티는 제가 원하는 페이지 네이션 방식을 사용하면서 깊은페이지(최대 1만)도 지원하고동시접속자 수십만페이지 수천~수만대량 데이터환경에서도 빠른 조회 성능을 유지하는데👉이러한 서비스들은 어떤 방식으로 pagination 및 조회 성능을 처리하는지 궁금합니다.
-
미해결2026년! 백엔드 개발자를 위한 Redis 실전 가이드: 기초부터 실무 패턴까지
Redlock 알고리즘 관해 궁금한게 있습니다!
레디스 서버 한대가 죽더라도 락의 안전성을 보장하기 위해 3~5대의 다른 레디스 서버도 함꼐 있는거라면 이 서비스의 경우에는 레디스의 데이터를 모두 동기화시키는 작업이 매 요청마다 실행되는 건가요?동기화 시키는 과정에서 TTL 에 작은 차이가 생길 수도 있디고 생각하는데 무시가능한 정도인지요??동기화를 시키지 않는다면 또 그 여러대의 레디스 서버가 봐라봐야할 한 곳이 다시 존재하게 됨으로써 어짜피 똑같은 건 아닌지.. 궁금합니다!
-
미해결2026년! 백엔드 개발자를 위한 Redis 실전 가이드: 기초부터 실무 패턴까지
좋아요/조회수 카운팅 병목현상에 대해서 궁금한점이 있습니다.
좋아요, 조회수등 단순 카운트에서 Redis를 쓰는 이유중 하나로 RDB 의 병목현상을 말씀해 주셨는데Redis의 INCR 명령어 역시 수만개의 좋아요 처리를 한다면 같은 이유로 병목 현상이 발생하는게 아닌지 궁금합니다.
-
해결됨6주 완성! 백엔드 이력서 차별화 전략 4가지 - 똑같은 이력서 속에서 돋보이는 법
Build 관련 문제 (테스트 관련 문제)
다른 분들에게 도움이 될까 글을 작성합니다. 저는 윈도우 환경에서 InteliJ를 사용하고 CLI 화면이 편하기 때문에 WSL를 사용하여 도커를 사용했습니다. 해당 전에 문제 해결들은 자료가 없어서 해결 방안만 말씀드리겠습니다.cloud... gradle 문제 해당 프로젝트가 One Driver에 있기 때문에 클라우드 상에 있는 그레이들이 안되는 것으로 알고 있습니다. 만약 프로젝트가 One Driver에 있다면 One driver 밖으로 이동 시켜주세요WSL 도커를 실행해도 윈도우 환경에서는 컨테이너를 찾지 못하는 경우가 있기 때문에 Window 환경에서 도커를 실행 하세요 해당 예외들이 터진 후에 모든 테스트 로직에 대해 예외가 발생합니다.BackendportfolioApplicationTests > contextLoads() FAILED java.lang.IllegalStateException at DefaultCacheAwareContextLoaderDelegate.java:143 Caused by: java.lang.IllegalStateException at LoadingCache.java:75 Caused by: java.lang.ExceptionInInitializerError at Class.java:-2 Caused by: java.lang.IllegalStateException at DockerClientProviderStrategy.java:277원래 전에는 build와 테스트가 잘 진행되었는데 무슨 일인지 Test에서 도커를 만들지 못하는 문제가 생겼나 봅니다. 저는 테스트에서 사용되는 DB Config들을 사용하는 곳에 주석 처리하고 도커 컴포즈로 DB를 주석 처리하고 테스트에서 사용되는 DB들은 Docker compose에 사용되는 DB를 켜서 사용했습니다. Docker Compose에서 사용되는 DB로 사용되기 싫으시다면 Docker 컨테이너로 따로 만드시면 될 것 같아요 @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @SpringBootTest //@Import({TestDatabaseConfig.class, TestRedisConfig.class}) public @interface IntegrationTest { } docker compose up db redis -d build 관련 에러들은 어노테이션 설정, gradle 설정, 컴파일 설정 등 많은 이유가 있어 하루 종일 붙잡아도 문제 해결이 안되는 점이 많아 시간으 며칠 잡아 먹었네요 글을 깔끔하게 가독성 좋게 작성하지 못해 아쉽지만 다른 사람들이 똑같은 문제를 맞았을 때 해당 글이 도움이 되길 바랍니다.
-
해결됨스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판
consumer에서 에러가 발생할 경우 데이터 유실 문의
안녕하세요. kafka 관련해서 질문이 있습니다.MessageRelay > publishEvent 에서 outbox를 삭제했는데 consumer에서 에러가 발생하면 데이터가 유실되는게 아닌가요?
-
해결됨스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판
게시글 테스트 데이터 삽입
DataInitializer 자체가 이해가 안되는게 있습니다.Test 환경에서 @Autowired 가 가능한건지 궁금하네요
-
해결됨은행 서버 프로젝트 실습을 통해 배우는 코틀린 마스터 클래스
강의가 검은 화면으로 나옵니다.
섹션 2 강의 4 5 6 전부 검은 화면으로 나옵니다. 나머지 강의들은 제대로 영상이 틀어지고요. Inflearn 에서 제공해주는 영상 FAQ의 조치를 다따라 해봤는데도 되지않습니다.