inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

176만명의 커뮤니티!! 함께 토론해봐요.

질문드립니다..

미해결

자바 ORM 표준 JPA 프로그래밍 - 기본편

1. Member엔티티의 필드와 MEMBER 테이블의 외래키 컬럼을 매핑하고, Member테이블의 외래키(TEAM_ID)를 Team테이블의 기본키와 매핑한다. 2. member.getTeam()을 할때 MEMBER 테이블의 외래키(TEAM_ID)를 통해 TEAM테이블의 기본키를 참조하여 Team 데이터를 가지고 올 수 있다. 3. Member테이블의 외래키와 Team테이블의 기본키를 매핑해서 외래키-기본키 관계를 설정한다. 이 3가지가 각각 @JoinColumn때문인지, @ManyToOne때문인지 구분이 안되서 질문드립니다.. 각각 어느 어노테이션에 의해 동작되는것인가요??

  • java
  • jpa
오리쉐리 댓글 1 좋아요 0 조회수 80

Persist() 호출 시 스냅샷 생성 여부가 궁금합니다.

미해결

자바 ORM 표준 JPA 프로그래밍 - 기본편

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] Member member = new Member(1L, "member"); em.persist(member); member.setName("Test"); tx.commit(); 위 코드를 실행하면 아래와 같이 SQL 쿼리문이 로그에 찍히는데요 Hibernate: /* insert for hellojpa.Member */ insert into Member (name, id) values (?, ?) Hibernate: /* update for hellojpa.Member */ update Member set name=? where id=? persist()를 할 때 member 객체를 영속성 컨텍스트에 등록하고, 해당 상태에서는 신규 엔티티이므로 setName()으로 이름을 바꾸더라도 새로운 값이고, DB와 동기화되지 않았기에 스냅샷도 없을 것이라 생각했습니다. 저의 [다른 질문]( https://www.inflearn.com/community/questions/1484678 ) 에서도 강사님께서 persist 시에는 새로운 데이터이기 때문에 스냅샷 생성의 실익이 없다고 말씀을 해주셨기에, 위 코드에서 INSERT 쿼리문 1개만 발생할 줄 알았는데, 실행 결과 UPDATE 쿼리문도 함께 발생한 것을 확인했습니다. persist를 수행한 이후 setName을 수행할 때, 스냅샷이 생성되지 않은 상태, 스냅샷이 없는 상태에서 어떻게 변경을 감지하여 UPDATE 쿼리문을 작성한 것인지 궁금합니다. 처음에는 PK 생성 전략을 @GeneratedValue(strategy = GenerationType.IDENTITY) 로 해서 INSERT문이 먼저 생성되는 것이 원인인줄 알았지만, SEQUENCE 전략으로 바꿔도 UPDATE 쿼리문이 발생하는 것을 보고 제가 잘못 짚은 것 같았습니다. 이미 [또 다른 질문]( https://www.inflearn.com/community/questions/1494485 ) 에서도 비슷한 질문을 한 번 더 남겼는데, 인프런 AI 인턴의 답변에서는 persist() 호출 시에 스냅샷이 생성이 된다는 답변을 받아 헷갈려서 한 번 더 질문 남겨봅니다. Entity Manager를 통해 persist() 호출 시에 스냅샷도 생성이 되는 것일까요? 생성이 되지 않는다면, persist 이후에 호출한 setName()에 대해서 UPDATE문이 발생했는데, 여기서 변경 감지는 어떻게 이뤄졌나요?

  • java
  • jpa
천다인 댓글 1 좋아요 0 조회수 97

Kafka Source Connect 사용

미해결

Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)

강사님 너무 좋은 강의 감사드립니다. JDBC Source Connector 예시를 잘 보았습니다. 해당 소스 커넥터의 경우 DB를 주기적으로 폴링해서 변경사항을 감지해서 DB 부담이 큰 것으로 알고 있는데요. (CDC source connector에 비해) 혹시 해당 방식의 커넥터는 현업에서도 메이저하게 사용하는 방식인지 아니면 단순 예시인지 궁금합니다.

  • spring-boot
  • jpa
  • 아키텍처
  • spring-cloud
  • kafka
  • msa
  • rabbitmq
임동혁 댓글 2 좋아요 0 조회수 319

로그에 values(?, ?, ?, ?, ?) 궁금증

미해결

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 강의에서는 쿼리 날라갈 때 로그를 보면 폼에 입력한 데이터가 로그에 다 뜨는데 제 스프링 로그를 보면 insert into member (city, street, zipcode, name, member_id) values (?, ?, ?, ?, ?) 이 로그밖에 안 뜨는데 최신버전 스프링에서는 보안상 로그에서 필터링을 해주는 건가요? 아니면 따로 영한님께서 설정을 해주신건가요?

  • java
  • spring
  • 웹앱
  • spring-boot
  • jpa
sim2 댓글 2 좋아요 0 조회수 138

OrderSearch에서 사용된 JPQL 질문

미해결

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] OrderRepository 안에 JPQL로 다음과 같이 쿼리를 날리고 있는데 em.createQuery("select o from Order o join o.member m", Order.class) 여기서 사실 모든 주문이 회원하고 같이 매핑되어 있으면 join 하위에 문장은 필요 없는 문장 아닌가여?? 그냥 단순히 select o from Order o만 해도 될 것 같은데 왜 저렇게 한걸까요?

  • java
  • spring
  • 웹앱
  • spring-boot
  • jpa
sim2 댓글 1 좋아요 0 조회수 180

from 절의 서브 쿼리에서 여러 값 조회

미해결

자바 ORM 표준 JPA 프로그래밍 - 기본편

[질문 내용] from 절의 서브 쿼리를 작성하였을 때 조회로 여러 값이 나오게 테스트를 한번 만들어 보았는데요. // 페이징 쿼리 String query = "select new jpqljpa.MemberDTO(mm.mUser, mm.mAge) from (select m.username mUser, m.age mAge from Member m) mm"; List<Member> result = em.createQuery(query, Member.class).getResultList(); System.out.println("result = " + result.get(0)); 이렇게 하였을 때, 에러없이 나오긴합니다. 어떤 메커니즘으로 해당 쿼리가 문제없이 나오는지 구체적으로 알려주실수 있나요? 그리고 추가 질문으로 출력된 결과가 result = jpqljpa.MemberDTO@4def42c3 객체 메모리값으로 나오게되었는데 이름, 나이의 값을 출력하고싶다면 어떻게 코드를 쳐야 할까요?

  • java
  • jpa
soojinkimss 댓글 2 좋아요 0 조회수 146

연관관계 없는 엔티티 외부 조인 관련돼서 질문

미해결

자바 ORM 표준 JPA 프로그래밍 - 기본편

[질문 내용] 조인 강의 영상에서 Member 엔티티와 Team 엔티티를 member.changeTeam(team) 메소드를 통해 연관관계를 매핑해서 Member와 Team은 연관관계가 있는 것이고, 코드 상에서도 이미 연관관계 매핑된 상태에서 왜 연관관계 없는 엔티티 외부 조인 쿼리를 보여주시는 것인지 잘 이해가 안됩니다.

  • java
  • jpa
soojinkimss 댓글 2 좋아요 0 조회수 149

Team t, m.team t

해결됨

자바 ORM 표준 JPA 프로그래밍 - 기본편

[질문 내용] "조인" 강의 영상 13분 51초에 김영한 강사님께서 select m from Member m left join Team t on m.username = t.name 쿼리를 치셨는데, 여기서 m.team t를 하지 않고, 왜 Team t 로 하셨는지 구체적으로 알려주실 수 있나요?

  • java
  • jpa
soojinkimss 댓글 1 좋아요 1 조회수 104

스프링 데이터 JPA save()할때 OneToMany 엔티티의 필드가 null값이 저장되요

미해결

실전! 스프링 데이터 JPA

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 특정 리포지토리에서 save()할때만 연관관계에 있는 엔티티의 필드가 null로 저장됩니다. 대체 어디가 문제일까요? cascade도 persist로 맞췄고 save 바로 직전에 로그를 띄웠을때도 정상적으로 값이 들어가있었는데 save()할때만 값이 null값으로 insert되네요

  • java
  • spring
  • spring-boot
  • jpa
kcjsend5 댓글 2 좋아요 0 조회수 288

(재질문)토이프로젝트에서 spring data jpa 기반으로 페이징 처리 중 궁금한 점 있습니다.

미해결

실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화

[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 아니오 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예 [질문 내용] 저번에도 같은 질문을 올렸다가 질문이 두서가 없다보니 여쭤보려고 한 것을 잘못 물어본거같아서 다시 질문드립니다. Spring Data JPA를 바탕으로 토이프로젝트를 개발하고있고 Pageable 인터페이스를 활용하고 있습니다. 프로젝트에서 Item(품목)의 하위 개념으로 Product(제품)을 가지고 있습니다.(1:N - 품목 하나에 대해 여러개의 제품을 등록 할 수 있음) 예를 들어 핸드폰이라는 Item(품목) 정보를 등록하고, 그 품목에 대한 Product(제품) ( 이를테면 아이폰10, 갤럭시S25, 샤오미)의 정보들을 등록합니다. 이때 특정 품목(itemId)을 클릭하면 해당 품목에 대한 정보와 내가 등록한 product 리스트가 띄어지도록 하는 api 기능을 구현하려 했습니다. 처음에는 요청이 item컨트롤러로 디스패치하고, product와 itemId를 기준으로 패치조인하여 데이터를 받아오는 식으로 구현을 했는데.. product리스트를 불러오는 과정에서 페이징을 하고자 기존의 로직을 수정하니, 메인i 테이블인 item을 기준으로 페이징이 되는 문제가 발생했습니다. // page처리 시 문제가 발생하는 respository method @Query(value = "SELECT DISTINCT i FROM Item i LEFT JOIN FETCH i.productList WHERE i.id = :itemId", countQuery = "SELECT COUNT(p) FROM Product p WHERE p.item.id = :itemId") Page<Item> findWithProductsByItemId(@Param("itemId") long itemId, Pageable pageable); 그래서 제가 생각한 두가지 안이 있는데 이중에 어떤 것으로 개발해야할지 판단이 잘 서지않아 질문드립니다. 1) 응용계층에서 item에 대한 정보를 불러오는 item서비스 호출 + 위 item에 해당되는 product 리스트 정보들을 paging 하여 불러오는 페이징하여 불러오는 product서비스 호출 2) product를 메인으로 item과 n:1 패치조인하는 메소드를 productRepository에서 생성. 1번 방법이 맞는 것 같지만,, paging으로 데이터를 불러올 때마다 item쿼리를 한번씩 날려야하는게 비효율적인거 같기도하고,, 2번으로 하자니... 구현하고자 하는 기능은 item을 메인으로 product 목록을 불러오는 것인데,, 실제 동작은 Product가 메인으로(Product컨트롤러로 디스패치) 처리가 되다보니 이렇게 해도 될까 하는 의문이 들었습니다. 이런 상황에서는 어떤 식으로 구현을 하는게 좋을지요. 고견을 여쭙니다 ㅠㅠ

  • java
  • spring
  • spring-boot
  • jpa
인생은회전목마 댓글 3 좋아요 0 조회수 332

NotEnoughStockException 커스텀 Exception을 만든 이유가 궁금합니다.

미해결

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] 강의에서 NotEnoughStockException 을 새로 만드셨는데, IllegalArgumentException을 사용하는 것은 어색한가요? 처음엔 도메인에서 exception 처리 때문에 별도로 생성한 것이겠지하고, 넘어갔는데 주문 취소의 배송완료된 상태에서는 IllegalStateException 을 사용하셔서, 어떻게 구분하여 사용하는 것이 좋을지 궁금합니다.

  • java
  • spring
  • 웹앱
  • spring-boot
  • jpa
CommitAndRun 댓글 1 좋아요 0 조회수 126

값 타입 컬렉션에서 변경 감지는 어떻게 일어나나요?

미해결

자바 ORM 표준 JPA 프로그래밍 - 기본편

em.flush(); em.clear(); System.out.println("============= START ============="); Member findMember = em.find(Member.class, member.getId()); // 1 // findMember.getHomeAddress().setCity("newCity"); // 2 Address oldAddress = findMember.getHomeAddress(); findMember.setHomeAddress(new Address("newCity", oldAddress.getStreet(), oldAddress.getZipcode())); // 3 findMember.getFavoriteFoods().remove("치킨"); findMember.getFavoriteFoods().add("한식"); 강의 코드와 동일하게, Member 엔티티는 임베디드 타입인 homeAddress와 값 타입 컬렉션인 favoriteFoods를 포함하며, 상술한 코드도 값 타입 컬렉션 강의에서 23:30 까지 설명해주신 것과 동일합니다. 1번 주석에서, 임베디드 타입인 homeAddress의 city 필드를 수정하기 위해 city의 setter를 이용하면, Member에서 참조하는 homeAddress의 참조값은 바뀌지 않기 때문에 변경 감지가 일어나지 않는다고 이해했습니다. 따라서 2번 주석에서 볼 수 있듯이, 새로운 객체를 만들어 참조값을 바꿔주어야 변경 감지가 일어나 올바른 update가 될 수 있다고 이해했습니다. 그러나 3번 주석에서의 값 타입 컬렉션 수정을 보면, 결국 Member 엔티티가 가리키는 참조값은 원본 favoriteFoods의 참조값과 다르지 않은데 DB에서는 update가 일어난 것을 확인했습니다. 어떠한 이유로 이런 결과가 나오게 되는지 궁금합니다. 추가) 1번 주석의 코드를 실행할 경우, "newCity"로 변경이 되는 것을 확인했습니다. 참조값이 바뀌지 않는 데도 변경 감지가 일어나는 건가요? 아니면 제가 이해를 잘못하고 있는 부분이 있는 건가요..?

  • java
  • jpa
ash 댓글 1 좋아요 0 조회수 138

토이프로젝트에서 spring data jpa 기반으로 페이징 처리 중 궁금한 점 있습니다.

미해결

실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화

1. 강의 내용과 관련된 질문인가요? 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 아니오 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예 [질문 내용] 먼저 강의 설명과 일맥상통한 부분일 것 같지만, Spring Data JPA를 바탕으로 토이프로젝트를 개발하고있고 Pageable 인터페이스를 활용하고 있습니다. 프로젝트에서 Item(품목)의 하위 개념으로 Product(제품)을 가지고 있습니다.(1:N - 품목 하나에 대해 여러개의 제품을 등록 할 수 있음) 처음에는 특정 item을 클릭했을 때, 해당 item의 정보와 item에 등록된 하위 Product 리스트(목록을 보여주기 위한 일부 정보들만)를 보여주기 위해 item에 접급하는 Repository에 다음 메소드를 만들었습니다. @Query(value = "SELECT DISTINCT i FROM Item i LEFT JOIN FETCH i.productList WHERE i.id = :itemId", countQuery = "SELECT COUNT(p) FROM Product p WHERE p.item.id = :itemId") Page<Item> findWithProductsByItemId(@Param("itemId") long itemId, Pageable pageable); 그런데 이렇게 하다보니 product가 아닌 item으로 페이징이 되는 것을 알았습니다. 이에 두 가지로 대책을 세웠는데 어떻게 해야할지 모르겠습니다. 1) 응용계층에서 item에 대한 정보를 불러오는 item서비스 호출 + 위 item에 해당되는 product 리스트 정보들을 paging 하여 불러오는 페이징하여 불러오는 product서비스 호출 2) product를 메인으로 item과 n:1 패치조인하는 메소드를 productRepository에서 생성. 1번 방법이 맞는 것 같지만,, paging으로 데이터를 불러올 때마다 item쿼리를 한번씩 날려야하는게 비효율적인거 같기도하고,, 2번으로 하자니... 제가 구현하고자 하는 기능과는 뭔가 다르게 개발하는거 같아 꺼림직 합니다.(item 중심의 조회 기능이 아닌 product기준의 조회) 긴글 읽어주셔서 감사합니다... 어떤식으로 구현하는게 맞는 방법일까요?

  • java
  • spring
  • spring-boot
  • jpa
인생은회전목마 댓글 2 좋아요 0 조회수 215

MemberRepository 인터페이스 설계 질문

미해결

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 입문이나 기본편에서는 인터페이스를 만들어서 확장을 염두에 두었는데 JPA는 인터페이스 기반 설계를 못하는 건가요?? 아니면 일부로 안 하신건가여

  • java
  • spring
  • 웹앱
  • spring-boot
  • jpa
sim2 댓글 1 좋아요 0 조회수 122

msa 환경에서 브로드캐스트는 어떻게 이루어지나요?

해결됨

RabbitMQ를 이용한 비동기 아키텍처 한방에 해결하기

학습중 궁금한 것은 언제든 문의 하세요. 질문을 최대한 자세히 남겨주시면 반드시 답변 드리도록 하겠습니다. 추가로 알고 싶은 내용도 요청해주시면 강의 자료를 업데이트 해서 제공할 예정입니다. 선생님 좋은 강의 감사합니다. 강의 재밌게 듣고 있습니다. 브로드캐스트활용해서 채팅(실시간 알림)기능 구현 강의 듣던 중 궁금한게 생겼는데요 그 전 강의에서 8080 8081 두개 서버 띄어놓고 라운드로빈으로 분배되는 것 설명하셨을 때 처럼 두개 띄어놓고 8080 8081 각각의 웹소켓으로 메세지 전송했는데 각각의 서버 별로 별도로 브로드캐스팅이 되는 것 같더라고요. 전체로 브로드캐스팅 하려면 보통 어떤 식으로 구현하나요?

  • java
  • spring-boot
  • jpa
  • msa
  • websocket
  • rabbitmq
cwnsgur13579 댓글 2 좋아요 0 조회수 254

게시판 mybatis 적용문제

미해결

스프링 DB 2편 - 데이터 접근 활용 기술

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예 [질문 내용] 안녕하세요 mybatis를 체득하고 싶어서 게시판 프로젝트를 한번 해보려고 했는데 잘 안되네요 https://drive.google.com/file/d/1ku2NtUWjeSi1OJ2Z7SLsuqqG7Y471BHv/view?usp=sharing 파일은 여기있습니다. 강의보고 따라하긴 했는데 제가 제대로 이해를 못한건가 싶습니다 제가 생각하는 (공부해서 알게 된) 순서는 이렇습니다 client의 request요청 - JSON배열로 { "id": 1, "title": "게시글 제목", "content": "게시글 내용" } 이렇게 온다고 가정 Controller에서 request를 @RequestBody 받고 service로 전송 Service에서 dto를 param으로 변환하고 param을 mapper 인터페이스의 메서드로 감싸기 Mapper 인터페이스에서 전달받은 메서드 이름과 id가 같은 mapper.xml로 보내서 CRUD 실행 service Mapper.saveBoard(param)으로 → client에 넘겨줄 responseDto로 param을 보냄 create table member( id bigint auto_increment primary key, board_writer varchar(20) not null, board_passwd varchar(20) not null ); create table board( id bigint auto_increment primary key, writer_id bigint not null, title varchar(50) not null, board_contents text not null, board_count int default 0, created_at timestamp default current_timestamp, constraint fk_board foreign key(writer_id) references member(id) on delete cascade ); 테이블은 이렇고 클라이언트 실행하면 오류가 납니다; org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): Jay.Board.repository.mybatis.BoardMapper.saveBoard at org.apache.ibatis.binding.MapperMethod$SqlCommand.<init>(MapperMethod.java:229) ~[mybatis-3.5.14.jar:3.5.14] at org.apache.ibatis.binding.MapperMethod.<init>(MapperMethod.java:53) ~[mybatis-3.5.14.jar:3.5.14] at org.apache.ibatis.binding.MapperProxy.lambda$cachedInvoker$0(MapperProxy.java:96) ~[mybatis-3.5.14.jar:3.5.14] at java.base/java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1708) ~[na:na] at org.apache.ibatis.util.MapUtil.computeIfAbsent(MapUtil.java:36) ~[mybatis-3.5.14.jar:3.5.14] at org.apache.ibatis.binding.MapperProxy.cachedInvoker(MapperProxy.java:94) ~[mybatis-3.5.14.jar:3.5.14] at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:86) ~[mybatis-3.5.14.jar:3.5.14] at jdk.proxy2/jdk.proxy2.$Proxy63.saveBoard(Unknown Source) ~[na:na] at Jay.Board.service.BoardService.saveBoard(BoardService.java:27) ~[main/:na] at Jay.Board.controller.HomeController.saveBoard(HomeController.java:37) ~[main/:na] at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) ~[na:na] at java.base/java.lang.reflect.Method.invoke(Method.java:580) ~[na:na] at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:257) ~[spring-web-6.2.2.jar:6.2.2] at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:190) ~[spring-web-6.2.2.jar:6.2.2] at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:118) ~[spring-webmvc-6.2.2.jar:6.2.2] at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:986) ~[spring-webmvc-6.2.2.jar:6.2.2] at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:891) ~[spring-webmvc-6.2.2.jar:6.2.2] at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-6.2.2.jar:6.2.2] at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1088) ~[spring-webmvc-6.2.2.jar:6.2.2] at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:978) ~[spring-webmvc-6.2.2.jar:6.2.2] at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014) ~[spring-webmvc-6.2.2.jar:6.2.2] at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:914) ~[spring-webmvc-6.2.2.jar:6.2.2] ..... 이 이상은 제가 모르겠습니다…. mapper.xml이 반환되지 않는게 문제 같은데 어느부분이 문제가 되서 이러는지 도통 알 수 없네요.. 오늘 이것만 6시간째 붙잡고 있습니다.. 프로그램 흐름의 순서와 그 각각 하는 일들이 어떤 일들이 펼쳐지는지를 이해하고 코딩을 하고싶습니다…

  • spring
  • mvc
  • jpa
  • querydsl
  • spring-data-mybatis
  • spring-jpa
berichmore 댓글 2 좋아요 0 조회수 233

첨부pdf 코드블럭 글자 수 넘어가면 짤리는 것 같아요

해결됨

RabbitMQ를 이용한 비동기 아키텍처 한방에 해결하기

학습중 궁금한 것은 언제든 문의 하세요. 질문을 최대한 자세히 남겨주시면 반드시 답변 드리도록 하겠습니다. 추가로 알고 싶은 내용도 요청해주시면 강의 자료를 업데이트 해서 제공할 예정입니다. 첫 pdf 에서 docker run -it --rm --name rabbitmq -p 5672:5672 -p 15672:15672 이부분 뒤에 짤렸고 짤린 부분 다른 파일도 더 있는 것 같아요

  • java
  • spring-boot
  • jpa
  • msa
  • websocket
  • rabbitmq
댓글 2 좋아요 0 조회수 238

Spring Rest Docs request에 List 타입이 포함된 경우

미해결

Practical Testing: 실용적인 테스트 가이드

학습 관련 질문을 남겨주세요. 어떤 부분이 고민인지, 무엇이 문제인지 상세히 작성하면 더 좋아요! 먼저 유사한 질문이 있었는지 검색해 보세요. 서로 예의를 지키며 존중하는 문화를 만들어가요. 안녕하세요. 강의 너무 잘 듣고 있습니다! 현재까지 진행해온 프로젝트의 OrderController에도 Spring Rest Docs를 적용해보는 와중에 몇가지 질문이 생겼습니다! public class OrderControllerDocsTest extends RestDocsSupport { private final OrderService orderService = mock(OrderService.class); private static List<ProductResponse> productResponses; @Override protected Object initController() { return new OrderController(orderService); } @BeforeEach void init() throws Exception { ProductResponse productResponse1 = ProductResponse.builder() .id(1L) .price(1000) .sellingStatus(SELLING) .productNumber("001") .type(HANDMADE) .name("상품명1") .build(); ProductResponse productResponse2 = ProductResponse.builder() .id(2L) .price(3000) .sellingStatus(SELLING) .productNumber("002") .type(HANDMADE) .name("상품명2") .build(); productResponses = List.of(productResponse1, productResponse2); } @DisplayName("새로운 주문을 생성한다.") @Test void createOrder() throws Exception { //given LocalDateTime now = LocalDateTime.of(2025, 1, 28, 0, 50); List<String> productNumbers = List.of("001", "002"); OrderCreateRequest request = OrderCreateRequest.builder() .productNumbers(productNumbers) .build(); int totalPrice = productResponses.stream().mapToInt(ProductResponse::getPrice).sum(); OrderResponse orderResponse = OrderResponse.builder() .id(1L) .registeredDateTime(now) .products(productResponses) .totalPrice(totalPrice) .build(); given(orderService.createOrder(any(OrderCreateServiceRequest.class), any(LocalDateTime.class))) .willReturn(orderResponse); //when mockMvc.perform(post("/api/v1/orders/new") .content(mapper.writeValueAsString(request)) .contentType(MediaType.APPLICATION_JSON)) .andDo(print()) .andExpect(status().isOk()) .andDo(document("order-create", preprocessRequest(prettyPrint()), // adoc에서 json 형태를 보기 좋게 만들어줌 preprocessResponse(prettyPrint()), requestFields( fieldWithPath("productNumbers").type(JsonFieldType.ARRAY) .description("상품 리스트") ), responseFields( fieldWithPath("code").type(JsonFieldType.NUMBER) .description("코드"), fieldWithPath("status").type(JsonFieldType.STRING) .description("상태"), fieldWithPath("message").type(JsonFieldType.STRING) .description("메시지"), fieldWithPath("data").type(JsonFieldType.OBJECT) .description("응답 데이터"), fieldWithPath("data.id").type(JsonFieldType.NUMBER) .description("주문 ID"), fieldWithPath("data.totalPrice").type(JsonFieldType.NUMBER) .description("총 주문 가격"), fieldWithPath("data.registeredDateTime").type(JsonFieldType.ARRAY) // 반환타입 ARRAY ? .description("주문 시간"), fieldWithPath("data.products").type(JsonFieldType.ARRAY) .description("주문 상품 리스트"), fieldWithPath("data.products[].id").type(JsonFieldType.NUMBER) .description("주문 상품 ID"), fieldWithPath("data.products[].productNumber").type(JsonFieldType.STRING) .description("주문 상품 번호"), fieldWithPath("data.products[].type").type(JsonFieldType.STRING) .description("주문 상품 타입"), fieldWithPath("data.products[].sellingStatus").type(JsonFieldType.STRING) .description("주문 상품 상태"), fieldWithPath("data.products[].name").type(JsonFieldType.STRING) .description("주문 상품명"), fieldWithPath("data.products[].price").type(JsonFieldType.NUMBER) .description("주문 상품 가격") )) ); } } OrderService.createOrder() 메서드 반환 값 OrderResponse를 생성하기 위해선 ProductResponse 객체가 필요합니다. 이러한 경우가 강사님이 말씀하신 @BeforeEach의 적용시점인가? 라는 생각이 들어 위와 같이 작성해봤습니다. 제가 이해한 바가 맞을까요?? requestFields( fieldWithPath("productNumbers").type(JsonFieldType.ARRAY) .description("상품 리스트") ), 위 코드에서 productNumbers에 있는 각 원소의 타입이 String 인것을 API 문서에 나타내고 싶어 fieldWithPath("productNumbers[]").type(JsonFieldType.STRING 과 같이 작성해봤지만 타입 미스매칭 오류가 발생했습니다. responseFields에는 동일한 방법으로 List 순회에 성공했지만 requestFields 순회 문제는 해결하지 못했습니다. 혹시 방법이 있다면 알려주시면 감사하겠습니다!

  • spring
  • tdd
  • jpa
  • mockito
  • 소프트웨어-테스트
  • junit5
도토리묵 댓글 2 좋아요 0 조회수 213

Hibernate5JakartaModule 오류

미해결

실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화

[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] build.gradle에 Hibernate5JakartaModule을 잘 등록하여 라이브러리 목록도 확인했습니다. 그런데 이렇게 오류가 뜹니다ㅠㅠ 빨간 줄에는 "Cannot return a value from a method with void result type" 라고 뜨는데 이유가 뭘까요..ㅠㅠ

  • java
  • spring
  • spring-boot
  • jpa
댓글 2 좋아요 0 조회수 250

인기 태그

인프런 TOP Writers

주간 인기글