안녕하세요, 먼저 소중한 강의 만들어주셔서 너무 감사드립니다! 🙏🏻 댓글 목록 조회 쿼리에서 궁금한 점이 있어 질문드립니다. ( 댓글 최대 2 depth - 목록 API 설계 7:19 부분 ) 질문 "튜플 비교 (a, b) > (x, y) 를 사용하면 인덱스 풀 스캔이 발생하여 성능이 매우 떨어지는데, 명시적 조건 a > x OR (a = x AND b > y) 으로 분리하면 인덱스 레인지 스캔이 발생하여 쿼리 성능이 매우 빨라지는데 왜 그런 것일지 모르겠습니다.." 질문 상세 테스트 환경: comment 에 약 8백만건의 테스트 데이터 삽입 mysql base image: mysql:8.0.38 comment table ddl -- auto-generated definition create table comment ( comment_id bigint not null primary key, content varchar(3000) not null, article_id bigint not null, parent_comment_id bigint not null, writer_id bigint not null, is_deleted tinyint(1) not null, created_at datetime not null ); create index idx_article_id_parent_comment_id_comment_id on comment (article_id, parent_comment_id, comment_id); 문제가 되는 테스트 케이스 (1: slow, 2: fast) case 1. tuple comparision (slow) explain analyze select comment.comment_id, comment.parent_comment_id, comment.content, comment.article_id, comment.writer_id, comment.content, comment.is_deleted, comment.created_at from comment where article_id = 1 and (parent_comment_id, comment_id) > (142539921307124354, 142539921307124350) order by parent_comment_id, comment_id limit 30; -- -> Limit: 30 row(s) (cost=542979 rows=30) (actual time=8620..8620 rows=30 loops=1) -> Filter: ((`comment`.comment_id,`comment`.parent_comment_id) > (142539921307124354,142539921307124350)) (cost=542979 rows=4.01e+6) (actual time=8620..8620 rows=30 loops=1) -> Index lookup on comment using idx_article_id_parent_comment_id_comment_id (article_id=1) (cost=542979 rows=4.01e+6) (actual time=1.83..8251 rows=8e+6 loops=1) case 2. fast explain analyze select comment.comment_id, comment.parent_comment_id, comment.content, comment.article_id, comment.writer_id, comment.content, comment.is_deleted, comment.created_at from comment where article_id = 1 and ( parent_comment_id > 142539921307124354 or (parent_comment_id = 142539921307124354 and comment_id > 142539921307124350) ) order by parent_comment_id, comment_id limit 30; -- -> Limit: 30 row(s) (cost=416 rows=30) (actual time=0.252..0.727 rows=30 loops=1) -> Index range scan on comment using idx_article_id_parent_comment_id_comment_id over (article_id = 1 AND parent_comment_id = 142539921307124354 AND 142539921307124350 < comment_id) OR (article_id = 1 AND 142539921307124354 < parent_comment_id), with index condition: ((`comment`.article_id = 1) and ((`comment`.parent_comment_id > 142539921307124354) or ((`comment`.parent_comment_id = 142539921307124354) and (`comment`.comment_id > 142539921307124350)))) (cost=416 rows=358) (actual time=0.232..0.705 rows=30 loops=1) 튜플 비교를 사용한 1번 쿼리에서는 index full scan 이 발생하여 ( 8백만개의 row 를 모두 스캔 ) 8초의 안좋은 쿼리 성능이 나타난 것으로 판단했습니다. 반면 튜플 비교를 명시적 조건으로 분리한 2번 쿼리에서는, ( a > X OR (a = X AND b > Y) )) index range scan 을 통해 0.7초 이하의 빠른 쿼리 성능이 나타난 것 같아요. 요약 튜플 비교 (a, b) > (x, y) 를 사용한 1번 쿼리에서 MySQL 옵티마이저는 왜 풀 인덱스 스캔을 선택하는 것인지, 튜플 비교가 인덱스 레인지 스캔으로 최적화되지 않는 이유가 무엇인지 원인을 찾고 있는데 잘 모르겠네요.. 힌트를 받을 수 있을까요? 새해복 많이 받으세요!
package enumeration.ex2; public class ClassGrade { public static final ClassGrade BASIC = new ClassGrade(); public static final ClassGrade GOLD = new ClassGrade(); public static final ClassGrade DIAMOND = new ClassGrade(); } => public static final ClassGrade BASIC; public static final ClassGrade GOLD ; public static final ClassGrade DIAMOND ; 이로면 안되나여?new를 왜햇는지 모르겟어요
package enumeration.ex1; public class DiscountService { public int discount(StringGrade grade,int price){ int discountPercent=0; if(grade.equals(StringGrade.BASIC)) { discountPercent=10; }else if(grade.equals(StringGrade.GOLD)){ discountPercent=20; }else if(grade.equals(StringGrade.DIAMOND)){ discountPercent=30; }else{ System.out.println(grade+":할인 x"); } return price*discountPercent/100; } } discount 메서드에서 타입을 String 타입이 아닌 StringGrade타입으로 받으면 아래 예제가 다 에러 표시가 나면서 개발자들이 실수 하지않게 되는데? 왜 굳이 enum을 쓰나여? StringGrade타입으로 하면되자나여 package enumeration.ex1; import enumeration.ex1.DiscountService; public class StringGradeEx1_2 { public static void main(String[] args) { int price=100000; DiscountService discountService=new DiscountService(); //존재하지 않는 등급 int VIP =discountService.discount("VIP",price); System.out.println("VIP = " + VIP); //오타 int diamoddd= discountService.discount("diamoddd",price); System.out.println("diamoddd = " + diamoddd); //소문자 입력 int gold= discountService.discount("gold",price); System.out.println("gold = " + gold); } }
안녕하세요 크롤링이 뭔지 아예 모르다가 이게 조금씩 눈을 뜨고 있는 뉴비입니다~! 네이버 쇼핑 홈페이지 변경 및 HTML 구조 변경으로 설명이 한번 더 되면 좋겠습니다 강의에 나온 것처럼 나무태그를 찾으려 해도 현재 기준 네이버 쇼핑 HTML 구조를 현재 강의 내용을 기반으로 따라 할 수가 없습니다ㅠㅠ(상위 클래스로 검색해도 안나오는..??) https://search.shopping.naver.com/ns/search?query=%EB%8B%AD%EA%B0%80%EC%8A%B4%EC%82%B4 기회가 된다면 업데이트를.. 안된다면 유투브로 보여주셔도 짤막하게라도 보여주시면 좋을거 같습니다!! 감사합니다~!
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] public static void printV2(Shuttle<? extends BioUnit> shuttle) { shuttle.showInfo(); } 이 부분에 와일드카드가 BioUnit 을 extends 해야 한다고 명시적으로 작성해 주고 있는데 Shuttle 클래스에서 이미 <T extends BioUnit> 을 하고 있기 때문에 와일드카드는 단순하게 ? 만 사용해도 괜찮은 걸까요? 다른 개발자가 사용할 경우에 좀 더 명시적으로 확인시켜주기 위해 적은거라고 이해해도 되는 건지 궁금합니다. public static void printV2(Shuttle<?> shuttle) { shuttle.showInfo(); } 이렇게 코드를 작성한 이후에 여러 테스트를 해봤는데 Shuttle 클래스를 만들때 <T extends BioUnit> 에 걸려서 Integer나 Object 등 다른 타입은 사용할 수 없더라구요.
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] build.gradle에 Hibernate5JakartaModule을 잘 등록하여 라이브러리 목록도 확인했습니다. 그런데 이렇게 오류가 뜹니다ㅠㅠ 빨간 줄에는 "Cannot return a value from a method with void result type" 라고 뜨는데 이유가 뭘까요..ㅠㅠ
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] 여기에 질문 내용을 남겨주세요. 연관관계 양방향에 값을 입력해주는 부분에 대해서 이해한 것 같습니다. 아직 1차 캐시에만 존재하고 영속성 엔티티에 반영이 되지 않았기 때문에 객체로는 조회가 되지 않는 것으로 이해했습니다. 다만 궁금한 점이 기본키 전략을 auto_increment 같은 방식으로 한 경우에는 미리 한번 쿼리가 나간다고 이전 강의에서 배운 것이 생각났습니다. 강의에서도 기본키 전략은 동일한 것 같습니다. 기본키 전략 때문에 나간 쿼리가 반영이 안되는 이유가 따로 있을가요?
자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
강의따라서 H2접속하면 자동으로 BOOK, FRUIT, PERSON, USER, USER_LOAN_HISTORY 테이블이 있는데 어떻게 자동으로 만들어져 있는 건가요.?? mysql에서 테이블 만들었는데 h2는 mysql과 다른거 아닌가요..? 기존의 자바 entity 코드를 다 읽어서 얘네가 알고있는건가요??? ps. 강의 너무 잘듣고 있습니다! 이때까지 완강해본 강의가 손에꼽는데 완강을 앞두고 있어서 너무 설레는 맘입니다..! 좋은 강의 만들어주셔서 감사합니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오)네 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)아니오 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)네 [질문 내용] 여기에 질문 내용을 남겨주세요. spring.datasource.username=sa를 추가하였고, javax를 jakarta로 변경하였는데도 오류가 납니다. external libraries에 hibernate를 검색해도 나오지 않습니다. 틀린부분 알려주시면 감사하겠습니다.
게시글 CRUD API 구현 테스트 하는 부분에서 13:34쯤에 작성하고 테스트 실행하는 부분에서 아래 오류가 발생하는데 원인이 도대체 뭐일까여..ㅠㅠ 포트 9000에 서버 시작도 해놨었습니다 500 Internal Server Error: "{"timestamp":"2025-01-27T06:39:44.186+00:00","status":500,"error":"Internal Server Error","path":"/v1/articles"}" org.springframework.web.client.HttpServerErrorException$InternalServerError: 500 Internal Server Error: "{"timestamp":"2025-01-27T06:39:44.186+00:00","status":500,"error":"Internal Server Error","path":"/v1/articles"}" at org.springframework.web.client.HttpServerErrorException.create(HttpServerErrorException.java:102)
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] 대상 강의록: 4. 컬렉션 프레임워크 - LinkedList.pdf 의 p.12 대상 소스 파일: NodeMain3 add(Node node, String param) 메서드 건의 내용: 해당 부분은 아직 LinkedList 에 대한 제네릭 도입 전이므로 Node 클래스에서도 item 의 타입을 Object 로 사용하고 있습니다. public class Node { Object item; Node next; public Node(Object item) { this.item = item; } ... } 따라서 add 메서드 또한 추가할 데이터인 param을 String이 아닌, Object 타입으로 설정해야 수강생들의 이해가 쉬울 것이라고 생각합니다. // 기존 강의록 코드 private static void add(Node node, String param) { Node lastNode = getLastNode(node); lastNode.next = new Node(param); } // 수정 제안 코드 <<수정부분: String -> Object>> private static void add(Node node, Object param) { Node lastNode = getLastNode(node); lastNode.next = new Node(param); }
안녕하세요 좋은 강의 감사드립니다! 강의 9:20 "우리는 Dynamic Array의 size를 미리 알고 있기 때문에" 문장에서 궁금증이 생겼습니다. 우리는 Dynamic Array의 size를 머리속에 기억 하고 있기 때문에 a.append(4) 를 했을때 O(1)인것을 알지만 컴퓨터의 경우 a.append(4)를 했을때 Dynamic Array의 size를 어떻게 알고 값을 저장할까요?? 따로 저장이 될까요? size를 아는 경우 배열 포인터(배열 변수)에 저장된 초기 주소값 + size*Byte(자료형에 따라 다름) 으로 바로 접근 가능 하여 O(1) 이라고 납득이 되지만 size를 모를 경우 마지막 데이터가 있는 주소값으로 바로 가려면 array 를 전부 훑어서 O(n)이 될 수 있지 않을까 궁금했습니다. a 라는 배열 포인터에 초기 주소값과 size 정보를 저장해놓는다. 배열 포인터가 아닌 다른곳에 정보를 저장한다. array를 전부 훑는건 O(1)이다. 1번, 2번, 3번 중에 어떤 걸까요?? 그리고 검색하다 size와 capacity 에 대한 내용을 봤는데 capacity가 Dynamic array에서 처음 선언할때 비어 있는 index를 포함한 크기 로 알고있습니다. 위 제가 판단한것에서 1번, 2번 일경우 size 뿐만 아니라 capacity 정보도 저장해놔야 할것 같은데 저장한다면 어디에 저장 하는 걸까요?? 저장을 안한다면(3번) 직접 빠르게 훑어보고 값을 추가 or 삭제 하는 걸까요?? 강의 후반부에 설명해 주시는 내용이라면 죄송합니다.. 항상 감사합니다!
학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! 질문과 관련된 영상 위치를 알려주면 더 빠르게 답변할 수 있어요 먼저 유사한 질문이 있었는지 검색해보세요 제목: 커리큘럼 작업형2 모의문제1 18분:-7지점 문의. 내용: 데이터전처리 & 피처엔지니어링을 합친 코너에 baseline, label, one-hot이 소개되는데 이들이 각각 전처리인지 피처엔지니어링 절차에 해당하는지를 몰라 gpt에 물어보니 baseline은 6) 모델 선택,훈련,평가,최적화 Label은 5) 검증 데이터 분리 및 6) 모델 선택, 훈련, 평가, 최적화 One-hot은 3) 데이터 전처리 및 4) 피처 엔지니어링에 해당한다고 하네요. 이것은 머신러닝 순서라고 하신 아래의 1~7에서 강의에서는 보시다시피 3)~4)단계인 데이터전처리&피처엔지니어링 코너에서 소개하고 있는데 그 내용과 다른 설명 입니다. (강의에서의 절차 정리) 1) 문제정의, 라이브러리/데이터 불러오기(로드) 2) 탐색적 데이터분석(EDA) 3) 데이터 전처리(결측값제거, 이상치제거) 4) 피쳐엔지니어링(모델 성능(예측력) 향상) 5) 검증데이터분리(Train/validation나누기) 6) 모델 선택,훈련,평가,최적화 7) 예측 8) csv파일 생성 그렇다고 강의에서 구분하여 설명하지 않으셨고, 주석으로 설명이 달린 것이 없이 왔다갔다 하면서 설명을 하시니 도대체 각각이 어떤 절차에 해당하는지 그 차이를 모르겠고, 지금 어떤 절차 중인지 혼동되며 정리를 하려는데 정리가 안되고 있습니다. 정리를 하기 위해서는 절차별 업무수행 프로세스를 정리해야 하는데 '지금과 같은 상황(절차별 프로세스가 아닌 동일한 유형을 묶어서 설명'하는 방식에서는 절차에 대한 정리를 할 수 없게 됩니다. 정리를 하면 강의 뒤에 가서는 다시 앞으로 가서 수정하기를 반복하시니 정리 했던 것을 다시 정리해야 하거나 정리가 안되는 현상이 자주 발생합니다. 절차적 프로세스를 정리하는 데 유사한 유형별 모음이라면서 서로 다른 절차에 속한 것들을 묶어서 설명하려면 혼동되지 않도록 설명을 적시해 줘야 하나 반복적으로 그러한 습관이 나타나지 않는 것을 보면 이러한 점을 의식하지 않는 것 같다는 인상입니다. 실무에 대한 이론 정리 보다는 실무적인 접근을 하시는 것으로 보이며 그래서 실수하는 것을 보여주기 위해 위아래를 오르내리며 수정과정을 되풀이 하여 보여주시는 데 동시에 절차(프로세스)대로 이론을 정리하는 입장에서는 앞에서 정리한 것이 매번 날라간다는 것이고 계속 이런 식이면 정리하기가 어려워 지죠. 현재 시점에서 보면 미래에 발생할 것을 먼저 지금 정리하는 것이 되므로 시점이 꼬이므로 혼선스러워 집니다. 이 강의에서는 정리하는 개념에 대한 고민은 없어 보입니다. 일단 chatgpt의 답변이 맞는지부터 확인을 요청 드립니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. 윈도우로 h2 console을 진행해서 h2를 켜는 것과, cmd를 이용해서 h2.bat으로 h2를 켜는 것의 차이가 있을까요?
04-10 장고 기본 CBV API (Generic display views) - ListView 강의를 듣던 중 index.html 에서 {% load django_bootstrap5 %}나 {% bootstrap_pagination %} 를 타고 들어가서 소스를 보는 기능이 전체검색 말고는 vscode에서 다른 방법이 없는 것 같아서 유료버전pycharm 처럼 흉내내서 확장프로그램을 만들어봤습니다. 저만 쓰게 될거같아서.. 필요하신 분들께 알리고 피드백을 받고 싶은 마음에 여기에 링크를 남기고 공유해도 혹시 괜찮을까요? https://github.com/southglory/python-package-definition-navigator https://marketplace.visualstudio.com/items?itemName=QG-devramyun.python-package-definition-navigator 감사합니다.
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예 [질문 내용] 저는 윈도우10이고 인텔리제이 터미널에서가 아닌 윈도우 cmd에서 오류가 발생했을 때 해결했습니다! gradlew까진 됐는데, gradlew build 했을 때 저랑 같은 오류인 경우 참고하심 좋을 것 같아요 1. 프로젝트 생성 할 때 OneDrive 말고 내 PC -> 사용자 -> 내 계정이름(공용x) -> 여기에 study폴더 생성 후 압축 여기에 풀기 C:\Users\사용자이름\OneDrive\바탕 화면\study <- 가 아니라 C:\Users\사용자이름 에 study폴더를 만들어서, C:\Users\사용자이름\study 여기 안에 hello-spring 넣기 ----물론 사용자이름은 영어로 설정---- 2. build.gradle 잘 선택했는지 확인 (<- 저는 gradle 잘못 선택했었어요) 여기서도 경로가 OneDrive인지 확인! 3. 윈도우 cmd 보시는 것처럼 onedrive가 아닌 저 경로에서 cd study -> cd spring-hello를 하고, (강의에서 ll은 윈도우에선 dir) hello-spring 안에 들어가셔서 gradlew를 진행했고, 그 후 gradlew build를 했더니 드디어 성공,,! (윈도우는./ gradlew build가 아닌, 그냥 gradlew, gradlew build) 4. java -jar 오류! 저기 hello-spring 파일이 2개가 있는데 그 중에서 -plain말고 밑에 걸 선택하시면 됩니다. gradlew build 후에 libs에 가셔서 java -jar hello-spring-0.0.1-SNAPSHOT.jar을 진행했는데 오류가 떠서 gpt에 물어봤더니 현재 쓰고 있는 자바 버전이 너무 낮아서 안된다고 하네요. cmd에서 java -version해서 봤더니 1.8로 돼있었음... 다른 강의에서 1.8로 설정한 거라 몰랐네요ㅜㅜ 그래서 환경변수에 시스템 변수에 있는 Path를 1.8로 되있는 걸 삭제하고 jdk 21이 경로로 설정해주고 가장 위로 올려줬습니다. 그 후에 cmd 껏다 키고, libs파일까지 들어간 후에 java -jar hello-spring-0.0.1-SNAPSHOT.jar 을 해주면? Spring 너무 반갑쓰,,,ㅠㅠ (종료하실 땐 컨트롤 + C) 정리하자면 1. OneDrive 안에 있는지 확인. 2. build.gradle 잘 선택했는지 확인. 3. 환경변수 Path 자바 버전 확인! 이 글을 쓰는 것까지 8시간에 걸쳐 오류 해결과 해결 과정 작성을 마무리 합니다ㅠ 너무 두서없이 썼을 수도 있지만 같은 상황이시라면 최대한 도움 되셨음 좋겠네요. 다들 열공하십쇼!
안녕하세요. 강의 잘 수강하고 있습니다. 현재 회사에서 MyBatis를 주로 사용하고 있습니다. 제가 JPA에 대한 실무 경험이 없다보니 실무에서는 어떻게 JPA를 사용하는지 궁금하여 질문을 드렸습니다. 질문 제가 생각할 때 이번 프로젝트는 복잡한 부분이 없어서 단순히 연관 관계가 필요 없다고 생각하는데 복잡한 실무에서 연관관계를 사용하는지 유무가 궁금하다. (상황마다 다르겠지만 일반론 기준) 거의 모든 Repository에서 네이티브 쿼리를 사용을 하였는데 실무에서 native Query를 많이 사용하는지 궁금하며 QueryDsl은 실무에서 어떤 방식으로 사용하는 궁금합니다. ( 크게 런타임 타입 체킹이 필요가 없다면 거의 다 native Query로 풀 수 있을거 같은데 QueryDSL을 사용한 경험을 듣고 싶습니다.