묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
연관관계 편의 메서드
안녕하세요, 영한님 강의에선 위처럼 하셨는데 궁금한게 생겨 질문드립니다. 1. 위 대신에 아래처럼 Member 엔티티에 연관관계 메서드를 해도 되나요? public void addOrders(Order order){ this.orders.add(order); order.setMember(this);} 2. 연관관계의 주인에 편의 메서드를 하는게 좋은건가요? 3. 둘다 작성하면 안되나요? 감사합니다.
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
대규모의 레코드가 저장된 테이블 컬럼 추가시에는 어떤 방법을 쓰나요?
강의 내용과는 관계가 없는 질문이지만...스키마 자동생성 옵션 사용시 운영에서는 create, create-drop, update 사용하지 않는것이 좋다는 말씀을 듣고 갑자기 궁금해졌습니다 create, create-drop 같은 경우는 테이블 drop 시켰다가 재생성 하는거라 레코드가 싹 다 날아가니 당연히 하면 안되는건 알겠는데 update같은 경우는 기능 적용하려면 어떻게든 컬럼 추가가 필수인데 외부에서 직접 ALTER TABLE 실행하더라도 똑같이 테이블 lock이 걸리지 않을까 생각합니다 저희 회사같은 경우는 레코드가 많아봤자 몇만건이라 길어봐야 몇초 내로 끝나기에 배포시간에 맞춰 ALTER TABLE 직접 실행하곤 합니다 (애초에 SPRING, JPA 사용도 안하는곳이라 이렇게 할 수 밖에 없지만...) 대기업의 경우 레코드가 엄청 많이 들어가있을거 같은데 이런 경우 테이블에 컬럼 추가가 필요하다면 어떻게 처리하시는지 궁금합니다
-
미해결실전! Querydsl
QDSL로 복잡한 쿼리를 어느정도 커버 가능한가요?
안녕하세요~ 좋은 강의 감사합니다. SPRING DATA JPA 강좌 부터 듣고 있는데 JPA의 장점은 명확하게 알 것 같습니다. 간단하거나 조회조건이 단순할 경우에는 보다 쉽고 강력하게 느껴지는데요. 쿼리가 복잡할 경우 QDSL을 적극 권유 하시는데 QDSL이 커버 가능한 범위가 어디까지일까요? 일단 말로만 접했을 경우에는 기존에 정의한 ENTITY 클래스로 무언가 프로그래밍 방식으로 처리 한다고 생각했는데 별도의 컴파일 과정이 중간에 들어가는것 같습니다. 그리고 그 컴파일후 결과가 앞에 Q라는 접두어가 붙는데 약간의 혼란스러움이 느껴지네요. 그래서 그런지 실제 통계 또는 여러 테이블을 조인 하거나 조건처리가 많은 동적 쿼리같은 경우에는 오히려 MYBATIS처럼 네이티브쿼리 사용하는것이 결과에 대한 확인과 빠른 대응이 이루어 질 것 같은데요. 그부분에 대해서는 어떠한 생각인지 의견을 듣고 싶습니다. 개인적으로는 JAVA와 QUERY는 성격이 다르기 때문에 분리해야 한다는 생각이 강한 개발자인데요. 그래도 JPA의 장점을 알기에 학습을 하고 있는데 학습 하면 할수록 무언가를 결정하기가 어렵네요 ㅎㅎ. 현재 MYBATIS냐 JPA냐 결정해야 하는 상황이라서 질문드려 보았습니다.
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
v3 질문드립니다.
안녕하세요~~ 제가 이해를 잘 못하고 있는 것 같아서 질문드립니다. 이번 강의에서 정리를 하면서, 엔티티 조회와 DTO 직접 조회로 크게 분류하셨는데, 저는 v3를 DTO List를 Return 하니깐 DTO 직접 조회에 속하는데 이 녀석은 batch_fetch_size 의 도움 또한 받는데, 그렇다면 둘 중 어느 곳에 속하는지 아리송 했는데 PDF정리하신 것을 보니 엔티티 쪽이라고 하셨습니다. 1. 여기서 말하는 DTO 직접 조회란, 엔티티의 다른 필요없는 컬럼을 보여주지 않기 위해서 OrderDto의 형태로 리턴해주는 것이 아니라, 따로 패키지를 만들정도의 DTO 를 칭하는 것인가요 ?? 정확한 구분이 어떤 기준으로 나뉘는지가 너무 헷갈립니다. 알 것 같으면서도 눈앞에서 놓치는 듯한 느낌이네요.. 2. 이번 최적화하는 과정에서의 코드에서 stream() 이용법 등 익숙치 않아서 이해하는데 어려움을 많이 느꼈던 것 같습니다. stream().map ~~ 은 괜찮았는데 리스트를 forEach(o-> ~~ 이런식으로 활용하는 부분이요. 혹시 이것과 관련되어서 어떤 키워드로 찾아서 공부를 해야하는지 알고 싶습니다. java8 stream 으로 공부하면 될까요 ? 이번 강의도 굉장히 도움이 많이되고 감사했습니다!!
-
미해결실전! Querydsl
@OneToMany 인 collection 멤버 필드까지 Projection 가능한지요?
QueryDsl 에서 Projection 기능이 깔끔하고 막강한데요. @OneToMany 인 collection 멤버를 가지고 있는 DTO 로 Projection 을 한번에 가능한지요? Team.members TeamDto.memberDtos Lazy 로 @OneToMany Join 시에.. querydsl 쿼리에서 바로 위와 같이 collection 멤버필드까지 한번에 Projection 이 가능한지요? 아니면 일단 entity 로 읽어서 map() 함수를 이용해서 매핑해 주어야 하는지 궁금합니다.
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
테스트에 관해서 말씀해주셔서 질문 드립니다.
안녕하세요. 수업 잘 듣고 있습니다. 강의에서 테스트에 관해서 말씀해 주셔서 질문 하나 남깁니다. 번외에 질문이라... 답을 주실지 모르겠지만 실제 현업에서 개발중에 테스트의 Fixture 가 많아지면서 점점 관리에 어려움을 느끼고 있는데 혹여 이런 것에 관리는 어떻게 하면 좋을지 노하우가 있을까요...? 그리고 앞으로의 수업도 기대하고 있습니다. 제대로 익혀서 실무에 적용해 보는것을 목표로 하고 있습니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
update에서 form태그 질문드립니다.
updateItemForm.html에서 form태그에 action 속성이 없는데 어케 포스트매핑으로 갈 수 있나요??? ㅠㅠ 초보라 죄송합니당
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
연관관계 편의 메소드에 궁금한 것이 있어 질문드립니다.
안녕하세요. 우선 양질의 컨텐츠 항상 잘보고 있습니다. 우연히 수강한 jpa 토크온세미나를 시작으로 이렇게 프로젝트 강의까지 오게되었습니다. 많이 배웠습니다. 정말 감사합니다. 다른게 아니라 엔티티 클래스 구현까지 강의를 수강 도중 연관관계 편의 메소드에서 궁금한 것이 있어 글 남겼습니다. 1. 현재 member의 소속 여부에 대한 처리 이를 테면 "Order" 엔티티 클래스에서, member가 orders에 현재 속하고 있는지 확인하고 만약 그렇다면 해당 Orders에서 member를 제거 후 변경된 member를 추가해야하는 것은 아닌지. public void setMember(Member member){ /* if(this.member.getOrders() != null){ this.member.getOrders().remove(this); } */ this.member = member; member.getOrders().add(this); } 그렇지 않으면 특이사항 이겠지만, Order의 member를 변경할 때 member.orders에서 문제가 생기지 않은가 싶어서 주석 부분을 패스하신 이유가 궁금합니다. 더하여 만약 Order의 Member처럼 현업에서 이렇게 변경 소지가 없는 필드 변수를 final 처리하는지가 개인적으로 궁금합니다. 2. 편의 메소드 위치 두번째로 편의 메소드를 어떤 객체가 갖는 것이 옳은가에 대한 고민이 듭니다. 저는 외래키의 주인이 되는, 이를 테면 Member와 Order의 경우 Order에 위치하는 것으로 생각했는데, Order와 OrderItem의 경우 order를 외래키로 주인이 되는 OrderItem이 아닌 Order에서 orderItem.setOrder을 호출하니 어떤 쪽에서 set를 갖는 것이 옳은가 정하기가 어렵습니다. public void addOrderItem(OrderItem orderItem){ orderItems.add(orderItem); orderItem.setOrder(this); } 혹시 현업에서는 이와 같은 상황에서 어느쪽이 '주' 가 된다를 정하는 규칙, 또는 다른 팀원을 위해서 표시하는 방법이 있는지 궁금합니다. ps. 더 좋은 질문을 가져오도록 노력하겠습니다. 감사합니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
설계 순서가 궁금합니다.
이 강의에서는 로직을 먼저 짜고 웹 계층을 개발하면서 미리 짜두었던 로직들을 이용해서 금방 끝났습니다. 이렇게 하면 정말 편리할 것 같지만, 한편으로는 페이지가 완성되어 있지 않는 상태로 로직을 짜려니 굉장히 어려울 것 같다는 생갂 또한 듭니다. 매개변수를 어떤 것을 넘겨줘야할지도 혼란스러울 것 같구요. 모든 것을 다 설계한 다음에 로직부터 짜는 것이 보통 일반적인가요 ?
-
해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
부모 자식관계에서 부모 삭제시 Set Null방법에 대해궁금합니다.
안녕하세요~ 부모테이블과 자식테이블간의 관계를 자식테이블에서 ManyToOne으로 단반향으로만 설정하고 부모의 PK 값이 Null이 허용(FK가 NUll 허용) 되는 테이블일때 부모의 테이블 값을 삭제할 경우 자식테이블에서 참조하고있는 부모의값을 null로 변경하고싶습니다. 인터넷으로 검색해보니 해결책으론 부모테이블 삭제할때 참조하고있는 자식테이블을 조회하여 일일히 반복문을 통해 null을 처리하더라구요 이와같은 방법말고 부모의값이 delete될때 자식이 자동으로 null 처리되게 자동으로 맵핑하는방법이있을까요? DB에선 직접 외래키 설정시 OnDelete, OnUpdate에 제약조건으로 cascade, set null 등을 하는것이 가능한데 위와같은 방법으로 자동 맵핑해줄 수 있을까요? ( 부서 테이블과 사원테이블이 있을때, 신입사원의 경우 부서테이블자체가 존재하지않기때문에 참조값없이 null값을 저장하고부서이동간에 부서가 삭제되었을떄 해당 부서의 인원들을 null 처리 해주시 위함입니다.) @ManyToOne@OnDelete(action = OnDeleteAction.NO_ACTION)@JoinColumn(name ="post_idx")private Post post; public enum OnDeleteAction { /** * Take no action. The default. */ NO_ACTION, /** * Use cascade delete capabilities of the database foreign-key. */ CASCADE} 위와같이 OnDelete 어노테이션으론 NO_ACTION, CASCADE 밖에 존재하지않아서 질문드립니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
OrderItem 과 Item의 관계
Order와 Member나 OrderItem이나 Order 는 다대1 관계인데, Member은 order의 list를 가지고 있고 order 또한 orderitems의 list를 가지고 있습니다. 그런데 item은 왜 orderitem의 list를 따로 @OneToMany를 안해주는지가 궁금합니다
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
fetch 조인, 엔티티 그래프 질문입니다.
안녕하세요. 강의를 들으며 조금 불분명한 부분이 있어서 질문 남깁니다. 가령 멤버들의 팀을 조회하는 쿼리를 작성한다면 우선 팀 전체를 조회하는 쿼리가 실행되고 각 팀이 자신들의 멤버를 조회하는 쿼리가 전체 팀의 수 만큼 발생될것 같습니다.(N+1문제) 이런 경우에는 오히려 즉시로딩을 사용하는게 맞아보이기에 fetch 조인 혹은 그래프 기능을 사용한다고 이해했습니다만 맞게 이해를 한것인지 잘 모르겠습니다. 조금만 더 설명해주시면 정말 감사하겠습니다. 좋은 하루 되세요.
-
해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
JPA와 ORM관련 질문 드립니다 !
안녕하세요.. JPA를 배우면서 의문이 들어 질문 드립니다. JPA 그리고 ORM을 사용하는 이유가 쿼리문을 직접 짜지 않아도.. 혹은 몰라도 객체로서 접근하여 데이터를 가져오는 것이 가능하다는 것과 생산성에 있다는 말씀 하셨습니다. 하지만 제가 JPQL를 배우면서 느낀건 JPQL이지만 똑같이 쿼리를 짠다는 느낌이 들어서요... 그렇다면 특정 조건으로 데이터를 가져올 경우, JPA가 객체지향적으로 조금 조율된 쿼리문일뿐. 쿼리를 짜야 한다는 면에서는 Mybatis 와 똑같은 느낌이 아닐까... 라는 생각을 하게 되어서.. 만약 대형 프로젝트에서 복잡한 쿼리문이 대다수인 경우 차이점을 못느끼지 않을까 생각합니다. 해당 부분에 대해서 어떻게 생각하시는지 궁금합니다 ! 그렇다면 쿼리문을 모르고 순수 객체나 함수로서 데이터를 가져올수 있는 수준까지 지원이 안되는 것인지도 궁금합니다 !!
-
미해결실전! Querydsl
Querydsl과 jpql을 선택하는 차이가 궁금합니다.
드디어 querydsl을 배우고있네요! 제가 이해하고 있기로는, jpa에서 단순히 PK값으로 find()만 하는것이 아니기 때문에 여러가지 조건으로 검색하는 쿼리를 위해 jpql이 존재하는 것이고, jpql로 해결하기 어려운 동적쿼리나 더욱 복잡한 쿼리를 해결하기 위해 querydsl이 필요하다고 이해하고 있습니다. 그런데 실무에서 개발을 할 때 스프링 data jpa가 제공하는 기능이외에 필요한 내용들은 모두 querydsl로 작성하면 되지않나요?? querydsl 이외에 jpql을 작성해야하는 경우가 존재하는 것인지 아니면 querydsl과 jpql의 차이를 더욱 이해하기 쉽게하기위해 두가지 상황을 모두 보여주는 것인데 제가 착가하는 것인지 궁금합니다. 01. 실무에서 querydsl과 jpql을 같이 사용하나요?? 02. jpql을 함께 사용 한다면, 같이 사용해야하는 이유는 무엇인가요?? (querydsl을 사용하면 jpql로 만들수 있는 모든 쿼리를 다 만들수 있지않나 생각됩니다.)
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
Member와 Item에 저장 할 때 다른 이유가 있나요?
Member 저장 ==========> public void save(Member member) { em.persist(member);} Item 저장 ==========> public void save(Item item) { if (item.getId() == null) { em.persist(item); } else { em.merge(item); }} 위와 같이 Member/Item 저장 방식이 다른 이유가 있나요? 답변 부탁드립니다.
-
해결됨스프링 데이터 JPA
jpa 이점중에 동일성보장이 왜 장점인지 자세히 알고싶습니다..
강의내용중에 동일성보장에 대한 장점을 듣고 정확히 어떤 사례에 이점인지 궁금하여 구글링을 해봤는데 시원하게 원하는 내용을 찾지 못하였습니다. ㅠㅠ 어떤 상황에서 동일성보장에 대한 장점을 이해할수 있을까요
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
주문과 주문상품에만 생성 메서드가 있는 이유는 뭔가요?
다른 엔티티들과 달리, 주문과 주문상품은 상태값 외에는 바뀔일이 없기 때문에 생성 메서드를 사용한게 맞는지 궁금합니다. (사실 이 부분도 의문입니다. 다른 엔티티들에도 유지보수를 위해 생성 메서드를 사용하는게 맞지 않을까 싶습니다.) 예제에서 주문과 주문상품에서도 @Setter를 사용하고 있기에 언제든 값이 변경될 수 있는 점 때문에 제가 생각한게 틀린건지 맞는건지 잘 모르겠습니다.
-
해결됨실전! 스프링 데이터 JPA
복합키 맵핑에 대해 질문드립니다
안녕하세요 권영한님 강의 너무 재미있게 잘 보고 있습니다! 😁 복합키 맵핑을 찾아보니 여러방법들이 있더라구요~ 영한님은 복합키 맵핑을 어떤 방법을 사용하시는지 질문 남깁니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
merge 와 dirty check 질문
안녕하세요. 변경감지와 병합 챕터를 보고 질문드립니다. 말씀하신 내용중에 "merge 는 모든 필드를 업데이트하고, dirty check 는 변경된 부분만 업데이트하기때문에 dirty check 를 사용하는게 좋다" 라는 내용이 있는데요. 그래서 테스트를 좀 해봤는데 dirty check 로 update 쿼리가 날아가는 경우에도 모든 필드에 대한 update 쿼리가 날아가더라고요. 결국 실행되는 쿼리 자체는 merge 와 dirty check 가 동일한거같은데요. 그래서 제가 정리한건 "merge 보다 dirty check" 라기보다는 "기존 엔티티를 수정(update) 할때는 신규 객체를 만드는게 아니라 기존 엔티티를 찾아와서 하자" 인데, 이렇게 이해해도 될까요? + 조금 더 찾아보니까 하이버네이트에서 @DynamicUpdate 애노테이션을 지원하고있는데 이 애노테이션은 실무에서 적극적으로 사용하는지도 궁금합니다. 감사합니다.
-
미해결실전! 스프링 데이터 JPA
Unable to access lob stream 오류가 발생합니다.
다음과 같이 AccountRepository 인터페이스를 생성해 사용하는데, findByNickname 메소드에 대해 Unable to access lob stream 오류가 발생합니다. 검색해보니 맨 위 사진과 같이 Repository에 @Transactional을 추가하라는데, Clob이나 Blob이 포함된 엔티티는 해당 어노테이션을 반드시 사용해야 하는 것인가요? 혹시 맞다면 왜 그런건가요?