묻고 답해요
167만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결김영한의 실전 데이터베이스 - 설계 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 설치 관련
밑에 분이랑 똑같은 질문입니다.. 받아 놓으신 자료 설치 했는데 라이센스 키가 필요하네요 ㅠㅠ비즈니스 메일로 어떻게 다운 받아야 하나요?
-
미해결SQL 코딩테스트를 위한 첫 걸음
SQL 파일 다운로드
안녕하세요!MySQL 설치 및 연동 - 4:37 에 말씀해주신 인프런에 첨부된 SQL 파일을 찾을 수가 없습니다...해당 강의 자료를 다운 받아도 pdf 파일만 다운로드 됩니다.혹시 다운로드 위치를 알려주실 수 있을까요?감사합니다 강의 잘 듣겠습니다!
-
미해결김영한의 실전 데이터베이스 - 설계 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 다양한 방법과 적용된 프로젝트가 많은데 이런 강의도 하실 예정이신지.. 없으시다면 꼭 해주셨으면 합니다!! 아무튼 강의 계속 보면서 많은 도움 받고 있습니다 감사합니다!!다시 한번 새해 복 많이 받으세요!
-
해결됨데이터 분석을 위한 SQL 문제풀이 (Advent of SQL 2024)
[Day23] 정답 데이터와 동일함에도 오답 처리됩니다.
안녕하세요. solvesql을 통해 "유량(Flow)과 저량(Stock)" 문제를 접하게 된 사용자입니다.다름이 아니라, 현재 정답 데이터와 제출 데이터가 동일함에도 불구하고 아래와 같이 오답 처리되는 현상이 발생하고 있습니다.인터넷에서 찾은 다른 사람들의 코드와 제 코드 사이의 차이도 크게 보이지 않는 상황입니다.해당 현상 한 번 검토 부탁 드리겠습니다.참고로 제 코드와 오답 메세지 첨부 드립니다. [ 코드(MySQL) ]SELECT Ay AS "Acquisition year" , Flow AS "New acquisitions this year (Flow)" , SUM(Flow) OVER (ORDER BY Ay) AS "Total collection size (Stock)" FROM ( SELECT DATE_FORMAT(acquisition_date, '%Y') AS Ay , COUNT(artwork_id) AS Flow FROM artworks WHERE acquisition_date IS NOT NULL GROUP BY DATE_FORMAT(acquisition_date, '%Y') ) A ORDER BY 1; [ 오답 메세지 ] 감사합니다.
-
해결됨실리콘밸리 엔지니어와 함께하는 DBT
dbt run 이후 에러 발생(customer_status 없음 )
$ dbt run 14:24:31 Running with dbt=1.11.2 14:24:31 Registered adapter: postgres=1.10.0 14:24:32 Found 11 models, 37 data tests, 1 seed, 2 snapshots, 6 sources, 468 macros 14:24:32 14:24:32 Concurrency: 1 threads (target='dev') 14:24:32 14:24:32 1 of 5 START sql table model dvdrental.dim_customer_status ..................... [RUN] 14:24:32 1 of 5 ERROR creating sql table model dvdrental.dim_customer_status ............ [ERROR in 0.07s] 14:24:32 2 of 5 START sql table model dvdrental.dim_customer ............................ [RUN] 14:24:33 2 of 5 OK created sql table model dvdrental.dim_customer ....................... [SELECT 599 in 0.06s] 14:24:33 3 of 5 START sql table model dvdrental.dim_film ................................ [RUN] 14:24:33 3 of 5 OK created sql table model dvdrental.dim_film ........................... [SELECT 1000 in 0.06s] 14:24:33 4 of 5 START sql view model dvdrental.int_rentals_enriched ..................... [RUN] 14:24:33 4 of 5 OK created sql view model dvdrental.int_rentals_enriched ................ [CREATE VIEW in 0.06s] 14:24:33 5 of 5 START sql incremental model dvdrental.fct_payments ...................... [RUN] 14:24:33 Running incrementally with lookback interval: 3 days 14:24:33 5 of 5 OK created sql incremental model dvdrental.fct_payments ................. [INSERT 0 182 in 0.11s] 14:24:33 14:24:33 Finished running 1 incremental model, 3 table models, 1 view model in 0 hours 0 minutes and 0.69 seconds (0.69s). 14:24:33 14:24:33 Completed with 1 error, 0 partial successes, and 0 warnings: 14:24:33 14:24:33 Failure in model dim_customer_status (models\marts\dim_customer_status.sql) 14:24:33 Database Error in model dim_customer_status (models\marts\dim_customer_status.sql) relation "dvdrental.customer_status" does not exist LINE 34: left join "dvdrental"."dvdrental"."customer_status" s ^ compiled code at target\run\learn_dbt\models\marts\dim_customer_status.sql 14:24:33 14:24:33 compiled code at target\compiled\learn_dbt\models\marts\dim_customer_status.sql 14:24:33 14:24:33 Done. PASS=4 WARN=0 ERROR=1 SKIP=0 NO-OP=0 TOTAL=5dbt run 돌리고, 현재 위와 같은 에러가 발생하고 있습니다. customer_stauts에 대한 테이블이 없어서 에러가 발생하고 있는 데, 제공된 자료에서는 customer_status를 확인할 수가 없습니다.
-
미해결김영한의 실전 데이터베이스 - 기본편
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랑 다를게 없는거 아닐까요?? 좀 이해가 안되서 질문 드립니다.
-
미해결김영한의 실전 데이터베이스 - 설계 2편, 실무에서 반드시 마주치는 9가지 설계 패턴
실무 통계 질문(고민) 드립니다..!
안녕하세요! 현재 사내 시스템의 기본 차트 기능이 요구사항을 구현하기엔 너무 복잡하고 한계가 있어서, 차라리 API로 데이터를 직접 뽑아 커스텀 대시보드 웹사이트를 자체 구축하여 운영하고 있습니다.이 과정에서 데이터 구조 및 아키텍처 설계에 대한 고민이 생겨 선배님들의 조언을 구하고자 합니다.[현재 상황 및 아키텍처]요구사항: N개의 프로젝트마다 각기 다른 40여 개의 통계 차트를 제공해야 합니다.데이터 수집 (파멸의 약 30만 번 API 호출...): 외부 API를 연동해 통계 데이터를 수집합니다. 전체 프로젝트 기준 매일 새벽 3시에 약 프로젝트 갯수 * 3000 번의 API 호출이 발생합니다.배치 및 동시성 처리: Spring WebFlux를 활용해 10개 단위로 청크(Chunk)를 나누어 병렬로 배치 처리를 하고 있습니다.데이터 적재: 프로젝트의 일별 베이스라인(Baseline)을 유지하기 위해 원본(Raw) 데이터는 MongoDB에 저장하고 있습니다.실시간 동기화: 사용자가 화면에서 차트 '새로고침'을 누르면, 해당 시점에 즉시 API를 다시 쏘아서 데이터를 업데이트해 줍니다.현재의 서빙 방식: 일별 통계 결과는 현재 Redis에 담아두고 클라이언트에 제공하고 있습니다.🤔 [고민되는 지점] 프로젝트당 40개의 차트를 그리는데, 각 차트(통계)마다 필요한 Raw Data의 종류와 개수가 천차만별입니다. 처음에는 통계 결과용 RDB 테이블을 만들까 했지만, Project_ID와 구조가 제각각인 Raw Data들을 깔끔하게 담아내기가 까다로웠습니다. 그래서 현재는 캐시 툴에 크게 의존하고 있는데, 앞으로 차트 종류가 더 늘어나고 시스템이 확장될 것을 고려하여 좀 더 포괄적인 대응을 위해 "차트에 대한 메타데이터 테이블"을 별도로 설계하여 매핑하는 방식으로 구조를 개편할까 고민 중입니다.💡 [질문 드립니다]이처럼 요구되는 Raw Data의 형태와 수량이 각기 다른 수십 개의 차트를 서빙할 때, 메타데이터 테이블을 도입하여 관리하는 방식에 대해 어떻게 생각하시나요? 캐시에만 의존하는 것보다 나은 선택일까요?혹시 비슷한 형태의 대규모 API 연동 기반 통계/대시보드 시스템을 구축에 있어, 추천할 만한 데이터 모델링이나 아키텍처 개선 방향이 있을지 궁금합니다....개인적인 고민 질문드려 죄송하고 잘 모르는 후배가 선배님께 여쭤봅니다. 영한님이 아니시더라도 해당 고민을 들어주시고 의견 주시는 선배님들께 감사합니다 !
-
미해결실습으로 손에 잡히는 SQLD(2과목)
28번 커리큘럼 제목 오타 있어요.
SYADATE -> SYSDATE
-
미해결김영한의 실전 데이터베이스 - 설계 2편, 실무에서 반드시 마주치는 9가지 설계 패턴
Json 컬럼의 객체 맵핑
영한님, 안녕하세요.또 좋은 강의로 다시 만나뵙게 되었네요.Spring, Java 로 강의를 듣다가 순수 DB 만 설명을 듣다보니 다소 적응이 되지 않는 감이 있는데요 ㅎ카테고리의 비정형 속성을 관리하기 위해 Json 설계하는 부분을 설명해주셨는데 이런 경우, Java 에서는 보통 어떤 식으로 객체와 맵핑을 하는지요? 각 카테고리별로 도메인 객체를 분리해서 각각 연동을 하는 식인지, 아니면 단순히 Map 으로 활용하는지 궁금합니다. 저장할 때도 객체를 그대로 저장하면 되기 때문에 편리하다고 하셨는데 각 카테고리별로 별도 객체가 있고 이를 개별 저장하는 형태를 말씀하시는 것인지 질문드립니다.
-
해결됨로그까지 잡아라! Zabbix & Grafana 실전 통합 강의
수업노트 오타 수정
별건 아니지만...맨 밑에 CPU 사용률로 나와있어요 ㅎㅎ
-
미해결김영한의 실전 데이터베이스 - 설계 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개라서 실제로는 아래와 같은 결과가 나와야할것 같아요! 감사합니다.
-
해결됨[백문이불여일타] 데이터 분석을 위한 고급 SQL
순위 함수 연습 문제 - 스테디셀러 작가 찾기
순위 함수 연습문제에서 INNER JOIN을 하신 후에 MAX(mg.year)을 사용하셔서 가장 최근의 연도를 찾으셨는데, 이미 GROUP BY와 COUNT(*) >= 5를 통해서 5년 연속인 작가를 찾았고 make_group에 year 정보가 들어가 있기 때문에 JOIN 필요없이 MAX(year)을 구할 있지 않나요.?
-
해결됨초보자를 위한 BigQuery(SQL) 입문
4-5. 3번 문제 질
안녕하세요, 카일스쿨님 강의 너무 잘 듣고 있습니다.trainer_id 별로 결과값을 보고싶은데 오류가 해결되질 않아서 질문 남깁니다. 서브쿼리로 작성했기 때문에 trainer_id 별로 확인할 수가 없는 걸까요?
-
미해결[2026] 비전공자도 한 번에 합격하는 SQLD 올인원
sql기본 단원정리문제 57번과 58번 질문드립니다
안녕하세요 !! 단원정리문제 질문드립니다. 179~180쪽 문제에 대한 해설을 보면, 57번 해설에서는 "NULL은 가장 큰값으로 취급하므로 ASC에서 맨 뒤에 배치"했는데, 왜 58번 해설에서는 "NULL 값은 기본적으로 ASC 정렬 시 맨 아래에,"라고 되어있습니다. 이는 문제 오류일까요 ??제가 궁금한 것은 SQLD 시험에서 문제를 풀때, 'NULL First나 Last가 없으면 NULL은 가장 큰 값 취급' 이라고 생각하고 풀어도 괜찮을까요 ??
-
미해결김영한의 실전 데이터베이스 - 설계 2편, 실무에서 반드시 마주치는 9가지 설계 패턴
오타 제보
안녕하세요! 디테일한 건데요. 오타 제보 합니다!as-is스마트폰to-be스마트폰 케이스감사합니다.