교육자
전: 우아한형제들 기술이사, 카카오, SK플래닛
진짜 실무에 필요한 제대로 된 개발자가 될 수 있도록, 교육하는 것이 저의 목표입니다.
저의 개발 인생 이야기
EO 인터뷰 영상
개발바닥 - 시골 청년 개발왕 되다
취업과 이직에 대한 고민 해결
강의
로드맵
전체 4수강평
- 김영한의 실전 데이터베이스 - 성능 최적화, 실행 계획과 인덱스 완전 정복
- 김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
- 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
게시글
질문&답변
현대 쿼리 복잡성에 관한 질문
안녕하세요.Jh P님현업에서도 LLM으로 쿼리를 작성하고, 실행 계획을 해석하고, 튜닝 아이디어를 얻는 일은 이미 흔해졌습니다. 다만 그렇다고 해서 "작성이 쉬워졌으니 처음부터 복잡하게 최적화하자"로 바뀌지는 않았습니다. 왜냐하면 실무에서 코드를 다룰 때 발생하는 진짜 비용은 '처음 작성할 때'가 아니라 '버그가 터졌을 때'와 '비즈니스 요구사항이 바뀔 때' 발생합니다.디버깅 한계: 서비스 장애가 났거나 데이터 정합성이 깨졌을 때, 100줄짜리 괴물 쿼리는 작성자 본인도, LLM도 문맥(도메인 규칙)을 100% 온전히 이해하고 즉각 수정하기 어렵습니다.리뷰와 협업: 복잡한 쿼리는 동료 개발자가 코드 리뷰 단계에서 잠재적 사이드 이펙트를 검증하기 어렵게 만듭니다. 결국 사람이 이해하고 통제할 수 있는 선에서 단순하게 쪼개는 설계가 훨씬 안전합니다.감사합니다.
- 좋아요수
- 0
- 댓글수
- 3
- 조회수
- 55
질문&답변
기타 영역 중 언두로그
안녕하세요. 김상형님결론부터 말씀드리면, 강의와 서적의 설명이 서로 상충하는 것이 아니라 둘 다 맞는 이야기입니다. 언두 로그(Undo Log)가 다뤄지는 영역(메모리 vs 디스크)과 생애주기를 바라보는 관점의 차이에서 오는 오해입니다.언두 로그는 버퍼 풀(메모리)에서 빠르게 생성, 관리되지만, 데이터 일관성과 복구를 위해 디스크 파일(Undo Tablespace)에도 함께 저장되어 관리됩니다.감사합니다.
- 좋아요수
- 0
- 댓글수
- 1
- 조회수
- 80
질문&답변
DataSourceUtils.releaseConnection 할때요 SQLException e 사용하는 이유등
안녕하세요. 백수님이 부분을 이해하려면 checked Exception과 uncheck Exception의 개념을 이해해야 합니다.이 부분은 자바 중급1편 그리고 스프링 DB1편에서 자세히 배울 수 있으니 해당 부분을 참고해주세요.감사합니다.
- 좋아요수
- 0
- 댓글수
- 2
- 조회수
- 77
질문&답변
수업자료 오타
화를참자님 감사합니다! 다음 강의에 패치할게요^^!
- 좋아요수
- 0
- 댓글수
- 2
- 조회수
- 65
질문&답변
복합인덱스 설계 질문
안녕하세요. 이성우님말씀하신 것처럼 product_status = 'ACTIVE' 비율이 85%라면 선택도가 낮기 때문에, (category_id, product_status, created_at)으로 확장했을 때 얻는 이득은 크지 않을 수 있습니다.실행 결과에서도 48건 → 40건으로 줄어드는 정도이니까요.그래서 이 정도라면 (category_id, created_at)만 사용하는 것도 충분히 합리적인 선택입니다. 인덱스도 저장 공간과 변경 비용이 있기 때문입니다.다만 판단할 때는 전체 테이블의 ACTIVE 비율보다 해당 category_id 내부에서 ACTIVE 비율이 얼마나 되는지를 보는 것이 더 중요합니다.결국 두 인덱스 모두 가능한 선택이고, 실제 데이터 분포와 쿼리 빈도, 성능 차이를 측정해서 결정하는 것이 가장 좋습니다.감사합니다 :)
- 좋아요수
- 0
- 댓글수
- 1
- 조회수
- 122
질문&답변
예외처리 3강 문의
안녕하세요. dkatn님성공 결과("success")를 성공("sucess")으로 알아보지 못하고 에러(isError() == true)로 잘못 판단하여, 데이터 전송 단계로 넘어가지 못하고 에러 로그를 출력하며 정상 흐름이 끊기게 된 것입니다감사합니다.
- 좋아요수
- 0
- 댓글수
- 1
- 조회수
- 83
질문&답변
[영한님]Spring Boot 및 프로젝트 생성
안녕하세요. isbcom1004님스프링 최신 버전으로 진행하시면 됩니다^^!감사합니다.
- 좋아요수
- 0
- 댓글수
- 2
- 조회수
- 113
질문&답변
리뉴얼 시기
안녕하세요. 전성민님리뉴얼이 되면 학습에서 조금 더 편한 부분들이 있겠지만,JPA의 경우 이미 완성에 가까운 기술이기 때문에 리뉴얼을 기다리기 보다는 먼저 듣는 것을 권장합니다 :) 리뉴얼의 경우 시간이 얼마나 걸릴지는 저도 작업을 진행해봐야 알 수 있을 것 같은데, 단기간에 되기는 어려울 것 같아요.감사합니다.
- 좋아요수
- 0
- 댓글수
- 2
- 조회수
- 117
질문&답변
리뷰
jhpride님 이렇게 남겨주셔서 감사합니다 :)SQL을 배워두시면 AI가 제대로 작업을 했는지도 더 쉽게 이해하실 수 있을거에요.그리고 AI에게도 작업을 더 잘 시키실 수 있을거에요 :)
- 좋아요수
- 0
- 댓글수
- 2
- 조회수
- 96
질문&답변
탐색을 한번 더 하지 않게 하는 방식 중 어댑티브 해시 방식도 맞는지 궁금 합니다.
안녕하세요. ggg7515님어댑티브 해시 인덱스(AHI)도 탐색을 줄이는 건 맞지만, 절약하는 비용의 종류가 커버링 인덱스와 다릅니다.커버링 인덱스는 세컨더리 인덱스 → 클러스터링 인덱스로 가는 추가 탐색 자체를 없앱니다. 접근할 페이지 수가 줄어들기 때문에, 해당 페이지가 버퍼 풀에 없다면 디스크 I/O까지 실제로 줄어듭니다.반면 AHI는 버퍼 풀에 이미 올라와 있는 페이지에 대해서만 동작합니다. 자주 조회되는 키 값 → 버퍼 풀 내 레코드 위치를 해시로 매핑해두고, 루트 → 브랜치 → 리프로 내려가는 B+Tree 탐색을 건너뛰게 해줍니다. 즉 절약되는 건 메모리 안에서의 트리 탐색 비용(CPU)이지 디스크 I/O가 아닙니다. 페이지가 버퍼 풀에 없으면 어차피 디스크에서 읽어야 하고, 이 경우 AHI는 도움이 되지 않습니다.정리하면 커버링 인덱스는 I/O 최적화, AHI는 CPU 최적화입니다.그리고 한 가지 중요한 점은, MySQL 8.4부터 AHI가 기본 비활성화로 바뀌었다는 것입니다. 현대 워크로드에서는 이점보다 경합, 유지 비용이 더 큰 경우가 많다는 판단이 반영된 변경입니다.감사합니다.
- 좋아요수
- 0
- 댓글수
- 2
- 조회수
- 112











