묻고 답해요
167만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결김영한의 실전 데이터베이스 - 설계 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스마트폰 케이스감사합니다.
-
미해결김영한의 실전 데이터베이스 - 설계 1편, 현대적 데이터 모델링 완전 정복
학습중인 수업자료를 받아볼 수 있을까요??
안녕하세요 학습중인 수업자료를 받아볼 수 있을까요??
-
미해결김영한의 실전 데이터베이스 - 설계 2편, 실무에서 반드시 마주치는 9가지 설계 패턴
category_path 테이블에서 idx_descendant 인덱스를 생성하는 이유가 궁금합니다
안녕하세요~! 영한님category_path 를 생성하는 과정에서 idx_descendant 인덱스를 생성하는데요. descendant_id 는 외래키로 설정해서 인덱스가 자동으로 생성되지 않나요?!아래 쿼리를 실행했을 때 index 가 생성되는 것을 확인 했습니다!create table category_path ( ancestor_id bigint not null, -- 조상 노드 descendant_id bigint not null, -- 자손 노드 depth int not null, -- 거리 (깊이 차이) primary key (ancestor_id, descendant_id), foreign key (ancestor_id) references category_closure(category_id), foreign key (descendant_id) references category_closure(category_id) ); create index idx_depth on category_path(depth); show indexes from category_path; create index idx_descendant on category_path(descendant_id);위와 같이 명시적으로 인덱스를 생성한 이유가 있을까요? 감사합니다.
-
미해결[2026] 비전공자도 한 번에 합격하는 SQLD 올인원
이론공부
-노랭이 책 이론 부분 안보고 만들어주신 자료만 봐도 될까요?
-
미해결데이터분석가 서류탈락? 알려드릴게요, 되는 포트폴리오
포트폴리오 형식 질문
학습 관련 질문만 남겨주세요. 강의자에 대한 질문은 안받습니다(eg. 대학원 가실 생각은 없으신가요? , 데이터분석가는 어떻게 하게 되신거에요?) 포트폴리오는 노션, ppt, github 중 어떤게 가장 효율적일까요?혹시 제가 수행했던 프로젝트 관련해서 어디까지 포트폴리오에 넣으면 좋을지 이메일 상담가능한가요??
-
해결됨초보자를 위한 BigQuery(SQL) 입문
JOIN 1번 문제
안녕하세요JOIN 연습문제 1번에 대해서 질문이 있습니다SELETkor_name,COUNT(tp.id) AS pokemon_cnt 와SELETkor_name,COUNT(p.id) AS pokemon_cnt출력되는 행의 개수는 똑같은데 tp.id 를 쓰는 것과 p.id를 쓸 때 해석 차이가 무엇인지,연습 문제가 아닌 실무에서 똑같은 상황일 때 p.id를 사용하면 어떤 문제가 발생하는지,연습 문제처럼 COUNT로 집계 할 때 보통 어떤 테이블의 id를 COUNT 하는 것이 보편적인지 궁금합니다. SELECT kor_name, COUNT(tp.id) AS pokemon_cnt FROM( SELECT id, trainer_id, pokemon_id, status FROM basic.trainer_pokemon WHERE status IN("Active","Training") ) AS tp LEFT JOIN basic.pokemon AS p ON tp.pokemon_id = p.id GROUP BY kor_name ORDER BY 2 DESC