영한님 안녕하세요 강의 잘 듣고 있는데, 서브쿼리를 사용하려다.. where, having절에만 사용가능하기에 이 문제를 어떻게 해결할까 고민하다가 질문드립니다.. <문제> 현재 엔티티는 Post(게시글) 엔티티 필드 : postId, content, createdAt , 조회수,댓글 수, 좋아요 수 Post view(게시글 조회) 엔티티 필드 : postViewId, user,post, 조회수,댓글수,좋아요수 이렇게 있습니다. ( post view 엔티티는 특정 유저그룹이 어떤 게시글을 본 히스토리를 관리하고 그 히스토리를 통해 게시글의 인기도를 측정하기 위함입니다.) 이러한 상황에서 , 게시글의 조회수, 댓글 수, 좋아요 수, 특정 유저그룹이 해당 게시글을 조회한 수, 특정 유저그룹이 해당 게시글에 댓글 단 수, 특정 유저그룹이 해당 게시글에 좋아요한 수 로 정렬하고, (where 조건 절은 다 구현됐다는 가정) groupby는 게시글의 pk 로만 하지만, 실제로 dto에 projections.bean()활용해서 매핑할 필드들은 content, createdAt 등 여러가지 컬럼이 추가로 있습니다. 이러한 경우라면, 우선 특정 유저그룹이 해당 게시글에 댓글 단 수, 특정 유저그룹이 해당 게시글에 좋아요한 수로 정렬하려면, 집계함수 sum을 활용해야하기 때문에 orderby절에 집계함수가 써야하고, 그러면 당연히 groupby를 써야하는데 이 때, post의 모든 필드들로 groupby 하는 것보다 pk로만 group by하는게 의미 있다고 생각해서 select 절에는 select postId 만 올 수 있을텐데 그렇다면 이 postId의 리스트를 받아서 다시 이 postId로 다시 post entity를 조회해서 나머지 content, createdAt 값을 받는것이 최선일까요?(이 방법도 그런데 정렬이 유지되지않아서 결국 다시 집계함수로 정렬해야만할까요?) 이렇게 하면 두 번 쿼리를 날리기 때문에 별로 좋지 않은 방법이지 않을까라는 생각이 들지만 jpa는 from 절 서브쿼리를 지원하지않고, 다른 방법이 떠오르지 않아 여쭤봅니다. 조금 중구난방으로 질문한 감이 없지 않아 있지만.. 영한님 답변 부탁드립니다..ㅠㅠ
자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
1. 유저 컨트롤러에서 jdbc를 설정해준적이 없다고 하셨는데 여기서 jdbc클래스설정 이라는게 무슨말인가요? jdbc에 대한 생성자를 말하는건가오? 생성자를 설정안해 줘서 탬플릿을 설정안해준거라면 userservice나 userRepositry 모두 다 템플릿에 대해 설정 안해줬는데 저 둘은 스프링빈도 아닌데 어떻게 jdbc템플릿 가져온건가요
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. 임베디드 타입과 그 후 강의 값 타입과 불변 객체를 들으면서 궁금증이 생겨 게시판에 올립니다. 임베디드 타입에서 엔티티를 가질 수도 있다고 되어있는데 임베디드 타입의 역할은 단순한 값을 나타내기 위한 용도로 불변 객체로 설계되어야한다고 배웠습니다(다음 강의). 근데 만약 임베디드 타입안에 엔티티를 넣으면 불변 객체의 특성이 깨지는거 아닌가요...? 만약 엔티티를 넣으려면 엔티티 또한 수정자를 제거해서 불변 객체로 만들어야할거 같은데 이렇게 설계를 하는 이유를 정확히 감이 잡히지 않습니다(임베디드 타입안에 엔티티를 넣으면 좋은 이점 등을 모르겠습니다). 또한 임베디드 타입 안에 엔티티를 넣는 예제를 따로 생각해도 떠오르지 않네요.. 실무에서 이런 경우가 많이 있나요??
현재 H2 database에 연결하고 목록을 확인하려고 합니다. 그런데 자꾸 회원목록을 들어가거나 회원가입을 실행시 whitelabel 에러가 뜹니다. 제 생각으로는 H2 DB와의 연결 상태때문인 것 같은데, spring boot 실행중에는 아무런 에러가 뜨질 않습니다. 스프링 3.0이상을 사용해서 H2버전 문제인것 같아 1.4.200에서 최신버전을 써보았는데도 똑같은 결과가 나옵니다. 밑에 프로젝트 파일 링크 공유드립니다. https://drive.google.com/file/d/1Wg2OAv5FmdglAZDtUCYDypa1cprIUTda/view?usp=drive_link
안녕하세요 스프링부터 3.x 버전대 이상 그래들 설정에서 clean { delete file('src/main/generated') } 요부분 은 먼 기능이고 왜넣은건지 궁금합니다! 학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 문제 조건에서 소괄호 사이의 존재하는 문자는 제거한다고 했는데 만약 소괄호 쌍이 안맞고 '(' 나 ')'가 남게되는 경우는 감안을 안해도되는건가요?
OrderServiceTest에서 assertEquals("주문 가격은 가격 * 수량이다")에서 실패가 뜨는데 원인을 찾기 어려워 질문 드립니다. 26000원이 나와야 하는데 0원이 나와서.. 총 가격을 구하는 for문이 안 돌아갔나 싶은데 코드에 오류는 없는 것 같아서 원인을 찾기 어렵습니다. https://drive.google.com/file/d/1SSJFsd6F2hikp7T3MONt5QvklxY-EX3B/view?usp=sharing
안녕하세요. 김영한님의 강의 잘 보고 있습니다. 바보 같은 질문일 수 있지만, Thread.sleep()과는 다르게 LockSupport.park()는 interrupt()를 이용해서 깨어나도 isInterrupted()가 true인 이유가 궁금합니다. 그냥 단순히 InterruptedException이 발생하지 않기 때문일까요?
========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? ( 예 /아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? ( 예 /아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? ( 예 /아니오) [질문 내용] 프록시 부분도 있어 조금 복합적이긴 한데 Batch size의 작동 순서가 궁금합니다. 제가 이해하기로는 예를 들어 수업과 같이 Member 엔티티는 public class Member { @Id @GeneratedValue private Long id; private String name; private int age; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "TEAM_ID") Team team; } Team 엔티티는 public class Team { @Id @GeneratedValue private Long id; private String name; @BatchSize(size = 100) @OneToMany(mappedBy = "team") private List<Member> members = new ArrayList<>(); } 위와 같다고 할때 select t from Team t 해당 JPQL로 Team 엔티티들을 조회한다면 t.members의 객체들은 프록시로 존재하여 id 값만을 가지게 되고 for (Team result : resultList) { System.out.println("result = " + result.getMembers().size()); for (Member member : result.getMembers()) { System.out.println("member = " + member); } } 이 처럼 실행하면서 result.getMembers()가 처음 호출 될때 select m1_0.TEAM_ID, m1_0.id, m1_0.age, m1_0.name from Member m1_0 where m1_0.TEAM_ID in (?, ?...) 다음과 같은 쿼리를 호출해 Member 프록시들의 target에 알맞게 주입 해주게 되나요? 이 부분이 궁금하여 질문 드립니다.
강의를 매끄럽게 따라하려면 똑같은 keycloak 버전을 사용하셔야 합니다. 2x.x.x 버전 사용 시 openid를 강제로 사용해야 할 수 있습니다. 다운로드 URI : https://github.com/keycloak/keycloak/releases/download/19.0.1/keycloak-19.0.1.tar.gz
안녕하세요 service 관련 코드를 공부하다가 질문이 생겨서 문의드립니다. 제가 지금까지 봤던 코드들은 @Transactional(readOnly = true) 는 Read할 때 사용을 하고 @Transactional은 Read를 제외한 CUD일 때 사용을 한다고 알고있는데, 인터넷을 찾아보니 "모든 CUD 관련 코드에 @Transactional을 무분별하게 사용하면 성능에 저하가 올 수 있다. 트랜잭션은 묶음의 처리입니다. 단건의 INSERT, DELETE, UPDATE 는 Transaction 이 필요하지 않습니다." 라고 블로그에서 보았습니다. 모든 CUD 관련 코드에다가 @Transactional을 붙이면 안되는건가요? 또한 @Transactional(readOnly = true) 는 Read 관련 코드에 붙이는게 필수는 아닌가요? 어떤 방식으로 코드를 짜는게 좋은 코드인지 궁금합니다.
그러면 main 메소드 내에 Thread thread1 = new Thread(..); Thread thread2 = new Thread(..); 이걸 실행하면 main 스택프레임내에 참조변수가 저장이될텐데 thread1,thread2가 아닌 this로 저장된다는건가요? 그러면 예를들어, 참조변수 a의 메소드를 실행하게된다면 먼저 스택프레임내에서 참조변수에서 실제 인스턴스가 저장된 힙 주소를 꺼내어서 그 힙주소로 간다음 메소드를 가져오는게 아니라 참조변수 a가 아닌 this 인거죠?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 수업자료 (문제풀이)만 보면서 직접 풀어보고 싶은데 자료는 어디서 받아볼 수 있을까요?
테이블은 한 게시글 당 게시글 이미지를 여러 개 저장할 수 있도록 하는 postImage 테이블이고 pk는 autoincrement인 Long 타입 postImageId입니다. 그리고 unique한 조건은 @ManyToOne으로 매핑된 post(not null)와 imageUrl(not null) 컬럼의 조합입니다. 이 때, postImage 엔티티를 조회하기 위해서는 pk인 postImageId로 조회하는게 좋을까요? 아니면 unique 제약조건인 post+imageUrl로 조회하는게 좋을까요? 실무에서 더 선호되는 방식이나 성능적, 설계적으로 좋은 방식이 궁금합니다