월 17,600원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 해결됨실전! 스프링 데이터 JPA
Auditing 사용시 날짜 포맷 변경할수 있나요?
날짜 컬럼이 DB에 저장될 때 포맷을 지정하고 싶습니다. 사진처럼 시도해봤는데 되지 않네요혹시 따로 방법이 있을까요? 아니면 DB에서 값을 가져온 후 애플리케이션단에서반복문으로 일일이 포맷을 변경해야 하나요??
- 해결됨실전! 스프링 데이터 JPA
@Transactional 를 통한 update 질문드립니다
안녕하세요 강사님!! 좋은 강의 항상 감사드립니다! 강의를 보며 서비스를 구현중에 생긴 고민입니다! JPA 에서 영속성 컨텍스트를 바라보는 범위에 대해 질문드립니다. respository.save(entity) 기능을 update 할때는 merge 사용하지 않기 위해 기존에 모르고 사용해왔던 .save 를 제거하고, 메소드에 @Transactional 을 사용하였습니다. 그런데 변경사항이 적용이 안되고 있는데, 영속성 컨텍스트에 등록이 안된상태이거나 범위를 넘어가서 적용이 안되는 것 같습니다. Controller @PutMapping("/modify")public ResponseEntity updateProfile (@RequestPart MultipartFile file) throws IOException { Member member = Optional.ofNullable(((UserDetailsVO) (SecurityContextHolder.getContext(). getAuthentication().getPrincipal())).getMember()) .orElse(null); String profileImg = memberService.profileChange(member, file).getProfileImg(); } Service @Transactionalpublic Member profileChange(Member member, MultipartFile file) throws IOException { ... member.changeProfileImage(memberProfileImg); return member;} API 서버를 생각하고 만들어, member의 정보를 JWT 토큰에 담아서, Security를 통해 검증합니다. SpringSecurity를 통해 검증하는 과정에서 MemberJpaRepository를 이용하여 member를 로드해오고 쿼리도 나가게 되지만 Controller에 @transaction 도 붙여보고 profileChange 메소드에서 SecurityContextHolder로 member를 가져와도 변경되지 않았고, 영속성 컨텍스트와 연결이 끊어졌거나 연결이 되지 않는다는 생각이 들었습니다 . 그래서 Controller에서 MemberId를 전달하여, profileChange 메소드에서 member 객체를 찾아온 후 변경하고 리턴한다면 저장이 되지만, Controller에서 SecurityContextHolder를 통해 가져올때 이미 member를 조회하는 쿼리가 나가게 됩니다. 서비스에서 member를 조회할 경우, 영속성 컨텍스트 연결을 위한 조회쿼리를 날리는게 되어서 쿼리가 1+1이 되는데 이런경우엔 save를 통해 변경을 시키는것인지, 이렇게 수정하는게 맞는지 의문이 듭니다.
- 미해결실전! 스프링 데이터 JPA
벌크성 쿼리 질문입니다
밑에 질문을 보면 findByusername으로 member을 찾아올 때 1차캐시에서 가져오는 것이 아닌 DB를 통해 가져온다고 하셨는데 그러면 em.clear를 해주지 않아도 member5는 db에서 조회해서 가져오기 때문에 age가 41로 되야하는 것 아닌가요??? 이 부분이 잘이해가 안됩니다 ㅠㅠ
- 미해결실전! 스프링 데이터 JPA
안녕하세요 영한님 질문이 있습니다!!
안녕하세요 영한님! 2.5단계 때문에 2월달은 온라인으로 진행되어서 3월달에나 볼 수 있겠네요 ㅜ.ㅜ 이번에 질문하려고 하는 것은 메서드명으로 쿼리를 만드는 단계에서 자동으로 모든 컬럼을 페치조인을 하는지 궁금해서 질문했습니다! 엔티티 내부에 LAZY로 걸어놓은 것과 상관없이 메서드명으로 쿼리가 만들어 질 때에 페치조인이 되는 것인가요?? 프로젝트 진행 중에 findByTitle 이라는 메서드명으로 쿼리를 호출했을 때, select ... from 해당엔티티 where title= '타이틀명' 이 한 번 나가고 난 뒤에 여기에 lazy로 걸려있던 매핑 테이블들의 데이터에 select을 다 날리더라구요. 언뜻봐서는 n+1 인건가 싶었는데 findByTitle만 호출을 하고 lazy 걸려있는 것들을 뒤늦게 로딩시키지 않았으니 n+1은 아닌 것 같고 그렇다면 혹시 페치조인으로 되는건가 싶어서요! 특이점은 해당 엔티티와의 fk와는 상관없이 그 테이블의 모든 데이터를 다 끌고온다는 점입니다. 메서드이름으로 쿼리 생성이 페치조인을 이용하나요 ?? 2월 한 달도 좋은 달 되시길 바랄게요~!
- 미해결실전! 스프링 데이터 JPA
DTO에서 외래키 값에 대해 질문이 있습니다.
영한님 안녕하세요 DTO를 만들 때 외래키에 해당 되는 값은 그 ID를 넣도록 하는 것 같은데 DTO 내에서 toEntity() 메서드에서는 그 객체를 넣을 때 어떤 방법으로 하는 게 가장 좋은지 모르겠습니다. contrller나 service에서 dto에 있는 id로 객체를 찾은 후 toEntity()에 파라미터로 넣는 방법을 생각해봤는데 보통 DTO에 외래키 데이터가 있을 때는 toEntity()를 어떻게 처리하는지 궁금합니다.
- 미해결실전! 스프링 데이터 JPA
메소드 이름으로 쿼리 생성에서 질문이 있습니다.
안녕하세요. 강의 듣다가 궁금한 것이 있어서 질문을 드립니다. data JPA repository 에서 메소드를 이용해 작성하던 것 중 궁금한것이 있습니다. List<Member> findByUsernameAndAgeGreaterThan(String username, int age); 여기에서 findByUsername에서 Username이 @Entity에서 username을 참조하는 것인지 아니면 db에 있는 username을 말하는 것인지 궁금합니다. 답변 자세히 해주시면 감사하겠습니다...
- 미해결실전! 스프링 데이터 JPA
즉시로딩 처리 시 findAll()일 경우 동작이 안되는 이유가 궁금합니다.
강의 중에는 실무에선 즉시로딩을 사용하지 말라고 하셨지만 테스트 차원에서 즉시로딩으로 findAll()을 조회하면 내부에서 left outer join이 걸리는 않는 현상을 확인했습니다. 동일한 조건에서 findById()로 처리하면 left outer join이 걸립니다. OneToMany, ManyToOne 모두 동일하게 동작을 하던데 혹시 이렇게 동작되는 이유가 있을까요??? 미리 답변 감사드립니다.
- 미해결실전! 스프링 데이터 JPA
테이블 파티셔닝 질문드립니다.
안녕하세요 영한님 강의 정말 잘 듣고있습니다! 다름이 아니라 진행하는 프로젝트 DB에서 연간 1억건이 넘는 row 가 쌓이는 통계 테이블이 있어서 조회 성능을 어떻게 해결하면 좋을지 문의드립니다. 참고로 DB는 마리아입니다. 테이블 파티셔닝을 이용해 진행하려고 하는데 JPA로도 문제없이 파티셔닝을 적용할 수 있는지 궁금합니다. 또 강의와는 좀 다른 얘기지만 통계 테이블의 pk컬럼과 index를 어떤식으로 구성하는 것이 좋을지 질문드립니다. 관련 내용이나 키워드를 알려주시면 정말 감사하겠습니다ㅠㅠ
- 미해결실전! 스프링 데이터 JPA
스프링 JPA에서의 연관관계
질문이있습니다. 일반 JPA를 사용할때에는 1:N인 경우 lazy 초기화를 해야하는 걸로 알 고있습니다. spring data 가 만들어주는 repository method에서는 이런 1:N 1:1 등 양방향관계가 있을때 어떻게 작동이되는것인가요? 따로 Lazy 초기화 처리를 하지 않아도 되는것인가요?
- 미해결실전! 스프링 데이터 JPA
안녕하세요, Spring-data-JPA와 Jdbc 의존 관계 질문드립니다 !
안녕하세요 강사님 !! 좋은 강의 덕분에 스프링을 한 번도 사용해보지 않았지만, 빠르게 잘 적응 중 입니다, !!! 테스트 중에 spring-data-jpa와 spring-data-jdbc 의존성 추가했을 때, 오류가 발생하는 것을 발견하여 질문 드립니다. 현재 상황은 Gradle에 아래와 같인 의존 관계를 설정 하였습니다. 사진에서 보이는 바와 같이 기존에 spring-data-jpa를 먼저 추가하였고, 그 이후 spring-data-jdbc를 추가하였습니다. 하지만 spring-data-jdbc는 빌드에 실패하였고, spring-jdbc는 빌드에 성공하였는걸 확인하였습니다. 실패했을 때의 에러 로그는 아래와 같습니다. 오류 메시지를 확인해보았을 때 XXXRepository를 오버라이드 할 수 없다고 출력이되는데 저의 추측으로는 spring-data-jpa, spring-data-jdbc에서 component scan을 할 때, 순서상 어떤 것이 먼저 등록하는지는 모르겠지만 두 의존성이 동일한 클래스를 Bean으로 등록하려고 할 때 발생하는 에러인 것 같습니다. (현재 등록된 CrudRepository를 상속 받은 interface에는 모두 @Repository 어노테이션을 걸어두었습니다.) 혹시 저의 생각이 맞다면 이 부분은 어떻게 해결할 수 있는지 알 수 있을까요 ??? 만약 아니라면 어떤 부분이 이슈인지 궁금합니다. !!! 마지막으로 spring-jdbc같은 경우는 왜 오류가 발생하지 않았는지 궁금합니다 !!!
- 미해결실전! 스프링 데이터 JPA
Spring Data JPA로 Redis를 사용할 수 있을까요?
안녕하세요 영한님 언제나 좋은 강의 너무 감사합니다 ! 다름아니라 질문이 있습니다 보통 Mysql, h2 데이터베이스를 연결하는데, 혹시 Redis 를 캐시용도가아니라, 진짜 DB처럼 이용하는 방식으로 JPA를 사용할 수 없을까요?
- 미해결실전! 스프링 데이터 JPA
Page 관련 문의 건
안녕하세요. 항상 강의 잘 듣고있습니다. 다름이 아니라 강의 듣는 와중에 궁금한게 생겨서 문의 드립니다. 1. 현재 실무 하실 때 Page<DTO> 와 Pageable를 그대로 사용하시는지 아니면 별도의 PageRequest와 PageResponse를 따로 만들어서 사용하시는지 궁금합니다. 2. Page를 사용하게 되면클라이언트 쪽에서 페이징 처리 할때 필수적으로 필요한 정보(totalElements, offset, limit)와 Contents 정보를 외에 많은 정보들이 응답 시 포함 되게 되는데 네트워크 단에서의 오버헤드라고 보지는 않나요? 이상입니다. 감사합니다.
- 미해결실전! 스프링 데이터 JPA
save시 중복 pk 값 입력 검증?
안녕하세요. 강의 감사하게 잘 보고있습니다. pk 값을 squenceGenerator를 사용해서 save하는 방법을 생각해봐서 테스트 중인데요. 가끔 sequence가 중복이되어 save시에 다른 동작을 하지않고 update로 진행되어 중복된 pk 값으로 db에 데이터가 쌓이게 됩니다 ㅠ save 시에 pk값이 중복되어 update되어 생기는 문제를 해결할 수 있는 방법이 따로 있을까요?
- 해결됨실전! 스프링 데이터 JPA
pk 질문 드립니다~
안녕하세요. 강의를 보다가 궁금한게 있어서 질문 남깁니다! pk값만 자바에서 기본형을 사용하지 않고 래퍼 클래스로 사용하시는 이유가 궁금합니다! 그리고 @GenerateValue를 하면 persist할 때 값이 셋팅된다고 하셨는데, 리플렉션을 이용해서 셋팅되는 건가요? 원래 merge에서 null인지 확인하기 때문에 래퍼 클래스를 사용하는줄 알았는데, 기본형일 경우 0인지 확인 하더라고요~ 그제가 잘못 알고있었던 거였네요..ㅎㅎㅎ 그럼 어떤 이유에서 래퍼 클래스가 사용되는 건가요??!
- 미해결실전! 스프링 데이터 JPA
Transaction에 관해서 질문드립니다.
오랜만에 질문 드리네요!. 완강하였지만 복습하고 있는데, OSIV가 켜있는 상태면 (기본이 켜있지만) 스프링 데이터 jpa에서 save를 하고 나더라도 트랜잭션 끝나고 플러시 커밋하더라도 영속성 컨텍스트는 살아있지 않나요?? 그래서 비즈니스 계층에서 수정은 되지않지만 (트랜잭션 범위안에서 수정,제거가 가능하고), 조회가 가능한것처럼. 강의에서 없어진다고 말씀하셔서 제가 잘못 알고 있나해서 질문드립니다.
- 미해결실전! 스프링 데이터 JPA
join시 성능관련 질문드립니다.
사용자별 약관동의 내역을 조회할 필요가 있습니다. 그래서 아래와 같이 처리했습니다. @EntityGraph(attributePaths = {"userTerms", "userTerms.terms"})@Query("select a from Account a where a.uid =:uid") Terms : 약관 entity UserTerms : 사용자별약관동의 내역 entity결과는 정상적으로 확인할 수 있는데 entityGraph로 terms까지 가져오다 보니까 terms의 content(약관내용)까지 가져옵니다. 약관내요이 굉장히 긴 글이라서 조히대상에서 제외하고 싶은데요.이 경우에는 JPQL로 필요한 필드만 DTO로 받는 방법말고 손쉽게 처리하는 방법은 없을까요?
- 미해결실전! 스프링 데이터 JPA
@EntityGraph로 ToMany 를 가져왔을 때 질문이 있습니다.
안녕하세요, 늘 좋은 강의 잘 듣고 있습니다. 다름이 아니라 @EntityGraph를 듣다가 문득 예전 강의에서 ToMany 관계를 조인하게 되면 중복 데이터가 난다고 들었던 것 같은데, 프로젝트에서 @EntityGraph 사용 중 다음과 같이 예상치 못한 현상을 보게되어 문의드립니다. 보기에 JPQL과 함께 사용하지 않으면 @EntityGraph만 사용해도 중복 데이터를 해결하는 것 처럼 보이는데, 제가 이해한게 맞을까요? 그리고 어떤 이유로 인하여 위와 같은 차이가 생기는지, 실무에서 첫번째처럼 사용해도 괜찮은지 궁금합니다. 문서들을 찾아보다가 답을 구하기 힘들어 도움을 요청드립니다. 감사합니다!
- 미해결실전! 스프링 데이터 JPA
jpql update 문 관련 질문
갑자기 궁금증이 생겨 질문드립니다. 벌크 연산은 member2에 age를 +1시켜줍니다. 이떄 db에 쿼리가 넘어가서 db상에 member2 age는 5가되고 영속성컨테스트안에 member2 age는 4가 그대로 유지됩니다. 이 상황에서 플러쉬를 하면 왜 변경감지가 일어나지 않나요? Member member1=new Member("member1",2,null);Member member2=new Member("member2",4,null);memberJpaRepository.save(member1);memberJpaRepository.save(member2); int i = memberJpaRepository.bulkAgePlus(3); em.flush();
- 미해결실전! 스프링 데이터 JPA
리포지토리 분리
리포지토리를 분리하신다고 하셨는데1. 정말 간단한 쿼리는 스프링 데이터 JPA 리포지토리에서 구현, 쿼리메서드 기능들을 이용하고조금 복잡하고, 강의에서 설명해주신 다양한 이유에 해당하면 사용자 정의 리포지토리를 구현해서 사용하고더 복잡한 동적쿼리들은 따로 클래스를 만들어서총 3개의 리포지토리를 운영하게 되는건가요?2. 서비스와 리포지토리는 1:1로 매핑하는게 좋다고 들었는데 그럼 3개의 서비스클래스도 따로 만드나요?3. 핵심 비즈니스 로직과 단순 화면 관련 로직도 구분은 서비스계층에서 이루어지나요? 그럼 하나의 서비스에서 두개의 리포지토리를 접근해도 괜찮나요??아직 아키텍처를 고민할만한 실력은 아니지만궁금점이 해결되지 않아 질문남깁니다..
- 미해결실전! 스프링 데이터 JPA
영속성 컨텍스트 관련 질문입니다.
혹시 트리거를 사용하게 되면 영속성 컨텍스트를 통해 데이터가 바뀌는 것이 아닌데 마이바티스/혹은 데이터베이스를 직접 조작하는것처럼 적용되는지 궁금해서 질문남깁니다. 오늘 데이터상 오류를 발견하고 1주일전의 데이터를 수정했을 때 트리거를 적용시켜서 1주일 전부터 오늘까지의 데이터를 수정하게 된다면 영속성 컨텍스트는 어떻게 적용이 되나요?? 예를 들어서 dataA.getTemp() = 100 인 상태에서 dataB의 어떠한 데이터를 변경했을 때 트리거가 동작해서 dataA의 Temp가 변경된다면 영속성컨텍스트는 트리거에 의한 데이터 변경도 감지할 수 있나요?