묻고 답해요
161만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판
Path Enumeration 방식 적용 후 redis 적용 방법 관련 질문
안녕하세요 강사님.강의에서 Path Enumeration 방식을 활용해 데이터베이스 조회 성능을 최적화하는 방법을 매우 유익하게 배웠습니다.실제 대규모 서비스 환경에서 이 조회 결과를 Redis로 캐싱하려고 할 때, 캐시를 저장하는 자료구조 선택에 대해 강사님의 의견을 듣고 싶습니다.현재는 Path를 기반으로 DB에서 계층 구조를 유지하며 정렬된 댓글 목록을 조회하고 있습니다. 이 결과를 Redis에 저장하는 방법으로 아래 두 가지를 고려하고 있습니다.1. List 구조 (LRANGE)장점: DB에서 조회한 정렬 순서를 그대로 Redis에 저장할 수 있어, 조회 시 한 번에 가져올 수 있습니다.고민: CUD(특히 중간 삽입) 발생 시 전체 List를 삭제하고 DB에서 다시 조회해 재저장해야 하므로 비효율적일 수 있습니다.2. Sorted Set 구조 (ZADD)장점: 각 댓글을 멤버로 저장하고 Path 값이나 정렬 기준을 score로 부여하면, CUD 발생 시 해당 멤버만 ADD/REMOVE로 처리할 수 있어 갱신이 효율적입니다.고민: Path 기반의 정렬 값을 Redis의 score로 매핑하는 과정이 다소 복잡합니다.이처럼 캐싱 로직의 구현 복잡도(Sorted Set)와 갱신 효율성(List의 TTL 전략) 사이의 균형을 고려할 때,강사님께서는 무한 depth 댓글 구조를 캐싱할 때 어떤 Redis 자료구조가 더 적합하다고 생각하시는지 궁금합니다.감사합니다.
-
미해결김영한의 실전 데이터베이스 - 설계 1편, 현대적 데이터 모델링 완전 정복
실전 2편에서는 어떤 것들을 준비 중인지 궁금합니다
안녕하세요 강사님 강의 너무 잘 듣고 있습니다! 아직 많은 DB설계를 해보진 않아서 알려주시는 개념들이 차곡차곡 잘 정립되는 것 같아 도움이 많이 되고 있습니다.실제 조금 더 복잡한 프로젝트들에서의 DB 설계, 성능이나 쿼리들도 궁금한데 혹시 앞으로 이에 관한 내용들도 강의하실 예정에 있으신지 궁금합니다. 또 실전 2편이 기다려지는데 어떤 것들을 준비 중에 있는지 궁금합니다!
-
미해결김영한의 실전 데이터베이스 - 기본편
이해하기 쉬운 SQL 코드 작성 배울 수 있는 자료 문의
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문 전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]> ALL()이나 > ANY() 대신 MAX, MIN 집계 함수를 사용하는 방식이 더 이해가 잘 된다고 말씀해주셨는데요, 저도 그게 직관적으로 느껴졌습니다. 😊혹시 이런 best practice를 배울 수 있는 자료가 있을까요?
-
미해결김영한의 실전 데이터베이스 - 설계 1편, 현대적 데이터 모델링 완전 정복
PK 타입에 관한 문의
강의를 너무 잘 듣고 있습니다.PK 타입과 관련되어 문득 궁금한 점이 생겨 문의 드립니다.혹시 대규모 시스템에서 UUID를 PK를 사용할때 실무에서 고민하셨던 팁이 있으신지 궁금합니다.보안성이나 마이그레이션 가능성이 있는 테이블들에 부분적으로 UUID를 적용해 보았으나, 대규모 환경에서는 어떤 설계 팁이 있을지 궁금하네요.감사합니다^^ * 이건 질문은 아니나 사소한 오타 제보입니다.수업 자료중 1-A. 윈도우 - MySQL 설치 안내 파일의4P 맨 아래'mysql-installer-community-8.0.x.dmg`로 되어 있습니다. 참고하시면 좋을 것 같습니다.
-
해결됨스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판
락 오래 점유 시 장애 발생 가능성 질문
9:55 쯤에락을 오래 점유하면 발생하는 문제는 치명적이고 다양하다.리소스 고갈 등으로 인해 장애가 발생할 수 있는 것이다.지식공유자님께서는 오래 점유하는 상황에서 겪으셨던 문제가 있었나요?좋아요라는 게, 네트워크 문제가 아닌 이상 빠르게 끝날 처리인데, 혹시 좋아요 말고도 (다른) 쓰기 상태에서 락을 오래 점유하고 있을 때 어떤 문제를 겪으셨는지, 어떻게 해결하셨는지 러프하게라도 말씀해 주시면 감사드리겠습니다!! 감이 잘 안 와서 궁금해서 질문드립니다.
-
해결됨Spring Boot, AWS로 백엔드 서비스 한 사이클 완성하기
댓글 생성, 삭제 시 게시글의 댓글 수 증감 로직 질문
안녕하세요. 코드에서 궁금한 점 질문드립니다.댓글 생성, 삭제 시에 게시글의 댓글 수 증감 로직이 아래 예시 코드처럼 CommentService에서 이루어지고 있는데 과한 책임이 아닌가 싶어서요. 실무에서는 어떻게 나누게 되는지 궁금합니다. public CommentResponse createComment(Long postId, CommentRequest request) { Post post = postRepository.findById(postId) .orElseThrow(() -> new IllegalArgumentException("게시글을 찾을 수 없습니다.")); Comment comment = Comment.builder() .content(request.content()) .postId(postId) .createdAt(LocalDateTime.now()) .updatedAt(LocalDateTime.now()) .build(); Comment newComment = commentRepository.save(comment); post.increaseCommentCount(); postRepository.save(post); return CommentResponse.from(newComment); }
-
미해결김영한의 실전 데이터베이스 - 기본편
조건절의 위치 관련 질문사항
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]조인을 이용시 on절 뒤에 and를 이용해서 추가 조건절을 이용하는 방식과 where 절에서 조건절을 넣는 방식중 유의미한 성능상에 차이가 있는지 궁금합니다. 추가적으로 어떤 방식이 좀더 정돈된(?) 방식인지도 궁금합니다.
-
해결됨카카오 개발자(면접관)와 함께하는 워크플로우 기반의 대용량 트래픽 처리 기법
전체적인 플로우에 대해 질문드립니다.
이론 부분을 제가 이해를 잘 못해서 질문드리는 것 같은데요,Kafka와 Debezium 까지의 전반적인 그림은 그려지는데temporal(acitivity나 workFlow클래스 등) 까지 합쳐졌을 때의 플로우가 잘 이해가 가지 않는데구상하신 아키텍처를 모두 합친 플로우가 궁금합니다!
-
해결됨카카오 개발자(면접관)와 함께하는 워크플로우 기반의 대용량 트래픽 처리 기법
Temporal에 대해서 더 알고 싶어요.
교육을 듣다보니 Temporal에 대해서 더 알고 싶은데Temporal 공식 사이트는 너무 방대하고, 사용법 위주로 설명되어 있어서, 혹시 내부 아키텍처 같은 내용을 참고할 수 있는 자료가 있을까요?
-
미해결김영한의 실전 데이터베이스 - 기본편
강의에서 나온 IN 최적화 관련 질문
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문 전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]안녕하세요. 이번 복합 인덱스3 강의에서 인덱스 활용 팁으로 범위 조건을 IN절로 바꿔 최적화하는 부분을 설명해 주셨습니다. IN이 마치 OR처럼 변화될 수 있다고 설명해 주셨고 실제 쿼리 실행 시에 이를 확인할 수 있었습니다.(강의 시간 18분 경) 그런데 이후 비유해주신 쿼리에서는 UNION ALL을 사용하셨습니다. 저는 OR과 UNION ALL이 동일한 기능을 수행한다 생각했지만 실제로 눈으로 확인하고 싶어서 다음 세가지 쿼리를 모두 EXPLAIN, ANALYZE 해보았습니다. 1) 기존 IN 쿼리EXPLAIN ANALYZE SELECT * FROM items WHERE category IN ('패션', '헬스/뷰티') AND price = 20000;2) OR로 풀어낸 쿼리EXPLAIN ANALYZE SELECT * FROM items WHERE (category = '패션' AND price = 20000) OR (category = '헬스/뷰티' AND price = 20000);3) UNION ALL 로 풀어낸 쿼리EXPLAIN ANALYZE SELECT * FROM items WHERE category = '패션' AND price = 20000 UNION ALL SELECT * FROM items WHERE category = '헬스/뷰티' AND price = 20000; 그 결과 2)의 처리 cost는 1.41, 3)의 처리 cost는 0.7로 나타났으며, 1)은 2)와 동일하게 실행되었습니다. 여기서 다음 의문이 나타났습니다. 1) IN 최적화는 OR 또는 UNION ALL 방식으로 옵티마이저가 상황에 따라 선택하나요? 혹은 OR 방식으로만 처리하나요?2) OR, UNION ALL을 모두 사용할 수 있을 때, 언제 각각을 사용하는 것이 더 좋을까요? 그리고 위 경우에서는 왜 UNION ALL이 더 cost가 작았을까요?3) 만약 새로운 카테고리가 추가된다면 모든 IN 쿼리에 해당 카테고리를 추가할 수도 있을 것 같습니다. 그래서 애플리케이션 계층(JPA 등으로)에서 category >= '패션'인 SELECT DISTINCT쿼리 1번, 해당 값을 통해 IN에 넣어주는 쿼리 1번, 총 2번 쿼리를 실행하는 방식으로 바꾼다면 기존 쿼리를 수정하지 않아도 괜찮을 것 같은데 실무면에서 어떻게 생각하시는지 궁금합니다! 긴 질문이었습니다. 감사합니다!
-
미해결김영한의 실전 데이터베이스 - 설계 1편, 현대적 데이터 모델링 완전 정복
실무에서 느린쿼리나 벡엔드 성능 테스트하는 방법이 궁금합니다.
75강 인덱스 설계 - 실습 관련강의 중에 느린 쿼리를 로그 분석을 하거나 성능 테스트를 통해서 실제 쿼리 패턴과 성능을 측정해서 특정 컬럼에 인덱스를 적용해야 한다고 하셨는데요.로그를 하나씩 확인하면서 각 쿼리별로 비교하기가 조금 불편하고 어려울 것 같습니다. 또한 몇가지 쿼리 케이스만으로 성능을 일반화하기도 쉽지 않을 것 같구요.실무에서 느린쿼리나 다양한 벡엔드 성능 테스트를 수행하는 별도의 모니터링 프로그램이나 방법론이 존재하는지 궁금합니다.또한 저희 실습에서 사용한 MySQL에서는 어떤 식으로 테스트를 수행하면 좋을지 알려주세요.
-
해결됨[백문이불여일타] 데이터 분석을 위한 기초 SQL
OR 조건 간소화
안녕하세요, 강의를 듣고 있는 인프런 학습자입니다!중복이 없는 시티 필드를 출력하는 DISTINCT 예제 중 select city From station where city like 'a%'or city like 'e%'or city like 'o%'or city like 'i%'or city like 'u%';이라는 구문이 있는데 or 조건은 항상 각각 조건을 명시해줘야하는걸까요?정규식을 제외하고 따로 간소화가 불가할지 궁금해서 질문 드립니다.
-
미해결김영한의 실전 데이터베이스 - 기본편
View와 프로시저 차이는 무엇인가요?
[질문 내용]View와 프로시저는 비슷한 개념인 것 같은데 차이점이 무엇인가요?
-
미해결김영한의 실전 데이터베이스 - 설계 1편, 현대적 데이터 모델링 완전 정복
쇼핑몰 주문 테이블 관련 문의
교육용이라 아직 요구사항이 명확히 없는 상태에서 테이블구조가 나오는 것 같은데 만약 하나의 주문에 여러 상품이 들어올 수 있고 각각의 상품을 취소할 수 있게 되야한다고 한다면 어떻게 변경하게 될까요?
-
해결됨스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판
sharding의 기준, shard key 사용에 대해
대부분 하나의 DB만을 사용하다보니 shard key가 고려되지 않은 테이블 설계를 보고 많이 사용했는데 처음부터 shard key는 고려하면서 설계를 하는것이 좋을까요?저같은 경우처럼 shard key가 고려되지 않은 테이블에서 샤딩을 하기위해서 shard key를 추가하는 작업은 어느정도의 난이도가 있을까요?강사님이 생각하시는 데이터베이스 샤딩을 위한 기준같은게 있으신지 궁금합니다.
-
미해결김영한의 실전 데이터베이스 - 설계 1편, 현대적 데이터 모델링 완전 정복
자격증 관련 문의
안녕하세요 🙂유익한 강의 감사드립니다. 다름이 아니오라 설계 1, 2편 까지만 들어도 SQLD, SQLP 자격증 취득이 가능할 수준일지 여쭙고 싶습니다. 감사합니다.
-
미해결김영한의 실전 데이터베이스 - 기본편
실무에서 sql 쿼리의 성능 개선
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용] 실무에서 sql 쿼리의 성능 개선시, '유의미한 개선' 이라 판단하는 기준으로 어떤 지표로 판단할까요?단순 실행 시간 뿐만아니라 어떤 지표를 보는 편인가요 ? 얼만큼의 성능 개선이 유의미한 개선이 될지 궁금합니다.
-
해결됨React & FastAPI로 만드는 투표 커뮤니티 플랫폼: 결제 시스템으로 수익화까지!
verify_token 함수의 네이밍에 대한 질문입니다
안녕하세요!JWT 구현 중 verify_token 함수의 네이밍이 궁금합니다. app/core/jwt_handler.pydef verify_token(token: str) -> int: payload = decode_token(token) return payload.get("uid") verify라는 이름은 보통 boolean을 반환할 것 같은데, 실제로는 uid(int)를 반환하고 있어서 조금 헷갈립니다. get_uid_from_token이나 extract_user_id 같은 이름이 더 명확하지 않을까요? 감사합니다!
-
미해결김영한의 실전 데이터베이스 - 설계 1편, 현대적 데이터 모델링 완전 정복
DDL 구문에서의 COMMENT 활용 방법 문의드려요.
안녕하세요. 테이블 정의서를 열어서 보다 자세한 사항을 확인하기 전에접속된 세션에서 MySQL에 생성된 DDL 구문을 툴에서 추출하여 먼저 구조를 파악하고자COMMENT를 활용하여 "컬럼 한글명(논리명)" 기입하여 사용하려고 하는데비고 같이 진짜 설명을 써놓는 사례도 있는 것 같아서 혹시, 실무에서 COMMENT를 어떻게 활용하시는지 궁금합니다. Ex) -- 실습용 쇼핑몰 테이블 정의서 member 테이블의 login_id에 -- comment "컬럼 한글명(논리명)" 적용 예시 (하고 싶은 방향)login_id VARCHAR(50) NOT NULL COMMENT '로그인 ID' -- comment "비고 같이 길게 설명" 예시login_id VARCHAR(50) NOT NULL COMMENT '로그인 시에만 사용하는 별도의 아이디로, 이메일 및 블로그 등을 통해 외부로 노출되지 않는 보안설정입니다. '
-
미해결김영한의 실전 데이터베이스 - 설계 1편, 현대적 데이터 모델링 완전 정복
레거시 프로젝트를 현대적 PK 설계 방식으로 변환하는 과정이 궁금합니다.
현대적 설계에서는 대리키 PK와 자연키 UNIQUE 제약조건으로 데이터베이스 설계하는 것이 합리적이고 안정적이라고 하셨는데요아직 대부분 레거시 프로젝트는 자연키를 PK로 사용하거나, 일부 테이블은 대리키로 PK를 사용하지만 여전히 많은 테이블들은 해당 일부테이블의 PK를 FK를 사용하여 복합 PK로 생성하여 사용하는 경우가 많습니다.이런 레거시 프로젝트들의 복합 PK를 대리키 PK로 변환한다고 하면 전체적인 데이터베이스 구조를 재 설계해야 하는것이 맞겠지만 만약 기존 운영중인 테이블 구조를 유지하면서 PK를 변환하게 된다면, 기존 운영중인 테이블에 대리키 PK를 생성 후 기존 사용중이던 복합 PK에 UNIQUE 설정을 추가해주는 방식으로 변환하면 큰 문제가없을까요? 아니면 비즈니스 상황에따라 추가 제약조건을 추가해야 할 것들이 있을까요?