묻고 답해요
167만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결김영한의 실전 데이터베이스 - 설계 2편, 실무에서 반드시 마주치는 9가지 설계 패턴
TTL 캐싱에 대한 질문
안녕하세요! 강의를 듣다보니 TTL 캐싱을 사용할 때에도 오류가능성이 존재하지 않나 싶어 질문 남깁니다. TTL을 1분이라 가정했을 때 TTL이 지나기 전에 DB의 값이 바뀌고, 그 이후 TTL이 지나기 전에 캐싱된 값을 사용하게 된다면 DB에 있는 값과 캐싱되어있는 값에는 차이가 존재하지 않나요? 이에 대해선 어떻게 구현되어있는지 궁금합니다
-
미해결김영한의 실전 데이터베이스 - 기본편
강의 2:53 union을썼는데도 션이 중복
[질문 내용]강의 UNION 정렬 2:53초부근에UNION을 사용해서 결과를 불러오는데 션이 중복으로 표출됩니다. UNION은 중복을 제거하지 않나요?created_at 에 데이터가 다르기때문에 모두 표출된건지 궁금합니다!
-
미해결[2026] 비전공자도 한 번에 합격하는 SQLD 올인원
Live SQL 스크립트 설치건
먼저 유사한 질문이 있었는지 검색해보세요.서로 예의를 지키며 존중하는 문화를 만들어가요.잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.알려주신 스크립트 'EMP and DEPT' 스크립트가 보이지 않는데, 어떤 스크립트를 설치하면 될까요?
-
미해결실습으로 손에 잡히는 SQLD(2과목)
Intersect로 봄학기에 등록된 수업 검색 영상에서 궁금한 점이 있습니다.
1분 50초에 SELECTb.course_id, b.titleFROMv_intersecta, coursebWHEREa.course_id = b.course_id코드가 이렇게 짜여져있는데 course 테이블에 title은 없고 course_name으로 유추되는데 맞을까요?
-
미해결김영한의 실전 데이터베이스 - 설계 2편, 실무에서 반드시 마주치는 9가지 설계 패턴
공통 코드 사용시 컬럼 타입 설정
안녕하세요.공통 코드를 가져와 사용하는 테이블 스키마를 정의할 때 궁금한 점이 있습니다.영상 11분 05초를 보면 주문 테이블과 결제 테이블을 정의합니다.이때 , order_status, payment_method, payment_status와 같은 컬럼을 varchar로 정의하셨습니다.type-safe하게 정의한다면, 해당 컬럼들을 enum으로 정의하거나 공통 코드 상세 테이블과 relation을 설정해서 외래키를 사용할 거 같은데,이와 같은 방식은 유지보수를 더 어렵게 만드는 구조인걸까요?type-safe하게 만들고 싶다면 애플리케이션 레벨(서버측 코드)에서 정의해주는게 좋은 방법인걸까요?----------------------참고로 저는 nodejs 기반의 백엔드 개발자이며,김영한님의 강의는 네트워크+DB만 수강하고 있습니다.(java+springboot+jpa 등의 지식과 경험은 전무합니다.)
-
미해결실습으로 손에 잡히는 SQLD(2과목)
오타가 있는거같습니다.
3:05에 A.사용시간대가 아니라 B.사용시간대가 맞는거죠?
-
미해결김영한의 실전 데이터베이스 - 기본편
where 대신 having을 써도 되나요?
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]select * from products p1where price >= (select avg(p2.price) from products p2 where p2.category = p1.category);대신에select name,price from products p1where price >= (select avg(p2.price) from products p2group by categoryhaving p1.category=p2.category);으로 써도 문제 없나요?
-
미해결김영한의 실전 데이터베이스 - 기본편
주문 내역에 대한 고객 데이터
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/[질문 내용] 강사님께서 주문 내역에 대한 데이터면 이제 주문(orders) 테이블을 기준으로 하는것이 좋겠다 정도는 이제 느낌이 올거에요 라고 하셨는데 전혀 느낌이 오지않아서 흑흑... 제가 생각하기엔 ~에 대한 [고객 데이터]이니까 users가 주인공이여서 그걸 기준으로 잡는다고 생각했는데요~ 에 대한일때 ~물결표시있는 부분을 기준으로 잡아야하나요?
-
미해결김영한의 실전 데이터베이스 - 설계 2편, 실무에서 반드시 마주치는 9가지 설계 패턴
history_creted_at과 valid_from
안녕하세요,강의에서 valid_from과 valid_to를 사용하는 경우 history_created_at이 빠져있는데이게 개념적으로는 같아서 제거가 된 게 맞는지 궁금합니다!
-
미해결김영한의 실전 데이터베이스 - 설계 2편, 실무에서 반드시 마주치는 9가지 설계 패턴
함수 기반 인덱스 (Function-Based Index)
안녕하세요 영한님!!항상 좋은 강의 만들어주셔서 감사합니다!함수 기반 인덱스 생성에서 질문이 있어서 글을 남깁니다! 강의를 들으면서 함수 기반 인덱스를 생성하면 가상 컬럼이 없고, 인덱스만 만들어진다고 이해했습니다.그래서 product_json 테이블에 만들어진 가상 컬럼과 idx_v_storage 인덱스를 drop한 다음 각각 두가지 방식으로 테스트를 해보았는데요 CREATE INDEX idx_func_storage ON product_json (( CAST(attributes->'$.storage' AS UNSIGNED)));EXPLAIN SELECT * FROM product_json WHERE attributes->'$.storage' = 256; 이렇게 할 경우엔idx_func_storage 인덱스를 잘 타는 걸로 나왔지만,CREATE INDEX idx_func_storage ON product_json ((JSON_VALUE(attributes, '$.storage' RETURNING UNSIGNED)));EXPLAIN SELECT * FROM product_json WHERE attributes->'$.storage' = 256; 이 경우에는 FULL TABLE SCAN 이 되고, 인덱스도 NULL로 나왔습니다. 두 방식 모두 각각 idx_func_storage 인덱스는 잘 생성이 되었는데도 JSON_VALUE() 방식에서는 인덱스를 사용하지않았습니다그래서 AI에게 물어보니MySQL functional index는 WHERE절의 표현식이 인덱스 정의와 문자 수준으로 동일해야 한다.이유는 가상 컬럼 방식에서는 MySQL이 내부적으로 expression rewrite 과 virtual column substitution를 더 적극 수행하지만 functional index는 표현식 exact match 요구가 훨씬 엄격하기 때문이다.CREATE INDEX idx_func_storage ON product_json ((CAST(attributes->'$.storage' AS UNSIGNED))); 이렇게 인덱스를 생성했다면EXPLAIN SELECT *FROM product_json WHERE CAST(attributes->'$.storage' AS UNSIGNED) = 256; 이렇게 WHERE 절을 작성해야 하고CREATE INDEX idx_func_storage ON product_json ((JSON_VALUE(attributes, '$.storage' RETURNING UNSIGNED)));이렇게 인덱스를 생성했다면EXPLAIN SELECT * FROM product_json WHERE JSON_VALUE(attributes, '$.storage' RETURNING UNSIGNED) = 256이렇게 WHERE 절을 작성해야 한다고 답변해주었는데요!이렇게 각각 테스트 해보면, 인덱스를 잘 타는 것으로 나옵니다..!또한 CAST()로 인덱스를 생성한 경우 WHERE절에 JSON_VALUE()를 사용한 쿼리는 Index를 사용하지않고, FULL TABLE SCAN을 했으며,JSON_VALUE()로 인덱스를 생성한 경우 WHERE절에 JSON_VALUE()를 사용했을 경우에만 Index를 사용했습니다.제 테스트에서는 CAST() 기반 인덱스는WHERE절 축약 표현식에서도 인덱스를 사용하였고, WHERE절 JSON_VALUE()는 인덱스를 사용하지 않았습니다.JSON_VALUE() 기반 인덱스에서는 WHERE절에 동일한 JSON_VALUE() 표현식을 사용했을 경우에만 인덱스를 사용하는 것으로 보였습니다이게 맞는 걸까요? 아니면 제가 잘못 확인한 걸까요?, 또한 functional index 매칭 규칙 실제 범위가 어디까지 인지? AI가 답변해준 동작 방식이 맞는 건지도 여쭤보고 싶습니다! (제 MySQL버전이 8.0.41이네요,,)영상을 다시 잘 보니, 2:18 분에 idx_func_storage 인덱스를 CAST() 구문으로 생성하시고, 2:25분에 확인하실 때, EXPLAIN의 결과에서 idx_v_storage인덱스가 나오긴 합니다!
-
미해결[2026] 비전공자도 한 번에 합격하는 SQLD 올인원
mac erwin 설치 관련
밑에 분이랑 똑같은 질문입니다.. 받아 놓으신 자료 설치 했는데 라이센스 키가 필요하네요 ㅠㅠ비즈니스 메일로 어떻게 다운 받아야 하나요?
-
미해결김영한의 실전 데이터베이스 - 설계 1편, 현대적 데이터 모델링 완전 정복
comment 채번을 사용해야 하는 이유에 대한 설명이 필요합니다.
안녕하세요. 식별 vs 비셕별에 대한 db 설계 관련 내용 중에 영한님께서 일대다의 경우인 board 테이블(one)과 comment(many)에서 board 테이블의 id가 식별관계로 사용되는 경우 comment의 id는 채번을 따서 사용해야하고 시퀀스나 auto increment를 사용할 수 없다고 하셨는데 그 이유가 궁금합니다. 어쨋든 board 테이블의 id값은 row마다 존재하기에 각 comment row의 데이터가 어떤 board에 속하는지 그리고 순서도 asc 순으로 보장된다고 생각하는데요..꼭 채번을 사용해서 만들어야한다고 설명해주신 이유가 무엇인지 궁금합니다.더구나 max+1 같은 경우 comment의 id값이 중복될 여지도 있다고 생각하는데요..설명해주시면 감사하겠습니다.
-
미해결김영한의 실전 데이터베이스 - 설계 2편, 실무에서 반드시 마주치는 9가지 설계 패턴
추후 강의 질문있습니다
안녕하세요! 늦었지만 새해복 많이받으세요! 신입때 영한님 강의 봤었는데 벌써 6년차에 접어들고 있습니다..!다름이 아니라 최근 실무에서 레거시 코드를 개선하면서 고민을 많이 하고 있는데요주변에 시니어분들이 있으나 아키텍처에 대해서 크게 고민하고 있지 않아 제가 고민 후 적용해보고 있습니다.예를 들어 레이어드 아키텍처로 구현되어 있는 프로젝트가 있으나 규모가 커지면서 점점 유지보수가 힘든 지경까지 왔는데요(메서드 하나에 1천 줄... 이상)이런 상황에서 DDD 아키텍처를 이용해서 코드를 작성해보고 있습니다. 하지만 아무래도 혼자 공부하고 혼자 해보다보니 이게 맞는건지 제대로 하는건지 궁금한 부분이 꽤나 많습니다.그래서 질문은 향후 아키텍처에 관련된 강의 계획이 있으신지 너무 궁금합니다...!!클린아키텍처, 핵사고널, DDD 다양한 방법과 적용된 프로젝트가 많은데 이런 강의도 하실 예정이신지.. 없으시다면 꼭 해주셨으면 합니다!! 아무튼 강의 계속 보면서 많은 도움 받고 있습니다 감사합니다!!다시 한번 새해 복 많이 받으세요!
-
미해결김영한의 실전 데이터베이스 - 기본편
in 수행
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문 전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. in 같은 경우에는 바로 찾더라도 계속 수행하나요 ?예를 들어 (1,2,3,4) 일때 product_id 가 1인 경우
-
미해결[2026] 비전공자도 한 번에 합격하는 SQLD 올인원
모바일 앱
먼저 유사한 질문이 있었는지 검색해보세요.서로 예의를 지키며 존중하는 문화를 만들어가요.잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.모바일쿠폰이 아직 안왔습니다. 확인부탁드립니다!
-
미해결김영한의 실전 데이터베이스 - 기본편
외부조인1 강의 관련 질문
질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 네2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 네3. 질문 잘하기 메뉴얼을 읽어보셨나요? 네[질문 내용]외부 조인1 강의 듣다가 궁금한게 생겼는데요. (A 집합을 왼쪽, B 집합을 오른쪽)강의에서 LEFT JOIN의 경우는 집합 그림상으로도 그렇고 A(왼쪽 집합) 의 전체 데이터 + B에서 조건에 해당하는 데이터라면, B에 해당하는 부분은 사실상 A와 B의 교집합이고A에는 항상 A와 B의 교집합 부분이 들어가 있기때문에 추가적으로 들어오는 A(AND)B 교집합 부분은 의미없는 데이터고 결국엔 집합 A랑 다를게 없는거 아닐까요?? 좀 이해가 안되서 질문 드립니다.
-
미해결실습으로 손에 잡히는 SQLD(2과목)
28번 커리큘럼 제목 오타 있어요.
SYADATE -> SYSDATE
-
미해결김영한의 실전 데이터베이스 - 설계 2편, 실무에서 반드시 마주치는 9가지 설계 패턴
Json 컬럼의 객체 맵핑
영한님, 안녕하세요.또 좋은 강의로 다시 만나뵙게 되었네요.Spring, Java 로 강의를 듣다가 순수 DB 만 설명을 듣다보니 다소 적응이 되지 않는 감이 있는데요 ㅎ카테고리의 비정형 속성을 관리하기 위해 Json 설계하는 부분을 설명해주셨는데 이런 경우, Java 에서는 보통 어떤 식으로 객체와 맵핑을 하는지요? 각 카테고리별로 도메인 객체를 분리해서 각각 연동을 하는 식인지, 아니면 단순히 Map 으로 활용하는지 궁금합니다. 저장할 때도 객체를 그대로 저장하면 되기 때문에 편리하다고 하셨는데 각 카테고리별로 별도 객체가 있고 이를 개별 저장하는 형태를 말씀하시는 것인지 질문드립니다.
-
미해결김영한의 실전 데이터베이스 - 설계 2편, 실무에서 반드시 마주치는 9가지 설계 패턴
[Deprecated] 오타 제보
시력 이슈로 Deprecated안녕하세요. 영한님!7장1, 2, 3page 오타 제보 합니다! 아래 쿼리를 실행해서 데이터를 생성하고, -- # 7. 통계 테이블 설계 -- ## 통계 데이터와 성능 문제 -- ### 원본 데이터 준비 DROP TABLE IF EXISTS orders; CREATE TABLE orders ( order_id BIGINT AUTO_INCREMENT PRIMARY KEY, customer_id BIGINT NOT NULL, total_amount INT NOT NULL, order_status VARCHAR(20) NOT NULL, order_date DATETIME NOT NULL ); -- 데이터 입력 (예시를 위해 소량만 입력하지만, 실제로는 수백만 건이라고 가정한다) INSERT INTO orders (customer_id, total_amount, order_status, order_date) VALUES (1, 10000, 'COMPLETED', '2026-01-01 10:00:00'), (2, 25000, 'COMPLETED', '2026-01-01 14:30:00'), (3, 15000, 'COMPLETED', '2026-01-01 18:20:00'), (4, 50000, 'COMPLETED', '2026-01-02 09:15:00'), (5, 30000, 'COMPLETED', '2026-01-02 11:00:00'), (6, 12000, 'CANCELLED', '2026-01-02 15:45:00'), (7, 45000, 'COMPLETED', '2026-01-03 10:00:00'); 아래 통계 쿼리를 실행하면,-- ### 원본 테이블 직접 집계의 유혹 SELECT DATE(order_date) as stat_date, COUNT(*) as order_count, SUM(total_amount) as total_sales FROM orders WHERE order_status = 'COMPLETED' GROUP BY DATE(order_date) ORDER BY stat_date; 아래와 같은 결과가 나온다고 적혀있는데요. 2026-01-02 데이터가 3개라서 실제로는 아래와 같은 결과가 나와야할것 같아요! 감사합니다.
-
미해결[2026] 비전공자도 한 번에 합격하는 SQLD 올인원
sql기본 단원정리문제 57번과 58번 질문드립니다
안녕하세요 !! 단원정리문제 질문드립니다. 179~180쪽 문제에 대한 해설을 보면, 57번 해설에서는 "NULL은 가장 큰값으로 취급하므로 ASC에서 맨 뒤에 배치"했는데, 왜 58번 해설에서는 "NULL 값은 기본적으로 ASC 정렬 시 맨 아래에,"라고 되어있습니다. 이는 문제 오류일까요 ??제가 궁금한 것은 SQLD 시험에서 문제를 풀때, 'NULL First나 Last가 없으면 NULL은 가장 큰 값 취급' 이라고 생각하고 풀어도 괜찮을까요 ??