inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

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

카운트 값 질문

미해결

김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성

[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예 [질문 내용] 해당 강의에서 나오는 카운트 값이랑 제가 직접 해본 카운트 값이랑 다르게 나오는데 이게 CPU 성능이 다 달라서 그런건가요?

  • java
  • 객체지향
  • 동시성
  • multithread
  • thread
조민형 댓글 2 좋아요 0 조회수 150

실무에서의 hash(), hashCode() 차이가 궁금합니다

미해결

김영한의 실전 자바 - 중급 2편

[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] 섹션 7 hashCode()에 영상에선 IDE로 equals() hashCode() 생성시 hashCode()의 리턴으로 hash(id)가 생성되는데 저는 hashCode(id) 로 생성이 됩니다 또 섹션8 Set 문제 2에서는 강의와 똑같이 hash()로 생성이 됩니다 구글링으로 매개변수의 차이, 동작 차이와 결과값이 왜 다른지에 대해 이해는 했는데 섹션7의 자동생성이 다른 이유와 실무에선 이 둘이 어떤차이로 쓰이는지 아니면 그냥 생성해주는 대로 쓰는지 에 대해 궁금합니다

  • java
  • 객체지향
  • 코딩-테스트
  • 알고리즘
김윤섭 댓글 1 좋아요 0 조회수 260

프로젝트 실행 오류

미해결

스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예 [질문 내용] 강의와 달리 디버깅이 되지 않습니다 무엇이 잘못된 점인지 설명해주셨으면 좋겠습니다

  • java
  • spring
  • mvc
  • spring-boot
댓글 1 좋아요 0 조회수 294

스프링부트 프로젝트 테스트 코드에서 스프링 컨테이너 없이 직접 엔티티 테스트를 어떻게 할 수 있을까요

미해결

자바 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 관련 테스트를 진행할 수 있을까요?

  • java
  • jpa
hj 댓글 2 좋아요 0 조회수 137

Mockito와 JDK가 충돌하는 문제 문의 드립니다.

미해결

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

[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] Mockito와 JDK가 충돌하는 문제 문의 드립니다. 프로젝트 강의 내용과 일치하게 설정하였는데, @SpringBootTest 어노테이션을 사용하면 에러가 뜹니다. 데이터베이스에 Member테이블은 생성이 되는 것으로 보아 DB와 연결은 잘 되는 것 같습니다. 여러 자료를 찾아보며 의존성을 추가해봐도 해결이 되지 않아 프로젝트 파일 첨부합니다. 감사합니다, 파일 링크: https://drive.google.com/file/d/1b_Liz-YjGAuRUzHM0Em5DnhHa0rtQ9Lm/view?usp=sharing

  • java
  • spring
  • 웹앱
  • spring-boot
  • jpa
박세현 댓글 2 좋아요 0 조회수 232

ReentrantLock - 활용 에서 BankAccountV4클래스 getBalance() 코드 질문

해결됨

김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문 전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 안녕하세요. getBalance() 에서 try-finaly 코드의 순서가 이해가 안되서 질문을 드립니다. 저의 기억 으로는 try안에 있는 코드가 실행되고 finaly 안에 있는 코드가 실행 되는 걸로 알고 있습니다. 근데 try 안에서 return balance; 을 해버리는 것을 보고 "이게 뭐지?"라는 표현이 저절로 나오더라고요. 분명히 리턴으로 getbalance()를 빠져 나갔는데, lock.unlock(); 이게 실행가는한가? 라는 생각이 듭니다. 저의 머리로는 이해가 안되는데 의문점을 해결해 주 실수 있으신가요? 아니면 저가 try-finaly를 잘못 이해한건가요? 답변 부탁 드립니다.

  • java
  • 객체지향
  • 동시성
  • multithread
  • thread
생각하는자 댓글 1 좋아요 0 조회수 154

instanceof

미해결

김영한의 실전 자바 - 기본편

[질문 내용] 여기에 질문 내용을 남겨주세요. instanceof 수업에서 CastingMain5 문제에서 실행결과값이 다르게 나옵니다. parent1 호출 Parent.parentMethod Child 인스턴스 아님 parent2 호출 Parent.parentMethod Child 인스턴스 맞음 Child.childMethod

  • java
  • 객체지향
이용재 댓글 2 좋아요 0 조회수 89

MemberRepository, ItemRepository

미해결

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

[질문 내용] ItemRepository에서 save() 메소드를 만들 때 아직 등록한게 없다면 id 값이 없으니 persist하고 id가 있다면 merge하는 조건문이 있습니다. 그렇다면 MemberRepository에서도 save()메소드에 아직 아무런 회원이 없다면 똑같이 ItemRepository의 save()메소드 처럼 조건문을 넣어야 하지 않을까요? 왜 MemberRepository의 save()메소드는 단지 em.persist(member)만 존재하는 건지 궁금합니다.

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

Order에서 JPA 메타데이터 분리 - XML 사용

해결됨

토비의 스프링 6 - 이해와 원리

안녕하세요, 강의에서 올려주신 META-INF/orm.xml을 통해 orders의 table과 id가 만들어지는 것을 확인했습니다. 다만 Order의 no가 고유한 값을 가져야한다는 데이터 정합성 관련 SQL(schema.sql의 2,3번째 줄)이 Hibernate에서 표시되지 않는 것을 확인하여 unique="true"를 다음과 같이 넣어주면 원래의 JPA 어노테이션을 대체한 것으로 볼 수 있을지 문의드립니다. 감사합니다. <basic name="no"> <column name="no" length="255" unique="true"/> </basic>

  • java
  • spring
이정수 댓글 2 좋아요 0 조회수 272

연관관계 편의 메소드를 만들면 set()함수는 지워도 되나요?

미해결

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

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 연관관계 편의 메소드로 값을 저장하는데 set()은 없어도 되지않나해서요? 그래도 왠만하면 넣나요?

  • java
  • jpa
캐내기 댓글 1 좋아요 0 조회수 109

SpringDataJPA 강의따라서 환경설정 후 test코드 실행하면 오류가납니다

미해결

실전! 스프링 데이터 JPA

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 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

  • java
  • spring
  • spring-boot
  • jpa
guswhd903 댓글 1 좋아요 0 조회수 176

동시성 문제와 volitale의 연관성

미해결

김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성

[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 안녕하세요! 현재 CAS연산 강의를 보고있습니다. 그러다가 문득 "volatile 키워드가 메모리 가시성 문제를 해결해 주지만 동시성 문제는 완벽하게(?) 해결해주지 못한다." 라는 이유에 대해서 곰곰히 생각해 보았는데 혹시 CPU 가 싱글코어와 멀티코어냐에 따라서 결과가 달라지는건지 궁금합니다. 이 이유가 아니라면, 왜 volatile키워드가 동시성 문제를 해결해주지 못하는지 알려주시면 감사하겠습니다!

  • java
  • 객체지향
  • 동시성
  • multithread
  • thread
insub2004 댓글 1 좋아요 0 조회수 165

변경 감지를 통한 데이터 수정할 때 추가, 삭제는 어떻게 처리해야 할까요?

미해결

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

안녕하세요. 데이터 수정은 변경 감지로 처리하는게 적절한걸로 강의를 통해 이해했습니다. 강의를 학습 후, 상품 정보를 수정하는 API를 개발하고 있습니다. 상품 정보 업데이트를 진행할 때 옵션 목록과 같은 하위 데이터에 대해 추가, 삭제는 어떤식으로 로직을 처리해야 하는게 적절한지 판단이 안되어 질문 드립니다. 클라이언트에서 상품 정보 수정 API를 호출할 때, 생각한 프로세스는 아래와 같습니다. - 수정하는 옵션의 경우 ID와 변경되는 데이터를 필드에 담아서 보내줍니다. - 신규 옵션을 추가하는 경우에는 ID를 제외한 추가될 데이터를 필드에 담아서 보내줍니다. - 삭제하는 옵션은 필드에 담지않고, 수정/신규 옵션만 필드에 담아서 보내줍니다. 수정 API 개발할 때, 어떤식으로 처리하는게 좋은 방법인지 궁금하여 질문 드립니다. (수정 옵션) 상품 정보 업데이트 시 기존 옵션 데이터의 경우에는 ID로 데이터를 조회 후 변경 감지로 필요한 데이터만 수정하도록 했습니다. (추가 옵션) 신규 옵션 데이터는 ID 값이 없는걸 식별해서 추가하도록 로직을 짜는게 적절 할까요? (삭제 옵션) 기존 옵션 데이터를 삭제하고 싶습니다. 클라이언트에서 API로 옵션 정보를 넘겨주는데, 삭제되는 옵션은 넘어오지 않습니다. 이런 경우에는 ID가 식별되지 않아 변경 감지로 삭제할 수가 없을거 같은데 어떻게 해야할까요? (삭제는 soft delete 방식으로 처리해야 합니다.) 삭제되는 ID 값을 deleteOptionIds 같은 필드로 따로 받아서 처리하는게 적절 할까요? 감사합니다.

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

통합테스트가 안되면 실행이 안된다는 뜻인가요?

미해결

스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술

[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/ 아니오 ) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? ( 예 /아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? ( 예 /아니오) [질문 내용] CONDITIONS EVALUATION REPORT 라고 에러메시지가 뜨면서 서비스통합테스트가 뜨는데 그럴땐 어디를 봐야 하나요? 서비스테스트랑 코드문은 똑같습니다. plugins { id 'java' id 'org.springframework.boot' version '3.4.1' id 'io.spring.dependency-management' version '1.1.7' } group = 'hhdplus' version = '0.0.1-SNAPSHOT' java { toolchain { languageVersion = JavaLanguageVersion.of(17) } } repositories { mavenCentral() } dependencies { implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'org.springframework.boot:spring-boot-starter-data-jpa' annotationProcessor 'org.springframework.boot:spring-boot-configuration-processor' testImplementation 'org.springframework.boot:spring-boot-starter-test' runtimeOnly 'com.mysql:mysql-connector-j' testImplementation('org.springframework.boot:spring-boot-starter-test') { exclude group: 'org.junit.vintage', module: 'junit-vintage-engine' } testRuntimeOnly 'org.junit.platform:junit-platform-launcher' implementation 'org.apache.tomcat.embed:tomcat-embed-jasper' implementation 'javax.servlet:jstl' } tasks.named('test') { useJUnitPlatform() } package hhdplus.hhplus_tdd2.service; import hhdplus.hhplus_tdd2.domain.reserve.Reserve; import hhdplus.hhplus_tdd2.domain.reserve.ReserveCommand; import hhdplus.hhplus_tdd2.domain.reserve.ReserveInfo; import hhdplus.hhplus_tdd2.domain.reserve.ReserveService; import hhdplus.hhplus_tdd2.infra.reserve.ReserveRepository; import hhdplus.hhplus_tdd2.interfaces.controller.ReserveRequest; import hhdplus.hhplus_tdd2.interfaces.controller.ReserveResponse; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.Mockito; import org.mockito.MockitoAnnotations; import org.mockito.junit.jupiter.MockitoExtension; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.transaction.annotation.Transactional; import java.util.List; import static org.assertj.core.api.AssertionsForClassTypes.assertThat; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; @SpringBootTest //@ExtendWith(MockitoExtension.class) public class ReserveServiceIntergrationTest { @Autowired ReserveService reserveService; @Autowired ReserveRepository reserveRepository; ReserveRequest reserveRequest = new ReserveRequest(); ReserveResponse reserveResponse = new ReserveResponse(); Reserve reserve = new Reserve(); //동작하기 전에 넣어준다 BeforeEach // @BeforeEach // public void beforeEach() { // MockitoAnnotations.openMocks(this); // Mock 객체 초기화 // } // // @AfterEach //테스트 돌때마다 초기화 // public void afterEach() { // Mockito.reset(reserveRepository); // Mock 상태 초기화 // } @Test void 아이디별_예약_내역() { //given 뭔가가 주어졌는데 int userId = 1; ReserveInfo mockReserveInfo = new ReserveInfo(); mockReserveInfo.setId(1); mockReserveInfo.setUserId(userId); mockReserveInfo.setName("테스트 예약 정보"); List<ReserveInfo> mockReserveList = List.of(mockReserveInfo); // Mock 동작 설정 when(reserveService.findReservation(1)).thenReturn(mockReserveList); //when 이거를 실행했을 떄 List<ReserveInfo> result = reserveService.findReservation(userId); //then 결과가 이게 나와야 돼 if(result != null){ System.out.println("이름 : " + mockReserveInfo.getName()); } assertThat(result).isNotNull(); assertThat(result.size()).isEqualTo(1); assertThat(result.get(0).getUserId()).isEqualTo(userId); } @Test void 예약하기() {//40명이 예약 한다 쳐보면 30명만 예약이 되게끔 해보기 //given 뭔가가 주어졌는데 ReserveResponse reserveResponse = new ReserveResponse(); reserveResponse.setId(1); reserveResponse.setUserId(1); reserveResponse.setLectureId(1); //when 이거를 실행했을 떄 ReserveRequest findOne = reserveService.findOne(reserveResponse.getUserId()); findOne.setUserId(1); findOne.setLectureId(1); // Mock 동작 설정 when(reserveService.insertReservation(reserveResponse)).thenReturn(findOne); ReserveRequest result = reserveService.insertReservation(reserveResponse); //then 결과가 이게 나와야 돼 if(findOne != null){ System.out.println("findOne : " + reserveResponse.getLectureId()); } assertThat(reserveResponse.getLectureId()).isEqualTo(1); assertThat(result.getLectureId()).isEqualTo(1); } @Test void 예약수정() { //given 뭔가가 주어졌는데 ReserveCommand reserveCommand = new ReserveCommand(); reserveCommand.setLectureId(1); reserveCommand.setId(1); reserveCommand.setId(1); //when 이거를 실행했을 때 when(reserveService.modifyReservation(reserveCommand.getUserId())).thenReturn(reserveCommand); ReserveRequest findOne = reserveService.findOne(reserveCommand.getUserId()); //then 결과가 이게 나와야 돼 assertThat(findOne).isNotNull(); if(findOne != null){ System.out.println("findOne : " + reserveResponse.getLectureId()); } } @Test void 예약삭제() { //given 뭔가가 주어졌는데 ReserveResponse reserveResponse = new ReserveResponse(); reserveResponse.setId(1); reserveResponse.setUserId(1); reserveService.deleteReservation(reserveResponse.getId()); //when 이거를 실행했을 때 List<ReserveInfo> list = reserveService.findReservation(reserveResponse.getUserId()); //then 결과가 이게 나와야 돼 if(list.isEmpty()){ System.out.println("삭제 완료"); } assertThat(list.size()).isEqualTo(0); } }

  • java
  • spring
  • mvc
  • spring-boot
sh hhyeogi365 댓글 2 좋아요 0 조회수 315

영속성 전이(CASCADE)에 대하여 궁금한 게 있습니다^_^

미해결

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

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 비슷한게 있긴합니다. 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] 여기에 질문 내용을 남겨주세요. 안녕하세요, 영속성 전이(CASCADE)에 대하여 궁금한 게 있습니다. CASECADE.ALL 사용시 부모Parent(@OneToMnay) -> 자식Child(@ManyToOne) 이런식으로 양방향 관계시 하나의 부모가 자식들을 관리를 할때(소유자가 하나인 경우)는 사용을 해도 괜찮다고 말씀을 주셨는데근데 사용을 하면 안되는 경우를 이제 자식Child 엔터티가 Member 엔티티와 @ManyToOne 관계를 가지게 되는 이런 경우를 말씀 하신걸까요 ㅠㅠ?? 아니면 Child에서 Member로 단방향 관계일때는 상관이 없고 // Case 1: 단방향 @Entity public class Child { @ManyToOne private Parent parent; @ManyToOne private Member member; // 단방향 } // ==================================================================================== // Case 2: 양방향 @Entity public class Child { @ManyToOne private Parent parent; @ManyToOne private Member member; // 양방향 } @Entity public class Member { @OneToMany(mappedBy = "member", cascade = CascadeType.ALL) private List<Child> childList = new ArrayList<>(); } 멤버에서 차일드를 알게된 양방향 관계일때 문제가 생긴다는 걸까요 ?? 다른엔터티랑 CHILD랑 관계가 있다가 어떤 경우인지 이해가 안되서 그렇습니다ㅠ_ㅠ

  • java
  • jpa
한화이글짱짱 댓글 1 좋아요 0 조회수 197

양방향 연관관계 매핑 무한루프

미해결

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

가급적이면 lombok라이브러리를 쓰지 마라고 하셨는데, @ToString(exclude = "members") 처럼 특정 필드를 제외하는 exclude 써서 무한 순환을 막을 수 있다는 것을 봤는데 이 방법을 실무에서 잘 안쓰나요? 그렇다고 롬복을 안쓰는건 더더욱 비효율적으로 보입니다 예시: @Entity @ToString(exclude = "members") public class Team { ... @OneToMany(mappedBy = "team") private List<MemberTest> members = new ArrayList<>(); ... }

  • java
  • jpa
이응이응 댓글 1 좋아요 0 조회수 118

JOSE 구성요소의 api에 관한 질문

해결됨

스프링 시큐리티 OAuth2

안녕하세요 jwt 강의에서 JOSE 구성요소 api들을 이용해서 토큰을 서명하고 검증을 하는도중에요 궁금한게 저희가 보통 가져다쓰는 토큰 발급 외부 라이브러리 jjwt 이런것 들도 결국엔 JWT, JWS, JwtDecoder 이런 것들을 가져다 사용한 건가요.?

  • java
  • spring
  • spring-boot
  • oauth
hoonseung 댓글 2 좋아요 0 조회수 157

MemberRepository에 @Transactional

해결됨

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

[질문 내용] MemberRepository 클래스에서도 MeberService 처럼 JPA를 적용한 코드들이 있던데 왜 MemberRository에서는 @Transcational 를 사용하지 않는 건가요?

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

안녕하세요 Slice Windoe 방식 질문입니다.

미해결

자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비

import java.util.*; public class Main { public static void main(String[] args){ Scanner in=new Scanner(System.in); String s = in.nextLine(); String s2 = in.nextLine(); System.out.println(Solution.solution(s, s2)); } } class Solution{ public static int solution(String s , String s2){ int ans = 0; HashMap<Character, Integer> map = new HashMap<>(); HashMap<Character, Integer> map2 = new HashMap<>(); for(char c : s2.toCharArray()){ map2.put(c, map2.getOrDefault(c, 0) + 1); } for(int i = 0; i<s2.length(); i++){ map.put(s.charAt(i), map.getOrDefault(s.charAt(i), 0) + 1); } if(map.equals(map2)){ ans++; } for(int i = s2.length(); i < s.length(); i++){ map.put(s.charAt(i), map.getOrDefault(s.charAt(i), 0)+1); if(map.get(s.charAt(i- s2.length())) == 1){ map.remove(s.charAt(i- s2.length())); }else{ map.put(s.charAt(i-s2.length()), map.get(s.charAt(i-s2.length())) - 1); } if(map.equals(map2)){ ans++; } } return ans; } } 전 강의에서는 항상 기존 b의 길이만큼 먼저 계산을 해주고 비교를 한후에 하나를 추가해주고 기존꺼를 제거하는 방식으로 저는 이해해를 해서 그런식으로 풀고 있었는데 강사님 코드 결론은 마지막에 b길이를 채워 주고나서 비교하고 나서 이전껄 빼고 새로운걸 추가시키고 비교하는 방식으로 하시는거 같은데 방식이 달라 어떤걸 더 봐야할지 모르겠습니다.

  • java
  • 코딩-테스트
opnice12 댓글 1 좋아요 0 조회수 95

ProductOrderMain 질문입니다

해결됨

김영한의 실전 자바 - 기본편

질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. 강의에서는 향상된 for문을 이용하여 문제를 풀어주셨는데 일반 for문을 사용해보고 싶어 풀어봤는데 여기서 for문에 orders.length에 빨간줄이 생기면서 (java: incompatible types: int cannot be converted to boolean) 실행이 안되는데 뭐가 문제인가요? package class1.ex; public class ProductOrderMain1 { public static void main(String[] args) { ProductOrder order1 = new ProductOrder(); order1.productName = "두부"; order1.price = 2000; order1.quantity = 2; ProductOrder order2 = new ProductOrder(); order2.productName = "김치"; order2.price = 5000; order2.quantity = 1; ProductOrder order3 = new ProductOrder(); order3.productName = "콜라"; order3.price = 1500; order3.quantity = 2; ProductOrder[] orders = new ProductOrder[]{order1, order2, order3}; int totalAmount = 0; for (int i = 0; orders.length; i++) { System.out.println("상품명: " + orders[i].productName + ", 가격: " + orders[i].price + ", 수량: " + orders[i].quantity); totalAmount += orders[i].price * orders[i].quantity; } System.out.println("총 결제: " + totalAmount); } }

  • java
  • 객체지향
강민서 댓글 1 좋아요 0 조회수 167

인기 태그

인프런 TOP Writers

주간 인기글