묻고 답해요
163만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨(2026) 일주일만에 합격하는 정보처리기사 실기
강의난이도가...갑자기
C언어 개론 마치고자바에 들어왔는데 1~3강을 계속 돌려보고 있습니다만진도가 나가질 않네요특히 생성자와 메서드 부분 난이도가 확 올라가서이해가 안되도 넘어가야할지계속 반복 수강해야할지 판단이 안섭니다.자신감이 급 하락....
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
JPA : 페치 조인과 준영속 상태
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]여기에 질문 내용을 남겨주세요.안녕하세요! 영한님 스프링 관련 강의를 사서 항상 잘 보고 있습니다! 그리고 JPA 관련 공부는 영한님이 쓰신 JPA 책으로 공부하고 있습니다. JPA 관련 질문을 드리고 싶은데 JPA 강의는 사지 않아 질문을 올리지 못하게 되어 부득이하게 여기에 질문하게 되었습니다 죄송합니다 ㅜㅜ 다름이 아니라 JPA 책의 375 페이지, 10장 객체지향 쿼리 언어 파트에서 다음과 같이 페치 조인 전략 사용시 멤버가 준영속 상태가 되어도 나중에 팀을 별도의 쿼리를 날리지 않고 조회가 가능함을 확인했습니다. 책에서도 그렇게 말씀해주셨습니다! 그리고 그 다음에 페치 조인을 사용하지 않은 경우를 적용해보았습니다.String query = "SELECT m FROM Member m"; Member member = em.createQuery(query, Member.class).getResultList().get(0); em.detach(member); System.out.println("Class Type: " + member.getTeam().getClass().getName()); // 프록시 객체임을 확인 System.out.println("Is initialized: " + Hibernate.isInitialized(member.getTeam())); // 초기화 안된 상태 System.out.println("member.getTeam() = " + member.getTeam().getName()); // 별도로 쿼리가 날아감제 예상으로는 member.getTeam() 시 프록시 팀 객체가 형성되고, 물론 초기화는 되지 않은 상태이며 이때 멤버 객체가 준영속 상태이기 때문에 getTeam().getName()에서 예외가 발생할 것이라 생각했습니다. 왜냐하면 member - team은 lazy fetch로 되어있기 때문에 member에서 연결된 team을 조회할 때 추가적인 쿼리를 한번 더 날려야 하는데, 준영속 상태가 되면서 이것이 불가능해질 것이라 생각했기 때문입니다. 그런데 실제로는 추가쿼리를 날려서 값을 가져오는 것을 확인했습니다. 혹시 왜 이런 것인지 알수 있을까요?? 감사합니다. 항상 강의 잘 보고 있습니다!
-
해결됨스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판
블로그 정리 질문입니다.
학습 관련 질문을 최대한 상세히 남겨주세요!고민 과정도 같이 나열해주셔도 좋습니다.먼저 유사한 질문이 있었는지 검색해보세요.인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.쿠케님 안녕하세요.학습하면서 정리하는 내용(키워드 등)을 블로그에 업로드해도 괜찮은지 궁금해서 질문드려요~!
-
해결됨김영한의 실전 자바 - 기본편
클래스명, 인스턴스 질문 있습니다.
안녕하세요.자바 기본 (static 변수 3, 9분 30초~) 수업 내용과 관련하여 관련 질문이 있습니다.Data3 data4 = new Data3("D"); System.out.println("D count = " + data4.count); System.out.println(Data3.count); 정적 변수에 접근하는 두 가지 방법을 알려주셨는데,용어 정리가 잘 안되어서요. 인스턴스를 통한 접근 data4.count 에서data4를 "인스턴스명"이라고 불러도 되는 것인가요?
-
미해결김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
signal을 받은 스레드의 대기큐에서 우선순위
안녕하세요 영한님. 스레드의 대기 강의에서 질문이 있습니다. BoundedQueueV5를 사용하여 [소비자 먼저 실행] 때 질문입니다. 제가 이해한 것을 쭉 요약해볼테니 어디에서 틀렸는지, 왜 아닌지 답변을 부탁드립니다. ReentrantLock을 사용하게 되면 대기 큐와 producerCond, consumerCond가 있습니다. 소비자1,2,3은 현재 consumerCond에 있는 상황이고 이제 [생산자 시작]으로 넘어가게 됩니다. 생산자1이 락을 획득하였다고 가정하겠습니다. 그럼 생산자1이 락을 획득하여 생산을 시작하겠고, 생산자2와 3은 대기 큐에 등록되어 WAITING 상태로 락을 기다리고 있다고 생각했습니다. 생산자1이 생산을 하고 consumerCond.signal();을 호출하여 consumerCond에 있는 소비자1,2,3 중 하나를 깨웁니다. (소비자 1을 깨웠다고 가정)소비자1은 consumerCond에서 대기 큐로 이동하여 락을 받을 준비를 합니다. 생산자1이 종료되면서 락을 넘겨줍니다.이때 락을 받기 위해 대기중인 스레드가 소비자1, 생산자2, 생산자3이 있는데 왜 항상 소비자1이 우선적으로 락을 획득할까요? signal()을 통해 깨어난 스레드는 락을 우선적으로 획득할 수 있는 무언가가 주어지는건가요?? 답변을 기다리겠습니다. 감사합니다
-
미해결김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
생산자 소비자 대기 공간 분리 예제5 분석 질문
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문 전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예.2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예.3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예.[질문 내용] 안녕하세요 영한님. 자바 고급편1 생산자 소비자 대기 공간 분리 - 예제5 분석 강의를 듣고 질문이 있어서 질문 올립니다. 소비자 먼저 시작 상황에서 질문이 있습니다.소비자 1,2,3이 대기상태에 들어가면서 consumerCond.await() 에서 대기를 하고 있습니다. 그 다음으로 생산자1이 락을 받고 실행이 되지요? 생산자가 생산을 하고 consumerCond에 signal을 주게 됩니다. consumerCond.await()에서 대기하고 있던 소비자를 깨우게 되겠죠. 그럼 대기하고 있던 소비자 중 하나가(소비자1)이 와서 락을 받고 소비를 한 뒤에 producerCond에 signal을 보냅니다. 여기서 제가 궁금한게 나옵니다. 대기상태에 있던 소비자1이 깨어나서 소비를 하고 producerCond에 signal을 줄때 producerCond에 대기중인 생산자가 하나도 없지 않습니까? 그럼 이때 생산자가 락을 받는다는 100%의 보장이 어떻게 이루어지는지 그게 궁금합니다. 질문을 요약해서 적겠습니다. 대기상태에서 깨어난 소비자가 producerCond에 signal을 보낼때 producerCond에 대기하고 있던 생산자가 하나도 없는데 어떻게 생산자가 그 락을 받는다는 100%의 보장을 할 수 있는지?대기상태에서 깨어난 소비자가 producerCond에 signal을 보낼때 producerCond에 대기하고 있던 생산자가 하나도 없는데 이럴때 소비자가 보낸 producerCond.signal(); 은 어떻게 처리가 되는지?감사합니다.
-
해결됨자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
제가 작성한 코드에서 간단한 질문이 있습니다.
public List<String> solution(int n, String[] str) { List<String> answer = new ArrayList<>(); for (String s : str) { char[] c = s.toCharArray(); int lt = 0; int rt = c.length - 1; while(lt < rt) { char temp = c[lt]; c[lt] = c[rt]; c[rt] = temp; lt += 1; rt -= 1; } answer.add(new String(c)); } return answer; }제가 작성한 코드입니다. 1)강사님은String temp = String.valueOf(c);answer.add(temp);이런 식으로 String.valueOf()를 통해 char 배열을 String으로 변환하셨지만, 저는 그냥answer.add(new String(c));그냥 이렇게 String 생성자를 사용했습니다.정답 처리는 됐는데, 혹시 이런 식의 코드가 지금 문제 혹은 나중에 문제를 풀 때 안 좋은 점이 있을까요? 2)저는 습관적으로List<String> list = new ArrayList<>();이런 식으로 부모 타입으로 주로 선언하는데,혹시 ArrayList<String> list = new ArrayList<>();이런 식으로 구체적인 타입으로 선언해야만 문제를 푸는 경우도 나중에 나올까요?코딩 테스트에선 부모 타입보단 구체적인 타입으로 쓰는 습관을 가져야 하는지 궁금합니다. 강의 잘 듣고 있습니다.
-
미해결실전! 스프링 데이터 JPA
스프링 데이터 JPA save()할때 OneToMany 엔티티의 필드가 null값이 저장되요
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]특정 리포지토리에서 save()할때만 연관관계에 있는 엔티티의 필드가 null로 저장됩니다. 대체 어디가 문제일까요? cascade도 persist로 맞췄고 save 바로 직전에 로그를 띄웠을때도 정상적으로 값이 들어가있었는데 save()할때만 값이 null값으로 insert되네요
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
(재질문)토이프로젝트에서 spring data jpa 기반으로 페이징 처리 중 궁금한 점 있습니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 아니오3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]저번에도 같은 질문을 올렸다가 질문이 두서가 없다보니 여쭤보려고 한 것을 잘못 물어본거같아서 다시 질문드립니다. Spring Data JPA를 바탕으로 토이프로젝트를 개발하고있고 Pageable 인터페이스를 활용하고 있습니다. 프로젝트에서 Item(품목)의 하위 개념으로 Product(제품)을 가지고 있습니다.(1:N - 품목 하나에 대해 여러개의 제품을 등록 할 수 있음)예를 들어 핸드폰이라는 Item(품목) 정보를 등록하고, 그 품목에 대한 Product(제품) ( 이를테면 아이폰10, 갤럭시S25, 샤오미)의 정보들을 등록합니다.이때 특정 품목(itemId)을 클릭하면 해당 품목에 대한 정보와 내가 등록한 product 리스트가 띄어지도록 하는 api 기능을 구현하려 했습니다. 처음에는 요청이 item컨트롤러로 디스패치하고, product와 itemId를 기준으로 패치조인하여 데이터를 받아오는 식으로 구현을 했는데.. product리스트를 불러오는 과정에서 페이징을 하고자 기존의 로직을 수정하니, 메인i 테이블인 item을 기준으로 페이징이 되는 문제가 발생했습니다. // page처리 시 문제가 발생하는 respository method@Query(value = "SELECT DISTINCT i FROM Item i LEFT JOIN FETCH i.productList WHERE i.id = :itemId",countQuery = "SELECT COUNT(p) FROM Product p WHERE p.item.id = :itemId")Page<Item> findWithProductsByItemId(@Param("itemId") long itemId, Pageable pageable); 그래서 제가 생각한 두가지 안이 있는데 이중에 어떤 것으로 개발해야할지 판단이 잘 서지않아 질문드립니다. 1) 응용계층에서 item에 대한 정보를 불러오는 item서비스 호출 + 위 item에 해당되는 product 리스트 정보들을 paging 하여 불러오는 페이징하여 불러오는 product서비스 호출 2) product를 메인으로 item과 n:1 패치조인하는 메소드를 productRepository에서 생성. 1번 방법이 맞는 것 같지만,, paging으로 데이터를 불러올 때마다 item쿼리를 한번씩 날려야하는게 비효율적인거 같기도하고,, 2번으로 하자니... 구현하고자 하는 기능은 item을 메인으로 product 목록을 불러오는 것인데,, 실제 동작은 Product가 메인으로(Product컨트롤러로 디스패치) 처리가 되다보니 이렇게 해도 될까 하는 의문이 들었습니다.이런 상황에서는 어떤 식으로 구현을 하는게 좋을지요. 고견을 여쭙니다 ㅠㅠ
-
미해결자바(javafx) 실전 데스크탑앱 프로젝트 - 유튜브관리앱
java11 ClipboardAssistance 를 찾지 못합니다.
다른 질문에서 eclipse 설정은 있는데혹시 intellij 에서 설정하는 법을 알 수 있을까요?
-
미해결김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음
src가 안떠요
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 아니오3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]여기에 질문 내용을 남겨주세요.강의에서는 src가 뜨는데 제 화면에는 src가 안떠요
-
미해결김영한의 실전 자바 - 고급 2편, I/O, 네트워크, 리플렉션
SocketException: Connection reset 에러가 뜨지 않습니다
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문 전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]java.net.SocketException: Connection reset네트워크 예외4- 강제종료 강의 중 위 에러가 뜨질 않습니다. 혹시나 서버에서 close() 호출 후 FIN packet을 보내는 것이 오래걸리나 싶어 Thread.sleep()도 3초에서 5초 가량으로 늘려보기도 했는데, "read = -1" 이라고 콘솔에 뜹니다. 반면, "java.net.SocketException: Broken pipe" 에러는 잘 뜹니다. 무슨 문제인지 잘 모르겠습니다.
-
미해결김영한의 실전 자바 - 중급 1편
try-with-resources질문
마지막 강의의 2: 10에서 close()메서드에서 예외가 안터진다 한들, 굳이 throws Exception을 "꼭" 제거해야하는 이유가 있나요? 어차피 안 없애도 문제는 없지 않나요? 메서드 옆에 throws Exception이거 적어주는 것은 단지 Exception예외가 일어났을때, 이 메서드에서 처리하지 않고 , 호출한 곳으로 예외를 던진다는 뜻인데.. 왜 꼭 제거하라고 한 건지 이해가 안갑니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
NotEnoughStockException 커스텀 Exception을 만든 이유가 궁금합니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 [질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]강의에서 NotEnoughStockException 을 새로 만드셨는데, IllegalArgumentException을 사용하는 것은 어색한가요? 처음엔 도메인에서 exception 처리 때문에 별도로 생성한 것이겠지하고, 넘어갔는데 주문 취소의 배송완료된 상태에서는 IllegalStateException 을 사용하셔서, 어떻게 구분하여 사용하는 것이 좋을지 궁금합니다.
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
값 타입 컬렉션에서 변경 감지는 어떻게 일어나나요?
em.flush(); em.clear(); System.out.println("============= START ============="); Member findMember = em.find(Member.class, member.getId()); // 1 // findMember.getHomeAddress().setCity("newCity"); // 2 Address oldAddress = findMember.getHomeAddress(); findMember.setHomeAddress(new Address("newCity", oldAddress.getStreet(), oldAddress.getZipcode())); // 3 findMember.getFavoriteFoods().remove("치킨"); findMember.getFavoriteFoods().add("한식");강의 코드와 동일하게, Member 엔티티는 임베디드 타입인 homeAddress와 값 타입 컬렉션인 favoriteFoods를 포함하며, 상술한 코드도 값 타입 컬렉션 강의에서 23:30 까지 설명해주신 것과 동일합니다. 1번 주석에서, 임베디드 타입인 homeAddress의 city 필드를 수정하기 위해 city의 setter를 이용하면, Member에서 참조하는 homeAddress의 참조값은 바뀌지 않기 때문에 변경 감지가 일어나지 않는다고 이해했습니다.따라서 2번 주석에서 볼 수 있듯이, 새로운 객체를 만들어 참조값을 바꿔주어야 변경 감지가 일어나 올바른 update가 될 수 있다고 이해했습니다.그러나 3번 주석에서의 값 타입 컬렉션 수정을 보면, 결국 Member 엔티티가 가리키는 참조값은 원본 favoriteFoods의 참조값과 다르지 않은데 DB에서는 update가 일어난 것을 확인했습니다. 어떠한 이유로 이런 결과가 나오게 되는지 궁금합니다.추가) 1번 주석의 코드를 실행할 경우, "newCity"로 변경이 되는 것을 확인했습니다. 참조값이 바뀌지 않는 데도 변경 감지가 일어나는 건가요? 아니면 제가 이해를 잘못하고 있는 부분이 있는 건가요..?
-
미해결김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
자바 병렬 처리
안녕하세요 영한님 ^^ 1기 인프콘때 뵈고, 오랜만에 강의를 보게되어서 반갑습니다 ㅎㅎ 다름이 아니라, 주문 체결 시스템을 개발하여서 병렬 처리 관련해서 공부 및 개발중인데 혹시 아래 링크책을 예전에 공부하신적 있으신가요? https://product.kyobobook.co.kr/detail/S000007668255아니면 다른 책 추천해주실만한게 있으실까요 ? ㅎㅎ아니면 이 강의 다보면 제가원하는 주문 체결 시스템을 만들기위한 기본 베이스는 이해가 될 수 있을까요?설날 잘보내시고 새해 복 많이받으세요 !
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
회원가입 테스트 오류메세지
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]회원가입 테스트 진행하는데 테스트 자체는 강의와 똑같이 잘 진행됩니다. 오류메세지가 계속 뜨는데 해결을 어떻게 해야되는지는 모르겠네요.--------------오류메세지------------Mockito is currently self-attaching to enable the inline-mock-maker. This will no longer work in future releases of the JDK. Please add Mockito as an agent to your build what is described in Mockito's documentation: https://javadoc.io/doc/org.mockito/mockito-core/latest/org/mockito/Mockito.html#0.3WARNING: A Java agent has been loaded dynamically (C:\Users\hyozz\.gradle\caches\modules-2\files-2.1\net.bytebuddy\byte-buddy-agent\1.15.11\a38b16385e867f59a641330f0362ebe742788ed8\byte-buddy-agent-1.15.11.jar)WARNING: If a serviceability tool is in use, please run with -XX:+EnableDynamicAgentLoading to hide this warningWARNING: If a serviceability tool is not in use, please run with -Djdk.instrument.traceUsage for more informationWARNING: Dynamic loading of agents will be disallowed by default in a future releaseOpenJDK 64-Bit Server VM warning: Sharing is only supported for boot loader classes because bootstrap classpath has been appended--------------오류메세지------------
-
미해결김영한의 실전 자바 - 기본편
상속 생성자 super과 this 사용
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예안녕하세요상속 생성자의 super 사용에 대해 궁금한 점이 생겨 질문을 남깁니다. 생성자를 사용 시 this를 사용해도 상위의 생성자를 만들기 위해 super();을 한 번은 호출해야 한다고 이해했는데, 하위 클래스에서 하나의 생성자 안에 this와 super();을 함께 사용하지는 못할까요 ? 만약 하나의 생성자 안에 this와 super을 함께 사용이 가능하다면 super을 먼저 쓰는지 this를 먼저 쓰는지에 따라 상위와 하위 생성자 할당 순서가 달라질텐데 무엇을 먼저 써주어야하는지가 궁금합니다. 좋은 강의 항상 감사드립니다 !
-
해결됨자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
미리 풀어 봤는데, 이 코드는 그다지 좋은 코드는 아니려나요?
import java.util.*; public class Main { public void solution(String str) { String upper = str.toUpperCase(); for (int i = 0; i<str.length(); i++) { if (str.charAt(i) != upper.charAt(i)) { System.out.print(upper.charAt(i)); } else { System.out.print(Character.toLowerCase(str.charAt(i))); } } } public static void main(String[] args) { Main main = new Main(); Scanner sc = new Scanner(System.in); String str = sc.next(); main.solution(str); } }정답 처리는 됐습니다.저는 solution() 메서드의 리턴 타입을 void로 두고, 이 메서드 내부에서 한 글자씩 print()로 출력했습니다. 이런 접근은 안 좋으려나요?
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
토이프로젝트에서 spring data jpa 기반으로 페이징 처리 중 궁금한 점 있습니다.
1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 아니오3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]먼저 강의 설명과 일맥상통한 부분일 것 같지만, Spring Data JPA를 바탕으로 토이프로젝트를 개발하고있고 Pageable 인터페이스를 활용하고 있습니다. 프로젝트에서 Item(품목)의 하위 개념으로 Product(제품)을 가지고 있습니다.(1:N - 품목 하나에 대해 여러개의 제품을 등록 할 수 있음)처음에는 특정 item을 클릭했을 때, 해당 item의 정보와 item에 등록된 하위 Product 리스트(목록을 보여주기 위한 일부 정보들만)를 보여주기 위해 item에 접급하는 Repository에 다음 메소드를 만들었습니다.@Query(value = "SELECT DISTINCT i FROM Item i LEFT JOIN FETCH i.productList WHERE i.id = :itemId", countQuery = "SELECT COUNT(p) FROM Product p WHERE p.item.id = :itemId") Page<Item> findWithProductsByItemId(@Param("itemId") long itemId, Pageable pageable);그런데 이렇게 하다보니 product가 아닌 item으로 페이징이 되는 것을 알았습니다. 이에 두 가지로 대책을 세웠는데 어떻게 해야할지 모르겠습니다. 1) 응용계층에서 item에 대한 정보를 불러오는 item서비스 호출 + 위 item에 해당되는 product 리스트 정보들을 paging 하여 불러오는 페이징하여 불러오는 product서비스 호출 2) product를 메인으로 item과 n:1 패치조인하는 메소드를 productRepository에서 생성. 1번 방법이 맞는 것 같지만,, paging으로 데이터를 불러올 때마다 item쿼리를 한번씩 날려야하는게 비효율적인거 같기도하고,, 2번으로 하자니... 제가 구현하고자 하는 기능과는 뭔가 다르게 개발하는거 같아 꺼림직 합니다.(item 중심의 조회 기능이 아닌 product기준의 조회) 긴글 읽어주셔서 감사합니다... 어떤식으로 구현하는게 맞는 방법일까요?