inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

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

연관관계 편의 메서드 작성 방법에 대해 제가 이해한 것이 맞는지 피드백 부탁드립니다.

해결됨

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

<Member 클래스> package jpabook.jpashop.domain; import jakarta.persistence.*; import lombok.Getter; import lombok.Setter; import java.util.ArrayList; import java.util.List; @Entity @Getter @Setter public class Member { @Id @GeneratedValue @Column(name = "MEMBER_ID") private Long id; private String name; @Embedded private Address address; @OneToMany(mappedBy = "member") // 읽기 전용 private List<Order> orders = new ArrayList<>(); } <Order 클래스> package jpabook.jpashop.domain; import jakarta.persistence.*; import lombok.Getter; import lombok.Setter; import java.time.LocalDateTime; import java.util.List; import static jakarta.persistence.FetchType.*; @Entity @Table(name = "ORDERS") @Getter @Setter public class Order { @Id @GeneratedValue @Column(name = "ORDER_ID") private Long id; @ManyToOne(fetch = LAZY) @JoinColumn(name = "MEBMER_ID") private Member member; @OneToMany(mappedBy = "order", cascade = CascadeType.ALL) private List<OrderItem> orderItems; @OneToOne(fetch = LAZY ,cascade = CascadeType.ALL) @JoinColumn(name = "DELIVERY_ID", unique = true) private Delivery delivery; private LocalDateTime orderDate; // 주문시간 @Enumerated(EnumType.STRING) private OrderStatus status; //todo: 연관관계 메서드(양방향) public void setMember(Member member) { this.member = member; // Order -> member member.getOrders().add(this); // member -> order } } Order쪽에서 멤버와의 관계는 @ManyToOne이라 수정, 삭제가 가능해서 연관관계 메서드를 작성할 필요가 없지만, Member 쪽은 mappedBy로 매핑되어있기 때문에 Order를 참조할 때 읽기만 가능하다고 들었습니다. 따라서 Member쪽에서도 Order를 수정, 삭제를 하려면 값을 설정해야 하기 때문에 연관관계 메서드를 작성해야만 양방향 참조가 가능하다고 이해하였습니다. 정리하자면, 다 관계는 연관관계 메서드를 작성할 필요가 없고, 일 관계에서만 연관관계 메서드를 작성해야 양방향 참조가 가능한 것이 맞나요?

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

연관관계 편의 메서드 작성 방법에 대해서 제가 이해한 것이 맞는지 피드백 부탁드립니다.

미해결

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

package jpabook.jpashop.domain; import jakarta.persistence.*; import lombok.Getter; import lombok.Setter; import java.util.ArrayList; import java.util.List; @Entity @Getter @Setter public class Member { @Id @GeneratedValue @Column(name = "MEMBER_ID") private Long id; private String name; @Embedded private Address address; @OneToMany(mappedBy = "member") // 읽기 전용 private List<Order> orders = new ArrayList<>(); }

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

31강 질문 있습니다.

미해결

자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]

책 대출기능 DB 테이블명을 'user_loan_hostory'라고 오타를 내서 생성을 하니까 책 대출 시 서버 내부 오류가 발생했습니다. 그래서 테이블명을 'user_loan_history'로 수정한 후 대출 기능을 다시 실행해보니 잘 동작합니다. 왜 테이블명이 user_loan_hostory일 때는 인식하지 못하고, user_loan_history로 수정한 후에만 인식이 되는걸까요? db 테이블과 엔티티 객체를 매핑할 때, 대응되는 필드만 맞으면 DB 테이블명을 명시적으로 작성해주지 않아도 스프링이 알아서 인식하는 것이 아닌가요?ㅜㅜ

  • java
  • spring
  • aws
  • mysql
  • spring-boot
  • jpa
이지현 댓글 1 좋아요 2 조회수 348

강의 마지막, 생성된 SQL문을 그대로 쓰면 안된다고 하신 말의 의미

미해결

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

[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/) [질문 내용] 강의 마지막에 JPA가 생성해준 SQL문들이 콘솔에 쫙 찍히잖아요. 영한님께서 이걸 그대로 복사해서 쓰면 안되고, 고치고 수정해서 사용해야 한다고 하셨는데요. JPA가 이미 자동으로 DB에 테이블을 생성해준 것 아닌가요? 왜 또 create 쿼리를 쓸 일이 있다는듯이 말씀하시는건지 이해가 안갔습니다. JPA 기본편을 점프하고 바로 넘어와서 이해가 안가는건진 모르겠지만, JPA기술 자체가 자동으로 DB를 생성하고 관리해주는 것에 의의가 있는 것 아닌가요? 쿼리문 생성용으로 쓰는거라면 그냥 시중에 erd 그리는 GUI 툴들이 많은데 그걸 쓰면 되는 것이 아닌지.. 질문드립니다.

  • java
  • spring
  • 웹앱
  • spring-boot
  • jpa
김민희 댓글 2 좋아요 0 조회수 274

JPA는 트랜잭션이 커밋이 될때 insert 쿼리를 날린다

해결됨

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

예외와 트랜잭션 커밋, 롤백 - 활용 강의, 22:05 부분에서 이렇게 말씀해주셨는데요. 강의에서는 runtimeException() 테스트를 실행해 런타임 예외 발생시 저장한 order 객체가 롤백이 되는것을 보여주셨습니다. 직접 실행까지 했는데, 제가 궁금한것은 서비스 부분에 id 값을 찍어보았을때입니다. 서비스 코드 @Transactional public void order(Order order) throws NotEnoughMoneyException { log.info("order 호출"); System.out.println("order.getId() = " + order.getId()); orderRepository.save(order); System.out.println("order.getId() = " + order.getId()); 실행 결과 order.getId() = null 2024-01-18T18:04:45.879+09:00 DEBUG 14780 --- [ Test worker] o.s.orm.jpa.JpaTransactionManager : Found thread-bound EntityManager [SessionImpl(1612240940<open>)] for JPA transaction 2024-01-18T18:04:45.879+09:00 DEBUG 14780 --- [ Test worker] o.s.orm.jpa.JpaTransactionManager : Participating in existing transaction 2024-01-18T18:04:45.879+09:00 TRACE 14780 --- [ Test worker] o.s.t.i.TransactionInterceptor : Getting transaction for [org.springframework.data.jpa.repository.support.SimpleJpaRepository.save] 2024-01-18T18:04:45.886+09:00 DEBUG 14780 --- [ Test worker] org.hibernate.SQL : select next value for orders_seq 2024-01-18T18:04:45.899+09:00 TRACE 14780 --- [ Test worker] o.s.t.i.TransactionInterceptor : Completing transaction for [org.springframework.data.jpa.repository.support.SimpleJpaRepository.save] order.getId() = 1 실제 insert 쿼리를 실행해야 DB에서 생성되는 id 값이 들어있더군요. 롤백이 되면 insert 쿼리를 DB에 안날린다고 하셨는데, insert 쿼리를 날려야 생기는 저 id 값은 정체가 무엇인가요?

  • spring
  • jpa
  • spring-jpa
이석주 댓글 2 좋아요 0 조회수 1296

hibernate 설정 질문입니다.

미해결

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

<property name="hibernate.show_sql" value="true"/> <property name="hibernate.format_sql" value="true"/> <property name="hibernate.use_sql_comments" value="true"/> <property name="hibernate.hbm2ddl.auto" value="create" /> 위와같이 설정하고 실행 시, 테이블이 이미존재한다면 drop 을 시키고 create를 하는데 현재 외래키들 때문에 테이블을 무순서로 삭제할 수 없어 오류가 발생하는 상황입니다. 그래서 그냥 테이블을 다 지우고 빌드하는데 어떻게 강사님은 테이블을 안지우고 바로 빌드가 가능한가요? ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요.

  • java
  • jpa
우으어으 댓글 1 좋아요 0 조회수 325

test 클래스에서 persistence.xml인식문제

해결됨

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

db2 커리큘럼에서 main과 test의 db를 분리하는 방법을 학습 후 이번 강의에서도 사용해보려고 했는데요 다음과 같이 파일을 만든후 persistence.xml의 persistence.unit name을 다르게 지정해주고 <property name="jakarta.persistence.jdbc.url" value="jdbc:h2:tcp://localhost/~/testJpa2"/> 이 부분도 main과는 다르게 설정해주고 실행하였는데 h2db에 연동이 안되는 것 같네요 application.properties 로 하였을땐 잘 되는데 저렇게 하니 안됩니다. persistence.xml파일 자체를 인식못하는것 같은데 제가하는 방법이 잘 맞는지 몰라 질문드립니다 참고로 초기세팅같은 경우 이전강의에서와 같이 start.spring.io 에서 진행하였습니다. 저의 pom.xml은 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>3.2.1</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>jpa-basic</groupId> <artifactId>ex1-hello-jpa</artifactId> <version>0.0.1-SNAPSHOT</version> <name>ex1-hello-jpa</name> <description>Demo project for Spring Boot</description> <properties> <java.version>17</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <excludes> <exclude> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </exclude> </excludes> </configuration> </plugin> </plugins> </build> </project> persistence.xml은 <?xml version="1.0" encoding="UTF-8"?> <persistence version="2.2" xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_2.xsd"> <persistence-unit name="hello-test"> <!--persistence unit이름을 다르게 설정--> <properties> <!-- 필수 속성 --> <property name="jakarta.persistence.jdbc.driver" value="org.h2.Driver"/> <property name="jakarta.persistence.jdbc.user" value="sa"/> <property name="jakarta.persistence.jdbc.password" value=""/> <property name="jakarta.persistence.jdbc.url" value="jdbc:h2:tcp://localhost/~/testJpa2"/> <property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect"/> <!-- Java transaction api를 jakarta에서 찾아라--> <property name="hibernate.transaction.jta.platform" value="org.hibernate.service.jta.platform.internal.JakartaJtaPlatform"/> <!-- 옵션 --> <property name="hibernate.show_sql" value="true"/> <property name="hibernate.format_sql" value="true"/> <property name="hibernate.use_sql_comments" value="true"/> <property name="hibernate.hbm2ddl.auto" value="create" /> </properties> </persistence-unit> </persistence>

  • java
  • jpa
Jaehak Park 댓글 1 좋아요 0 조회수 442

유저서비스의 yml파일 관련 profile 설정방법이 궁금합니다.

미해결

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

안녕하세요 강의를 듣던중 profile이 어떻게 적용되는지 궁금하여 질문드리게 되었습니다. 현재 dev관련 설정파일이 왼쪽 공통 항목 테스트를 위한 application.yml 파일이 오른쪽 입니다. 모두 같은 common이라는 환경변수로 어떤 .yml파일의 값을 사용하는지 확인하였는데요 user-service의 profile설정은 아래 사진처럼 하였습니다. health-check를 보내서 common값을 확인했을 때, 아래사진 처럼 application.yml파일의 common값을 사용하는 것을 확인하였습니다. 공통으로 가져오는 application.yml파일의 common값과 ecommerce-dev.yml의 common값이 겹칠 때 profile을 dev라 설정했기 때문에 health-check로 요청시 common값에 common-dev 로 찍힐것이라 생각했었습니다. 혹시 common-dev로 안찍히는 이유가 공통으로 가져오는 application.yml값과 환경변수가 겹친다면 공통으로 가져오는 yml파일의 환경변수로 찍히는 것인지 제가 profile설정을 잘못한 것인지 궁금해 질문드렸습니다 ㅠㅠ

  • spring-boot
  • jpa
  • 아키텍처
  • spring-cloud
  • kafka
  • msa
  • rabbitmq
이승언 댓글 1 좋아요 0 조회수 375

엔티티 매니저 공유

해결됨

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

트랜잭션 전파가 REQUIRED인 경우에, 코드적으로 각각 다른 트랜잭션을 가져와서 사용하더라도, persistence context를 공유해서 사용한다고 이해해도 될까요??

  • spring
  • mvc
  • jpa
  • querydsl
  • spring-data-mybatis
  • spring-jpa
qpal1zm23 댓글 1 좋아요 0 조회수 204

왜 delete 쿼리가 안나가는 걸까요?

미해결

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

Parent class @Id @GeneratedValue private Long id; private String name; @OneToMany(mappedBy = "parent",cascade = CascadeType.ALL) private List<Child> childList = new ArrayList<>(); public void addChild(Child... childArray) { for (Child child : childArray) { child.setParent(this); childList.add(child); } } Child class @Setter @Id @GeneratedValue private Long id; private String name; @ManyToOne @JoinColumn(name = "PARENT_ID") private Parent parent; Main 메서드 Parent parent = new Parent(); Child child = new Child(); Child child1 = new Child(); parent.addChild(child, child1); em.persist(parent); em.flush(); em.clear(); Parent findParent = em.find(Parent.class, parent.getId()); Child findChild = findParent.getChildList().get(0); em.remove(findChild); tx.commit(); Main메서드에서 findParent에서 자식 리스트를 가져와 첫번째 자식을 삭제해도 db에는 여전히 child, child1이 남아있는데 혹시 왜 그런지 알 수 있을까요?

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

resultFetch 테스트 시 em.flush()를 주석했는데도 insert 쿼리가 발생하는 이유

미해결

실전! Querydsl

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. 안녕하세요. fetch 테스트 관련해서 제가 맞게 이해한 건지 확인차 질문 드립니다. resultFetch() 테스트를 해봤을 때, before()에서 flush를 주석하고 실행했는데도 insert쿼리가 발생했고, 그 insert 쿼리가 select 쿼리 직전에 실행되는 걸 확인했습니다. 이렇게 되는 이유가, em.persist로 인해 쓰기 지연 저장소에 들어있던 insert 쿼리가 JPQL에 의해 flush 된 거라고 생각이 되는데 맞게 이해한 걸까요? @SpringBootTest @Transactional @Commit class MemberTest { @PersistenceContext EntityManager em; JPAQueryFactory query; @BeforeEach void before() { query = new JPAQueryFactory(em); Team teamA = new Team("teamA"); Team teamB = new Team("teamB"); Member member1 = new Member("1", 10, teamA); Member member2 = new Member("2", 20, teamA); Member member3 = new Member("3", 30, teamB); Member member4 = new Member("4", 40, teamB); em.persist(teamA); em.persist(teamB); em.persist(member1); em.persist(member2); em.persist(member3); em.persist(member4); // em.flush(); // em.clear(); } @Test void resultFetch() { List<Member> fetch = query.selectFrom(member).fetch(); Member fetchOne = query.selectFrom(member).where(member.id.eq(1L)).fetchOne(); Member fetchFirst = query.selectFrom(member).fetchFirst(); Long totalCount = query.select(member.count()).from(member).fetchOne(); } } 2024-01-17T23:34:46.349+09:00 DEBUG 23204 --- [ main] org.hibernate.SQL : /* insert for com.querydsl.entity.Team */insert into team (name, id) values (?, ?) 2024-01-17T23:34:46.355+09:00 DEBUG 23204 --- [ main] org.hibernate.SQL : /* insert for com.querydsl.entity.Team */insert into team (name, id) values (?, ?) 2024-01-17T23:34:46.356+09:00 DEBUG 23204 --- [ main] org.hibernate.SQL : /* insert for com.querydsl.entity.Member */insert into member (age, team_id, username, id) values (?, ?, ?, ?) 2024-01-17T23:34:46.357+09:00 DEBUG 23204 --- [ main] org.hibernate.SQL : /* insert for com.querydsl.entity.Member */insert into member (age, team_id, username, id) values (?, ?, ?, ?) 2024-01-17T23:34:46.358+09:00 DEBUG 23204 --- [ main] org.hibernate.SQL : /* insert for com.querydsl.entity.Member */insert into member (age, team_id, username, id) values (?, ?, ?, ?) 2024-01-17T23:34:46.360+09:00 DEBUG 23204 --- [ main] org.hibernate.SQL : /* insert for com.querydsl.entity.Member */insert into member (age, team_id, username, id) values (?, ?, ?, ?) 2024-01-17T23:34:46.402+09:00 DEBUG 23204 --- [ main] org.hibernate.SQL : /* select member1 from Member member1 */ select m1_0.id, m1_0.age, m1_0.team_id, m1_0.username from member m1_0 2024-01-17T23:34:46.473+09:00 DEBUG 23204 --- [ main] org.hibernate.SQL : /* select member1 from Member member1 where member1.id = ?1 */ select m1_0.id, m1_0.age, m1_0.team_id, m1_0.username from member m1_0 where m1_0.id=? 2024-01-17T23:34:46.477+09:00 DEBUG 23204 --- [ main] org.hibernate.SQL : /* select member1 from Member member1 */ select m1_0.id, m1_0.age, m1_0.team_id, m1_0.username from member m1_0 fetch first ? rows only 2024-01-17T23:34:46.512+09:00 DEBUG 23204 --- [ main] org.hibernate.SQL : /* select count(member1) from Member member1 */ select count(m1_0.id) from member m1_0

  • java
  • jpa
da77777 댓글 1 좋아요 0 조회수 427

스프링 부트 3.x 질문

미해결

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

현재 스프링 부트가 3.x 이상만 지원하고 있는데 자바 17 스프링 부트 3.x 최신버전으로 들어도 문제 없을까요??

  • spring
  • tdd
  • jpa
  • mockito
  • 소프트웨어-테스트
  • junit5
SHYU 댓글 1 좋아요 0 조회수 639

불변객체에 대하여 질문있습니다.

미해결

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

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] 여기에 질문 내용을 남겨주세요. 안녕하세요. 우선 spring 부터 jpa 까지 수업 잘 듣고 있습니다! 명강의 항상 감사합니다. 임베디드 타입 공유 문제에 해결책으로 불변객체를 만들라는 말씀을 하셔서 궁금증이 생겼습니다. 제가 아는 바로는 불변의 의미가 상수의 개념과는 다르다고 알고 있습니다. "변수에 값을 바꿀 수 있냐"는 의미가 아니라 "처음 할당한 메모리 공간에서 값을 재 할당할 수 있느냐" 인걸로 알고 있습니다. 하여 , 아래와 같은 객체는 불변의 객체라고 볼 수 있느냐가 궁금합니다. 혹여라도 아래 객체가 불변 객체가 아니라고 한다면 컬럼이 수십 개인 실무에서는 어떻게 생성자 만으로 가독성 좋은 코드를 만드시는 지가 궁금합니다 ㅠ @GETTER @Embeddable class Address { private String city; private String street; private String zipcode; Address() { } Address(String city, String street, String zipcode) { this.city = city; this.street = street; this.zipcode = zipcode; } // 세터 대신 Address changeCity(String city) { return new Address(city, this.street, this.zipcode) } } //사용 member.setAddress(member.getAddress().changeCity("seoul"));

  • java
  • jpa
신승열 댓글 2 좋아요 0 조회수 448

kakao token 발급 시 에러

미해결

생산성을 향상시키는 스프링부트 기반의 API 템플릿 프로젝트 구현

안녕하세요 ! 강의 수강 중에 에러난 부분이 해결되지 않아 질문 남깁니다. 지금 '카카오 토큰 발급 구현(2) - 토큰 받기' 강의 마지막까지 코드 작성 후 api 실행 했는데 결과 {"errorCode":"500 INTERNAL_SERVER_ERROR","errorMessage":"Could not extract response: no suitable HttpMessageConverter found for response type [class com.app.web.kakaotoken.dto.KakaoTokenDto$Response] and content type [text/html]"} 로 나오고 있습니다. 콘솔창의 에러는 feign.codec.DecodeException: Could not extract response: no suitable HttpMessageConverter found for response type [class com.app.web.kakaotoken.dto.KakaoTokenDto$Response] and content type [text/html] at feign.InvocationContext.proceed(InvocationContext.java:40) ~[feign-core-11.10.jar:na] at feign.AsyncResponseHandler.decode(AsyncResponseHandler.java:116) ~[feign-core-11.10.jar:na] at feign.AsyncResponseHandler.handleResponse(AsyncResponseHandler.java:89) ~[feign-core-11.10.jar:na] at feign.SynchronousMethodHandler.executeAndDecode(SynchronousMethodHandler.java:141) ~[feign-core-11.10.jar:na] at feign.SynchronousMethodHandler.invoke(SynchronousMethodHandler.java:91) ~[feign-core-11.10.jar:na] at feign.ReflectiveFeign$FeignInvocationHandler.invoke(ReflectiveFeign.java:100) ~[feign-core-11.10.jar:na] at com.sun.proxy.$Proxy109.requestKakaoToken(Unknown Source) ~[na:na] at com.app.web.kakaotoken.controller.KakaoTokenController.loginCallback(KakaoTokenController.java:39) ~[main/:na] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na] at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na] at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na] at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205) ~[spring-web-5.3.20.jar:5.3.20] at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150) ~[spring-web-5.3.20.jar:5.3.20] at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117) ~[spring-webmvc-5.3.20.jar:5.3.20] at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) ~[spring-webmvc-5.3.20.jar:5.3.20] at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) ~[spring-webmvc-5.3.20.jar:5.3.20] at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-5.3.20.jar:5.3.20] at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1067) ~[spring-webmvc-5.3.20.jar:5.3.20] at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:963) ~[spring-webmvc-5.3.20.jar:5.3.20] at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) ~[spring-webmvc-5.3.20.jar:5.3.20] at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) ~[spring-webmvc-5.3.20.jar:5.3.20] at javax.servlet.http.HttpServlet.service(HttpServlet.java:655) ~[tomcat-embed-core-9.0.63.jar:4.0.FR] at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) ~[spring-webmvc-5.3.20.jar:5.3.20] at javax.servlet.http.HttpServlet.service(HttpServlet.java:764) ~[tomcat-embed-core-9.0.63.jar:4.0.FR] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227) ~[tomcat-embed-core-9.0.63.jar:9.0.63] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.63.jar:9.0.63] at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) ~[tomcat-embed-websocket-9.0.63.jar:9.0.63] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.63.jar:9.0.63] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.63.jar:9.0.63] at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-5.3.20.jar:5.3.20] at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.20.jar:5.3.20] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.63.jar:9.0.63] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.63.jar:9.0.63] at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-5.3.20.jar:5.3.20] at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.20.jar:5.3.20] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.63.jar:9.0.63] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.63.jar:9.0.63] at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-5.3.20.jar:5.3.20] at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.20.jar:5.3.20] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.63.jar:9.0.63] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.63.jar:9.0.63] at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:197) ~[tomcat-embed-core-9.0.63.jar:9.0.63] at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97) ~[tomcat-embed-core-9.0.63.jar:9.0.63] at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541) ~[tomcat-embed-core-9.0.63.jar:9.0.63] at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:135) ~[tomcat-embed-core-9.0.63.jar:9.0.63] at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) ~[tomcat-embed-core-9.0.63.jar:9.0.63] at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) ~[tomcat-embed-core-9.0.63.jar:9.0.63] at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:360) ~[tomcat-embed-core-9.0.63.jar:9.0.63] at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:399) ~[tomcat-embed-core-9.0.63.jar:9.0.63] at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) ~[tomcat-embed-core-9.0.63.jar:9.0.63] at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:890) ~[tomcat-embed-core-9.0.63.jar:9.0.63] at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1743) ~[tomcat-embed-core-9.0.63.jar:9.0.63] at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) ~[tomcat-embed-core-9.0.63.jar:9.0.63] at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) ~[tomcat-embed-core-9.0.63.jar:9.0.63] at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) ~[tomcat-embed-core-9.0.63.jar:9.0.63] at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-embed-core-9.0.63.jar:9.0.63] at java.base/java.lang.Thread.run(Thread.java:829) ~[na:na] Caused by: org.springframework.web.client.UnknownContentTypeException: Could not extract response: no suitable HttpMessageConverter found for response type [class com.app.web.kakaotoken.dto.KakaoTokenDto$Response] and content type [text/html] at org.springframework.web.client.HttpMessageConverterExtractor.extractData(HttpMessageConverterExtractor.java:126) ~[spring-web-5.3.20.jar:5.3.20] at org.springframework.cloud.openfeign.support.SpringDecoder.decode(SpringDecoder.java:75) ~[spring-cloud-openfeign-core-3.1.8.jar:3.1.8] at org.springframework.cloud.openfeign.support.ResponseEntityDecoder.decode(ResponseEntityDecoder.java:61) ~[spring-cloud-openfeign-core-3.1.8.jar:3.1.8] at feign.optionals.OptionalDecoder.decode(OptionalDecoder.java:36) ~[feign-core-11.10.jar:na] at feign.InvocationContext.proceed(InvocationContext.java:36) ~[feign-core-11.10.jar:na] ... 57 common frames omitted 코드를 여러 번 봐도 강사님이랑 다른 부분이 없는 거 같아서 여쭤봅니다. 감사합니다 !!

  • spring-boot
  • jpa
  • web-api
neatinfo 댓글 2 좋아요 0 조회수 771

MyBatis 적용2에서 오류가 발생합니다.

해결됨

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

MyBatis 버전도 낮춰보고 코드도 비교해보고 했는데 자꾸 Invalid bound statement오류가 발생합니다. 혹시 어떤 게 문제일까요.. 제가 잘 못 찾는 건가요..? 코드 : https://drive.google.com/file/d/14j1mBlyOWm9aELoBGtqbPQ6AAwla6DX5/view?usp=drive_link

  • spring
  • mvc
  • jpa
  • querydsl
  • spring-data-mybatis
  • spring-jpa
jaemoon 댓글 3 좋아요 0 조회수 883

프로젝션된 DTO의 필드 값으로 정렬이 가능할까요?

미해결

실전! Querydsl

data class ShopSimpleResponse( val id: Long, val image: String, val name: String, val address: String, val introduce: String, val minPrice: Int, val checkCoupon: Boolean, ) { constructor(shop: Shop) : this( id = shop.id, image = shop.images[0].imgUrl, name = shop.name, address = shop.address, introduce = shop.introduce, minPrice = shop.products.minByOrNull { it.price }?.price ?: 0, checkCoupon = true ) } 코틀린 코드인 점 죄송합니다! 해당 DTO를 프로젝션해서 DB에서 바로 Page<ShopSimpleResponse> 로 반환하고 싶은데 아무리 찾아봐도 방법을 찾기 못했습니다.... querydsl 내에서나 @Query 를 사용해서 구현하는 방법이 있는지 궁금합니다. 해당 부분을 엔티티의 필드 값으로 바꾸는 것도 고려하고 있는데, 우선 이 상태에서 해결 가능한 방법이 있는지 궁금합니다!

  • java
  • jpa
789456jang 댓글 1 좋아요 0 조회수 359

maven vs gradle

미해결

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

springboot로 개발하려는데 gradle로 프로젝트 생성 시에는 META-INF 내에 persistence.xml을 작성하지 않고 @persistencecontext만 작성해도 되는 건가요?? @persistencecontext와 persistence.xml의 차이도 궁금합니다.

  • java
  • jpa
민돌멩이 댓글 1 좋아요 0 조회수 433

스프링 부트 3 - 하이버네이트 6 left join 최적화 설명 추가

해결됨

실전! 스프링 데이터 JPA

안녕하세요 선생님 제가 이해한 것이 맞는지 여쭤보고자 합니다. 제가 이해한 부분은 : 교재의 '여기서 만약 Member 와 Team 을 하나의 SQL로 한번에 조회하고 싶으시다면 JPA가 제공하는 fetch join 을 사용해야 한다. ( fetch join 은 JPA 기본편 참고) ' 이 부분에서 "select m from Member m left join fetch m.team t " 대신 "select m, t from Member m left join m .team t " 을 사용해도 되지 않을까 였습니다. 하지만 생각해보니 지연로딩으로 인해 아직 초기화 되지 않은 Team 엔티티의 Proxy 객체에서 Json Type Exception이 발생할 수 있어 fetch join을 사용하는 것을 추천하시는 것인지 하고 생각하고 있는데, 제가 생각하는 것이 맞나요?

  • java
  • spring
  • spring-boot
  • jpa
최종민 댓글 1 좋아요 1 조회수 426

인기 태그

인프런 TOP Writers

주간 인기글