inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

173만명의 커뮤니티!! 함께 토론해봐요.

조건(where)을 포함한 일대다(1:N) 페이징 쿼리 질문

미해결

실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화

안녕하세요. 영한님 20만 수강생 진심으로 축하드립니다.^^🎉 프로젝트 도중에 막혀서 강의를 👀복습하던 중 질문드립니다..! (영한님 강의 덕분에 저도 이러한 고민을 하게되다니... 감사의 말씀 드립니다.😊) 페이징이 가능하고 item.name 으로 order 를 조회하려고 하면 어떠한 방식으로 코드를 작성 해야할까요? 일단 제가 생각한 방법은 다음과 같습니다. V3.1 적용 요구사항은 회원( member ), 결제( payment ), 배송( delievery ), 주문 상품( orderItem )을 포함해서 페이징이 되도록 주문( order )을 조회하고, 조건으로 상품 이름( item.name )으로 조회가 가능 해야 하는 것 입니다. orderItem 은 일대다 관계 이기 때문에 페이징이 불가합니다. 그래서 V3.1의 방법인 hibernate.default_batch_fetch_size 을 이용하여 IN 쿼리로 orderItem 을 조회하려고 합니다. 이렇게 하면 페이징이 가능하도록 order 는 조회할수는 있지만, item.name 을 조건으로 조회 할 수는 없습니다. V5 적용 그래서 V5에서 알려주신 방법을 사용했습니다. order 와 orderItem 을 분리한다. order 을 이용하여 orderItem 을 조회한다.(추가로 item.name 조건도 넣는다.) 조회한 결과를 하나의 List 으로 만든다. List 을 다시 Page 로 변환한다. public Page<AdminOrderListQueryDto> findOrdersByAdmin(Pageable pageable, OrderSearchCondition condition) { // 주문 전체 조회 List<AdminOrderListQueryDto> content = queryFactory .select(new QAdminOrderListQueryDto(order.id, order.status.stringValue(), order.safeKingPayment.amount, order.createDate, order.merchantUid, new QAdminOrderListPaymentQueryDto(order.safeKingPayment.status.stringValue()), new QAdminOrderListMemberQueryDto(order.member.name), new QAdminOrderListDeliveryQueryDto(order.delivery.receiver, order.delivery.status.stringValue())) ) .from(order) .leftJoin(order.safeKingPayment, safekingPayment) .leftJoin(order.delivery, delivery) .leftJoin(order.member, member) .where( orderBetweenDate(condition.getFromDate(), condition.getToDate()), deliveryStatusEq(condition.getDeliveryStatus()), paymentStatusEq(condition.getPaymentStatus()) ) .orderBy(order.createDate.desc()) .fetch(); // 주문 아이디 저장 List<Long> orderIds = content.stream() .map(o -> o.getId()) .collect(Collectors.toList()); // 상품명으로 검색 조건 Map<Long, List<AdminOrderListOrderItemQueryDto>> orderItemMap = findOrderItemMap(orderIds, condition.getKeyword()); // 주문객체에 주문 상품컬렉션 저장 content.forEach(o -> o.setOrderItems(orderItemMap.get(o.getId()))); // 주문상품이 null이 아닌 컬렌션으로 구성 List<AdminOrderListQueryDto> resultContent = content.stream() .filter(o -> o.getOrderItems() != null) .collect(Collectors.toList()); // List를 Page로 변환 PageRequest pageRequest = PageRequest.of(pageable.getPageNumber(), pageable.getPageSize()); int start = (int) pageRequest.getOffset(); int end = Math.min(start + pageRequest.getPageSize(), resultContent.size()); if(start > end) { throw new OrderException("데이터가 없습니다. 관리자에게 문의하세요."); } return new PageImpl<>(resultContent.subList(start, end), pageRequest, resultContent.size()); } private Map<Long, List<AdminOrderListOrderItemQueryDto>> findOrderItemMap(List<Long> orderIds, String keyword) { // 주문 상품 검색(item.name 조건 포함) List<AdminOrderListOrderItemQueryDto> orderItems = queryFactory.select(new QAdminOrderListOrderItemQueryDto(orderItem.order.id, orderItem.id, orderItem.item.name)) .from(orderItem) .leftJoin(orderItem.item, item) .where( orderItem.order.id.in(orderIds), keywordContains(keyword) ) .fetch(); // Map 으로 변환 Map<Long, List<AdminOrderListOrderItemQueryDto>> orderItemMap = orderItems.stream() .collect(Collectors.groupingBy(orderItemQueryDto -> orderItemQueryDto.getOrderId())); return orderItemMap; } // 아이템이름 포함 조건 private BooleanExpression keywordContains(String keyword) { return hasText(keyword) ? item.name.contains(keyword) : null; } 이러한 방식을 사용하는게 맞을까요? 🤔 감사합니다.^^

  • spring
  • java
  • spring-boot
  • JPA
  • jpa
  • spring-boot
개발하는쿼카 댓글 1 좋아요 2 조회수 1251

request inputStream 로깅 관련

미해결

스프링 MVC 2편 - 백엔드 웹 개발 활용 기술

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예 [질문 내용] 공통처리는 필터보다는 인터셉터를 우선적으로 고려하라고 말씀해 주셨었는데요, 모든 요청에 대해 request 의 inputStream 을 이용해 requestBody 로깅을 한다고 했을때 필터와 인터셉트 중 어느것을 사용하는게 더 적절하다고 보시는지 궁금합니다.

  • mvc
  • MVC
  • spring
JaeWon Lee 댓글 1 좋아요 0 조회수 438

안녕하세요 야생형 코스 관련 질문 드립니다.

해결됨

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

안녕하세요. 오늘도 질문을 남기러 왔습니다. 자주 올려서 죄송합니다ㅠ 저는 이제 국비지원학원에서 JSP + SERVLET을 기반으로하는 팀 프로젝트를 마치고 스프링 강의에 들어갑니다. 학원 강의를 따라가기 위해, 김영한 강사님의 스프링 입문, 스프링 핵심 원리(기본편) 강의로 스프링을 예습을 해둔 상태입니다. 원래대로라면 다음 강의로 스프링 MVC 1편을 들을 예정이었지만, 강사님 조언에 따라서 야생형 코스를 밟고자합니다! 저 같은 상황이라면 바로 JPA 활용 1편으로 넘어가면 되는게 맞을까요? 학원 커리큘럼이 mybatis 기반이라 JPA를 선행학습하는게 맞나 고민이 생겨서 질문 드립니다 ㅠㅠ...

  • spring-boot
  • spring-boot
  • JPA
  • spring
  • jpa
  • java
  • 웹앱
댓글 1 좋아요 1 조회수 594

Integer.parseInt,와 Integer.valueof 의 차이가 궁금합니다.

미해결

나도코딩의 자바 기본편 - 풀코스 (20시간)

int i = Integer.parseInt("93"); System.out.println(i); int i = Integer.valueOf("93"); System.out.println(i); 두 개다 93으로 출력이 되는데 둘 다 맞는 문법인가요? 문자를 정수로 바꿔준다는 기능은 똑같은거 같은데.. 차이가 뭔지 잘 모르겠습니다..

  • 객체지향
  • oop
  • java
cjygisa 댓글 1 좋아요 0 조회수 6127

백엔드 개발자 커리큘럼이 어떻게 되나요?? (인프런강의)

미해결

강의가 다양해서 어느 순서로 공부해야하는지 잘 모르겠습니다. 인프런 내에서 들을 수 있는 강의로 커리큘럼을 짜주세요. 혼자서 개인프로젝트 만들 수 있는 수준으로 커리큘럼 짜고 싶습니다.

  • 백엔드
  • 자바
  • java
  • 스프링
쿠루 댓글 0 좋아요 0 조회수 555

38강 질문

미해결

자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]

안녕하세요 강의 잘 듣고 있습니다. 강의를 듣다 질문이 있어서 글 남깁니다! profiles 설정을 할때 인텔리제이 무료 버전이라 add vm options 를 -Dspring.profiles.active=local 로 설정하면 local로 설정할 수 있다고해서 이런식으로 일단 profiles를 local로 설정했는데 홈페이지 실행 후 접속하니 mysql에서의 정보가 그대로 남아있습니다. local설정을 잘 했는데 h2에 연결이 안되는거 같은데 원인이 무었일까요? 그리고 h2사이트에 접속해 강의 내용대로 connect를 하니 접속이 안됩니다...

  • java
  • spring
  • aws
  • spring-boot
  • jpa
  • mysql
  • JPA
오늘내일 댓글 1 좋아요 1 조회수 447

DB 값 질문

해결됨

실전! 코틀린과 스프링 부트로 도서관리 애플리케이션 개발하기 (Java 프로젝트 리팩토링)

안녕하세요 코틀린강의부터 코프링까지 잘 듣고 있습니다. 바로 질문 드리자면,! 1.saveUserTest2라는 테스트케이스를 한 개 더 만들어서 모든 테스트를 진행 시킨다면, saveUserTest는 통과하지만 saveUserTest2는 DB데이터가 2개 가 있어서 통과되지 못 합니다. 이럴 때는 어떻게 해야 독립적으로 DB값을 가지게 할 수 있나요? @Transactional 쓰는 rollback된다고 얼핏 들은 거 같은데 잘 모르겠네요.. 2.실제 h2 DB에는 유저가 2명이 저장이 되어 있는데 테스트환경에서는 0명인 이유는 @SpringBootTest 어노테이션이 실제 실행환경과 완전히 독립된 환경을 만들어 주어서 그런 건가요? 감사드립니다.

  • refactoring
  • spring
  • spring-boot
  • kotlin
  • 리팩토링
  • java
차가운물 댓글 1 좋아요 1 조회수 486

root-context.xml hikari쪽 문제입니다.

미해결

스프링 프레임워크는 내 손에 [스프1탄]

<property name=“jdbcUrl" value="jdbc:mysql:// localhost:3306/com?serverTimezone=UTC"/ > 이 부분의 property name을 발견할 수 없다고 빨간 엑스가 떠서요 pom.xml 이나 나머지는 다 pdf 내용대로 진행했는데 이유를 모르겠습니다.

  • spring
  • mvc
  • MVC
  • spring-security
  • Spring Security
  • jsp
나도훈 댓글 1 좋아요 0 조회수 421

Authorization Code 궁금증이 있습니다.

해결됨

스프링 시큐리티 OAuth2

안녕하세요 선생님 강의 잘 듣고 있습니다 Authorization Code 요청하기 강의를 듣고 궁금한점이 생겨서 질문 올립니다 이번 강의의 핵심은 임시코드 발급하기 였습니다 클라이언트가 keyCloak 와 연동해서 어떻게 redirect uri 를 만들고 어떻게 요청을 하고 인증이 완료 되는것도 같이 해보았습니다 다만 저는 좀 궁금한게 선생님이 총 2개의 로그인 방식을 보여주셨다고 생각합니다 이 링크를 클릭했을때의 방식 다른 방식은 세션을 완전히 제거한 이 화면에서 로그인 하는 방식을 보여주셨습니다 여기선 궁금한건 이번강의 주제는 임시코드를 발급받는 Filter 에 대해서 공부중인데 첫번째 스크린샷에서는 선생님이 말씀하신 대로 OAuth2AuthorizationRequestRedirectFilter 에서 잘 요청이 들어옵니다 requset 가 "/oauth2/authorization"; 들어오기 떄문인데 두번쨰 스크린샷에서는 전혀 이 필터를 태우지 않습니다 저는 임시코드 발급이라고 하길래 지금 할려는 스크린샷 1 , 2 두 행동 모두가 임시코드를 발급받기 위한 행동으로 알고 있습니다 그런데 첫번째 스크린샷은 OAuth2AuthorizationRequestRedirectFilter 필터를 태우고 두번째 스크린샷은 OAuth2LoginAuthenticationFilter 이 필터를 태우고 있습니다 이 앞의 configure 강의에서도 요청 순서 말씀하시면서 OAuth2AuthorizationRequestRedirectFilter 가 먼저 요청을 받아서 임시코드를 받아오고 그 다음 OAuth2LoginAuthenticationFilter 가 진행된다 라고 하셔서 제가 지금 혼동이 오는거 같습니다. 앞의 부분에서 제가 놓친 부분이 있을까요 선생님?

  • java
  • spring
  • spring-boot
  • oauth
김동연 댓글 1 좋아요 0 조회수 419

@ExceptionHandler

미해결

스프링 MVC 2편 - 백엔드 웹 개발 활용 기술

[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/) [질문 내용] @ExceptionHandler 을 사용해도 인터셉터의 postHandle는 실행이 안되는게 맞나요?? 로그에서는 postHandle을 건너뜁니다 @ExceptionHandler을 사용하면 정상 흐름으로 바꿔주는걸로 이해했는데 postHandle을 건너뛰는건 맞는건가요 ??

  • mvc
  • MVC
  • spring
기팝 댓글 1 좋아요 0 조회수 430

실전예제 4 - 상속관계 매핑 11:05

해결됨

자바 ORM 표준 JPA 프로그래밍 - 기본편

안녕하세요. 실전예제 4 - 상속관계 매핑 11:05 부분에서 'json으로 말아넣는다'는 의미가 어떻게 넣는다는 의미인가요?

  • jpa
  • java
  • JPA
댓글 1 좋아요 2 조회수 536

서비스 운영 중에 @MappedSuperclass 확장 가능 여부

해결됨

자바 ORM 표준 JPA 프로그래밍 - 기본편

안녕하세요. @MappedSuperclass 어노테이션을 사용하는 BaseEntity 클래스는 아래와 같은 필드를 갖고 있습니다. CREATEDBY CREATEDDATE LASTMODIFIEDBY LASTMODIFIEDDATE 여기서 궁금한 점이 하나 생겼는데요. 만약 처음에 100개의 클래스 중 100개 클래스 모두가 BaseEntity 클래스를 상속받아서 공통 필드를 사용하고 있습니다. 그런데 운영중에 100개 중 50개의 클래스에서만 사용하는 공통 필드가 추가되면 이런 경우에는 어떻게 처리하면 좋을까요? 자바에서 상속은 1개만 할 수 있어서 고민이 됩니다. 50개의 클래스에 노가다로 필드를 입력해야 좋을지,,

  • jpa
  • java
  • JPA
kekekiki 댓글 1 좋아요 0 조회수 512

[순수JS 1] 검색결과 2 reset 버튼 이런식으로 하면 문제되는 점이 있을까요?

미해결

[React 1부] 만들고 비교하며 학습하는 React

안녕하세요 선생님 강의 잘 듣고 많이 배워가고 있는 초보자입니다. 저는 searchResultView의 element의 innerHTML을 초기화 해버리는 식으로 풀이를 했었는데요, 혹시 이러면 나중에 문제가 발생할 수 있는 부분이 있을까요?

  • react
  • mvc
  • MVC
그너씨 댓글 1 좋아요 0 조회수 385

UserHandlerExceptionResolver

미해결

스프링 MVC 2편 - 백엔드 웹 개발 활용 기술

[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/) [질문 내용] 여기에 질문 내용을 남겨주세요. MyHandlerExceptionResolver 는 에러가 터지면 서블릿 컨테이너까지 가고 또 다시 /error을 요청하고 UserHandlerExceptionResolver 이건 그냥 바로 그자리에서 끝내는데 그 차이가 response.sendError(...) 이 response.SendError 해주냐 안해주냐 차이라고 생각하면 될까요 ?

  • mvc
  • MVC
  • spring
기팝 댓글 1 좋아요 6 조회수 602

왜 findByLoginId는 Optional로 반환하나요?

해결됨

스프링 MVC 2편 - 백엔드 웹 개발 활용 기술

[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예 [질문 내용] 안녕하세요! MemberRepository 코드 중에 findById 는 예전 강의에서 스펙상 Member 객체를 반환하는걸로 권고(?)된다고 들었던 것 같은데, 그렇다면 왜 findByLoginId 는 Optional<Member> 로 반환하는건가요? Optional이 NullPointerException 발생을 줄이기 위해 래퍼 역할을 한다는 것은 알겠는데, 두 메서드의 반환값 차이가 있는 이유가 무엇인지 궁금합니다!

  • mvc
  • spring
  • MVC
gyuray 댓글 1 좋아요 0 조회수 604

thymeleaf 적용이 안됩니다.

미해결

스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술

========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예 [질문 내용] 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 상품목록 - 타임리프 진행중에 문제가 생겼습니다. 타임리프에 문제가 있는지.. 변수가 안담깁니다. 구글링으로 찾아봐서 캐쉬초기화도 해봤고 " http://www.thymeleaf.org " 를 http://thymeleaf.org 로 변경도 해봤지만 경고문만 사라지고 해결되지 않았습니다. 근데 여기서 이상한건 th:onclick="|location.href='@{/basic/items/add}'|" 이 타임리프 문장은 작동이 되는것 같아요 저 코드대로 /basic/items/add 경로로 이동이 됩니다. 자바코드에 문제가 있나 확인도 해봤지만 문제점을 찾지 못했습니다 확인해야할게 더 있으면 알려주시면 감사하겠습니다...

  • spring
  • mvc
  • thymeleaf
  • MVC
재사앙 댓글 2 좋아요 0 조회수 2854

스프링 부트 3.0 + Querydsl 설정 관련

미해결

실전! Querydsl

안녕하세요! 강의 잘 듣고 있습니다 감사합니다. 강의를 따라가다가 잘 안되는 부분이 있어서 질문글 하나 남겨봅니다. Gradle -> Tasks -> build -> clean Gradle -> Tasks -> other -> compileQuerydsl 실행 시에 정상적으로 Q타입 클래스가 생성이 됩니다. 그런데 이후에 테스트 코드를 돌려보면 이런 오류가 뜹니다. 이것저것 해보다가 build파일이 없는 상태에서(삭제 후에) 테스트를 돌리면 돌아가긴 합니다. 정상적으로 빌드해서 돌려보고 싶은데 설정을 어떻게 바꿔야 할까요? https://drive.google.com/file/d/1H7Sz9Z994odDceIhuTp9S4bpfvhDjxAr/view?usp=sharing 구글 드라이브 링크입니다.

  • jpa
  • JPA
  • java
댓글 2 좋아요 1 조회수 4409

값 타입을 불변 객체로 만드는 것과 변경 감지랑은 관련 없는 걸까요?

해결됨

자바 ORM 표준 JPA 프로그래밍 - 기본편

안녕하세요, 값 타입을 불변 객체를 만들 때 궁금한 점이 생겨 질문드립니다. 상황을 가정해서 질문드리겠습니다. 상황 값 타입을 불변 객체로 만들어서 값을 수정하기 위해, 새로운 불변 객체를 만들어 엔티티의 필드값을 변경합니다. 질문 위 상황에서 "JPA 관점에서는 어쨌든 컬럼값이 변경되어야 하니까 변경 감지는 계속 일어나고 있다." 처럼 이해해도 괜찮을까요?

  • jpa
  • java
  • JPA
동해물과백두산이마르고닳도록 댓글 1 좋아요 0 조회수 438

GetMapping, PostMapping

미해결

스프링 MVC 2편 - 백엔드 웹 개발 활용 기술

클라이언트와 서버간의 동작에 대해 헷갈려서 여쭤보려구요!! 웹 브라우저에 localhost:8080/form/items/add 라고 치면 addForm(Model model) 메서드가 동작해 모델에 "item"이라는 이름에 빈 객체 Item을 넣고 form/addForm 타임리프 페이지를 렌더링 해서 브라우저에 띄운다. 상품 등록 폼에서 상품명, 가격, 수량을 작성해서 상품 등록 버튼을 누르는 순간 @PostMapping의 addItem 메서드가 호출되어 해당 메서드의 로직을 실행한다고 보면 될까요? 위 코드로 스프링 MVC 동작 방식과 순서를 알고 싶습니다.

  • mvc
  • MVC
  • spring
윤토벤 댓글 1 좋아요 0 조회수 343

스프 1, 2탄 전자정부프레임워크에서만 사용할 수 있나요?

미해결

스프링 프레임워크는 내 손에 [스프1탄]

프로젝트를 전자정부프레임워크에 사용하고 있던데 일단 전자정부프레임워크 바탕으로 공부하되 나중에 수업내용을 다른 곳에 적용할 수 있을까요? 스프링 레거시 프로젝트는 이제 점점 안쓰이고 있는 추세인것 같은데 배워두면 도움이 될까요? 취준생입니다.ㅜㅜ 전자정부프레임워크만 사용하는 곳에 취직한다면 환경설정을 어렵게 할 필요없어서 상관이 없겠는데요. 다른 이클립스, 인텔리제이를 쓰는 곳에 들어가면 꽤나 곤란할 것 같아서요. 특히 인텔리제이로 예제를 실행하면 자꾸 오류가 나서요. 원래 전자정부프레임워크르 바탕으로 만들어진 예제같아서 잘 안되는 것 같은데요 수업자료는 정말 정말 괜찮은데 프로젝트를 전자정부프레임워크에서만 쉽게 실행이 가능하면 환경설정에 약한 처음 공부하는 입장에서 꽤나 곤란할것 같아서요 ㅠㅠ 인텔리제이는 잘 몰라도 이클립스 가지고 프로젝트를 구축하는 방법도 나중에 설명해주셨으면 합니다

  • spring
  • mvc
  • Spring Security
  • spring-security
  • MVC
  • jsp
정원준 댓글 2 좋아요 0 조회수 2142

인기 태그

인프런 TOP Writers

주간 인기글