묻고 답해요
160만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결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 굳이 맞추는 의미가 없지 않나요??? 현업에서도 주로 이렇게 사용하나요??
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
@ElementCollection , @CollectionTable 의 사용예시
이해가 명확하게 된게 맞는지 @ElementCollection은 임베디드 타입에 관해 쓰이거나 그냥 일반 좋아하는 음식 기본형을 저장할 때 쓰이고, @CollectionTable 은 이러한 것에 과한 테이블을 만들고@ joinColumn 은 어떤 것과 매핑이 되는지 @Column(name="FOOD_NAME")은 그것에 관해 연결되어야 할 것을 정해주는 게 맞는건가요?
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
값 타입 컬렉션 실무 사용예?
@ElementCollection.@CollectionTable은 실무에서 여러개의 값을 저장하는 선호음식 ,다양한 값을 저장할 때 쓰이는 데 주로 어떠한 상황에 쓰이나요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
강의에 나온 테이블 외 이상한 테이블 문의
안녕하세요. 아래와 같이 이상한 테이블이 생기는데 이건 왜 생기는건가요?
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
DTO 관련 질문 드립니다!
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요 항상 강의 잘 보고 있습니다@RequestMapping("/api/v2/members") public CreateMemberResponse saveMemberV2(@RequestBody @Valid CreateMemberRequest request){ Member member = new Member(); member.setName(request.getName()); Long id = memberService.join(member); return new CreateMemberResponse(id); } @Getter static class CreateMemberResponse{ private Long id; public CreateMemberResponse(Long id) { this.id = id; } }이 부분에서 보면 하나의 class 안에서 DTO도 만들던데 보통 실무에서도 해당 기능 관련 DTO는 static class로 내부에 만드나요? 아니면 따로 분리하나요?
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
3.x.x 버전 업데이트
섹션 1에 spring initializr를 진행하다가 java 17과 spring boot 3.4.1로 변경해 진행할 수 밖에 없다고 생각되어서 커뮤니티 질문들을 보았고 52강을 먼저 보게 되었습니다. java도 17로 업데이트하였고 17로 변경한 후에 gradle도 java 17에 맞게 7.3으로 변경하였는데 이런 오류가 뜹니다 ㅠㅠ 해결법 알려주시면 감사하겠습니다
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
Category 매핑??
Category를 부모로 설정하고 이렇게 리스트로 뽑는 이유가 카테고리가 여러개라서 이렇게 하는 건가요?잘 이해가 안 가서 질문드립니다. 그리고 실무에서 카테고리랑 Items 를 이런식으로 중간 테이블을 만들고 따로 매핑하는게 흔한가요?
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
스프링부트 프로젝트 테스트 코드에서 스프링 컨테이너 없이 직접 엔티티 테스트를 어떻게 할 수 있을까요
<?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="test"> <properties> <!-- 필수 속성 --> <property name="javax.persistence.jdbc.driver" value="org.h2.Driver"/> <property name="javax.persistence.jdbc.user" value="sa"/> <property name="javax.persistence.jdbc.password" value=""/> <property name="javax.persistence.jdbc.url" value="jdbc:h2:mem:db;MODE=MySQL "/> <property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect"/> <!-- 옵션 --> <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.jdbc.batch_size" value="10"/> <property name="hibernate.default_batch_fetch_size" value="100" /> <property name="hibernate.hbm2ddl.auto" value="update" /> </properties> </persistence-unit> </persistence>test.resources.META-INF 에 위의 persistence.xml 파일을 작성하였습니다. package dev.shophub.userauthservice.domain.entity; import jakarta.persistence.EntityManager; import jakarta.persistence.EntityManagerFactory; import jakarta.persistence.EntityTransaction; import jakarta.persistence.Persistence; import org.junit.jupiter.api.Test; class EntityTest { @Test void testEntity() { EntityManagerFactory emf = Persistence.createEntityManagerFactory("test"); EntityManager em = emf.createEntityManager(); EntityTransaction tx = em.getTransaction(); tx.begin(); TestEntity testEntity = new TestEntity(); testEntity.setName("tester"); em.persist(testEntity); em.flush(); TestEntity find = em.find(TestEntity.class, testEntity.getId()); System.out.println("find = " + find); } }@Data @Entity public class TestEntity { @Id @GeneratedValue private Long id; private String name; }스프링 컨테이너를 띄우지 않고 테스트를 수행하고싶어 위와 같이 코드를 작성하였는데00:27:16.392 [Test worker] INFO org.hibernate.jpa.internal.util.LogHelper -- HHH000204: Processing PersistenceUnitInfo [name: test] 00:27:16.467 [Test worker] INFO org.hibernate.Version -- HHH000412: Hibernate ORM core version 6.6.4.Final 00:27:16.474 [Test worker] WARN org.hibernate.orm.deprecation -- HHH90000021: Encountered deprecated setting [javax.persistence.jdbc.user], use [jakarta.persistence.jdbc.user] instead 00:27:16.476 [Test worker] WARN org.hibernate.orm.deprecation -- HHH90000021: Encountered deprecated setting [javax.persistence.jdbc.password], use [jakarta.persistence.jdbc.password] instead 00:27:16.477 [Test worker] WARN org.hibernate.orm.deprecation -- HHH90000021: Encountered deprecated setting [javax.persistence.jdbc.url], use [jakarta.persistence.jdbc.url] instead 00:27:16.478 [Test worker] WARN org.hibernate.orm.deprecation -- HHH90000021: Encountered deprecated setting [javax.persistence.jdbc.driver], use [jakarta.persistence.jdbc.driver] instead 00:27:16.502 [Test worker] INFO org.hibernate.cache.internal.RegionFactoryInitiator -- HHH000026: Second-level cache disabled 00:27:16.625 [Test worker] WARN org.hibernate.orm.connections.pooling -- HHH10001002: Using built-in connection pool (not intended for production use) 00:27:16.780 [Test worker] WARN org.hibernate.orm.deprecation -- HHH90000025: H2Dialect does not need to be specified explicitly using 'hibernate.dialect' (remove the property setting and it will be selected by default) 00:27:16.833 [Test worker] INFO org.hibernate.orm.connections.pooling -- HHH10001005: Database info: Database JDBC URL [jdbc:h2:mem:db;MODE=MySQL] Database driver: org.h2.Driver Database version: 2.3.232 Autocommit mode: false Isolation level: undefined/unknown Minimum pool size: 1 Maximum pool size: 20 00:27:17.414 [Test worker] INFO org.hibernate.engine.transaction.jta.platform.internal.JtaPlatformInitiator -- HHH000489: No JTA platform available (set 'hibernate.transaction.jta.platform' to enable JTA platform integration) Unable to locate persister: dev.shophub.userauthservice.domain.entity.TestEntity java.lang.IllegalArgumentException: Unable to locate persister: dev.shophub.userauthservice.domain.entity.TestEntity at org.hibernate.internal.SessionImpl.firePersist(SessionImpl.java:764) at org.hibernate.internal.SessionImpl.persist(SessionImpl.java:745) at dev.shophub.userauthservice.domain.entity.EntityTest.testEntity(EntityTest.java:21) at java.base/java.lang.reflect.Method.invoke(Method.java:568) at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) Caused by: org.hibernate.UnknownEntityTypeException: Unable to locate persister: dev.shophub.userauthservice.domain.entity.TestEntity at org.hibernate.metamodel.model.domain.internal.MappingMetamodelImpl.getEntityDescriptor(MappingMetamodelImpl.java:395) at org.hibernate.internal.SessionImpl.getEntityPersister(SessionImpl.java:1512) at org.hibernate.engine.internal.ForeignKeys.isTransient(ForeignKeys.java:315) at org.hibernate.event.internal.EntityState.getEntityState(EntityState.java:64) at org.hibernate.event.internal.DefaultPersistEventListener.entityState(DefaultPersistEventListener.java:114) at org.hibernate.event.internal.DefaultPersistEventListener.persist(DefaultPersistEventListener.java:87) at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:79) at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:55) at org.hibernate.event.service.internal.EventListenerGroupImpl.fireEventOnEachListener(EventListenerGroupImpl.java:127) at org.hibernate.internal.SessionImpl.firePersist(SessionImpl.java:761) ... 5 more Unable to locate persister: dev.shophub.userauthservice.domain.entity.TestEntity org.hibernate.UnknownEntityTypeException: Unable to locate persister: dev.shophub.userauthservice.domain.entity.TestEntity at app//org.hibernate.metamodel.model.domain.internal.MappingMetamodelImpl.getEntityDescriptor(MappingMetamodelImpl.java:395) at app//org.hibernate.internal.SessionImpl.getEntityPersister(SessionImpl.java:1512) at app//org.hibernate.engine.internal.ForeignKeys.isTransient(ForeignKeys.java:315) at app//org.hibernate.event.internal.EntityState.getEntityState(EntityState.java:64) at app//org.hibernate.event.internal.DefaultPersistEventListener.entityState(DefaultPersistEventListener.java:114) at app//org.hibernate.event.internal.DefaultPersistEventListener.persist(DefaultPersistEventListener.java:87) at app//org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:79) at app//org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:55) at app//org.hibernate.event.service.internal.EventListenerGroupImpl.fireEventOnEachListener(EventListenerGroupImpl.java:127) at app//org.hibernate.internal.SessionImpl.firePersist(SessionImpl.java:761) at app//org.hibernate.internal.SessionImpl.persist(SessionImpl.java:745) at app//dev.shophub.userauthservice.domain.entity.EntityTest.testEntity(EntityTest.java:21) at java.base@17.0.11/java.lang.reflect.Method.invoke(Method.java:568) at java.base@17.0.11/java.util.ArrayList.forEach(ArrayList.java:1511) at java.base@17.0.11/java.util.ArrayList.forEach(ArrayList.java:1511) 이러한 오류가 출력되고 실행되지 않습니다.어떻게 스프링 컨테이너 없이 jpa 관련 테스트를 진행할 수 있을까요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
Mockito와 JDK가 충돌하는 문제 문의 드립니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]Mockito와 JDK가 충돌하는 문제 문의 드립니다.프로젝트 강의 내용과 일치하게 설정하였는데,@SpringBootTest 어노테이션을 사용하면 에러가 뜹니다. 데이터베이스에 Member테이블은 생성이 되는 것으로 보아 DB와 연결은 잘 되는 것 같습니다.여러 자료를 찾아보며 의존성을 추가해봐도 해결이 되지 않아 프로젝트 파일 첨부합니다.감사합니다,파일 링크: https://drive.google.com/file/d/1b_Liz-YjGAuRUzHM0Em5DnhHa0rtQ9Lm/view?usp=sharing
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
MemberRepository, ItemRepository
[질문 내용]ItemRepository에서 save() 메소드를 만들 때 아직 등록한게 없다면 id 값이 없으니 persist하고 id가 있다면 merge하는 조건문이 있습니다. 그렇다면 MemberRepository에서도 save()메소드에 아직 아무런 회원이 없다면 똑같이 ItemRepository의 save()메소드 처럼 조건문을 넣어야 하지 않을까요? 왜 MemberRepository의 save()메소드는 단지 em.persist(member)만 존재하는 건지 궁금합니다.
-
미해결Practical Testing: 실용적인 테스트 가이드
Redis 테스트
학습 관련 질문을 남겨주세요. 어떤 부분이 고민인지, 무엇이 문제인지 상세히 작성하면 더 좋아요!먼저 유사한 질문이 있었는지 검색해 보세요.서로 예의를 지키며 존중하는 문화를 만들어가요. 강사님 안녕하세요! 강의를 수강하고 프로젝트에 테스트 코드를 작성하며 적용해보고 있습니다.프로젝트에서 Redis로 저장되는 객체가 있는데, 이를 테스트하기 위해 찾아보니 embedded Redis를 사용하거나 테스트 컨테이너를 사용한다고 합니다.'Redis에서 단순한 저장/조회/수정 로직만 존재하는데, 그냥 테스트하지말고 냅둘까?' 유혹이 생기더라구요.이처럼 만약 테스트를 위해 추가적으로 설정이 필요한 경우, 어느정도 선까지 테스트를 진행하는게 맞을지 고민이 됩니다.시간적으로 가능한 선 내에서는 무조건 다 하는게 맞는걸까요?
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
연관관계 편의 메소드를 만들면 set()함수는 지워도 되나요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]연관관계 편의 메소드로 값을 저장하는데set()은 없어도 되지않나해서요?그래도 왠만하면 넣나요?
-
해결됨Spring Boot를 활용하여 채팅 플랫폼 만들어보기
Client 파일은 어떤 IDE로 실행시키나요??
강사님 영상 오늘 하루종일 쭈욱 학습하였습니다.저는 현재 Intelli J Ult 버전 사용중인데 7002 포트의 서버는 켰지만 3000의 포트 서버는 어떤 IDE로 구동해야 하나요??
-
미해결실전! 스프링 데이터 JPA
SpringDataJPA 강의따라서 환경설정 후 test코드 실행하면 오류가납니다
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)예[질문 내용]여기에 질문 내용을 남겨주세요.Could not initialize plugin: interface org.mockito.plugins.MockMaker에러가 발생합니다.. 환경설정이 문제인걸까요..? 아래의 테스트 코드 실행시 아래와 같은오류가 발생합니다. 도와주세요ㅠㅠ<gradle파일>plugins { id 'java' id 'org.springframework.boot' version '3.4.1' id 'io.spring.dependency-management' version '1.1.7' } group = 'study' version = '0.0.1-SNAPSHOT' java { toolchain { languageVersion = JavaLanguageVersion.of(17) } } java { toolchain { languageVersion = JavaLanguageVersion.of(17) } } configurations { compileOnly { extendsFrom annotationProcessor } } repositories { mavenCentral() } dependencies { implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springframework.boot:spring-boot-starter-web' compileOnly 'org.projectlombok:lombok' runtimeOnly 'com.h2database:h2' annotationProcessor 'org.projectlombok:lombok' testImplementation 'org.springframework.boot:spring-boot-starter-test' testRuntimeOnly 'org.junit.platform:junit-platform-launcher' } tasks.named('test') { useJUnitPlatform() } <test파일>package study.data_jpa; import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest; @SpringBootTest class DataJpaApplicationTests { @Test void contextLoads() { } } <오류>Could not initialize plugin: interface org.mockito.plugins.MockMaker Caused by: java.lang.IllegalStateException: Internal problem occurred, please report it. Mockito is unable to load the default implementation of class that is a part of Mockito distribution. Failed to load interface org.mockito.plugins.MockMaker It appears as if your JDK does not supply a working agent attachment mechanism. Java : 17 JVM vendor name : Oracle Corporation JVM vendor version : 17.0.10+11-LTS-240 JVM name : Java HotSpot(TM) 64-Bit Server VM JVM version : 17.0.10+11-LTS-240 JVM info : mixed mode, sharing OS name : Windows 10 OS version : 10.0 DataJpaApplicationTests > contextLoads() FAILED java.lang.IllegalStateException at PluginLoader.java:85 Caused by: java.lang.IllegalStateException at DefaultMockitoPlugins.java:105 Caused by: java.lang.reflect.InvocationTargetException at Constructor.java:499 Caused by: org.mockito.exceptions.base.MockitoInitializationException at InlineDelegateByteBuddyMockMaker.java:254 Caused by: java.lang.IllegalArgumentException at InstrumentationImpl.java:-2
-
해결됨Spring Boot를 활용하여 채팅 플랫폼 만들어보기
독립적인 Transactional을 둔 이유
음.. 코드를 보다가 강사님이 설명이 잘 이해가 가지않아서 질문 드립니다.saveChatMessage같은 경우 트랜잭션을 따로 빈으로 등록하여 saveChatMessage호출 시 독립된 트랜잭션을 호출해서 웹 소켓과 연관된 메시지 저장 작업만 독립적으로 관리하기 위함이라고 생각하면 될까요??보통 우리가 생각하는 웹소켓으로 메시징 작업을 하기 위해서는 실시간이기 때문에... 음 성능적인 부분과 데이터의 일관성을 유지하고 다른 트랜잭션 작업과 충돌을 방지하기 위해서 웹소켓사용시의 독립적인 트랜잭션을 사용한다라고 이해하면 될까요??그리고 또 한가지 현재 프로젝트에서는 MySQLConfig 클래스를 따로 정의해서 커스터마이징 하였는데, 만약 커스터마이징 하지 않고 웹소켓 기능을 사용하게 되었을 때에도 독립적인 트랜잭션 기능을 사용할 수 있나요??