묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결
ERD 매핑 관계 질문(ManyToMany 매핑 사용여부)
안녕하세요 숨고와 같이 게시판이 여러개 있을 경우 예를들어 특정게시판에서 게시글에 대한 필터링 밑에 사진 2개처럼 분야와 위치에 관해 필터링해서 게시글을 볼 수 있는 경우 이렇게 하는 것 말고는 답이 없나요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
ERD 설계 질문
숨고와 같은 구인 구직 사이트인데 특정 작물에 대한 전문가와 매칭해주고 견적이 나오는 서비스를 프로젝트로 만들려고 생각중입니다. 이렇게 종류를 선택하면(위에 사진1에서 아래 사진2으로 넘어감니다.) 서비스일 경우 이런 카테고리는 따로 erd를 만들어 주어야 하나요? 아니면 enum으로 빼는 건지 감이 정말 1도 안 잡혀서 질문 드립니다. 견적 엔티티를 이런식으로 만들고 컨설팅 형태 이런 것도 enum으로 만드나요?나머지는 속성값으로 들어가는 것은 알고 습니다.) 그리고 맨 밑에 경우 만약 사진하고 글을 같이 첨부해서 컨설팅 내용을 신청할경우 이것도 erd로 따로 빼 놓나요?( aws 로 작업할경우 s3로 이미지만 따로 저장하는 것은 알 고 있습니다.)
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
OrderController 에서 {orderId} 경로변수 질문
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요. 강의를 듣던 중 궁금한 내용이 생겨 질문합니다.<td> <a th:if="${item.status.name() == 'ORDER'}" href="#" th:href="'javascript:cancel('+${item.id}+')'" class="btn btn-danger">CANCEL</a> </td> function cancel(id) { var form = document.createElement("form"); form.setAttribute("method", "post"); form.setAttribute("action", "/orders/" + id + "/cancel"); document.body.appendChild(form); form.submit(); }위 자바 스크립트 코드를 보면, post 방식으로 전송할때, item.id 를 cancel 함수의 매개변수로 전달하고, 이 item.id 가 /orders/id/cancel 에 들어갑니다. @PostMapping("/orders/{orderId}/cancel") public String cancelOrder(@PathVariable Long orderId){ orderService.cancelOrder(orderId); return "redirect:/orders"; }반면에 , OrderController 의 위 메소드에서는 , 경로변수가 {orderId} 로 설정이 되어있습니다. 왜 itemId 를 받아와서 orderId 로 사용하는 것인지 궁금합니다. 만약 그것이 아니라면 제가 어떤 부분을 놓치고 있는 것인지 궁금합니다.
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
프록시 객체 질문 있습니다.
em.getReference() 를 호출하면, 프록시 객체를 1차 캐시에 저장하고, 해당 프록시 객체를 반환em.find() 를 호출하면, 실제 엔티티 객체를 생성하고 프록시 객체를 초기화 이런식으로 동작하는데2번 과정에서 생성된 실제 엔티티 객체는 1차 캐시에 저장되는지 안되는지가 궁금합니다초기화된 프록시 객체에서 setXXX() 같은 메서드를 호출하면 프록시 객체에 연결된 실제 엔티티의 setXXX() 메서드가 호출될텐데, 이런 경우 update 쿼리가 나가는 것을 보니까 실제 엔티티를 영속성 컨텍스트에서 관리해주고 있는 것 같긴한데프록시 객체와 실제 엔티티 객체의 id값이 같은데 1차 캐시에 두 개 다 저장되는게 맞는건가 싶어서 질문드립니다.
-
해결됨실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
묵시적 조인이 안일어나는 이유
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]13:50 쯤에 oi.order.id 부분에서 묵시적 조인이 안일어나는 이유가 orderItem에서 order로가는 외래키가 있어서가 맞나요? 다른 필드에 접근하면 묵시적 조인이 일어나는지 궁금합니다.
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
변경감지 flush에 대해 질문드립니다.
안녕하세요. 22분경, 변경감지 관련해서 질문드립니다.순서도를 보면 flush가 두번 있어서 이 부분이 이해가 되지않아서 질문드립니다. 비슷한 다른 질문들을 찾아봤지만 이해가 되지않아서 추가적으로 질문드립니다. 1. 전체적으로아래와 같이 이해하면될까요?JPA는 트랜잭션을 커밋할때 flush()가 호출된다.영속성컨텍스트의 엔티티와 스냅샷을 비교한다.UPDATE SQL을 생성해서 쓰기지연SQL저장소에 SQL쿼리를 저장한다.쓰기지연SQL저장소에있는 쿼리를 flush를 통해 쿼리를 데이터베이스에 전송한다.트랜잭션이 커밋된다 2.또, 추가적으로 위와 같이 이해하게 되면, 트랜잭션을 커밋할때 flush를 두번 호출하는것일까요? 두 flush가 어떤 차이인지 궁금해서 질문드립니다. 3.4번에 있는 flush는 쓰기지연SQL저장소에 UPDATE쿼리가 있어서 flush하는것으로 보면 될거같은데, 첫번째 flush는 왜 flush를 해주는것인지 이해가 되지않아 질문드립니다..
-
해결됨실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
트랜잭션이 없는 상태에서 조회
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]5:30초 에서 order.getOrderItems().stream()하는 부분에서 orderItem에 있던 Item들에 값이 들어가는것으로 알고있는데, 이는 @Transactional 이 있는 Service계층이 아니라 Repository계층에서 불렀기 때문에 프록시 객체가 들어간것이 맞나요? @Transactional 어노테이션이 없는 계층에서 em.find()나 createQuery()같은 메소드를 호출해도 되는지와 왜 트랙잭션이 없을때 item에 대한 값을 얻을수있는지 궁금합니다.
-
해결됨실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
Controller가Repository에 의존해도 되나요?
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]Contoller에서 Service를 의존하는게 아니라 Repository에 의존해도 되나요?? 예제라서 단순화 한건지 아니면 다른 프로젝트에서도 동일하게 Controller에서 Repository로 접근해도 되는지 궁금합니다. 이전에 비슷한 질문을 본것같은데 답변을 못찾아서 질문 남깁니다!
-
해결됨Practical Testing: 실용적인 테스트 가이드
동시청 처리 문의드립니다.
이전 강의 부터 동시성 문제에 대해서 논하셔서 문의 드립니다.보통 서비스 구현시 최종 병목지점은 DB로 귀결되기 마련인데과금테이블과 같이 비관적락을 이용해야 하는 경우, 캐시등을 이용이 불가하여 어쩔수 없느니 스케일업 하는 방법을 이용합니다. 마스터, 슬레이브 로 나눈다고 해도 동시성을 보장할수 없는 경우가 많은데요. 이런 경우 해결 방안으로 어떤것이 있는지 고견을 여쭙고자 합니다.
-
미해결Practical Testing: 실용적인 테스트 가이드
Entity에 @RequiredArgsConstructor(access = AccessLevel.PROTECTED)
학습 관련 질문을 남겨주세요. 어떤 부분이 고민인지, 무엇이 문제인지 상세히 작성하면 더 좋아요!먼저 유사한 질문이 있었는지 검색해 보세요.서로 예의를 지키며 존중하는 문화를 만들어가요. Entity 객체에 @RequiredArgsConstructor(access = AccessLevel.PROTECTED)로 설정해주는 이유가 외부에서 객체의 생성을 제한하려는 의도인것 같은데요final 키워드를 가진 instance가 없는데도 RequiredArgsConstructor 를 사용한 의도가 있는지 궁금합니다.아직 강의 후반까지는 보지않은 상태이긴하지만final 키워드가 없으면 결국 NoArgsConstructor랑 같은 동작을 하는것이 아닌가해서요
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
오류 도와주세요 ..제발 도와주세요 ㅠㅠ
어제까지 잘 됐는데 갑자기 오늘부터 서버실행시 오류가 나는데 찾아봐도 모르겠어서 남깁니다 .. 제발 도와주세요.다음 진도를 못 나가고 있습니다 ㅠㅠ
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
h2 database 버전 2.3.232
안녕하세요, 현재 3 챕터에서 프로젝트 생성 중입니다. 그런데 강의 중 prom.xml 파일에서 h2 database의 버전을 현재 h2 database 에서 다운 받은 버전과 같게 맞추라고 나와있어 현재 소스 코드에는 2.2.224 로 나와있지만 2.3.232 (현재 다운 받고, 실행한 데이터베이스의 버전) 으로 바꾼 다음 reflesh 하고 돌려보니 화면과 같은 오류 메세지가 뜹니다.C:\Users\김민경\.jdks\temurin-21.0.5\bin\java.exe "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2024.2.1\lib\idea_rt.jar=2890:C:\Program Files\JetBrains\IntelliJ IDEA 2024.2.1\bin" -Dfile.encoding=UTF-8 -Dsun.stdout.encoding=UTF-8 -Dsun.stderr.encoding=UTF-8 -classpath C:\Users\김민경\Downloads\ex1-hello-jpa-start\ex1-hello-jpa\target\classes;C:\Users\김민경\.m2\repository\org\hibernate\orm\hibernate-core\6.4.2.Final\hibernate-core-6.4.2.Final.jar;C:\Users\김민경\.m2\repository\jakarta\persistence\jakarta.persistence-api\3.1.0\jakarta.persistence-api-3.1.0.jar;C:\Users\김민경\.m2\repository\jakarta\transaction\jakarta.transaction-api\2.0.1\jakarta.transaction-api-2.0.1.jar;C:\Users\김민경\.m2\repository\org\jboss\logging\jboss-logging\3.5.0.Final\jboss-logging-3.5.0.Final.jar;C:\Users\김민경\.m2\repository\org\hibernate\common\hibernate-commons-annotations\6.0.6.Final\hibernate-commons-annotations-6.0.6.Final.jar;C:\Users\김민경\.m2\repository\io\smallrye\jandex\3.1.2\jandex-3.1.2.jar;C:\Users\김민경\.m2\repository\com\fasterxml\classmate\1.5.1\classmate-1.5.1.jar;C:\Users\김민경\.m2\repository\net\bytebuddy\byte-buddy\1.14.7\byte-buddy-1.14.7.jar;C:\Users\김민경\.m2\repository\jakarta\xml\bind\jakarta.xml.bind-api\4.0.0\jakarta.xml.bind-api-4.0.0.jar;C:\Users\김민경\.m2\repository\jakarta\activation\jakarta.activation-api\2.1.0\jakarta.activation-api-2.1.0.jar;C:\Users\김민경\.m2\repository\org\glassfish\jaxb\jaxb-runtime\4.0.2\jaxb-runtime-4.0.2.jar;C:\Users\김민경\.m2\repository\org\glassfish\jaxb\jaxb-core\4.0.2\jaxb-core-4.0.2.jar;C:\Users\김민경\.m2\repository\org\eclipse\angus\angus-activation\2.0.0\angus-activation-2.0.0.jar;C:\Users\김민경\.m2\repository\org\glassfish\jaxb\txw2\4.0.2\txw2-4.0.2.jar;C:\Users\김민경\.m2\repository\com\sun\istack\istack-commons-runtime\4.1.1\istack-commons-runtime-4.1.1.jar;C:\Users\김민경\.m2\repository\jakarta\inject\jakarta.inject-api\2.0.1\jakarta.inject-api-2.0.1.jar;C:\Users\김민경\.m2\repository\org\antlr\antlr4-runtime\4.13.0\antlr4-runtime-4.13.0.jar;C:\Users\김민경\.m2\repository\javax\xml\bind\jaxb-api\2.3.1\jaxb-api-2.3.1.jar;C:\Users\김민경\.m2\repository\javax\activation\javax.activation-api\1.2.0\javax.activation-api-1.2.0.jar hellojpa.JpaMain1월 05, 2025 11:49:47 오전 org.hibernate.jpa.internal.util.LogHelper logPersistenceUnitInformationINFO: HHH000204: Processing PersistenceUnitInfo [name: hello]1월 05, 2025 11:49:47 오전 org.hibernate.Version logVersionINFO: HHH000412: Hibernate ORM core version 6.4.2.Final1월 05, 2025 11:49:47 오전 org.hibernate.cache.internal.RegionFactoryInitiator initiateServiceINFO: HHH000026: Second-level cache disabled1월 05, 2025 11:49:47 오전 org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl configureWARN: HHH10001002: Using built-in connection pool (not intended for production use)Exception in thread "main" org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] due to: Unable to load class [org.h2.Driver] at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:276) at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:238) at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:215) at org.hibernate.boot.model.relational.Database.<init>(Database.java:45) at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:223) at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.<init>(InFlightMetadataCollectorImpl.java:191) at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:170) at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1432) at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1503) at org.hibernate.jpa.HibernatePersistenceProvider.createEntityManagerFactory(HibernatePersistenceProvider.java:55) at jakarta.persistence.Persistence.createEntityManagerFactory(Persistence.java:80) at jakarta.persistence.Persistence.createEntityManagerFactory(Persistence.java:55) at hellojpa.JpaMain.main(JpaMain.java:9)Caused by: org.hibernate.boot.registry.classloading.spi.ClassLoadingException: Unable to load class [org.h2.Driver] at org.hibernate.boot.registry.classloading.internal.ClassLoaderServiceImpl.classForName(ClassLoaderServiceImpl.java:126) at org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl.loadDriverIfPossible(DriverManagerConnectionProviderImpl.java:211) at org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl.buildCreator(DriverManagerConnectionProviderImpl.java:112) at org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl.buildPool(DriverManagerConnectionProviderImpl.java:93) at org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl.configure(DriverManagerConnectionProviderImpl.java:82) at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:136) at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:247) at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:215) at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.buildJdbcConnectionAccess(JdbcEnvironmentInitiator.java:395) at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.getJdbcEnvironmentUsingJdbcMetadata(JdbcEnvironmentInitiator.java:262) at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:107) at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:68) at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:130) at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:263) ... 12 moreCaused by: java.lang.ClassNotFoundException: Could not load requested class : org.h2.Driver at org.hibernate.boot.registry.classloading.internal.AggregatedClassLoader.findClass(AggregatedClassLoader.java:216) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:593) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:526) at java.base/java.lang.Class.forName0(Native Method) at java.base/java.lang.Class.forName(Class.java:534) at java.base/java.lang.Class.forName(Class.java:513) at org.hibernate.boot.registry.classloading.internal.ClassLoaderServiceImpl.classForName(ClassLoaderServiceImpl.java:123) ... 25 moreCaused by: java.lang.Throwable at org.hibernate.boot.registry.classloading.internal.AggregatedClassLoader.findClass(AggregatedClassLoader.java:209) ... 31 more Suppressed: java.lang.ClassNotFoundException: org.h2.Driver at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:526) at org.hibernate.boot.registry.classloading.internal.AggregatedClassLoader.findClass(AggregatedClassLoader.java:206) ... 31 more Suppressed: java.lang.ClassNotFoundException: org.h2.Driver at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:526) at org.hibernate.boot.registry.classloading.internal.AggregatedClassLoader.findClass(AggregatedClassLoader.java:206) ... 31 more Suppressed: java.lang.ClassNotFoundException: org.h2.Driver at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:526) at org.hibernate.boot.registry.classloading.internal.AggregatedClassLoader.findClass(AggregatedClassLoader.java:206) ... 31 moreProcess finished with exit code 1 어떻게 하면 될까요?
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
테스트 코드에서 @Transaction사용 시 delete 쿼리가 나가지 않습니다.
안녕하세요. 강의를 수강하며 따로 게시판을 만들어보는중에 문제가 발생하여 질문드립니다.다름이 아니라 테스트 코드 작성중에 em.delete()를 사용하는 부분에서 궁금증이 생겨 질문 남깁니다.아래는 테스트 코드가 작성 된 부분입니다.회원을 만들고 게시글을 작성하고 이 게시글을 삭제하도록 하였습니다.PostService의 deletePost, PostRepository의 delete를 사용하여 게시글의 id를 입력받아 삭제하는 구조로 작성하였습니다.여기서 테스트를 실행 시키면 테스트가 실패합니다. 기대값은 0인데 실제로 1이되어 있다고 나옵니다.로그를 통해 확인해보면 delete 쿼리가 작동하지 않았습니다. 하지만 테스트 클래스의 @SpringBootTest아래의 @Transactional을 삭제하고 실행 시키면delete 쿼리가 작동하고 테스트가 정상 동작합니다. @Transactional을 사용하면서 delete문이 제대로 작동하도록 할 수 있을까요?웹 서핑을 하며 테스트 해본 것입니다.1. em.flush()2. @Rollback(value=false)
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
org.springframework.boot:spring-boot-starter-aop 폴더가 없는 문제
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요? 환경 설정 중 org.springframework.boot:spring-boot-starter-aop 폴더가 없어아래 코드를 build.gradle에 추가했으나 수업에서 다뤄주셨던 의존관계처럼 업데이트되지 않고 있습니다.어떻게 해결해야 할까요?implementation 'org.springframework.boot:spring-boot-starter-aop' 강의 내용에서 나오는 이 부분과 같지 않습니다.
-
미해결Practical Testing: 실용적인 테스트 가이드
BaseEntity 에서의 abstract 사용이유
학습 관련 질문을 남겨주세요. 어떤 부분이 고민인지, 무엇이 문제인지 상세히 작성하면 더 좋아요!먼저 유사한 질문이 있었는지 검색해 보세요.서로 예의를 지키며 존중하는 문화를 만들어가요. 안녕하세요.BaseEntity에 abstract를 사용하는 이유에 대해 궁금합니다.강의 중에 흐르듯이 듣기는 했지만, 조금 더 자세히 이유에 대해 파악하고자 질문드립니다. 아니면, 강의에서 내에 말씀해주신 인스턴스를 굳이 만들필요없기 때문이 전부인지 궁금합니다.감사합니다
-
미해결실전! Querydsl
build.gradle 설정 문제 : querydsl,java21,lombok,mapstruct
해당 스펙의 gradle설정 해보신분 이 계신다면 답변달아주시면 너무 감사하겠습니다ㅠㅠㅠ 가상스레드를 사용할예정이라 java 21,querydsl,lombok을 포함하여 개발을 시작했습니다 (이후 mapstruct를 추가함) 처음설정은 어찌저찌 일일이 지정해가면서 빌드할때 compileQuerydls 태스크만 돌린다던지 querydsl관련 설정을 덕지덕지 붙여서 어떻게 생성시키고 돌아가게는 만들었던것 같습니다.하지만 기존 설정이 mapstruct를 붙이게 되면서 문제가 생겼고 (anotationprocessor문제로 추정)java21에서는 querydsl의 directory path 설정이라던지 기타 설정없이도 qclass가 생긴다하여 build.gradle 파일을 수정하며 삽질중인데 잘 해결되지 않아 질문글을 남기게 되었습니다. 제가 생각하기로는 lombok과querydsl,mapstruct의 anotationprocessor가 호환이 안되던지분리해주어야 하거나 추가 설정이 필요해서 되지 않는 것인가 추측해보았습니다. 일단 기존 querydsl, lombok만 설정했던 소스와 현재 수정중인 소스를 첨부합니다[기존파일] querydsl,lombok 설정plugins { id 'java' id 'org.springframework.boot' version '3.3.5' id 'io.spring.dependency-management' version '1.1.6' id 'com.ewerk.gradle.plugins.querydsl' version '1.0.10' } apply plugin: 'com.ewerk.gradle.plugins.querydsl' group = 'kr.co.aaa' version = '0.0.1-SNAPSHOT' java { toolchain { languageVersion = JavaLanguageVersion.of(21) } } configurations { compileOnly { extendsFrom annotationProcessor } } repositories { mavenCentral() } dependencies { // Validation 관련 추가 의존성 implementation 'jakarta.validation:jakarta.validation-api:3.0.2' implementation 'org.hibernate.validator:hibernate-validator:8.0.1.Final' implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springframework.boot:spring-boot-starter-quartz' implementation 'org.springframework.boot:spring-boot-starter-web' compileOnly 'org.projectlombok:lombok' developmentOnly 'org.springframework.boot:spring-boot-devtools' runtimeOnly 'org.postgresql:postgresql' annotationProcessor 'org.projectlombok:lombok' testImplementation 'org.springframework.boot:spring-boot-starter-test' testRuntimeOnly 'org.junit.platform:junit-platform-launcher' // QueryDSL 추가 implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta' // QueryDSL JPA 의존성 implementation 'com.querydsl:querydsl-core' implementation 'com.querydsl:querydsl-collections' annotationProcessor 'com.querydsl:querydsl-apt:5.0.0:jakarta' // QueryDSL의 JPAAnnotationProcessor annotationProcessor 'jakarta.annotation:jakarta.annotation-api' // java.lang.NoClassDefFoundError (javax.annotation.Generated) 대응 코드 annotationProcessor 'jakarta.persistence:jakarta.persistence-api' // java.lang.NoClassDefFoundError (javax.annotation.Entity) 대응 코드 //netty implementation 'io.netty:netty-all:4.1.97.Final' // Netty 전체 라이브러리 } // Querydsl 설정부 def generated = file('src/main/generated') // src/main/generated 경로 지정 querydsl { library = 'com.querydsl:querydsl-apt' jpa = true querydslSourcesDir = generated } sourceSets { main { java { srcDirs += "src/main/generated" // generated 폴더를 소스 경로에 추가 } } } tasks.withType(JavaCompile).configureEach { options.annotationProcessorPath = configurations.annotationProcessor options.generatedSourceOutputDirectory.set(generated) // Q 클래스가 src/main/generated에 생성되도록 설정 } // compileQuerydsl 태스크가 이미 존재하는지 확인하고, 없을 경우에만 등록 if (!tasks.names.contains("compileQuerydsl")) { tasks.register("compileQuerydsl", JavaCompile) { source = sourceSets.main.java.srcDirs classpath = sourceSets.main.compileClasspath // Main classpath 설정 options.annotationProcessorPath = configurations.annotationProcessor destinationDirectory.set(generated) // 생성 경로 설정 } } compileQuerydsl { options.annotationProcessorPath = configurations.querydsl } configurations { querydsl.extendsFrom compileClasspath } // gradle clean 시에 QClass 디렉토리 삭제 clean { delete file("src/main/generated") } tasks.named('test') { useJUnitPlatform() } [수정중인 파일] querydsl,lombok,mapstruct이 되도록 빌드하고자 했었음plugins { id 'java' id 'org.springframework.boot' version '3.3.5' id 'io.spring.dependency-management' version '1.1.6' } group = 'kr.co.artlab' version = '0.0.1-SNAPSHOT' sourceCompatibility = '21' configurations { compileOnly { extendsFrom annotationProcessor } } repositories { mavenCentral() } dependencies { implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springframework.boot:spring-boot-starter-quartz' implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.9.0' implementation 'jakarta.validation:jakarta.validation-api:3.0.2' implementation 'org.hibernate.validator:hibernate-validator:8.0.1.Final' implementation 'org.mapstruct:mapstruct:1.5.5.Final' implementation 'io.netty:netty-all:4.1.97.Final' compileOnly 'org.projectlombok:lombok' annotationProcessor 'org.projectlombok:lombok' annotationProcessor 'com.querydsl:querydsl-apt:5.0.0:jakarta' annotationProcessor 'jakarta.annotation:jakarta.annotation-api' annotationProcessor 'jakarta.persistence:jakarta.persistence-api' annotationProcessor 'org.mapstruct:mapstruct-processor:1.5.5.Final' runtimeOnly 'org.postgresql:postgresql' developmentOnly 'org.springframework.boot:spring-boot-devtools' testImplementation 'org.springframework.boot:spring-boot-starter-test' testRuntimeOnly 'org.junit.platform:junit-platform-launcher' // Querydsl implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta' } tasks.named('test') { useJUnitPlatform() } clean { delete file('src/main/generated') }
-
해결됨실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
api/v1/members 404 에러 질문입니다.
[질문 내용] 왜 404 에러가 뜨는지 모르겠네요 ㅠㅠ도움 요청합니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
Test의 application.yml을 지웠을 때
[질문 내용]OrderServiceTest에서 테스트 메서드를 실행하면서 H2 DB에 쿼리가 들어가는지 확인하기 위해 Test 폴더 안에 resources를 지우고 상품주문 테스트 메서드 안에 RollBack(value = false), em.flush()를 통해서 실제 데이터가 들어가는것을 확인하였습니다. 그런데 다시 원래대로 돌리는 과정에서 Test폴더 안에 resource를 만들고 해당 테스트의 application.yml를 돌려났음에도 불구하고 실행했음에도 H2 DB 안에 데이터는 그대로 남더라고요. 그래서 RollBack(value = false), em.flush()를 지우고 다시 실행해도 계속 데이터가 남는데 어떻게 해결하면 좋을까요?
-
해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
JPA 기본편 애플리케이션개발 강의 db에 member저장
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]안녕하세요 jpa 기본편 수강 중인 학생입니다.애플리케이션 개발 강의에서 member.setId(1L);member.setName("HelloA");하고 2L,HelloB로 바꿔서 실행 후 테이블조회를 하면 1L과HelloA는 뜨지 않고2L,HelloB만 조회가 됩니다.코드는 똑같이 작성한 것 같은데 어디가 문제일까요?public class JpaMain { public static void main(String[] args) { EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello"); EntityManager em = emf.createEntityManager(); EntityTransaction tx = em.getTransaction(); tx.begin(); try { //code Member member = new Member(); member.setId(1L); member.setName("HelloA"); em.persist(member); tx.commit(); } catch (Exception e) { tx.rollback(); } finally { em.close(); } emf.close(); } }실행을 시키면 Hibernate: drop table if exists Member cascade 1월 01, 2025 5:44:30 오후 org.hibernate.resource.transaction.backend.jdbc.internal.DdlTransactionIsolatorNonJtaImpl getIsolatedConnectionINFO: HHH10001501: Connection obtained from JdbcConnectionAccess [org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess@4ed4a7e4] for (non-JTA) DDL execution was not in auto-commit mode; the Connection 'local transaction' will be committed and the Connection will be set into auto-commit mode.Hibernate: create table Member ( id bigint not null, name varchar(255), primary key (id) )1월 01, 2025 5:44:30 오후 org.hibernate.resource.transaction.backend.jdbc.internal.DdlTransactionIsolatorNonJtaImpl getIsolatedConnectionINFO: HHH10001501: Connection obtained from JdbcConnectionAccess [org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess@134ff8f8] for (non-JTA) DDL execution was not in auto-commit mode; the Connection 'local transaction' will be committed and the Connection will be set into auto-commit mode.Hibernate: /* insert for hellojpa.Member */insert into Member (name, id) values (?, ?) drop하고 create가 됩니다...
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
프로젝트 세팅시 궁금한점.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]프로젝트 세팅시 intellij project structure에서 jdk 17로 맞추는데, 왜 굳이 Build and run using과 Run tests using을 Gradle로 설정하나요??? 결국 Gradle로 설정하면 앞에서 project structure jdk 굳이 맞추는 의미가 없지 않나요??? 현업에서도 주로 이렇게 사용하나요??