묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
JPA Cretieria와 QueryDSL
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]강의만 들었을때 JPA Cretieria와 QueryDSL 둘다 JPQL빌더 역할 하는것 같은데 자세한 차이 궁금합니다.
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
값 타입 컬렉션 PK
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]Hibernate: create sequence Member_SEQ start with 1 increment by 50 Hibernate: create table ADDRESS ( MEMBER_ID bigint not null, city varchar(255), zipcode varchar(255) ) Hibernate: create table FAVORITE_FOOD ( MEMBER_ID bigint not null, FOOD_NAME varchar(255) ) Hibernate: create table Member ( MEMBER_ID bigint not null, USERNAME varchar(255), city varchar(255), zipcode varchar(255), primary key (MEMBER_ID) ) Hibernate: alter table if exists ADDRESS add constraint FKsuulxb5rmrxvb83yr43ox86wn foreign key (MEMBER_ID) references Member Hibernate: alter table if exists FAVORITE_FOOD add constraint FKjchfnr69biisfgjdpoe82rpa4 foreign key (MEMBER_ID) references Member 위 그림에서 FAVORITE_FOOD 테이블에서 FOOD_NAME, ADDRESS 테이블에서 CITY, ZIPCODE 가 왜 PK가 되는지 궁금합니다.
-
해결됨실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
findOrders()에 fetch join 사용하지 않은 이유는 이거인가요?
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]N+1 문제 발생시에는 fetch join 을 사용하고,컬렉션이 포함된 조회는 XtoOne 도 fetch join 을 유지했었습니다. 이번 강의의 findOrders 에는 fetch join 이 아닌 일반 join 을 사용한 이유는findOrderItems 에서 OrderItems 를 따로 조회하기 때문에 일반 join 을 사용한건가요? Order -> member 는 ManyToOneOrder -> delivery 는 OneToOne 이라서 N+1 문제는 발생하지 않는다고 이해는 하고 있습니다!컬렉션타입인 OrderItems 는 별개의 쿼리를 이용해서 들고 오기 때문에 XtoOne 연관관계 엔티티를 조회하기 위해 fetch join 을 사용하지 않았다고 이해하면 될까요?
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
JPA 유의점과 V3.1 에 대한 질문입니다!
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용] 안녕하세요. JPA 유의점과 V3.1 에 대한 질문입니다!지금까지 수업을 들으며 제가 요약한 내용은Repository 에서 Entity 를 조회한다.해당 조회에서 N+1이 발생한다면 -> 회원목록을 조회한다면 N+1 이 발생하지 않지만, 회원목록 + 가장 최근에 주문한 상품1개 도 함께 조회를 한다면 N+1 문제가 발생한다. > 목록데이터를 조회하는데, 목록데이터 각각의 PK를 FK로 참조하는 다른 테이블의 데이터를 함께 조회하는데 Lazy 로딩일 경우 N+1 문제가 발생한다.N+1 이 발생할 경우 fetch join 으로 변경한다.해당 fetch join 쿼리에 컬렉션(리스트 등) 타입이 존재할 경우 select 문에서 컬렉션을 조회하는 쿼리를 지우고, XtoOne 연관관계에 있는 엔티티 조회는 fetch join 을 유지한다. + hibernate.default_batch_fetch_size 설정한다. 이렇게 정리했습니다! 혹시 정정해야하는 부분이 있을까요?? V3.1 에 대한 질문은, 조회쿼리에서 OrderItem은 없지만, Controller 에서의 @Data static class OrderDto { private Long orderId; private String name; private LocalDateTime orderDate; private OrderStatus orderStatus; private Address address; private List<OrderItemDto> orderItems; public OrderDto(Order order) { orderId = order.getId(); name = order.getMember().getName(); orderDate = order.getOrderDate(); orderStatus = order.getStatus(); address = order.getDelivery().getAddress(); orderItems = order.getOrderItems().stream() .map(orderItem -> new OrderItemDto(orderItem)) .collect(toList()); } } @Data static class OrderItemDto { private String itemName; //상품명 private int orderPrice; //주문가격 private int count; //주문수량 public OrderItemDto(OrderItem orderItem) { itemName = orderItem.getItem().getName(); orderPrice = orderItem.getOrderPrice(); count = orderItem.getCount(); } } 여기서 List<OrderItemDto> orderItems부분으로 인하여 proxy 로 들고 왔던 것을 실제 DB조회를 하여orderItems 에 값을 채워넣는 게 맞나요?
-
미해결스프링부트를 이용한 웹 프로그래밍: 웹사이트 이렇게 만드는 거예요!
메일 보내는 메서드에서
MemberEntity updateMember = memberRepository.save(findedMemberEntity);if(updateMember != null) {메일전송} 여기서 if(updateMember != null) 대신try catch 로 묶어서 하는것도괜찮나요 ?
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
docker mariadb 실행
백업은 안하려고 한참 헤메다, 결국 백업으로 해결했네요..ㅎ..환경: window pc에 mariadb client 버전을 설치함dump 생성client 버전이기 떄문에, “mariadb prompt” 를 실행해서 아래의 명령어 실행(cmd에서 mariadb, mysql 명령어 동작 안함)# 생성할 위치로 이동하시거나, 덤프 생성할때 경로 작성하시요. cd "어느 경로"/docker_file # 덤프 생성 mysqldump -u root -p --all-databases > all.sql Dockerfile 생성# Docker Hub에서 공식 MariaDB 이미지 사용 FROM mariadb:latest # 초기화 시 자동 실행될 SQL 복사 COPY ./all.sql /docker-entrypoint-initdb.d/ # 포트 개방 EXPOSE 3306 이미지 생성 및 컨테이너 실행docker build -t [당신의 게정은?]/mariadb:1.0 . docker run -d \\ -p 13306:3306 \\ --name mariadb \\ --network ecommerce-network \\ -e MARIADB_ROOT_PASSWORD=[당신의 root 비번]\\ kimjinwon1432/mariadb:1.0 =============== 추가 ==============강사님께서 알려주신 방법으로 진행해봤어요.일단, 제 pc의 mariadb 설치경로가 "C:\Program Files" 였기 때문에, mariadb폴더 내의 data 폴더와 그 하위 파일 및 디렉터리를 C: 밑에 우리가 사용하는 docker_file 폴더에 넣었습니다* Program Files를 경로로 잡으시면 13에러 코드가 발생합니다. 이는 권한 관련 문제이므로 cli에서 사용하시는 계정에 대해서 mariadb 폴더 내부에 권한을 주셔도 소용이 없어요.* 이 과정은 이전에 설치한 mariadb 이미지가 있으면 삭제?하거나 이미지의 이름을 변경해서 진행하세요.(전 삭제함) * 제 pc의 mariadb 의 버전이 11.4.2여서, docker에서 사용할 수 있는 가장 근접한 버전으로 진행했습니다. docker run -d -p 13306:3306 --network ecommerce-network \ -e MARIADB_ROOT_PASSWORD=[비번] \ --name mariadb -v "C:\study\SpringCloud\docker_files\data:/var/lib/mysql" \ mariadb:11.4.7이렇게 하시면 docker exec -it ~~~ /bin/bash를 통해서 db에 접속 후 데이터베이스를 확인하면 로컬에서 작업했던 db의 데이터가 docker로 전해진 것을 확인 할 수 있어요.
-
해결됨Spring Boot, AWS로 백엔드 서비스 한 사이클 완성하기
다운받은 강의자료 압축풀기가 안되요
다운은 되는데 압축풀기에서 오류가 뜨네요. 파일에 문제가 있을까요?
-
해결됨Spring Boot와 React로 배우는 초간단 REST API 게시판 만들기
DB에 데이터가 저장이 되지 않습니다.
내용을 다 따라한것 같은데 DB에 저장이 안되네요..
-
해결됨스프링 DB 2편 - 데이터 접근 활용 기술
h2 인메모리 테스트중 예약어 충돌날 경우 대처방법
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 아니오2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]개인프로젝트에서 운영 및 로컬DB는 mysql을 사용하고 유저 테이블 이름을 user라고 하였고, User.java 엔티티 클래스를 만들었습니다.테스트DB는 h2 인메모리db를 사용하여 진행했는데, h2에서 user 는 예약어이기 때문에 테스트 도중 sql구문이 맞지 않아 실패했다고 합니다.Caused by: org.h2.jdbc.JdbcSQLSyntaxErrorException: Syntax error in SQL statement "insert into [*]user (login_id,password,user_id) values (?,?,default)"; expected "identifier"; SQL statement: 위 문제를 해결하기 위해 구글링해보았는데mysql에서 테이블 명을 바꾸고 자바 코드의 User 이름들도 바꾼다.User.java 엔티티클래스에@Table(name = "\"user\"")를 추가하여 sql 구문이 생성될때 "user" 로 생성되게 하여 H2의 예약어 user를 피한다.테스트 db를 mysql로 설정한다.이런 방법들을 찾았습니다. 일단 추가적인 사이드 이펙트가 발생하지 않는 1번으로 했는데, 만약 김영한 선생님이라면 이 방법들중 어떤 방법을 사용할지, 아니면 또 다른 방법이 있는지 궁금합니다.
-
해결됨스프링 DB 2편 - 데이터 접근 활용 기술
커스텀aop와 트랜잭션을 같이 사용할때 우선순위에 관한 질문
트랜잭션도 @Transactional을 사용하면 일종의 aop로 작동하지 않습니까?@Transactional은 그러면 우선순위가 어느정도인지 궁금합니다.그리고 커스텀aop를 적용할때 트랜잭션보다 먼저 적용해야하는 건지도 궁금합니다.그리고 @Repository를 사용하면 sql 체크 예외를 DataAccess 언체크 예외로 바꿔주는 aop가 있다는데, 그러면 @Repository가 @Transactional보다 우선순위가 낮아야지 언체크 예외로 변한 예외를 보고 트랜잭션이 롤백을 할텐데, 그러면 Repository는 무조건 Transactional 보다 우선순위가 낮게 만들어진건지도 궁금합니다.
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
group_concat 사용자 정의 함수 등록하는 방법
섹션 11-9 JPQL 함수에서, 사용자 정의 함수(group_concat) 구현 시 Hibernate(6.4.2.Final)버전을 사용할 때 가능한 방법 공유드립니다. 강의에서 MyH2Dialect 클래스 구현하는 대신, FunctionContributor를 구현public class MyH2FunctionContributor implements FunctionContributor { @Override public void contributeFunctions(FunctionContributions fc) { TypeConfiguration typeConfig = fc.getTypeConfiguration(); SqmFunctionRegistry registry = fc.getFunctionRegistry(); // ✅ 문자열 반환 타입을 직접 조회 BasicType<?> stringType = typeConfig.getBasicTypeRegistry().getRegisteredType("string"); // ✅ 사용자 정의 함수 등록 registry.registerPattern( "group_concat", "group_concat(?1)", stringType ); } } 서비스 등록 (META-INF/services/org.hibernate.boot.model.FunctionContributor)jpql.MyH2FunctionContributor 예시 쿼리Team team = new Team(); team.setName("teamA"); em.persist(team); Member member = new Member(); member.setUsername("관리자"); member.setAge(10); member.setType(MemberType.ADMIN); Member member2 = new Member(); member2.setUsername("사용자2"); member2.setAge(10); member2.setType(MemberType.USER); member.changeTeam(team); em.persist(member); em.persist(member2); em.flush(); em.clear(); String query = "select group_concat(m.username) from Member m"; List<String> result = em.createQuery(query, String.class).getResultList(); for (String s : result) { System.out.println("s = " + s); }결과 쿼리Hibernate: /* select group_concat(m.username) from Member m */ select group_concat(m1_0.username) from Member m1_0s = 관리자,사용자2
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
실제 실무에서 RestController 하나로만 개발이 가능한가요?
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]RestController 는 JSON 으로 응답을 돌려주는 역할을 하며 redirect 와 같은 것을 사용하지 않는 이상 view페이지로 리턴해주는 건 따로 없고, 권장하지 않는다고 배웠습니다. view 페이지 이동 및 view 에서 표출할 단순한 데이터는 @Controller , "기능"에 관련된 것은 @RestController 을 사용해야할 거 같습니다. 예를 들어, 1. 회원목록 페이지 이동은 Controller 및 회원목록조회(DB조회) -> member_list.html 리턴2. 회원상세보기 페이지 이동은 Controller 및 회원상세조회(DB조회) -> member_detail.html 리턴3.회원 상세보기페이지에서의 수정 기능은 RestController 및 JSON 응답 리턴 이렇게 구현이 되어야할 거 같더라구요 !RestAPI 및 @RestController 형식을 사용한다하더라도 전체를 RestController 를 사용하는 건 구현에 무리도 있고 권장되지 않는 거 같기도 하더라구요.패키지 구조로 치면domain(package)-member(package)-controller(package) > MemberApiController.java, MemberController 이렇게요! RestController 하나만 사용하게 된다면메인페이지에서 [회원목록] 을 클릭한다.클릭과 동시에 axios/fetch 등의 비동기 통신이 이루어진다.비동기통신의 url 은 회원목록데이터를 return 하는 @RestController 메서드에 도착한다.응답이 성공하면 axios/fetch 비동기 메서드에 200코드와 회원목록데이터를 전달한다.응답이 성공하면 그 데이터를 회원목록페이지를 보여주는 @RestController 에 다시 전달한다.해당 RestController 메서드가 전달받은 데이터를 view페이지에 표출한다.순서가 이렇게 될 거 같은데5번의 회원목록 페이지를 보여주는 RestController 또한 view 페이지를 열수없으니, redirect 와 같은 걸 사용해야할 거 같더라구요. 상당히 복잡하고 비효율적인거 같아 RestController(기능) 와 Controller(view 페이지 이동) 을 분리해서 사용하기로 결정했는데 실제 현업/실무에서도 @RestController(ResponseEntity) 와 @Controller(ModelAndView) 를 위처럼 기능 / view 페이지 이동 이렇게 구분해서 사용하나요?아니면 RestController(ResponseEntity) 하나만 사용하나요?만약 구분해서 사용해야한다면MemberApiController 는 ResponseEntity 메서드MemberController 는 ModelAndView 메서드 를 작성하는 것을 염두에 두고 있습니다 !
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
컬렉션 조회 최적화 질문
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예안녕하세요. 강의를 듣다가 제가 컬렉션 조회 최적화에 대해 이해했던 내용을 정리해봤는데 맞는지 확인해주실 수 있을까요??
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
아이솔레이션 레벨에 관한 내용도
관련 내용도 이 강의에 들어가있을까요?아니면 다른 강의에있을까요?
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
jpa와 기타 db 기술을 혼합해서 사용할 때 질문드립니다.
여러가지 repository를 만들어야하나요?예를들어서 mybatis, jdbctemplate, 스프링jpa, 순수jpa, querydsl을 사용한다고 할때mybatisRepo, JdbcRepo, 스프링JpaRepo, 순수Jpa + querydslRepo, 이런식으로 다 나눠서 하는게 맞는걸까요?? 그러면 강의에서 말씀해주신 것처럼 DIP 원칙은 위배될텐데 그래도 되는걸까요? DIP원칙 위배되지 않게 하기위해서 각 repo별로 인터페이스 만드는것도 뭔가 이상해보이기도 하고... 헷갈리네요 Jpa를 사용한 후에, mybatis나 jdbctemplate같이 수정과 조회를 디비에서 체크하는 db기술을 사용한다고 할때, 이전 jpa 사용에서 어떤 수정이 이루어졌었다면 그건 영속성 컨텍스트에 저장되어있기만하고 아직 flush를 하지 않아서 디비엔 반영이 안되어 있는 상태라서 mybatis나 jdbctemplate를 이용할 때 뭔가 데이터 정합성이 안맞는다거나 하는 문제가 발생할 수 있기에(뇌피셜) 아무튼 jpa 사용 후 mybatis, jdbctemplate 사용하려면 사용하기 전엔 flush를 꼭해줘야 한다고 하셨는데, 그러면 service 레이어에서 entitymanager를 의존받아야 하는데 이게 맞는건지 궁금합니다. jpa 기술을 서비스레이어까지 끌고오는게 어찌보면 좀 안맞는거같고 그걸 피하기 위해서 트랜잭션 aop를 사용한것 같은데... 그래도 db기술 혼합사용시에는 그냥 service 레이어에 entitymanager를 의존받는게 맞는걸까요?jpa를 이용한 db 처리방식은 효율적인 건가요??항상 효율적인 것 같지는 않지만, 영속성 컨텍스트를 체크해서 결국 마지막에 최종 변환 된 것만 쿼리를 날려서 수정을 한다던가 하는 부분은 뭔가 효율적인것처럼 보이지만서도, 단순히 update하나만 한다고 가정하면, find로 select 쿼리를 한번 날리고 setXXX으로 객체에 뭔가 변화를 줘서 커밋직전 flush에서 update쿼리를 한번 더 날린다고 생각하면 또 비효율적인거 같기도하고 잘 모르겠습니다.
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
프록시 객체와 엔티티 객체를 연결짓는 부분만 초기화 문의, 초기화란?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]em.getReference() 시 처음으로 영속성 컨텍스트에서 프록시 객체 반환 후 find() 메소드 호출하면 그대로 프록시 객체가 반환되는걸로 이해하였습니다.find()시 실제 DB에 접근하여 데이터를 가져오는데 이를 실제 엔티티에 저장하고프록시 객체와 엔티티 객체를 연결짓는 부분만 초기화?(재설정) 하는건가요?!초기화 라는 용어가 헷갈리고, 실제 DB 데이터를 어떻게 프록시 객체와 연결하는지 궁금합니다!
-
미해결스프링부트를 이용한 웹 프로그래밍: 웹사이트 이렇게 만드는 거예요!
인터셉터 질문
강의 잘보고있습니다. 감사합니다 인터셉터와, 필터가있는데인터셉터로 적용한 이유가 있을까요 ?? --그리고 인터셉터 설정할때@Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(memberSigninInterceptor) .addPathPatterns("/member/modify"); }지금 상황에선 excludePathPatterns 설정을 굳이 안해줘도 문제가없지 않나요 ? 강의에서는 해주셨는데
-
해결됨실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
DTO 내 생성자 관련 질문입니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]@Data static class OrderDto { private Long orderId; private String name; private LocalDateTime orderDate; private OrderStatus orderStatus; private Address address; private List<OrderItemDto> orderItems; public OrderDto(Order order) { orderId = order.getId(); name = order.getMember().getName(); orderDate = order.getOrderDate(); orderStatus = order.getStatus(); address = order.getDelivery().getAddress(); orderItems = order.getOrderItems().stream() .map(orderItem -> new OrderItemDto(orderItem)) .collect(Collectors.toList()); } } 생성자 관련한 질문입니다!생성자에서orderItems = order.getOrderItems().stream() .map(orderItem -> new OrderItemDto(orderItem)) .collect(Collectors.toList());이와 같은 코드를 작성하셨는데 ,Dto 에 보통 Lombok 이용해서 생성자 자동생성을 사용하게 되는데, 이것처럼 손으로 작성하게 되면 생성자(Constructor)LomBok 은 사용하지 않는건가요? 아니면 생성자 자동생성 lombok 을 사용하면 위의 손으로 작성한 코드처럼 자동생성이 되는건가요?
-
해결됨실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
엔티티 조회와 fetch join 의 경우 이런 상황일 때 유의하여 사용하면 될까요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]V3 예시에서 N+1 문제를 보여주셨습니다. N+1 문제가 발생한 원인과 상황을 설명들으며 생각해보았는데,1.마이페이지 (회원 단건 조회, 회원정보(member), 최근주문(order) ) 이런 데이터만 보여준다면 n+1 문제는 발생하지 않을 거 같습니다.다만1.마이페이지 (회원 단건 조회, 회원정보(member), 최근주문(order) , 최근주문별 배송현황(delivery)) 는[회원조회][최근주문A][최근주문B]이때 각 최근주문별 딜리버리를 조회하여또 쿼리가 많이 나가게 되는 상황이 발생할 거 같습니다.단순한 단건 데이터 조회(내정보)는 엔티티 조회를 사용해도 N+1 문제에서 자유로울 수 있으나 작성자 등의 PK가 전부 다른 데이터 리스트에서의 join 형식 데이터 목록을 조회할 경우 N+1 문제가 자주 발생할 거 같습니다.이럴 때 fetch join 을 사용하면 되는건가요?
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
수업 방식 질문
맨 마지막 섹션 19는 그냥 차례대로 읽으면서 진행하면 되는건가요 ?어떻게 학습을 해야 하는건가요 .. ;; 그리고 이번에 새롭게 강의 내셨던데 기존거랑 뭐가 다른건가요 ? 얼마전에 강의 산 사람은 어떻게 하나요 ?