묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
default_batch_fetch_size 관련질문
안녕하세요 선생님 최근 default_batch_fetch_size 관련 질문과 비슷한 상황이지만 조금 다릅니다. 현재 A 테이블과 B테이블이 one to many 로 연관관계가 있고 현재 A 테이블 기준으로 쿼리를 날린다음(테이블 B는 페치조인하지 않음) 서비스 단에서 (테이블 B)부분 lazy를 강제 초기화 해주고 있습니다. 제가 batchsize를 다르게 주면서 테스트를 해보았습니다. 1. 쿼리 결과물 : 180개(A 테이블 기준 결과물 갯수) B 테이블의 결과물은 1073개 default_batch_fetch_size=100 in 절에 나가는 batch size= 100, 50, 25, 5 총 4번 비정상 fetch size되로면 2번에 나가야함 2.쿼리 결과물 : 180개(A 테이블 기준 결과물 갯수) B 테이블의 결과물은 1073개 default_batch_fetch_size=80 in 절에 나가는 batch size= 80,80,20 총 3번 정상 3.쿼리 결과물 : 180개(A 테이블 기준 결과물 갯수) B 테이블의 결과물은 1073개 default_batch_fetch_size=500 in 절에 나가는 batch size= 125, 31, 15 ,9 총 4번 비정상 fetch size되로면 1번에 나가야함 4.쿼리 결과물 : 180개(A 테이블 기준 결과물 갯수) B 테이블의 결과물은 1073개 default_batch_fetch_size=180 in 절에 나가는 batch size= 180 총 1번 정상 5.쿼리 결과물 : 30개(A 테이블 기준 결과물 갯수) B 테이블의 결과물은 23개 default_batch_fetch_size=100 in 절에 나가는 batch size= 25, 5 총 2번 비정상 fetch size되로면 1번에 나가야함 6.쿼리 결과물 : 30개(A 테이블 기준 결과물 갯수) B 테이블의 결과물은 23개 default_batch_fetch_size=30 in 절에 나가는 batch size= 30 총 1번 정상 7.쿼리 결과물 : 30개(A 테이블 기준 결과물 갯수) B 테이블의 결과물은 23개 default_batch_fetch_size=20 in 절에 나가는 batch size= 20, 10 총 2번 정상 8.쿼리 결과물 : 30개(A 테이블 기준 결과물 갯수) B 테이블의 결과물은 23개 default_batch_fetch_size=500 in 절에 나가는 batch size= 15, 15 총 2번 비정상 fetch size되로면 1번에 나가야함 혹시 자체적으로 최적화 알고리즘이 적용되면서 이렇게 제각각 나가는건가요? 아니라면 혹시 저 in 절을 만드는 부분을 디버깅을 해볼려면 어떤 클래스를 찾아보면 될까요?
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
오버라이드 단축키
오버라이드 단축키가 어케 되나요?? 구글에서 찾아보니 ctrl+o 하라는데 저런식으로 선택하는?? 화면은 안나오더라구요
-
해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
스테이징 서버가 무엇인가요?
안녕하세요? 강의 듣다가 궁금해져서 질문합니다. 인터넷에서 검색해보니 스테이징 서버가 임시 서버로 해석이 된다고 하더라구요.ㅎㅎ 그러면 스테이징 서버를 만드는게, 실제로 운영하기 직전에 운영서버와 비슷하게 만들어서 테스트? 하는 건가요? 정확하게 잘 몰라서.. 대략 짐작으로 유추해보고 질문 올립니다. 감사합니다.
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
RequestDTO ResponseDTO 관리
실무에서 사용할 때 질문입니다. RequestDTO ResponseDTO를 패키지와 클래스를 따로 만들어서 관리하나요? 아니면 보통 컨트롤러에 이너클래스로 만들어서 사용하나요
-
해결됨실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
default_batch_fetch_size 옵션
안녕하세요... 테스트 환경에서 <entry key="hibernate.default_batch_fetch_size" value="500" /> 이렇게 했는데 실제로는 15개씩으로 나눠지네요.... version 은 5.2.10 이네요... 본격적으로 플젝 들어가는데... 난감하네요... 강의 예제도 데이터 더 넣고 하면 15개씩만 적용되네요... 뭐가 문제가 있나요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
유효성 검사 질문
안녕하세요 강사님 다름이 아니라 기존에 프로젝트에서 spring 프레임워크, jsp, 자바스크립트 + jquery 기반으로 실무에서 웹개발을 했는데 사실상 스프링을 사용하고 있다고 말하기 민망할 정도로 기능을 거의 사용하지 못했었습니다. 그래서 이부분도 새로 공부중입니다ㅠㅠ 강의를 듣다보니 @Vaild나 NotEmpty같은 어노테이션도 알게 되고 BindingResult 같은 클래스 패키지도 알게되면서 뭔가 새로태어나는 기분이 들고 있습니다. 이번 강의 끝에 유효성 검사부분을 배우면서 생각이 드는 것이 저는 보통 유효성 검사를 할 때 자바스크립트 jquery를 사용해서 클라이언트단에서 유효성 검사를 하고 중요한 데이터의 경우 백단에서 DB체크(?)를 한번 더 해주는 식으로 개발했었는데요 스프링+타임리프를 조합하니 클라이언트단에서도 UX조작이 가능한 것 같았습니다. 유효성 검사의 어노테이션들을 적절하게 사용한다면 더이상 클라이언트단에서 자바스크립트를 통해 유효성 검사 부분이 불필요하게 되는 건가 조심스럽게 여쭤봅니다.
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
@Column의 insertable에 대해서 여쭙고 싶습니다.
안녕하세요 알찬 강의 잘 보고 있습니다. updateble이 false인 경우는 쉽게 생각해볼 수 있는데 insertable이 false인 경우는 어떤 경우를 상정해볼 수 있을까요?
-
해결됨더 자바, 코드를 조작하는 다양한 방법
classloader를 실행하는 주체
classloader 시스템에서 일어나는 로딩 과정, 링크과정, 초기화 과정은 interpreter에 의해 수행되는 건가요? java 프로그램을 실행하게 되면 최초에 인터프리터가 바이트코드를 읽어 들이고 클래스로더시스템의 각 과정들을 수행하며 데이터들을 메모리 영역에 쌓아둔다고 보면 될까요?
-
해결됨실전! Querydsl
fetch join vs join
안녕하세요 선생님 오랫만에 질문 다시 올립니다.이번강의도 정말 잘 듣고 있습니다. 아래와 같이 2가지의 다른 방식으로 queyrdsl를 사용하면 나가는 쿼리는 동일합니다. 하지만 jpa 에서 처리하는 방식이 다른거죠? fetch join을 사용하면 LAZY까지 초기화 해서 한 객체를 만들어주고 다른 방식은 그냥 다른 두 객체로써 가지고 오는거죠? Member findMember = queryFactory .selectFrom(member) .join(member.team,team).fetchJoin() .where(member.username.eq("member1")) .fetchOne(); Tuple findMember2 = queryFactory .select(member,team) .from(member) .join(member.team,team) .where(member.username.eq("member1")) .fetchOne(); select member0_.member_id as member_i1_1_0_, team1_.team_id as team_id1_2_1_, member0_.age as age2_1_0_, member0_.team_id as team_id4_1_0_, member0_.username as username3_1_0_, team1_.name as name2_2_1_ from member member0_ inner join team team1_ on member0_.team_id=team1_.team_id where member0_.username=? select member0_.member_id as member_i1_1_0_, team1_.team_id as team_id1_2_1_, member0_.age as age2_1_0_, member0_.team_id as team_id4_1_0_, member0_.username as username3_1_0_, team1_.name as name2_2_1_ from member member0_ inner join team team1_ on member0_.team_id=team1_.team_id where member0_.username=?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
dto to entity 시 스타일 질문
안녕하세요. 예제에서 MemberForm에서 Member 엔티티를 생성할때 컨트롤러에서 생성코드를 작성하셨는데요. Member 엔티티를 생성하는걸 MemberForm 에서 처리하는거에 대해서는 어떻게 생각하시나요? (ex. memberForm.toMember()) 예제가 아닌 실무에서 평소 영한님께서는 어떻게 하시는지, 어떻게 생각하시는지 궁금해서 여쭤봅니다!
-
미해결실전! 스프링 데이터 JPA
JPA와 Transaction에 대해서
안녕하세요. 선생님! 오랜만에 또 질문남깁니다..! 강의내용에서 JpaRepository의 구현체에 @Transactional 애노테이션이 붙어있기 때문에 서비스계층에 없어도 트랜잭션이 적용된다고 하셨습니다. JPA의 모든 변경은 트랜잭션 안에서 동작한다고도 하셨구요! 여기서 질문입니다. Repository를 직접 정의하고 사용할 때, @Transactional 애노테이션 없어도 동작하는 이유는 뭔가요? 더 쉬운 예제로 Controller에서 em.find() 호출이 가능한데, 이유가 뭔지 궁금합니다.. EntityManger의 구현체에 @Transactional이 붙어있나 싶어 em.getClass()를 찍어보았는데, class com.sun.proxy.$Proxy113 이렇게 찍혀서 구현체를 어떻게 봐야하는지를 모르겠어요.. @RestController @RequiredArgsConstructor public class MemberApiController{ private final EntityManager em; @GetMapping("/api/v1/member") public Member getMemberV1(){ return em.find(Member.class, 1L); //트랜잭션 설정을 안했는데 왜 가능할까요? } }
-
해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
플러시 관련 질문드립니다.
flush()를 했을 때 1차 캐시에서 Entity와 스냅샷이 다를 경우 쓰기 지연 SQL저장소 update 쿼리를 에 만들고 나면 Entity값과 스냅샷 값은 같아지는 것인가요?! 당연히 변경된 Entity값이 스냅샷에 저장되면서 같아질 것이라고 생각은 하는데 혹시나 하여 질문합니다. 선생님 강좌 너무 잘 듣고 있습니다. 왜 이 좋은 강좌를 이제야 알고 수강하는지 모르겠습니다. 눈높이에 너무 잘 맞추어 설명해주시는것 같습니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
joinColum 질문있습니다.
안녕하세요 영한님. 복습을 하다 궁금한 점이 생겨 질문드립니다. 소스에서 ManyToMany 양방향의 경우 @JoinTable을 주인쪽에 다셧는데, @JoinTable을 주인쪽에 다는게 맞다고 알면 되는 것일까요?? 감사합니다~
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
cascade 질문 있습니다.
안녕하세요. 복습을 하다 궁금한 점이 생겨 질문을 남깁니다. 영한님 소스에서 양방향인 경우 cascade 옵션을 사용한 부분이 있는데, 한번은 주인인쪽에, 또 다른 한번은 mappedBy쪽에 사용했습니다. 1. casecade 옵션은 어느쪽에 다는게 좋은건지 궁금합니다. 2. 만약 양쪽 다 달아도 상관 없는건 지도 궁금합니다. 실무에서 사용법을 몰라 양쪽에 달아두었는데, 문제가 있을거 같아 걱정이 되네요 ㅠㅠ 감사합니다~
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
v3 와 v6 질문드립니다.
안녕하세요 김영한님 항상 질 높은 강의 잘듣고있습니다!! 다름이 아니라 강의를 듣다보니 v3랑 v6의 차이점에 대해서 제가 생각한 부분이 맞는지 질문드립니다. v3의 경우 중복을 제거하기 위해 distinct라는 명령어를 사용하고 v6의 경우에는 로직을 추가해서 중복을 제거했습니다. 두 가지가 실제 쿼리의 조인은 비슷할거라 생각합니다. 그렇다면 차이는 1. select 해오는 컬럼들을 선택할 수 있다? v3의 경우 전부다, v6의 경우 dto에 정의된 필드만 2. 컬렉션 값이 2개 이상이여도 사용 가능 의 차이 정도로 이해하면 될까요
-
미해결실전! 스프링 데이터 JPA
@Query 에 countquery를 설정했음에도 안나간는 경우?
안녕하세요 정말 좋은강의 잘듣고 있습니다. 혹시 countquery옵션을 설정했음에도 안나가는 경우가 있을까요? 이전 jpa 활용2 에서 order 객체를 기반으로 springdata jpa repository 를 만든후 아래와 같은 메서들를 정의했는데 @Query(value = "select o from Order o join fetch o.member m join fetch o.delivery d",countQuery = "select count(o) from Order o")public Page<Order> findAllWithMemberDelivery(Pageable pageable); 결과값은 count 문없이 아래와 같은 쿼리만 나가네요 select order0_.order_id as order_id1_6_0_, member1_.member_id as member_i1_4_1_, delivery2_.delivery_id as delivery1_2_2_, order0_.delivery_id as delivery4_6_0_, order0_.member_id as member_i5_6_0_, order0_.order_date as order_da2_6_0_, order0_.status as status3_6_0_, member1_.city as city2_4_1_, member1_.street as street3_4_1_, member1_.zipcode as zipcode4_4_1_, member1_.name as name5_4_1_, delivery2_.city as city2_2_2_, delivery2_.street as street3_2_2_, delivery2_.zipcode as zipcode4_2_2_, delivery2_.status as status5_2_2_ from orders order0_ inner join member member1_ on order0_.member_id=member1_.member_id inner join delivery delivery2_ on order0_.delivery_id=delivery2_.delivery_id limit ? 혹시 inner join 이라 따로 다시 조회할 이유가 없어서 스프링에서 최적화해서 따로 쿼리가 나가지 않은건가요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
질문드립니다!
제가 도메인, 서비스, 레포지토리 같은것들을 자바를 공부하며 처음 알게되었는데요 도메인이라고 하면 계속 www 같은 도메인이 떠오르네요 domain: 엔티티객체의 모음 service: 비즈니스로직 repository: 엔티티객체를 활용한 jpa코드사용 이렇게 생각하면 될까요?? 그리고 웹어플리케이션을 만들때 만들기 나름이겠지만, 쿠키나 세션을 사용해서 로그인처리를 하는지 jwt를 사용하시나요?? 대부분의 웹서비스는 jwt필요없이 쿠키만으로 충분하다는 어느 유튜버분의 의견도 있던데 어떻게 생각하시는지 궁금합니다!
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
MemberServiceTest - 테스트에서 @Transaction의 롤백기능이 수행되지 않습니다
안녕하세요.올려주신 강의 잘 듣던 중 궁금한 점이 생겨 질문드립니다. @Transactional을 테스트 케이스에서 쓸 경우에는 커밋이 안되고 롤백을 한다고 하셨는데, MemberServiceTest에서 만든 2개의 테스트 중 중복_회원_예외() 메서드 실행 시에는 아래 로그에 INSERT쿼리가 나와서요... 회원가입() 메서드 테스트 시에는 INSERT쿼리가 로그에 찍히지 않는데 중복_회원_예외() 메서드에는 INSERT쿼리가 찍히는 이유가 궁금합니다.
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
cascade 옵션 질문
안녕하세요.강의 잘 듣고 있던 도중 궁금한 점이 생겨서 질문드립니다.엔티티 설계시 주의점 21분쯤에 cascade옵션에 대해서 설명해 주셨는데, 왜 Order 엔티티에 있는 필드값에만 이를 적용하고 다른 곳에는 적용하지 않으셨는지 궁금합니다. 또한, 어떤 기준을 통해 cascade 옵션을 적용시켜야 하는지 궁금해서 여쭤봅니다.
-
미해결실전! Querydsl
jUnit5는 extracting을 어떻게 대체하나요?
extracting().containsExactly()를 실행하는데 오류가 나서 대체 메소드를 찾는 중인데 잘 되지가 않네요