묻고 답해요
138만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
validateDuplicateMember 메서드에서 Unique제약 조건 관련 질문 있습니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]여러 was가 띄워있는 웹에서 0.0000...01초까지 동일한 시간에 join()메서드가 동시에 호출되어 validateDuplicateMember()메서드 또한 동시에 호출되고 findByName()을 통한 조회가 동시에 호출될 경우에 두 클라이언트에 대한 요청에 대해서 모두 isEmpty가 true가 되어 검증 로직을 통과하게 되어 최후의 수단으로 DB단에서 name 필드를 Unique 제약조건을 두어 유일성을 가지게 하는 것은 이해하였습니다.그렇다면, Unique제약조건까지 설정한 이후에 두 클라이언트가 동시에 요청을 했을 때,1. 둘 다 DB에 insertion 되지 못하고 에러가 나나요?2. 둘 중 하나가 삽입이 되고 나머지 하나는 삽입 되지 못하나요? 그렇다면, 어떤 기준으로 둘 중 하나가 선택되나요?
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
자바17 기본설정
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요 자바 17로 학습하고 있는데 기본설정에 javax가 포함되어있어 질문 드립니다자바17이상은 jakarta를 써야한다고 알고있는데 javax를 써도 무방한건가요 ??답변 부탁드립니다 !!
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
persistence 찾을 수 없다고합니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]이클립스로 구동시키려 하고 있습니다. 다름이 아니라 분명 src/main/resources/META-INF/persistence.xml 완벽하게 경로 넣었다고 생각하는데 사진과 같은 Could not find ~에러가 출력됩니다.
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
MyBatis 적용시 오류
질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]저와 같은 내용의 질문이 있어서 참고해 봤는데도 해결이 안되어 질문드립니다.<MyBatis 적용2 - 설정과 실행 부분 테스트 오류>MyBatis 적용 후 테스트코드 돌려보았는데, Bean설정과 관련된 오류가 나타납니다. 패키지 Path도 확인해보고, 교재와 비교도 해보았는데 어떤 문제인지 잘 모르겠습니다ㅠㅠ테스트 돌렸을때 아래와 같은 오류가 납니다.Parameter 0 of constructor in hello.itemservice.config.MyBatisConfig required a bean of type 'hello.itemservice.repository.mybatis.ItemMapper' that could not be found.Action:Consider defining a bean of type 'hello.itemservice.repository.mybatis.ItemMapper' in your configuration. 구글드라이브 링크 첨부드립니다!https://drive.google.com/file/d/1U8YIKxbUDMvnv2ZaWjzB5gUTgqcwTZ-t/view?usp=sharing
-
해결됨실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
@EqualsAndHashCode
주문 조회 V4: JPA에서 DTO 직접 조회 제공해주신 피피티에서는 @EqualsAndHashCode 를 사용하는데 강의에서는 제가 못 본것 같습니다.. @EqualsAndHashCode 를 사용하신 이유가 있을까요? 강의 중 9분 34초 에서 본 OrderQueryDto는 @Data만을 사용했습니다.
-
미해결실전! Querydsl
쿼리메서드에서 And Or 조건 혼용시 괄호를 표현하는 방법이 있나요?
안녕하세요.JPA 쿼리메서드를 사용하면서 궁금한점이 있어 질문 드립니다.SELECT Col_A, Col_B, Col_C, Col_D FROM TBL_AWHERE Col_A = 'aaa' and Col_B = 'bbb' and (Col_C = 'ccc' or Col_D = 'ddd')일반 쿼리로 위의 WHERE 문의 조건을 쿼리메서드로 작성하고자 하는데 내공이 부족하여 잘 안됩니다.findByCol_AAndCol_BAndCol_COrCol_D(String A, String B, String C, String D)이렇게 작성할 경우WHERE Col_A = 'aaa' and Col_B = 'bbb' and Col_C = 'ccc' or Col_D = 'ddd'이 같이 괄호가 없는 쿼리문으로 작성이 되는거 같습니다.쿼리메서드로 and와 or 조건의 괄호를 묶는 방법이 있을까요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
연관관계 메서드 관련 질문
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]안녕하세요, 연관관계 메서드 관련해서 질문 있습니다.<엔티티 설계시 주의점> 26:30에서 public void addchildCategory(Category child){ this.child.add(child); child.setParent(this); }인 것을 확인할 수 있습니다.혹시 아래와 같은 방법은 하면 안되는지 궁금하여 질문드립니다. public void addchildCategory(Category child){ this.child.add(child); this.parent = child; }
-
해결됨Practical Testing: 실용적인 테스트 가이드
ServiceRequestDto 대신 풀어서 넘기는건 어떻게 생각하시나요?
Controller단의 Dto를 Service 전용 Dto로 변환해서 넘기는 방법을 알려주셨는데Controller단에서 받은 Dto의 컬럼들을 모두 풀어서 Service단 으로 넘겨주는 방법은 어떻게 생각하시는지 궁금합니다.이렇게 하면 순수한 자바코드로 Service단 코드를 작성할 수 있을 거라고 생각하는데 강사님의 생각 알려주시면 감사하겠습니다.
-
해결됨Practical Testing: 실용적인 테스트 가이드
Spring Rest Docs 강의 질문이 있습니다.
0:59:00 전 내용입니다. 명세를 정한다컨트롤러 @Valid 검증을 작성한다.RestDocs 를 작성한다가짜 데이터를 넣는다.배포한다.그 뒤 서비스와 리포지토리를 작성한다. 라고 정리를 해봤습니다. 그런데 여기서 궁금한게 4번인데요가짜 데이터를 넣는다는 뜻을 잘 모르겠습니다. 테스트 환경에서는 자유롭게 docs/index.html 로 접근을 하고 라이브 환경에서는 해당 bootJar를 구문을 제거하고 배포하시는 건가요?
-
미해결실전! 스프링 데이터 JPA
org.springframework.data.repository.Repository를 구현한 클래스??
안녕하세요 강사님! 강의 정말 잘 듣고 있습니다.혹시 강의 자료가 잘못된 건지 아니면 제가 이해를 잘못한 건지 잘 모르겠어서 질문 올립니다.강의 자료의 해당 강의 부분을 보면 org.springframework.data.repository.Repository 를 구현한 클래스는 스캔 대상라고 되어있는데, 제가 이해한 바로는 이 부분이org.springframework.data.jpa.repository.JpaRepository 를 상속받은 인터페이스는 스캔 대상이렇게 수정되어야 할 것 같은데 맞을까요..??
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
값타입 비교법 equals()
강의 "값타입 비교" 에서 equals를 오버라이드해서 쓰셨는데 저는 항상 그냥 특정 스트링이나 객체가 같은지 비교할때 equals썼었거든요 그렇게 하면 안됐던건가요?? 어떤경우든 항상 객체에 맞게 오버라이드해야하나요??
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
이너클래스로 새로운 엔티티! 와 임베디드 차이?
이너클래스로 새로운 엔티티만들어서 엔티티에 넣어주는것과 와 임베디드를 엔티티에 넣어주는것의 차이?가 궁금합니다엔티티만들때 엔티티안에 임베디드타입으로 넣어주셨는데이부분은 이너클래스나 다른클래스로 따로 엔티티를 만들어 그부분에 넣어줘도 되는것 아닌가요? 둘의 차이가 무엇인가요?
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
일대일 매핑, 매니투원 두개만 지연로딩으로 바꿔주면 되나요?
만일 실무에서 개발을 하게되면 일대일 매핑, 매니투원 두개만 즉시로딩이니 이 두개만 항상 지연로딩으로 바꿔주면 되나요??
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
테이블 생성 안됨
별 다른 에러는 안보이고 메인에서 run 했는데 테이블 생성이 안됩니다. 어디서 부터 봐야하나요? 해당 로그 입니다.
-
미해결실전! 스프링 데이터 JPA
"섹션6 새로운 엔터티 구별방법" 강의를 보다가 실무에서 JPA 도입 시 DB의 PK, FK 생성 전략이 궁금합니다.
JPA를 도입하기 전의 DB 테이블들의 PK는 대부분 일정 규칙을 같은 문자열(ex:주문번호)이나 사용자 입력값(ex:사용자id)을 사용하고 해당 PK가 다른 테이블에서는 FK로 참고하며, 또한 타 테이블의 PK로 구성된 복합키가 PK로 많이 구성되는데...JPA를 도입하면 Long같은 generated value를 임의로 물리적 PK로 생성하고, FK는 기존 논리적 PK칼럼을 참조하는 방식으로 설계 하나요?실무에서 JPA 도입시 테이블 PK 및 FK 전략이 궁금하네요.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
주문 취소시 해당 상품 재사용
주문을 취소할시 취소된 unique한 delivery값이 남아있는 상태여서 똑같은 delivery id를 재사용하게 하려할 때 에러가 뜨는데 해결방법이 따로 있을까요? cancel란에도 record가 남아있으면서 동시에 그 unique id가 재사용될 수 있는 방법이요
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
주문 기능 테스트 부분에서 질문이 있습니다!
상품 주문을 테스트할 땐 Book 객체로 받아서 테스트를 실행했는데, 상품주문 재고수량초과 테스트에선 . 왜 Item 객체로 받아서 테스트를 실행하는건가요? 차이점은 따로 없지 않나요?
-
해결됨실전! 스프링 데이터 JPA
연관관계 편의 메서드에서 mappedBy 필드에 대한 수정 로직 추가여부
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예https://www.inflearn.com/questions/25417/changeteam-%EA%B4%80%EB%A0%A8%ED%95%98%EC%97%AC-%EC%A7%88%EB%AC%B8-%EC%9E%88%EC%8A%B5%EB%8B%88%EB%8B%A4 연관관계 편의 메서드 관련 질문인 위 링크의 글과 연관이 있습니다. 질문을 먼저 작성해놓고 질문 끝에 다시 언급해놓겠습니다.1) 어쩌면 필요없는 구현일 수 있는데, 이런 습관?을 들여도 괜찮은지2) 아니면 강의처럼 DB에 반영되지 않고 거의 문제가 발생할 가능성이 없는 부분은 간단하게 구현하고 넘어갈지 mappedBy로 read-only상태인 조회 전용 필드인 members는 변경 상태가 DB에 반영되지 않지만,인스턴스 입장에서는(객체지향적으로는?) 어플리케이션 런타임 시점에 변경을 해주어야한다고 생각했습니다.위 링크의 영한님 말씀처럼 데이터 변경 후 이를 즉시 재활용하는 일은 극히 드물지만 말이죠. Member 엔티티// 연관관계 편의 메서드 public void changeTeam(Team team) { // 기존에 팀이 있다면 탈퇴 if (this.team != null) { // 탈퇴를 위한 비즈니스 로직을 Team에 구현함 this.team.removeMember(this); } this.team = team; team.getMembers().add(this); }그래서 위와 같이 if 분기를 두고 소속 팀이 있는 회원은 해당 팀에서 회원 자신을 지우는 로직을 추가했습니다. this.team.removeMember(this)위 로직은this.team.getMembers().remove(this)와 같지만 의미있는 메서드를 만들어보고 싶어서 아래처럼 removeMember 를 구현했습니다.Team 엔티티// 비즈니스 로직 -> read-only 필드라서 DB에는 반영 안됨 public void removeMember(Member member) { this.members.remove(member); } null 확인 로직이 changeTeam() 내부에 있으므로 Member 엔티티 생성자는 다음과 같이 작성했습니다.public Member(String username, int age, Team team) { this.username = username; this.age = age; changeTeam(team); } 결론적으로 물어보고 싶은 질문은1) 어쩌면 필요없는 구현일 수 있는데, 이런 습관?을 들여도 괜찮은지2) 아니면 강의처럼 DB에 반영되지 않고 거의 문제가 발생할 가능성이 없는 부분은 아래처럼 간단하게 구현하고 넘어갈지// 연관관계 편의 메서드 public void changeTeam(Team team) { this.team = team; team.getMembers().add(this); } 이렇게 두 가지 질문이 있습니다.늘 좋은 강의 해주셔서 감사합니다.
-
해결됨실전! 스프링 데이터 JPA
findAll() 여러개 정의하기
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예[질문 내용]만약 어떤 경우엔 @EntityGraph를 쓰고 어떤 경우엔 안쓰고 싶어서 원본 findAll()를 그대로 두고 새로운 findAll()과 같은 동작을 하는 메소드를 정의한다고 하면 어떻게 만들수 있나요?
-
해결됨실전! 스프링 데이터 JPA
게시판에서 삭제된 댓글을 보여주기 위해 Spring Data JPA에서는 어떻게 접근해야 할까요?
상황 설명기본적인 게시판을 만들고 있어요.해당 게시판에는 게시물를 달 수 있고 해당 게시물에는 댓글을 달 수 있어요.댓글과 관련한 요구사항들은 다음과 같습니다.댓글 Create, Update, Delete각 게시물은 몇 개의 댓글이 달렸는지 확인이 가능하다.게시판에서는 전체 댓글이 몇 개가 달렸는지 확인이 가능하다.게시물에 달려 있는 모든 댓글들을 확인할 수 있다. 다만, 삭제된 댓글의 경우 "삭제된 댓글입니다" 라는 메세지로 보여준다. 내 접근 방법(Where 어노테이션을 사용)우선은 4번 조건 때문에, 그리고 실무에서 관리를 위해 데이터를 잘 삭제하지 않는다는 걸 근거로 Soft-Delete를 적용했습니다.그리고 Comment 엔티티를 아래와 같이 작성했습니다.@Entity @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) @SQLDelete(sql = "UPDATE Comment SET deleted = true where comment_id = ?") @Where(clause = "deleted = false") public class Comment extends BaseEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "comment_id") private Long id; private boolean deleted; ... 생략 ... } Comment 엔티티를 조회하는 대부분의 요청(1개 제외)은 deleted 필드가 false인걸 찾아와야 합니다. 그래서 디폴트 속성으로 deleted=false를 적용하면 편하겠다고 생각하여 Where 어노테이션을 사용했는데요. 문제점이 방식의 문제는 4번 요구사항을 구현할 수 없다는 것입니다.Spring Data JPA의 기본 메서드는 물론이고, JPQL, QueryDsl 을 사용한 모든 Comment 조회 쿼리에도 "deleted=false" 속성이 기본으로 달라붙어 deleted가 true인 Comment를 가져올 수 없습니다.(확실하지는 않지만, Native Query를 사용하면 하이버네이트 구현체의 영향을 안받고 제가 원하는 기능을 구현할 수 있을 거 같습니다. 그런데 Native Query를 쓰는게 최선일까 자꾸 꺼려지더라구요.) 임시 방안저는 어쩔 수 없이 Where 어노테이션을 제거하고, Comment에 관련한 모든 조회 쿼리를 JPQL로 만들어줬습니다.하지만 고작 한 개의 메서드에서 삭제된 메서드를 보여주기 위해 전체 Comment 조회 메서드를 변경하는 게 마음에 들지 않습니다. 관리를 어렵게 만든다는 생각이 들어요.실제로 저는 "게시판에서는 전체 댓글이 몇 개가 달렸는지 확인이 가능하다." 요구사항을 구현할 때, where deleted=false 조건을 붙이는 걸 깜빡해서 삭제된 댓글들의 개수까지 전부 보여줬습니다. 이러한 상황에서는 코드를 어떻게 작성하는 게 좋을까 계속 고민을 하고 있는데요,,, 함께 고민해주실 수 있을까 하여 이렇게 질문을 남깁니다. 감사합니다.