inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

174만명의 커뮤니티!! 함께 토론해봐요.

Issuance 테이블에 status, couponId 인덱스가 꼭 필요할까요?

해결됨

트래픽 급증을 견디는 서버 시스템 설계 - Coupon 발급 서비스

안녕하세요. 강의를 들으며 issuance 테이블에 status, coupon_id로 각각 인덱스를 생성하시면서 조회성능을 향상시키기 위함이라 설명하셨는데요. 특히 status를 이용한 인덱스가 꼭 필요한지 궁금합니다. 현재 status는 3가지 타입으로 (추후에도 늘어날 value가 제한적) 선택도가 약 33% 정도로 보입니다. 이렇게 가짓수가 적은 경우에는 인덱스의 효율을 잘 활용하기 어려워 인덱스를 생성하는 것이 비효율적이라고 학습한적이 있는데 지금과는 다른 상황인가요??

  • java
  • kotlin
  • mysql
  • docker
  • spring-boot
  • kafka
  • redis
60jong 댓글 1 좋아요 2 조회수 48

부하 테스트 시 설정 관련 질문드립니다

미해결

트래픽 급증을 견디는 서버 시스템 설계 - Coupon 발급 서비스

강의에서는 부하 테스트 시 시나리오 작성을 아래와 같이 5000 rps 정도로 부하를 가했을 때와, 1000 rps 수정해서 부하를 가했을 때의 latency(p50, 90, 99) 차이가 있는데, 실무에서는 보통 어떤 기준을 가지고 rps 를 정하는지 궁금합니다! scenarios: { burst: { ... rate: 5000, timeUnit: '1s', duration: '30s', // 1000 req/s × 30s = 총 30,000 요청 }, },

  • java
  • kotlin
  • mysql
  • docker
  • spring-boot
  • kafka
  • redis
드루와라잇 댓글 2 좋아요 1 조회수 78

섹션 2

미해결

고성능 실시간 분산 시스템 RabbitMQ + Kafka + Redis 실전 프로젝트

안녕하세요 섹션 2 아키텍처 개요는 언제 올라오는지 알 수 있을까요?

  • python
  • flask
  • kafka
  • redis
  • rabbitmq
ghkdgo868 댓글 1 좋아요 0 조회수 42

pub/sub의 연결 객체에 대해 질문 드립니다.

미해결

2026년! 백엔드 개발자를 위한 Redis 실전 가이드: 기초부터 실무 패턴까지

강의 내용에 보면 클라이언트 수만큼 pub/sub 연결을 하면 안된다. redis 구독을 소수의 연결로 유지하고 클라이언트들에게 브로드캐스트 하는 구조로 사용한다. 애플리케션 시작 시 생성하고 서버 종료될 때 구독을 해제한다. 이렇게 설명을 주시는데 이해가 잘 되지 않아 질문을 드립니다. 1번 2번에 대해 대부분 채팅과 관련하여 메시지가 소실되도 무방한 구조에서 pub/sub의 브로드캐스팅 방법을 사용하는 것으로 알고 있습니다. 이전에 언급하신 Redis Lock에서 사용하는 경우는 애초 접근하는 서버가 수십~ 수백대일 가능성이 있습니다. 채팅의 경우도 유투브 라이브의 경우 수천 수만명의 접속일 가능성이 있습니다. 서버의 가용 능력에 따라 분산 설계가 있을 수 있겠지만 기본적으로 이러한 요구에서는 1:N이 됩니다. 어떤 목적과 이유로 1번과 관련하여 말씀을 하신건지 알고 싶습니다. 하나의 pub/sub 연결을 여러 채널이 공유해서 사용하는 것이기에 pool에 대한 이야기는 아닐 것이라 생각 합니다. 혹시 예제는 스웨거에서 요청할 때마다 pub/sub을 생성해서 사용하는 것이기에 애초에 하나의 pub/sub 연결로 사용하는 방안으로 코드를 설계해야 한다는 의미일까요? 하지만 그럼에도 클라이언트 수나 구독을 소수로 유지해야 하는 의미는 pool을 의미하시는 건지 서버 자원 때문인지 어떤 이유에서인지에 대한 이해가 잘 되지 않습니다. 3. 3번에서 하는 말이 하나의 pub/sub 연결을 시작시 생성하여 모든 채널에 대해 공유 사용하고 종료시 구독을 해제하도록 하라는 의미로 보면 될런지요

  • 아키텍처
  • redis
  • FastAPI
bluebamus 댓글 2 좋아요 0 조회수 52

build 시 에러 해결방법 공유(docker.desktop 업데이트 -> 의존성 버전 수정)

해결됨

6주 완성! 백엔드 이력서 차별화 전략 4가지 - 똑같은 이력서 속에서 돋보이는 법

질문이라기 보다는 저같이 몇시간 버리시는 분 계실까 내용 공유드립니다. 도커 데스크탑 업데이트로 testcontainers 의존성 버전이 안맞은게 문제였습니다. 감사하게도 같은 문제로 다른분이 포스팅을 적어두셨더라구요. build.gradle 파일에서 testcontainers 의존성 -- 아래 처럼 변경 testImplementation 'org.testcontainers:testcontainers:2.0.5' testImplementation 'org.testcontainers:testcontainers-junit-jupiter:2.0.5' testImplementation 'org.testcontainers:testcontainers-mysql:2.0.5' ※ 최신버전은 Maven Rep 참고해주세요. 참고한 포스팅입니다. 도커 업데이트 이후 Testcontainers 테스트 실패 이슈 해결 기록 이슈 해결 외에도, 도커 버전에 따라 최소 API 버전 확인 할 수 있는 방법도 같이 기재되어있어 참고하기 좋은 것 같습니다.

  • java
  • spring
  • mysql
  • redis
  • 이력서
eunseo lay 댓글 2 좋아요 0 조회수 68

Request Failed 가 뜹니다.

미해결

비전공자도 이해할 수 있는 Redis 중급/실전

K6 부하 테스트 터미널 창에서 WARN[0000] Request Failed error="Post \" http://localhost:8080/likes/redis\ ": dial tcp 127.0.0.1:8080: connectex: No connection could be made because the target machine actively refused it." 상기 에러가 계속 나옵니다. -- 테스트 결과 -- 이전 테스트 보다 20배정도 처리속도가 개선된건 확인했으나 실패율이 계속 뜨는건 OS차원의 문제일까요? (OS는 Windows 입니다) -- Redis 적용 이전 -- -- Redis 적용 이후 --

  • redis
  • nosql
  • query-tuning
  • performance-tuning
khb3025 댓글 2 좋아요 0 조회수 55

ArticleReadService 관련 질문

미해결

스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판

학습 관련 질문을 최대한 상세히 남겨주세요! 고민 과정도 같이 나열해주셔도 좋습니다. 먼저 유사한 질문이 있었는지 검색해보세요. 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요. 64강 17분쯤 ArticleReadService의 count 메서드 구현하신 코드를 보면 아래 코드블럭과 같이 작성하셨습니다. private long count(Long boardId) { Long result = boardArticleCountRepository.read(boardId); if (result != null) { return result; } long count = articleClient.count(boardId); boardArticleCountRepository.createOrUpdate(boardId, count); return count; } 그런데 BoardArticleCountRepository의 count 메서드는 아래와 같이 작성하셨는데 이 경우 boardArticleCountRepository.count(boardId);는 Redis에서 데이터가 조회되지 않은 경우 0L를 반환하여 ArticleReadService의 count 메서드에서는 항상 client에서 조회하는 케이스가 발생하지 않을거 같습니다. public Long read(Long boardId) { String result = redisTemplate.opsForValue().get(generateKey(boardId)); return result == null ? 0L : Long.valueOf(result); }

  • java
  • mysql
  • spring-boot
  • kafka
  • redis
threekkk 댓글 1 좋아요 0 조회수 41

kafka 이벤트 발행 실패 시 at-least-once를 보장하는 방법이 궁금합니다.

해결됨

트래픽 급증을 견디는 서버 시스템 설계 - Coupon 발급 서비스

안녕하세요! 강의 잘 듣고 있습니다. 아래 issue 메서드 관련해서 질문드립니다. @Transactional fun issue(couponId: Long, userId: Long): Issuance { val policy = couponIssuePolicyReader.get(couponId) val now = LocalDateTime.now() if (!policy.isBookingOpen(now)) { throw NotStartedException() } val expiresAt = now.plusDays(policy.validityDays.toLong()) couponIssuer.tryIssue(couponId, userId) issuanceRequestProducer.publish( IssuanceRequested( couponId = couponId, userId = userId, issuedAt = now, expiresAt = expiresAt, ) ) return Issuance( userId = userId, couponId = couponId, issuedAt = now, expiresAt = expiresAt, ) } 해당 코드에서 couponIssuer.tryIssue() (Redis)는 성공했는데 바로 다음 issuanceRequestProducer.publish() (Kafka)가 실패하는 경우 재고는 차감됐는데 이벤트는 유실된 불일치 상태가 될 수 있을 것 같습니다. 만약 재고를 DB로 관리한다면 아웃박스 패턴으로 같은 트랜잭션 안에서 이벤트를 아웃박스 테이블에 적재하고 별도 워커가 Kafka에 발행하는 방식으로 원자성을 보장할 수 있을 것 같습니다. 그런데 지금처럼 재고 자체를 Redis로 관리하는 구조에서는 Redis와 Kafka 각각에 대한 이중 쓰기 문제가 생기고 아웃박스 패턴을 그대로 적용하기는 어려워 보입니다. 만약 해당 구조에서 at-least-once를 보장하려면 어떤 전략을 택해야 하는지 궁금합니다!

  • java
  • kotlin
  • mysql
  • docker
  • spring-boot
  • kafka
  • redis
이찬원 댓글 1 좋아요 1 조회수 97

domain에 @Entity 와 Repository를 함께 둔 이유가 궁금합니다

해결됨

트래픽 급증을 견디는 서버 시스템 설계 - Coupon 발급 서비스

Domain 패키지에 Coupon 같은 @Entity 와 CouponRepository 를 함께 두셨더라고요! 영속성을 storage(또는 Infrastructure) 로 따로 분리하는 구성도 있는데, 여기서는 엔티티와 레파지토리 모두 domain 에 두신게 궁금했습니다. 혹시 이 서비스 규모에서는 db가 바뀔 가능성이 낮고, 엔티티를 밖으로 빼면 도메인 <-> 엔티티 매핑 비용만 늘어난다고 보셔서 의도적으로 domain 안에 함께 두신걸까요? 아니면 다른 기준이 있으셨는지 궁금합니다.

  • java
  • kotlin
  • mysql
  • docker
  • spring-boot
  • kafka
  • redis
바나나 댓글 1 좋아요 1 조회수 84

Jib 이미지 빌드에서 docker credential 관련으로 이슈가 있다면

해결됨

트래픽 급증을 견디는 서버 시스템 설계 - Coupon 발급 서비스

MacOs 사용자 분들이시고 cat ~/.docker/config.json 의 결과에 credsStore 필드가 osxkeychain이고 auth 필드의 값이 비어있으신 경우 인증정보가 keychain으로 관리되고 있고 이걸 jib이 가져오지 못하고 있는 겁니다. 방법 1 (가장 추천합니다) jib 내부의 from과 to 블록의 image 선언 다음 credHelper { helper = "osxkeychain" } 해당 코드를 추가해 keychain에 접근할 수 있도록 해주면 좋습니다. + auth {}로 인증정보를 주입하는 방법으로도 대체 가능합니다. 방법 2 (문제 회피) java 25 이미지를 docker pull 받아 로컬에 두고 ./gradlew jibDockerBuild 하시면 됩니다. 나중에 redis를 받던데 그때로 같은 방법으로 해결하면 될 것같습니다. 방법 3 (keychain 필드깨서 강제로 base64쓰게 하기) credsStore 필드를 훼손시켜 강제로 auth에 암호화된 내용을 저장하도록 하는 것같습니다. 정말 추천하지 않으며, 위 방법이 모두 실패하면 시도해보세요.

  • java
  • kotlin
  • mysql
  • docker
  • spring-boot
  • kafka
  • redis
Wyatt 댓글 1 좋아요 1 조회수 109

스크립트에 대해 질문 있습니다.

해결됨

트래픽 급증을 견디는 서버 시스템 설계 - Coupon 발급 서비스

안녕하세요 강의 잘 듣고 있습니다! 혹시 강의에서는 스크립트를 많이 사용하시는데 테스트 코드로는 못하는건가요? 실무에서도 스크립트를 많이 사용하시나요?

  • java
  • kotlin
  • mysql
  • docker
  • spring-boot
  • kafka
  • redis
정인호 댓글 1 좋아요 1 조회수 79

같은 사용자가 연속된 중복 호출할 경우 어떻게 되는지 궁금합니다!

해결됨

트래픽 급증을 견디는 서버 시스템 설계 - Coupon 발급 서비스

안녕하세요 강의 잘 듣고있습니다 강의를 듣다가 궁금한게 생겨 질문을 드립니다! 같은 사용자가 따닥으로 중복 호출 했을 때 unique 제약 조건에 걸려 예외가 발생할텐데 redis에 있는 쿠폰 재고는 어떻게 되는지 궁금합니다!

  • java
  • kotlin
  • mysql
  • docker
  • spring-boot
  • kafka
  • redis
케시 댓글 1 좋아요 2 조회수 101

조건 검색 질문

해결됨

스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판

학습 관련 질문을 최대한 상세히 남겨주세요! 고민 과정도 같이 나열해주셔도 좋습니다. 먼저 유사한 질문이 있었는지 검색해보세요. 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요 쿠케님 강의 너무 잘 보고 있습니다. 해당 내용 수강중에 궁금한 점이 생겨 질문 드립니다. 혹시 제목이나 내용을 검색한다고 했을때는 redis에서 조건을 통해 조회를 하는것인지 다른 전략이 있는지 궁금합니다!

  • java
  • mysql
  • spring-boot
  • kafka
  • redis
azosi 댓글 1 좋아요 0 조회수 53

댓글 삭제 로직에서 동시성 문제 발생 가능성

미해결

스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판

안녕하세요 쿠케님! 현재 구현되어 있는 댓글 삭제 로직을 보면 1. 댓글 조회 2-1. 자식 댓글이 존재하면 deleted=true 로 변경 2-2. 자식 댓글이 존재하지 않으면 댓글을 물리 삭제하고, 부모 댓글을 재귀적으로 삭제 이렇게 구현되어 있는데요. 동시성 문제가 발생할 수 있겠다는 생각이 들었습니다! T1 삭제 트랜잭션 T2 답글 트랜잭션 ──────────────────────────────────────────── SELECT 부모 SELECT 자식 → 없음 SELECT 부모 → ACTIVE INSERT 답글 COMMIT DELETE 부모 COMMIT (제가 잘 분석한게 맞나 모르겠네요 ㅎㅎ) 물론 이렇게 꼬일 확률은 낮지만, 이런 케이스에 대해서는 select for update를 거는 것이 좋을지, 아니면 fk를 추가하여 정합성을 보장해줘야 할지, 쿠케님 의견을 묻고 싶습니다.

  • java
  • mysql
  • spring-boot
  • kafka
  • redis
bebe 댓글 1 좋아요 0 조회수 54

재고 감소와 쿠폰 발급은 왜 서로 다른 방식으로 동시성을 제어하나요?

해결됨

실습으로 배우는 선착순 이벤트 시스템

강사님 안녕하세요, 좋은 강의 여러번 반복해서 잘 듣고 있습니다. 재고 감소와 비교했을때 차이점이 궁금하여 문의드립니다. 안녕하세요 강사님 이전 재고 관리 강의와 차이에 대해 궁금합니다. 이전 질문을 참고하였으나 추가로 더 궁금한게 있어서 문의드립니다. 재고 감소와 쿠폰 발급의 차이점이 너무 헷갈려서 정리하고 있습니다. 두 경우 모두 한정된 수량을 여러 요청이 동시에 차지한다는 점에서는 비슷해 보입니다. 그렇다면 쿠폰도 이벤트 테이블에 잔여 수량을 100개나 300개로 설정하고, 재고처럼 수량을 차감한 뒤 사용자 쿠폰을 생성하는 방식으로 구현할 수 있지 않을까요? 강의에서는 쿠폰 발급의 정합성을 위해서 전체 로직에 락을 걸 필요가 없다고 하셨는데, 그러면 반대로 재고 감소 같은 경우도 마찬가지로 재고 감소의 정합성을 위해 전체로직에 락을 걸 필요 없이 다른 방법으로 하는게 더 나은 방법 아닌가요?? 비슷해 보이는 한정 수량 문제를 서로 다르게 푼 이유를 잘 모르겠습니다 ㅠㅠ

  • java
  • docker
  • spring-boot
  • kafka
  • redis
차니 댓글 2 좋아요 0 조회수 81

AWS 배포 성능테스트

해결됨

6주 완성! 백엔드 이력서 차별화 전략 4가지 - 똑같은 이력서 속에서 돋보이는 법

1. 현재 학습 진도 섹션 3 15강 수강 2. 어려움을 겪는 부분 아직 섹션3 15강밖에 수강하지 않았지만 예전에 배포했을때 설정 문제로 과금이 나간적이있어서 강의는 계속 들으면서 로컬에서 해보고 개인 프로젝트에 적용해보는것이 좋을까요? 아니면 둘 다 하는것이 좋을까요??

  • java
  • spring
  • mysql
  • redis
  • 이력서
개발자....? 댓글 2 좋아요 0 조회수 84

JWT토큰 발급 시, subject 값을 다양하게 넣어서 여러 개의 토큰을 만드는 이유

해결됨

은행 서버 프로젝트 실습을 통해 배우는 코틀린 마스터 클래스

안녕하세요, 강사님 🙂 덕분에 코프링을 빠르게 배우고 있어 감사드립니다! 영상 8:20 경, JWT 설명 중 withSubject() 의 값으로 email 만 넣는다던가, name 만 넣어서 구현한다고 말씀주셨습니다. 고민을 해봤지만 여러 개의 Subject 를 만드는 이유가 궁금해서 질문드립니다. 상황 예시와 함께 답변해주시면 감사드립니다!!

  • kotlin
  • mysql
  • mongodb
  • kafka
  • redis
종혁 댓글 2 좋아요 0 조회수 56

인기 게시판 목록(Sorted set)

해결됨

2026년! 백엔드 개발자를 위한 Redis 실전 가이드: 기초부터 실무 패턴까지

안녕하세요. 인기 게시판 목록 기능을 Redis의 Sorted Set을 활용해 좋아요 순으로 정렬하는 방식으로 구현하다 고민이 생겨 질문하게 되었습니다. 먼저 잦은 데이터 변경을 고려해서 Sorted Set의 member에는 게시판 ID만 저장하고, score에는 좋아요 수를 저장하도록 했습니다. 하지만 목록을 생성하기 위해서는 제목, 생성일 같은 부가 정보가 필요한데 이 데이터를 얻는 효율적인 방식에 대해 고민이 생겨 질문을 드리게 되었습니다. AI에게 도움을 받아 2가지 방법을 생각해보았는데 현실성이 있는지 판단 부탁 드립니다. Redis + RDB 조합 Redis ZSet에서 상위 10개의 ID 목록을 먼저 조회합니다. 해당 ID 목록을 가지고 RDB에 WHERE id IN (...) 쿼리를 날려 상세 데이터를 가져옵니다. 데이터베이스의 IN 쿼리는 순서를 보장하지 않기 때문에 애플리케이션에서 Redis가 준 ID 순서대로 리스트를 다시 재정렬하여 반환합니다. 제가 생각하기에는 인기 게시판 목록을 조회할 때마다 RDB의 ORDER BY 부하를 줄이려다 오히려 애플리케이션 단에서 정렬과 DB 조회가 일어나다 보니 얻는 것보다는 잃는 게 많은 구조가 아닌지 고민이 됩니다. Redis Sorted Set + Hash 조합 정렬 기준(ID, 좋아요 수)은 기존대로 Sorted Set에 관리합니다. 게시판의 상세 부가 정보는 Redis의 Hash 자료구조에 따로 캐싱합니다. 목록 조회 시 Sorted Set에서 ID를 뽑은 후 DB를 거치지 않고 Hash에서 상세 데이터를 조회합니다. 이 방식은 DB에 부하를 줄일 수 있지만 데이터가 자주 변하게 된다면 레디스에서 데이터를 자주 변경해야 되어 메모리에 큰 부하를 줄 수 있을 것 같아 고민이 되는 것 같습니다.

  • 아키텍처
  • redis
손명진 댓글 2 좋아요 0 조회수 83

테스트 코드 작성 시 DTO 새로 작성하는 이유가 궁금합니다.

미해결

스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판

테스트 작성 시, 소스파일에(src) 있는 DTO를 그대로 사용하지 않고, 복사해와서 새로 정의를 하시던데 그 이유가 뭔지 궁금합니다!

  • java
  • mysql
  • spring-boot
  • kafka
  • redis
nick 댓글 1 좋아요 0 조회수 77

운영환경에 적용해볼 수 없을때...고민입니다 ㅠㅠ

미해결

6주 완성! 백엔드 이력서 차별화 전략 4가지 - 똑같은 이력서 속에서 돋보이는 법

안녕하세요 딩코님! 좋은 강의 잘 들었습니다. 강의를 듣다가 조언을 구하고 싶은게 있어서 질문 남깁니다. 저는 현재 주니어 개발자로 일으나 부하테스트 같은것을 회사에서 해볼 수 없는 상황이라(운영 인력이 아님...또한 작은 시스템이라 모니터링도 없고 구축할수도 없는 환경)강의에서 다뤄주신 내용을 실무에 적용해보기가 어려운데요... 그래서 제가 생각해본게 테스트 코드로 만들어서 돌려보면 어떨까 생각했거든요. 예를들어 아래와 같은 메소드를 만들어 놓고, 캐시 전/후를 비교하는 거죠... long start = System.currentTimeMillis(); service.findSomething(id); long elapsed = System.currentTimeMillis() - start; System.out.println(elapsed); 그런데 한가지 고민되는 포인트가, 테스트 코드로 만들어서 돌렸을때 성능 개선을 수치적으로 적기가 좀 애매할것 같다고 생각이 들어서요. 아무래도 JVM이라던지, warmup이라던지 통제할 수 없는 변수가 있다보니까요. 그래서 질문은 아래와 같습니다. 특정 메소드에 로컬 캐시를 적용하기 전/후 테스트 코드에서 성능을 비교 했을때, 1초->1ms로 성능 개선했다. <- 이런 문장이 임팩트가 있을까요? 아님 테스트 코드에서 한건 좀 신뢰성이 떨어질까요? ㅠㅠ 테스트 코드에서 돌려봤을때 누가봐도 신뢰성있게 만들려면 어떻게(?), 무슨 툴(?)을 써서 하는게 좋을까요? ㅠㅠ 저 같이 운영 환경에 적용해볼수 없는 개발자에게 조언을 주시면 또 감사하겠습니다!

  • java
  • spring
  • mysql
  • redis
  • 이력서
HJ 댓글 2 좋아요 0 조회수 115

인기 태그

인프런 TOP Writers

주간 인기글