inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

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

11강 [실습] Docker로 MySQL1 분만에 실행하기

해결됨

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

docker실행하여 mySql 컨테이너 생성까지 성공했습니다. 하지만 마지막 부분의 어플리케이션 실행 부분에서 에러가 나오고 있습니다. org.hibernate.exception.AuthException: Unable to obtain isolated JDBC connection [Access denied for user 'coupon'@'localhost' (using password: YES)] [n/a] Caused by: java.sql.SQLException: Access denied for user 'coupon'@'localhost' (using password: YES) org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/hibernate/autoconfigure/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] due to: Unable to determine Dialect without JDBC metadata (please set 'jakarta.persistence.jdbc.url' for common cases or 'hibernate.dialect' when a custom Dialect implementation must be provided) Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] due to: Unable to determine Dialect without JDBC metadata (please set 'jakarta.persistence.jdbc.url' for common cases or 'hibernate.dialect' when a custom Dialect implementation must be provided) Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'jakarta.persistence.jdbc.url' for common cases or 'hibernate.dialect' when a custom Dialect implementation must be provided) 어떻게 대응해야 할까요?

  • java
  • kotlin
  • mysql
  • docker
  • spring-boot
  • kafka
  • redis
Jang Jaehoon 댓글 2 좋아요 0 조회수 88

11강 [실습] Docker로 MySQL1 분만에 실행하기

해결됨

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

11강 [실습] Docker로 MySQL1 분만에 실행하기 에서 docker-compose up -d 커맨드가 실행이 안되네요. Docker Desktop을 로컬에 설치했는데, IntelliJ랑 연동해야 하는 건가요?

  • java
  • kotlin
  • mysql
  • docker
  • spring-boot
  • kafka
  • redis
Jang Jaehoon 댓글 2 좋아요 0 조회수 64

선생님 샤딩에 대한 강의도 좀 해주세요

해결됨

가장 쉽고 깊게 알려주는 MongoDB 완벽 가이드 [ By. 비전공자 & Kakao 개발자 ]

샤딩에 대한 언급이 초반에 대용량 데이터를 여러 샤드에 저장할거고 언젠간 알려줄게 하셨는데 강의에는 해당 내용이 없네요 ㅠㅠ 이건 보강으로 해주실 수 있으실까요?

  • java
  • sql
  • mysql
  • mongodb
  • database
0S 댓글 1 좋아요 0 조회수 57

몽고DB CAP 이론 관련

해결됨

가장 쉽고 깊게 알려주는 MongoDB 완벽 가이드 [ By. 비전공자 & Kakao 개발자 ]

선생님께서 몽고DB는 AP라고 주장하셨는데... 페일오버시에 대장(프리머리)가 죽으면 부하(세컨더리)들이 대장의 직전 Oplog를 주어서 처리하고, 애초에 리드 프리퍼런스가 Primary가 기본이라고 하셨으니 쓰기 가용성을 포기하고 일관성을 찾는 모델 아닌가요? 또 검색하니까 몽고DB는 CP라고 하던데요... 또 이게 사람 생각마다 다를수 있는건가요?

  • java
  • sql
  • mysql
  • mongodb
  • database
0S 댓글 2 좋아요 0 조회수 61

아니 이거 갑자기 데이터베이스가 사라졌어요

미해결

김영한의 실전 데이터베이스 입문 - 모든 IT인을 위한 SQL 첫걸음(SQL부터 차근차근)

[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] SQL 치다가 갑자기 오류가 나서 확인해보니 my_shop 데이터베이스가 사라지고 아래처럼 RECOVER_YOUR_DATA 무슨 복구프로그램 같은 느낌으로 되어있는데 이건 어떻게 해야하는거죠?

  • sql
  • mysql
  • dbms/rdbms
  • SQLD
조성경 댓글 1 좋아요 0 조회수 72

기타 영역 중 언두로그

미해결

김영한의 실전 데이터베이스 - 성능 최적화, 실행 계획과 인덱스 완전 정복

안녕하세요 RealMySQL책을 참고해서 보면서 강의를 듣고 있습니다 책에는 InnoDB가 언두로그를 메모리에서 관리한다고 되어있는데 강의와 책 중 어떤 자료가 맞는 것인지 궁금하여 질문드립니다

  • sql
  • mysql
  • dbms/rdbms
  • sql-tuning
  • SQLD
김상형 댓글 1 좋아요 0 조회수 90

코드 깃허브는 없을까요?

해결됨

Spring Boot, AWS로 백엔드 서비스 한 사이클 완성하기

코드들 매번 쓰기 힘들어서 혹시 github링크가 따로 있는 것일까요??

  • aws
  • mysql
  • docker
  • spring-boot
  • jpa
hahalove77 댓글 2 좋아요 1 조회수 69

실전튜닝 4 질문 - group by 순서와 index 순서

미해결

김영한의 실전 데이터베이스 - 성능 최적화, 실행 계획과 인덱스 완전 정복

SELECT m.member_id, m.member_name, m.grade, COUNT(o.order_id) AS order_count, SUM(o.total_price) AS total_spent FROM member m JOIN orders o ON m.member_id = o.member_id WHERE m.grade = 'VIP' GROUP BY m.member_id, m.member_name, m.grade ORDER BY total_spent DESC LIMIT 20; 안녕하세요! 해당 쿼리에서는 group by 순서가 member_id, member_name, grade 순으로 되어있습니다. 강의에서는 group by 는 그룹핑을 할때 (member_id, member_name, grade) 을 기준으로 그룹핑 하여 순서가 상관없지만 인덱스 순서를 GROUP BY 순서에 맞게 인덱스를 설계 해야한다고 하셨습니다. grade 는 where 절에서 vip 상수로 필터링 하므로 인덱스에서 가장 왼쪽(앞)에 와야하지만 왜 member_id, member_name 순서에 맞게 인덱스를 줘야하는지 잘 모르겠습니다. 실제로 (grade, member_name, member_id) 순서로 member 테이블에 인덱스를 주고 EXPLAIN ANALZYZE 를 해보니 Aggregate using temporary table (actual time=373..373 rows=59999 loops=1) 가 나오는것을 확인했습니다. 임시테이블을 만들지 말지의 기준은 GROUP BY 로 그룹핑 하는 대상들이 연속적으로 올 경우는 굳이 임시테이블을 만들 필요가 없다는것으로 이해를 했습니다.(순서대로 오니까 미리 저장할 필요가 없으므로) 하지만 인덱스를 (grade, member_name, member_id) 순서로 줄 경우도 결국 인덱스 Grouping 순서에 맞게 오니까 임시테이블을 만들 필요가 없으니까 using temporary table 역시 발생하지 않아야 하는거 아닌가요? 그리고 설령 (grade, member_name, member_id) 로 주지 않고 (grade, member_name) 로 member테이블에 인덱스를 걸더라도 되는거 아닌가요? 어차피 세컨더리 인덱스 리프노드에는 member_id (pk) 가 선행컬럼을 기준으로 정렬되어 존재하니깐용 감사합니다!

  • sql
  • mysql
  • dbms/rdbms
  • sql-tuning
  • SQLD
gmldk3214 댓글 1 좋아요 0 조회수 68

@Modifying에 관하여

해결됨

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

안녕하세요 이번 강의에서 @Modifying 이라는 어노테이션을 사용하고 있는데 이 @Modifying을 사용하는 상황이 발생하면 영속성 컨텍스트에 있는 데이터와 차이가 발생하게 되는 것을 알게 되었습니다. 이를 해결하기 위해 clearAutomatically = true, flushAutomatically = true 이런 옵션들이 있는 것으로 알고있는데, 현업에서는 이러한 옵션들을 어떻게 사용하는지 궁금합니다. Modifying을 쓰면 영속성 컨텍스트와 차이가 발생한다는 것을 인지하기 때문에 저런 옵션들을 따로 설정을 안하는지, 아니면 저런 옵션들을 사용하는지 궁금합니다!

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

DB 쿼리 최적화 시 DB 처리와 애플리케이션 처리의 기준이 궁금합니다

미해결

김영한의 실전 데이터베이스 - 성능 최적화, 실행 계획과 인덱스 완전 정복

DB 쿼리를 설계하면서 항상 궁금했던 점이 있습니다. 쿼리가 점점 복잡해지다 보면 Sort , GROUP BY 등의 연산을 DB에서 처리하는 것보다, 데이터를 애플리케이션으로 가져온 후 애플리케이션에서 처리하는 것이 더 효율적이지 않을까 하는 생각이 들 때가 있습니다. 그렇다면 일반적으로 DB 쿼리를 최적화할 때는 애플리케이션으로 데이터를 가져와 처리하기보다는, 적절한 Index 설계를 통해 가능한 한 DB에서 연산을 처리하는 것이 맞는 방향일까요? 아니면 상황에 따라서는 필요한 데이터를 DB에서 조회한 후, 일부 연산을 애플리케이션에서 처리하는 것도 하나의 최적화 방법이 될 수 있을까요? 제가 생각하는 방향 자체가 잘못된 것인지, 아니면 실제로 상황에 따라 고려할 수 있는 방법인지 궁금해서 질문드립니다.

  • sql
  • mysql
  • dbms/rdbms
  • sql-tuning
  • SQLD
magicsof 댓글 1 좋아요 0 조회수 64

실무에서의 인덱스 관리 방법이 궁금합니다

미해결

김영한의 실전 데이터베이스 - 성능 최적화, 실행 계획과 인덱스 완전 정복

안녕하세요 영한님! 강의에서 말씀해 주신 것처럼, 인덱스를 생성한다고 해서 항상 옵티마이저가 해당 인덱스를 사용하는 것은 아니라는 점은 이해했습니다. 그렇다면 실무에서는 특정 인덱스를 어떤 쿼리나 사용 패턴을 고려해서 만들었는지, 그리고 어떤 의도로 설계했는지를 별도로 기록하거나 관리하는 방법이 있을까요? 예를 들어 시간이 지나 다른 개발자가 인덱스를 보더라도, “이 인덱스는 특정 조회 쿼리의 성능을 개선하기 위해 만들었다”와 같은 설계 의도를 파악할 수 있도록 관리하는지가 궁금합니다. 설계 1편에서 소개해 주신 용어 사전처럼 별도의 문서나 규칙을 두고 관리하는 방법이 있는지, 혹은 실무에서 일반적으로 사용하는 다른 방법이 있는지도 궁금합니다!

  • sql
  • mysql
  • dbms/rdbms
  • sql-tuning
  • SQLD
최재훈 댓글 1 좋아요 0 조회수 76

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

해결됨

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

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

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

문제와 풀이2 1번문제

미해결

김영한의 실전 데이터베이스 - 기본편

[질문 내용] 여기에 질문 내용을 남겨주세요. 저는 1번문제에서 FK -> PK 로풀었습니다 영한님은 PK -> FK 로 푸셨던것에 질문입니다. FK -> PK는 항상 다대일으로 e.managed_id가 가리키는 PK 행은 0~1개라서 조인해도 왼쪽 테이블 행이 늘지 않아서 왼쪽 테이블이 행을 정하고, 조인은 컬럼만 붙인다고 생각했습니다. PK -> FK는 일대로써 한 행이 여러 행으로 늘어나는데, 그럼 on 조건까지 다 읽어야 이해되지 않을까 해서 여쭤봅니다. select e.employee_id, e.name, e.managed_id, m.name as manager_name from employees e join employees m on e.managed_id = m.employee_id where m.name = '최과장';

  • sql
  • mysql
  • dbms/rdbms
  • SQLD
무깨 댓글 1 좋아요 0 조회수 58

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

해결됨

트래픽 급증을 견디는 서버 시스템 설계 - 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 조회수 116

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 조회수 104

sakila 실전 17번 문제

미해결

중고급 SQL과 실전 데이터 분석 101 문제 풀이

안녕하세요, sakila실전 17번에서 궁금증이 생겼는데요, store 테이블에 manager_staff_id가 있고, staff에 저는 staff_id만 존재해가지고 manager_staff_id가 staff_id안에 있을거라고 판단하고 join을 staff와 store로 하였습니다. 그래서 간단히 풀기는 하였는데 현업에서도 혹시 이와 같은 경우가 발생할 경우, 분석가가 판단하고서 join을 진행하는게 맞는건가요? 아니면 유관 부서에 질문해서 두 테이블에 있는 내용이 같은지 다른지를 묻고 진행하는게 맞는건가요?

  • sql
  • mysql
  • dbms/rdbms
Wonjun Lee 댓글 1 좋아요 0 조회수 51

복합인덱스 설계 질문

미해결

김영한의 실전 데이터베이스 - 성능 최적화, 실행 계획과 인덱스 완전 정복

안녕하세요 영한님, 영한님의 강의로 열심히 학습중인 학생입니다! 실전 진단 - 해결 방안2에서 복합인덱스 관련해 궁금증이 있습니다. 영한님의 강의에서는 (category_id, product_status, created_at)을 복합인덱스로 설정하셨는데, (category_id, created_at)을 복합인덱스로 설정하는 것에 대해서는 어떻게 생각하시는지 궁금합니다. product_status = 'ACTIVE'의 비율이 전체 테이블에 비교했을 때 전체의 85%였고, 이 price 조건을 비교하기 위해 클러스터드 인덱스가 접근해 행 전체를 읽은 후 실행엔진에서 걸러야하는데, product_stauts = 'ACTIVE' 비율이 85%에 해당되기 때문에 높은 확률로 통과하다 보니 인덱스 효용이 떨어질 것 같다는 생각이 들었습니다. 그래서 해당 쿼리를 생각했을 때 product_status도 복합인덱스에 추가할만한 가치가 있을까? 라는 질문을 던졌을 때 (영한님이 말씀해주신 것 처럼, 인덱스도 결국 비용이니깐) 크게 와닿지 못 했는데, 이와 관련해서 영한님의 의견이 궁금합니다! (두 복합 인덱스의 실행 계획) -- (category_id, created_at) -> Limit: 20 row(s) (cost=75331 rows=20)(actual time=0.719..11.5 rows=20 loops=1) -> Filter: ((product.price between 10000 and 50000) and (product.product_status = 'ACTIVE')) (cost=75331 rows=4595) (actual time=0.718..11.5 rows=20 loops=1) -> Index lookup on product using idx_category_created_at (category_id=11) (cost=75331 rows=413612) (actual time=0.698..11.4 rows=48 loops=1) -- (category_id, product_status, created_at) -> Limit: 20 row(s) (cost=78697 rows=20)(actual time=0.6..9.07 rows=20 loops=1) -> Filter: (product.price between 10000 and 50000) (cost=78697 rows=38255) (actual time=0.593..9.06 rows=20 loops=1) -> Index lookup on product using idx_category_status_created_at (category_id=11, product_status='ACTIVE') (cost=78697 rows=344330) (actual time=0.581..9.03 rows=40 loops=1)

  • mysql
  • dbms/rdbms
  • sql-tuning
이성우 댓글 1 좋아요 0 조회수 128

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 조회수 59

마스터패스...

미해결

김영한의 실전 데이터베이스 입문 - 모든 IT인을 위한 SQL 첫걸음(SQL부터 차근차근)

좀 늦게 알게되었는데..김영한 강사님의 마스터패스 기한을 좀 연장해 주실수 있나요?

  • sql
  • mysql
  • dbms/rdbms
  • SQLD
Kyeong Won Kim 댓글 1 좋아요 0 조회수 105

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 좋아요 2 조회수 127

인기 태그

인프런 TOP Writers

주간 인기글