월 17,600원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결실전! 스프링 데이터 JPA
안녕하세요
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]갑자기 궁금한 부분이 생겼는데, 배달의 민족은 웹이 아니라 앱으로 동작하잖아요. 그럼 api 개발을 위주로 하시는 거라고 생각이 되는데 스프링 웹이던 아니면 앱을 이용하는 개발이던 개발하는 부분에 관해서는 큰 차이가 없는 건가요? 스프링으로 개발만 할 줄 알면 필요한 곳에 그대로 쓰기만 하면 되는 건가요?
- 미해결실전! 스프링 데이터 JPA
h2 데이터베이스 생성 오류 질문
localhost로 바꾸고 jdbc:h2:~/datajpa로 작성하고 해도 저렇게 뜨네요권한도 755로 변경했습니다어떻게 해야 할까요?
- 미해결실전! 스프링 데이터 JPA
BaseTimeEntity를 Item 에서 extends 해서 사용할 경우에는 어떻게 해야하는건지 궁금합니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 네2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 네3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 네[질문 내용]여기에 질문 내용을 남겨주세요. 해당 강의에서는 Item 내부에 createdDate 필드를 만들고 implements Persistable을 할 때 isNew 함수가 createdDate == null 을 하더라도 문제없이 동작할 수 있음을 확인했습니다.그런데 Item 자체가 public class Item extends BaseEntity implements Persistable<String> 이런식이라면즉, createdDate가 Item class 내부가 아닌, 외부에 존재한다면 isNew 함수를 만들때 createdDate를 참조해올 수 없는데 어떻게 해결해야하는지 궁금합니다.제 개인적으로 해결방안이라고 생각한 것은BaseTimeEntity의 createdDate를 public으로 오픈한다.BaseTimeEntity에서 implements Persistable 을 받고 isNew함수를 정의한다.이렇게 할 경우에 추가적으로 생기는 문제점은 getId() 함수를 Override해야하는데, BaseTimeEntity class 내부에 id 값이 따로 없어서 곤란하다고 여겨집니다.getId() 함수를 만들어도 엔티티마다 id의 타입이 다를 수도 있다고 생각되는데 타입 문제는 어떻게 해결해야하는지 모르겠습니다.이정도 두 가지가 떠오르긴 했는데, 효과적인 방법은 아니라고 생각되어프로젝트 개발시에 엔티티들이 공통적으로 BaseEntity, BaseTimeEntity를 상속받고 있는 상황일때는 isNew함수를 어떻게 정의해야하는지 알려주시면 감사하겠습니다.
- 해결됨실전! 스프링 데이터 JPA
안녕하세요 p6spy관련해서 질문드립니다.
안녕하세요 항상 강의 잘 보고 있습니다.다름이 아니라 강의 후반부에 p6spy관련해서 설명해주시는 부분이 있는데 강의자료에 스프링부트 3.0에서는 p6spy가 지원하지 않는다 하여 강의자료에 있는 내용대로 진행을 했지만 파라미터가 제대로 바인딩 되지 않는 듯하여 질문을드립니다.혹시 왜 그런지 한번 봐주실수 있을까요?아래는 현재 저의 프로젝트 파일 다운로드 경로입니다.https://drive.google.com/file/d/13kY6u4sYQLm6hCevyfRV_tqxFtbx2o0i/view?usp=sharing
- 해결됨실전! 스프링 데이터 JPA
findby findUserBy의 차이가 뭔지 궁금합니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예[질문 내용]JpaRepository 를 사용하던 중 findBy 와 findUserBy (find{Entity}By)가 있던데 이 둘의 차이가 궁금합니다. 둘 다 객체를 반환하던데 이 둘의 성능이나 보안적인 차이가 있을까요? 어떤 것을 사용하는 것이 좋은지 궁금합니다...
- 미해결실전! 스프링 데이터 JPA
하나의 작업을 여러 서비스 계층에서 나눠서 할때 트랜잭션 처리
예를들면 하나의 게시글을 처음 작성하며 여러 태그도 함께 붙이는 내용을 구현할 때 게시글 관련해서 PostService, 태그 관련해서 TagService로 처리를 한다고 가정해보겠습니다. public ResponseEntity(@RequestBody PostRequest postRequest) {Post post = postService.post(postRequest.toPost());tagService.addTag(postRequest.toTag());return ResponseEntity ...;}이런 형태이고 post() 메서드를 통해 게시글을 저장하고addTag() 메서드를 통해 태그를 저장한다고 할때 서로 다른 서비스 클래스의 메서드에 @Transactional 이 걸려있어서 만약 Post 엔티티를 저장한 후 Tag 엔티티를 저장해야 하는 상황에서 중간에 문제가 발생한다면 Tag는 저장이 안되었지만 Post는 저장이 되는 문제가 발생합니다. 간단하게 상황 설명만을 위해 작성한 예시라 내용이 이상하지만 이런 상황에서 트랜잭션을 한번에 처리할 방법이 있을까요? 결국 하나의 트랜잭션에서 처리해야할것 같아서 위 예시의 경우 postService에서 TagService의 addTag를 호출하는 형태로 하면되지 않을까 고민해 봤습니다.보통 이런식으로 한번에 처리해야 하는 로직이 여러 서비스 계층에 나누어 있는 경우? 처리를 어떤식으로 하는지 어떤 방법들이 있는지 궁금합니다.
- 해결됨실전! 스프링 데이터 JPA
Auditing 기능 질문
안녕하세요, Auditing 기능에 대해서 궁금한 게 생겨 질문 드립니다.Auditing 이라는 기능으로 작성일, 수정일, 작성자, 수정자를 기록할 수 있다고 해주셨는데 삭제일, 삭제자를 기록하는 기능은 Auditing에서 제공 안 해주는 건가요?구글링 해봐도 그런 기능은 없는 것 같아서요.(다른 기술을 사용해야 하는 건가요?)
- 미해결실전! 스프링 데이터 JPA
count 쿼리 실행 유무
@Test @Rollback(false) void paging() throws Exception { for (int i = 1; i <= 5; i++) { memberRepository.save(new Member("member" + i, i * 10)); } PageRequest pageRequest = PageRequest.of(0, 5, Sort.by(Direction.DESC, "username")); Page<Member> page = memberRepository.findByAgeGreaterThanEqual(30, pageRequest); List<Member> content = page.getContent(); }위의 코드를 실행했을 때 count 쿼리가 실행되지 않습니다.결과물의 개수보다 of에 들어가는 size값이 크면count 쿼리가 출력이 안되나요??(of의 size 속성을 3으로 바꾸면 정상적으로 출력됩니다!) 그리고 Page가 Slice를 상속하고 있는데레포지토리 메서드의 반환 타입을 Slice로 작성하고Page나 Slice로 반환 받아서 사용해도 되나요??
- 해결됨실전! 스프링 데이터 JPA
DTO의 argument로 Member, Team을 넣는 건 어떻게 보시나요?
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 아니오3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]@Query, 값, DTO 조회하기 강의에서 MemberDto를 아래와 같이 정의하셨는데요. @Data public class MemberDto { private Long id; private String username; private String teamName; public MemberDto(Long id, String username, String teamName) { this.id = id; this.username = username; this.teamName = teamName; } } 제가 일하는 실무현장에서 Dto의 속성은 3개보다 훨씬 많습니다. 이 방식 그대로 Dto 생성자를 정의한다면, argument의 개수가 엄청 많아질텐데요. 그래서 저는 실무에서 아래와 같은 방식으로 생성자를 만들어 사용하고 있습니다. @Data public class MemberDto { private Long id; private String username; private String teamName; public MemberDto(Member member, Team team) { this.id = member.getId(); this.username = member.getUsername(); this.teamName = team.getName(); } }이런 방식에 대해 어떻게 생각하시나요? Dto의 필요한 속성이 생성자에 나타나지 않아 유지보수가 떨어지게 될까요?그것보단 Dto 생성자의 인자수가 너무 많아지는 게 더 안 좋다고 생각해서 위와 같이 생성자를 만들었습니다.
- 미해결실전! 스프링 데이터 JPA
spring data jpa 학습 도중 궁금한 점
[질문 내용]spring data jpa 학습 도중 궁금한 점이 있어 문의드리게되었습니다.item 을 상속받아 book 을 만들었는데 spring data jpa 를이용해서 item만 조회를 할 경우 item을 상속받는 모든 클래스들이 같이 left join으로 불러오는 경우가 발생하는 것으로 확인되었습니다.혹시 item 테이블만 조회할 수 있는 방법은 없을까요?
- 미해결실전! 스프링 데이터 JPA
JPA페이징 공부를 하다가 궁금한점이 있습니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]JPA를 이용한 페이징 처리를 공부하다가 문득 궁금한점이 생겼습니다. Page 및 Slice, Sort의 처리와 더불어 Repository의 기능을 통해서 값을 처리하는것을 배웠는데요.그런데 만약 2개 이상의 테이블을 Join한 상태라면 페이징 처리를 어떤 방법으로 하는지 궁금합니다.예를들어 Page<Member, Order> 이런식으로는 어렵고, 1개의 Repository 안에 직접적인 조인쿼리 방식으로 값을 불러와서 적용해야 할까요?아니면 MappingTable을 이용하거나 Member와 Order라는 조인쿼리에서 실질적으로 보여주는 필드값들만 DTO형태로 만들어서 Page<MemberViewDTO> 이런식으로 적용해야되는것일까요?!아니면 이럴때 적용하는것이 QueryDSL이라는것인지 궁금합니다.(아직 QueryDSL을 배우진 않았고, 들어만 봤습니다.) 2개의 테이블에서 뽑아낸 DB값들을 Page 처리하기위해선 어떠한 방식으로 할 수 있는지 궁금합니다.
- 해결됨실전! 스프링 데이터 JPA
update in 절을 사용하는 방법은 없는건가요?
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]여기에 질문 내용을 남겨주세요.안녕하세요. 다름이아니라 강의를 듣다가 궁금한게 생겼습니다.spring JPA를 배치에서 사용한다고 하였을 때, 리스트 값만큼 일일이 영속성 컨텍스트에서 값을 가져와서 데이터를 업데이트를 하는 게 아닌 in 절로 한 번에 하고 싶을 때가 있다고 생각합니다.여기서 궁금한 건. in 절[update Table set Cloumn where in? ]을 사용하려면 마이바티스로 적용하는 방법밖에 없는 건가요?
- 해결됨실전! 스프링 데이터 JPA
Auditing 질문 드립니다
안녕하세요! 생성 시간, 수정 시간을 JPA Auditing으로 관리하는 것과 db에서 default, on update 조건으로 관리하는 것이 어떤 차이가 있는지 궁금합니다..!
- 미해결실전! 스프링 데이터 JPA
출력 Sql 질문입니다.
실행은 잘 되는데 저는 출력 결과가이런 식으로 나옵니다.이 부분이 나오지 않는데 혹시 뭔가 빼 먹은 걸까요?4:32 관련입니다.
- 해결됨실전! 스프링 데이터 JPA
changeTeam ... ArrayList [9:11]
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]생각해봤는데 예제라서 상관은없지만 Team에 @OneToMany(mappedBy = "team") private List<Member> members = new ArrayList<>();이 부분에서 하나의 팀에 똑같은 회원이 중복안되도록 Set<Member>로 하는것도 괜찮을까요?아니면 제가 모르는 뭔가 때문에 상관 없을까요?
- 미해결실전! 스프링 데이터 JPA
쿼리 힌트 Page 추가 예제 질문
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]자료에 forCounting에 대한 설명을 적어주셨는데,"Count쿼리도 쿼리 힌트 적용"한다는 설명이@QueryHints의 forCounting값이 false이면 Count쿼리가 나가지 않는다는 말씀이신가요?[자료 위치]파일명 : "실전! 스프링 데이터 JPA -v2022-12-18.pdf"위치 : "JPA Hint & Lock" > "JPA Hint" > "쿼리 힌트 Page 추가 예제"영상 : "실전! 스프링 데이터 JPA" > "JPA Hint & Lock"자료에는 "쿼리 힌트 Page 추가 예제"가 있지만 영상 11:44 이후 Lock으로 바로 넘어가서 저는 잘 이해가 안가네요.. ㅠㅠ
- 미해결실전! 스프링 데이터 JPA
Page 관련 질문
영한님, 안녕하세요. 열심히 강의 듣고있는 한 학생입니다!JPA에서 페이징처리를 할 때 Controller에서 Page 자체를 반환타입으로 두어도 되는지, 이를 커스터마이징한 특정 Response를 사용하는 것이 좋은지 고민이 되어 글 남기게 되었습니다. 혹시 둘 중에서 안티 패턴이 있는지, 혹은 실무에서 더 권장하는 방법이 있을지 조언 해주시면 감사하겠습니다!(기존 Page에서 제공하는 것처럼 0부터 시작하는 것을 전제로 했을 때입니다.)
- 미해결실전! 스프링 데이터 JPA
(추가) 다대다 페이징 질문드립니다!
(이전 질문)https://www.inflearn.com/questions/718059/%EC%97%AC%EB%9F%AC-%ED%85%8C%EC%9D%B4%EB%B8%94-fetch-join-%EC%A7%88%EB%AC%B8-%EB%93%9C%EB%A6%BD%EB%8B%88%EB%8B%A4 안녕하세요. 이전 질문에 다시 질문 좀 드리고 싶어서 추가 질문 드립니다..ㅠㅠ 1) 이전 질문에서 다대다 관계(Event <-> EventArtist<-> Artist)에서 이벤트 리스트를 가져올때 이벤트에 포함된 아티스트의 이름 정도만 가져와야 되면 fetch join 하는 것보다 join + dto로 해결하는 방법을 추천해주셨습니다.그런데 하나의 이벤트를 조회하는 경우 아티스트의 이름 리스트는 join + dto로 해결할 수 있는데 이벤트를 리스트로 가져오는 경우에도 말씀해주신 join + dto로 가져올 수 있을까요?? 2)그리고 이벤트를 페이징 처리를 하려고 하니 컬렉션을 페이징하면 인메모리를 사용해서 위험하고 중간 엔티티로 페이징을 하면 이벤트가 기준이 아니어서 제대로 페이징이 안 되었습니다.그래서 이벤트를 Batch Size로 먼저 조회를 하고 List<Event>를 중간 엔티티 EventArtist에 넘겨서 In 쿼리로 조회를 했습니다. (이벤트를 batch size로 조회만 하면 아티스트에 접근할때 N + 1 쿼리 발생) 혹시 이 방법에 대한 피드백도 좀 주시면 정말 감사하겠습니다..! 서비스 코드// event 리스트를 먼저 조회 (batch size) List<Event> events = eventRepository.findEvents(lastIndex, PageRequest.of(0, 3)); // fetch join + in 쿼리 List<EventArtist> eventArtists = eventArtistRepository.findEventArtists(events); 이벤트 batch size로 페이징 조회@Query("select e from Event e " + "where e.id >= :lastIndex") List<Event> findEvents(@Param("lastIndex") Long lastIndex, Pageable pageable);결과 (간단하게 수정) select event.* from events event where event_id>=? limit ? 조회한 이벤트로 join fetch + in 쿼리를 해서 아티스트 조회@Query("select ea from EventArtist ea " + "join fetch ea.artist " + "where ea.event in :events") List<EventArtist> findEventArtists(@Param("events") List<Event> events); 결과 (간단하게 수정) select event_artist.*, artist.* from event_artists event_artist inner join artists artist on event_artist.artist_id = artist_id where event_artist.event_id in ( ? , ? , ? )
- 해결됨실전! 스프링 데이터 JPA
같은 테이블의 외래키와 복합키
안녕하세요 영한님. 항상 강의 잘 듣고있습니다.회사에서 레거시 코드를 엔티티로 변경하다보니 궁금한게 있어 문의드립니다.첫번째 질문혹시 복합키가 3개의 컬럼으로 되어있을 때, 2개의 컬럼이 같은 테이블과 매핑해야 된다면 어떻게 해줘야하는지 알 수 있을까요? @EmbeddedId, @IdClass 둘 다 필드명으로 매핑을 해줘야 하는데, 한 필드밖에 매핑이 안되서 여쭤봅니다.두번째 질문아래 키들이 전부 Enum으로 되어있다면 조인할 때 @Enumrated(STRING) 이 적용이 안되는 것 같은데 어떻게 하면 좋을지 여쭤봅니다.예를 들어,A의 복합키 [a, b, c] 중 [a, b]가 B와 매핑되는 외래키이고, [c]는 C와 매핑되는 외래키입니다.* 여기서 B의 a, b는 B의 PK입니다.* A와 B는 일대다, A와 C 또한 일대다 관계입니다.class A { @Id @Enumerated(STRING) EnumType a; @Id @Enumerated(STRING) EnumType b; @Id @Enumerated(STRING) EnumType c; } class B { @Id @Enumerated(STRING) EnumType a; @Id @Enumerated(STRING) EnumType b; } class C { @Id @Enumerated(STRING) EnumType c; }@EmbeddedId 사용시@Embeddable public class AId implements Serializable { private BId b; @Enumerated(STRING) private EnumType c; } @Embeddable public class BId implements Serializable { @Enumerated(STRING) private EnumType a; @Enumerated(STRING) private EnumType b; } @Entity public class A { @EmbeddedId private AId id; // 쿼리에서 EnumType의 숫자값이 들어갑니다. @ManyToOne(fetch = LAZY) @JoinColumns(value = { @JoinColumn(name = "a"), @JoinColumn(name = "b") }) private B b; }
- 미해결실전! 스프링 데이터 JPA
메소드 명이 중복되면 어떻게 되나요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]스프링 데이터에서 제공하는 메소드 findById 또는 save처럼 커스텀 리포지 또는 혹은 JpaRepository 를 상속받는 interface에 선언한다 치면 어떤것이 우선시 되어 사용이 되는지 또는 에러가 예외가 발생하는지 궁금합니다.또, JpaRepository가 기본적으로 제공하는 페치 조인 메소드는 없을까요?