inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

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

JAR파일 dependency 관련하여 질문드립니다.

미해결

이펙티브 자바 완벽 공략 1부

선생님 안녕하세요, 이펙티브 자바 강의 수강 중 궁금한 것이 있어 질문드립니다. 아래 사진과 같이 chinese-hello-service 프로젝트에 resources파일에 HelloService를 풀패키지 경로까지 적어 등록을 해주셨는데요. 등록을 해주신 다음에는 effective-java-part1 프로젝트에서 참조하여 사용한다고 하셨습니다. 제가 궁금한 것은 HelloService를 resources에 굳이 등록을 하지 않아도 chinese-hello-service 프로젝트를 jar로 말아 effective-java-part1에서 참조하면 HelloService를 사용할 수 있다고 생각하는데요. resources에 등록하고 있는 이유가 있을까요? 혹시 제가 놓치고 있는 부분이나 잘못 이해한 내용이 있을까요?

  • java
shrkwk5 댓글 2 좋아요 0 조회수 266

new line character 에 대한 질문입니다.

미해결

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

[String 클래스 - 주요 메서드2] 17:37 에 보면, printf의 인자 new line character로 \n 을 사용하셨습니다. https://docs.oracle.com/javase/tutorial/java/data/numberformat.html 에 보면, > You should always use %n , rather than \n . 이라고 나오는데, 그러면 %n을 사용하면 되는건가요? 혹시나 해서 여쭈어 봅니다.

  • java
  • 객체지향
뎅뚠 댓글 1 좋아요 0 조회수 72

질문 답변 부탁드립니다

미해결

[백엔드/예외처리 시나리오/집계 최적화] 백엔드 포트폴리오와 실무 이력 강화 전략. 올인원 PART1

카카오페이 말고 다른 pg사 이용해보려고 하는데 페이코 같은 경우 어떤 식으로 해야 되는 지요

  • java
  • spring-boot
  • 포트폴리오
  • 기술면접
  • bulkinsert
kofk113 댓글 1 좋아요 0 조회수 178

[오역 제보] 타입 이레이저의 영문 표기

해결됨

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

타입 이레이저에 관해 더 검색하던 중, 강의자료 v20241027의 2. 제네릭 - Generic2.pdf 에서 eraser는 오역인 것 같아 제보합니다. Oracle JavaTutorials의 Generic 관련 문서( https://docs.oracle.com/javase/tutorial/java/generics/erasure.html )에서는 이레이저를 erasure로 표기하였습니다. eraser도 어색하지는 않지만 영어 단어와의 통일성을 위해 수정을 요청드립니다. 감사합니다.

  • java
  • 객체지향
  • 코딩-테스트
  • 알고리즘
한재현 댓글 2 좋아요 0 조회수 136

3.x.x 버전 업데이트

미해결

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

섹션 1에 spring initializr를 진행하다가 java 17과 spring boot 3.4.1로 변경해 진행할 수 밖에 없다고 생각되어서 커뮤니티 질문들을 보았고 52강을 먼저 보게 되었습니다. java도 17로 업데이트하였고 17로 변경한 후에 gradle도 java 17에 맞게 7.3으로 변경하였는데 이런 오류가 뜹니다 ㅠㅠ 해결법 알려주시면 감사하겠습니다

  • java
  • spring
  • aws
  • mysql
  • spring-boot
  • jpa
박수빈 댓글 2 좋아요 0 조회수 413

Category 매핑??

미해결

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

Category를 부모로 설정하고 이렇게 리스트로 뽑는 이유가 카테고리가 여러개라서 이렇게 하는 건가요? 잘 이해가 안 가서 질문드립니다. 그리고 실무에서 카테고리랑 Items 를 이런식으로 중간 테이블을 만들고 따로 매핑하는게 흔한가요?

  • java
  • jpa
KMC 댓글 2 좋아요 0 조회수 52

카운트 값 질문

미해결

김영한의 실전 자바 - 고급 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 조회수 261

프로젝트 실행 오류

미해결

스프링 입문 - 코드로 배우는 스프링 부트, 웹 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 조회수 273

연관관계 편의 메소드를 만들면 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

인기 태그

인프런 TOP Writers

주간 인기글