묻고 답해요
160만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결실전! 스프링 데이터 JPA
@Query의 트랜잭션에 대해 질문있습니다.
스프링 데이터 jpa에 정의된 save나 findById같은 메서드들은 기본적으로 @Transactional이 포함돼있어서 비지니스 로직 영역에서 @Transactional을 포함하지 않아도 트랜잭션이 걸리면서 잘 실행되는 것을 확인하였는데 @Query로 선언한 네임드 query같은 경우에도 비지니스 로직 영역에서 @Transactional을 포함하지 않아도 트랜잭션이 걸리면서 실행이 되는 것을 확인했습니다. 왜 그런건가요??
-
미해결실전! Querydsl
@OneToMany 에서 Cascade 되어있는데 foreign key로 연결되어 있는 테이블 삭제가 안됩니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]영상에서 12분 40초 부분에 bulkDelete와 관련된 내용입니다. 저는 일단 예제와는 조금 다르게 진행을 하였는데요. delete 하려는 User entity에는 OneToMany 관계로 되어있는 테이블이 하나 있습니다. 그래서 User entity에 Cascade All을 추가했는데 querydsl에서는 에러가 뜨면서 실행이 안되더라구요.제가알기로는 cascade를 설정해주면 entity가 삭제될 때 관련된 foreign key를 삭제해주는걸로 알고 있는데 아무리 찾아봐도 답이 안보여서 이렇게 질문남깁니다.
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
properties와 yaml 질문
application.properties로 하면 오류가 뜨고 application.yaml로 하면 문제가 해결이 됩니다.. 뭐가 문제인지 모르겠습니다. spring.output.ansi.enabled=always # DB 설정 spring.datasource.url=jdbc:h2:tcp://localhost/~/capstone spring.datasource.username=sa spring.datasource.password= spring.datasource.driver-class-name=org.h2.Driver # JPA 관련 spring.jpa.hibernate.ddl-auto=create-drop #애플리케이션을 시작할 때 데이터베이스를 초기화하고 다시 테이블 생성 # ddl-auto=none로 하면 데이터 보존 spring.jpa.properties.hibernate.format_sql=true #실행되는 query를 보여준다. # JPA Log -> SQL 로거를 통해 출력, 바인딩 되는 파라미터 확인 2가지 가능하도록 logging.level.org.hibernate.SQL=DEBUG logging.level.org.hibernate.type.descriptor.sql.BasicBinder=TRACE # JPA Log #spring.jpa.show-sql=true system.out은 안되야 하므로 이건 X 위가 application.properties이고 logging: level: org: hibernate: SQL: DEBUG type: descriptor: sql: BasicBinder: TRACE spring: datasource: driver-class-name: org.h2.Driver password: url: jdbc:h2:tcp://localhost/~/capstone username: sa jpa: hibernate: ddl-auto: create-drop #??????? ??? ? ??????? ????? ?? ??? ??' properties: hibernate: format_sql: true #???? query? ????.' output: ansi: enabled: always위가 application.yaml로 실행했을 때 입니다. 어째서 yaml로 해야만 실행되는지 모르겠습니다. 모든 설정은 같은거 같은데 혹시 부트 3.0이라 그런 것인지 궁금합니다.
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
Could not find or load main class 에러 해결
Error: Could not find or load main class jpabook.jpashop.JpashopApplicationCaused by: java.lang.ClassNotFoundException: jpabook.jpashop.JpashopApplication위에 처럼 뜹니다.혼자서 검색도 해보았고 환경변수도 바꿔보았는데 무엇이 문제 인가요? 예전에 학습한다고 해봤을떄는 잘되었는데 지금은 안되네요...지금 파일은 영한님 '강의 소스 코드' 파일 입니다 -> 자바 버전 수정 하니 해결완료됨
-
미해결실전! 스프링 데이터 JPA
Springboot 3.0 Projection 최적화되었나요?
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]안녕하세요. Projections 강의 15:36 에 실행된 쿼리와 제 로컬에서 실행된 쿼리가 달라 질문드립니다.중첩구조의 경우 Team 에 대한 정보는 전체 다 퍼올리는 것으로 강의가 진행되고 있는데, 실행된 쿼리는 Dto 에 맞게 퍼올리는 것으로 보입니다.혹시 해당 내용에 대한 수정사항 알 수 있을까요? 공식문서를 읽는 게 아직 익숙치 않습니다 ㅠ공식 문서에도 해당 내용에 대한 언급이 딱히 없는 것 같아서 질문드립니다!
-
해결됨Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
H2 console 에서의 문제
안녕하세요.먼저 좋은 수업을 강의 해주셔서 감사합니다!다름이 아니라 제가 해당 수업 진행 중 오류가 있어서 문의드립니다!mysql 콘솔에서는 오류가 발생 하지 않았으나,H2 Console 에서 테이블을 조회시 SELECT * FROM ORDERS;(conn=42) Table 'mydb.ORDERS' doesn't exist 42S02/1146 이러한 에러가 발생하는데 원인이 무엇일까요??order-service 에서 조회시에는 문제가 없습니다..
-
해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
toString() 만 사용해도 프록시객체가 초기화되는 것이 맞나요?
일전에, 지연로딩 을 사용하면 객체의 참조를 얻을 때가 아닌, 실제 필드(메서드 포함) 에 접근할 때 프록시 객체가 진짜 객체로 초기화 되는 것으로 이해했습니다.그런데 아래와 같이 코드를 짜고 실행해보니, 객체의 참조를 얻을 때 쿼리가 나가는 것 처럼 보이더라고요.// 팀 Team teamA = new Team(); teamA.setName("팀A"); em.persist(teamA); Team teamB = new Team(); teamB.setName("팀B"); em.persist(teamB); // 회원: member1, 2 는 팀A 소속. member3은 팀B 소속 Member member1 = new Member(); member1.setUsername("회원1"); member1.setTeam(teamA); em.persist(member1); Member member2 = new Member(); member2.setUsername("회원2"); member2.setTeam(teamA); em.persist(member2); Member member3 = new Member(); member3.setUsername("회원3"); member3.setTeam(teamB); em.persist(member3); em.flush(); em.clear(); // Query String query = "select m from Member m"; List<Member> findMembers = em.createQuery(query, Member.class) .getResultList(); for (Member member : findMembers) { System.out.println("member = " + member.getUsername() + ", " + member.getTeam()); } tx.commit(); (나간 쿼리)Hibernate: /* select m from Member m */ select member0_.MEMBER_ID as MEMBER_I1_7_, member0_.createdBy as createdB2_7_, member0_.createdDate as createdD3_7_, member0_.lastModifiedBy as lastModi4_7_, member0_.lastModifiedDate as lastModi5_7_, member0_.COMPANY_CITY as COMPANY_6_7_, member0_.COMPANY_STREET as COMPANY_7_7_, member0_.COMPANY_ZIPCODE as COMPANY_8_7_, member0_.city as city9_7_, member0_.street as street10_7_, member0_.zipcode as zipcode11_7_, member0_.LOCKER_ID as LOCKER_15_7_, member0_.TEAM_ID as TEAM_ID16_7_, member0_.USERNAME as USERNAM12_7_, member0_.endDate as endDate13_7_, member0_.startDate as startDa14_7_ from Member member0_ Hibernate: select team0_.TEAM_ID as TEAM_ID1_10_0_, team0_.createdBy as createdB2_10_0_, team0_.createdDate as createdD3_10_0_, team0_.lastModifiedBy as lastModi4_10_0_, team0_.lastModifiedDate as lastModi5_10_0_, team0_.name as name6_10_0_ from Team team0_ where team0_.TEAM_ID=? member = 회원1, hellojpa.domain.Team@26ae880a member = 회원2, hellojpa.domain.Team@26ae880a Hibernate: select team0_.TEAM_ID as TEAM_ID1_10_0_, team0_.createdBy as createdB2_10_0_, team0_.createdDate as createdD3_10_0_, team0_.lastModifiedBy as lastModi4_10_0_, team0_.lastModifiedDate as lastModi5_10_0_, team0_.name as name6_10_0_ from Team team0_ where team0_.TEAM_ID=? member = 회원3, hellojpa.domain.Team@6bd16207 저는 위 코드 중 System.out.println 과정 중 프록시 객체가 초기화가 되어서 위같은 쿼리가 나왔다고 생각하는데 제 판단의 근거가 맞는지 궁금합니다.System.out.println("member = " + member.getUsername() + ", " + member.getTeam());System.out.println 을 사용하면 자동으로 객체.toString() 이 호출되고, 따라서 필드(메서드)에 접근 했으므로 이 시점에 프록시 객체가 엔티티로 초기화 되었다. 위 처럼 이해하는게 맞을까요? 항상 애써주시는 영한님과 서포터님들께 감사드립니다!!
-
미해결호돌맨의 요절복통 개발쇼 (SpringBoot, Vue.JS, AWS)
@ModelAttribute 사용시 @Valid
@RequestBody @Valid 사용시에 오류가 발생하면ControllerAdvice @ExceptionHandler(MethodArgumentNotValidException.class)로 잡을 수 있었습니다.하지만 @ModelAttribute를 사용하면ControllerAdvice @ExceptionHandler(MethodArgumentNotValidException.class)로 잡히지가 않습니다..제가 잘못한 부분이 있을까요?/author/presentation/AuthorControllergetAuthorListByNickname에서 오류가 잡을 수가 없습니다.ControllerAdvice는/global/error/ControllerAdvice에 있습니다.감사합니다~https://github.com/320Hwany/Webtoon
-
해결됨Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
GATEWAY-SERVICE 를 통하여 호출하지 않는 이유가 있을까요?
마이크로 서비스 사용간 (RestTemplate 혹은 Feign) 에서 Eureka 의 서비스 명으로 USER-SERVICE 같은 마이크로 서비스명을 통하여 직접 호출하면 결론적으로는 GATEWAY-SERVICE 를 통하여 사용했을때의 장점을 잃어버리는 것 같은데, 섹션 10 에서는 게이트웨이를 통하지 않고 직접 서비스를 호출하는 이유가 있을까요?
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
left join 시 on 부분 질문있습니다
JPQL:SELECT m FROM Member m LEFT JOIN m.team t on t.name = 'A'SQL:SELECT m.* FROM Member m LEFT JOIN Team t ON m.TEAM_ID=t.id and t.name='A' 이와 같은 부분에서 left outer join 시 SQL에ON m.TEAM_ID=t.id이 부분은 왜 자동으로 추가가 되는 것인지 궁금합니다. inner join의 경우에는 조인 조건에 동일한 값을 가진 행을 결과에 표기하는 것이니 해당 부분이 추가되는 것이 이해가 가는데left outer join의 경우 m.TEAM_ID=t.id 이 성립하지 않는, m에만 값이 존재하는 부분까지 포함해서 왼쪽 테이블의 전부가 결과에 표기되는 방식이 아닌가요? 그냥 단순히 'm의 TEAM_ID 와 t의 id가 연관관계를 이룬다' 는 의미라고 이해하면 되는 부분일까요? 그리고 left outer join 시 on 절에 필터링 조건을 추가해도 left outer join 특성상 필터링으로 걸러진 행까지 다시 포함되서 결과가 반환되는데 무슨 의미가 있는지 잘 이해가 가지 않습니다. 제 생각으로는 select의 주체가 되는 값만 영속성 컨텍스트에 저장하는 일반 join에서는 의미가 없고 fetch join 같은 경우에 의미를 가진다고 생각되는데 제 생각이 맞는 걸까요?
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
테이블 연관관계 질문
예를들어, 하나의 주문에 짜장면2개, 짬뽕2개를 했다고 가정하면Order테이블에서는 1개의 데이터가 생성,OrderItem테이블에서는 2개의 데이터가 생성 되는게 맞을까요?그렇다고 한다면 Order에 대한 총액이 궁금할 때에는 Order에서 OrderItems를 구한 뒤, 각각의 orderPrice를 더하면 될까요?
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
디비에 물리적 FK를 설정 하지 않고도 JPA 연관관계 사용이 가능한가요?
안녕하세요.좋은 강의 덕분에 학습 잘하여 정말 감사하다는 말씀 부터 드립니다.다름아니라, 디비에 물리적 fk를 설정하지 않고 테이블 연관관계 매핑을 하였을시 별다른 문제없이 JPA 연관관계를 사용할 수 있는지 궁금하여 질문드립니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
내용 관련 질문
정확히 개발에서 domain이란게 어떤 뜻인가요 ?개발 대상의 범위? 정도로 이해하고 있는데 정확히 어떤 뜻으로 사용되는 건가요 궁금합니다..!
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
동적쿼리
안녕하세요! 아직 강의를 다 듣지는 않았지만, 궁금한게 있어 질문드립니다! 제가 현재 진행해야 하는 프로젝트는 동적으로 쿼리를 생성하는 게 중요합니다. 테이블에 10개의 컬럼이 있다면, 2개를 선택해서 보여줄 수도, 3개를 선택해서 보여줄 수도 다양한 조합으로 보여줘야 합니다. 저는 node.js와 flask로 웹을 개발한 경험이 있는데요, 컬럼을 리스트(또는 배열)로 받고 for문을 돌려가면서 컬럼 and 컬럼 and ... 이런 식으로 문자열을 만든 다음 select문 문자열에 for문 돌리면서 만든 문자열을 넣어서 예를 들면 select {컬럼조합} from 테이블 이런 식으로 만든 뒤 실행시켰거든요. 문자열만 잘 작성하면 그 문자열대로 바로 실행이 되니 오히려 쉽다고 느꼈습니다. 근데 스프링부트는 쿼리 수행이 굉장히 정적이라는 느낌인데요....제가 아직 공부 중이라 잘은 모르겠으나 어디서는 조회하고자 하는 컬럼에 대한 인터페이스를 만들라고 하는데, 그 조합이 한두개가 아닌지라.....그걸 하나하나 만들 수도 없고요...이건 where조건도 마찬가지고 join도 마찬가지고요...다른 프레임워크에서는 쉽게 가능하던걸 springboot가 바보 프레임워크가 아닌 이상 지원 안해주는 건 말이 안될 거 같고 이런 걸 어떻게 해야 하는 걸까요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
P6spy의 가독성(?)이 이상합니다
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]사진이 잘 보이시는지 모르겠지만 쿼리문이 가로로 길게만 나타납니다.참고로 스프링부트는 3.x 버전이고 콘솔창 좌측에 소프트 랩 버튼또한 설정이되어있습니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
쿼리파라미터 남기기
스프링 부트 3.0 이상에서는 강의에서 쿼리 파라미터 남기기 부분이 실행되지 않습니다. 어떻게 해야 하나요 ?
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
안녕하세요 조언을 얻고싶습니다.
제가 강의를 보면서 토이 프로젝트로 게시판을 만들고 있습니다.그래서 엔티티 관계도를 만들어봤고 아래는 제가 구현해 놓은 관계도 입니다.그런데 여기서 궁금한 점이 있습니다.이렇게 해도 괜찮은가요? Question, Answer, Comment가 SiterUser에 너무 의존하는거 같아서 의구심이 듭니다. 셋 다 작성자, 추천 필드로 인해 과도하게 연관을 지었나 싶습니다.마이페이지에서 해당 유저의 작성글과 댓글을 모으는 부분도 구현하려고 하는데 그러면 SiteUser부분에 questionList, AnswerList, CommentList를 추가해 양방향으로 볼 수 있도록 할지 아니면 DB에서 그냥 유저의 아이디와 일치하는 글들을 끌어오는 방식을 할지 고민이 됩니다.
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
하나의 테스트 메서드에 assert 문이 많은 경우는 어떻게 받아들이면 좋을까요?
안녕하세요 강의의 상품주문() 테스트 코드를 보고 궁금증이 생겨 질문드립니다.저는 단위테스트를 하면 assert 문이 하나여야 한다고 생각했습니다. 다시 말해, 한 번에 하나를 검증하는 것이 좋다. 고 이해하고 있었어요.그런데 현재 서비스 테스트 코드에서는 assert 문이 많이 사용되고 있습니다. 이 이유가 orderService.order() 에서 많은 일을 하고 있어서 assert문이 많은 것으로 이해해도 될까요? (orderService.order() 로써 파생되는 결과를 모두 검증해야하므로 assert문이 많아질 수 밖에 없다라는 느낌일까요?)
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
자식엔티티, 부모엔티티
강의를 보다보면 자식엔티티, 부모엔티티라는 말이 많이 나오는데 ManyToMany OneToOne ManyToOne OneToMany에서 자식엔티티, 부모엔티티를 어떻게 구분하나요?
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
고아객체
@OneToMany(mappedBy = "parent", fetch = FetchType.LAZY, orphanRemoval = true, cascade = CascadeType.PERSIST ) List<Child> children = new ArrayList<>();위에 코드에서 고아객체를 삭제했기 때문에 children.remove(0); 을 하면 첫번째 child가 삭제되어야 하지만 cascade = CascadeType.PERSIST를 제거하면 delete쿼리가 발생하지 않습니다 PERSIST는 영속화될 때 같이 영속화하는 속성으로 알고있는데 제거하면 고아객체 삭제가 왜 되지 않는것인지 궁금합니다. 그리고 mappedBy를 사용한 children은 주인이 아니라서 chindlren.add(child)를 해도 반영이 되지 않는걸로 알고있는데 PERSIST속성을 주면 주인이 아니여도 둘 다 영속화가 되는것인지 궁금합니다.