@Test public void 상품주문_재고수량초과() throws Exception { //Given Member member = createMember(); Item item = createBook("시골 JPA", 10000, 10); //이름, 가격, 재고 int orderCount = 11; //재고보다 많은 수량 //When assertThrows(NotEnoughStockException.class, () -> orderService.order(member.getId(), item.getId(), orderCount)); //Then fail("재고 수량 부족 예외가 발생해야 한다."); } 이렇게 작성할 경우, fail()문을 넣으면 테스트오류가 뜨는데 없애는 게 맞나요, 안넣으면 오류가 안떴을 경우를 어떻게 확인하나요??
<property name="hibernate.hbm2ddl.auto" value="create" /> create 설정으로 해놨는데도 allocationSize 를 1에서 50으로 바꾸고 돌려봤더니 Exception in thread "main" jakarta.persistence.PersistenceException: [PersistenceUnit: hello] Unable to build Hibernate SessionFactory at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.persistenceException(EntityManagerFactoryBuilderImpl.java:1591) at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1512) 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:13) Caused by: org.hibernate.MappingException: Could not instantiate id generator [entity-name=hellojpa.Member] at org.hibernate.id.factory.internal.StandardIdentifierGeneratorFactory.createIdentifierGenerator(StandardIdentifierGeneratorFactory.java:230) at org.hibernate.id.factory.internal.IdentifierGeneratorUtil.createLegacyIdentifierGenerator(IdentifierGeneratorUtil.java:127) at org.hibernate.mapping.SimpleValue.createGenerator(SimpleValue.java:415) at org.hibernate.internal.SessionFactoryImpl.lambda$createGenerators$1(SessionFactoryImpl.java:457) at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:184) at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) at java.base/java.util.HashMap$ValueSpliterator.forEachRemaining(HashMap.java:1787) at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:151) at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:174) at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) at org.hibernate.internal.SessionFactoryImpl.createGenerators(SessionFactoryImpl.java:456) at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:271) at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:450) at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1507) ... 4 more Caused by: org.hibernate.MappingException: The increment size of the [MEMBER_SEQ] sequence is set to [50] in the entity mapping while the associated database sequence increment size is [1]. at org.hibernate.id.enhanced.SequenceStyleGenerator.adjustIncrementSize(SequenceStyleGenerator.java:265) at org.hibernate.id.enhanced.SequenceStyleGenerator.configure(SequenceStyleGenerator.java:207) at org.hibernate.id.factory.internal.StandardIdentifierGeneratorFactory.createIdentifierGenerator(StandardIdentifierGeneratorFactory.java:224) ... 20 more 이런 오류들이 떴고 확인해보니 하이버네이트에서 정의된 시퀀스의 증가수 크기와 h2 DB의 증가수가 달라서 생긴 오류인 것 같아 DB에 따로 쿼리를 날려주고 실행해보니 정상 작동되더라구요. ALTER SEQUENCE MEMBER_SEQ INCREMENT BY 50; 이렇게 사이즈 변경 시, DB에서 수동으로 쿼리를 날려줘야하나요?
java 17을 다운받고 인텔리제이를 실행했는데요 group이나 version (보라색 글씨)가 활성화?가 안돼요 그리고 java 11과 java 14를 깔았던게 있는데 이것때문에 cmd 에서 java -version 이라고 쳤을 때 14가 계속 뜨는 바람에 11과 14를 모두 지우고 17만 남겨뒀거든요 그런데 인텔리제이에서 제가 같이 듣고있는 자바코드들이 다 오류가 뜹니다. CoreApplication.java 도 실행이 아예 되질 않습니다.
Static Page로 설정되는 기준은 동적함수가 아니거나 데이터 캐시에 저장해주는 경우 설정된다고 하셨는데요 만약 그렇다면 강의 자료에서도 백엔드에서 받아온 데이터가 데이터 캐시부분을 그냥 지나가는 게 아니라 'SET' 해야하는거 아닌가 궁금합니다 🚨 아래의 가이드라인을 꼭 읽고 질문을 올려주시기 바랍니다 🚨 질문 하시기 전에 꼭 확인해주세요 - 질문 전 구글에 먼저 검색해보세요 (답변을 기다리는 시간을 아낄 수 있습니다) - 코드에 오타가 없는지 면밀히 체크해보세요 (Date와 Data를 많이 헷갈리십니다) - 이전에 올린 질문에 달린 답변들에 꼭 반응해주세요 (질문에 대한 답변만 받으시고 쌩 가시면 속상해요 😢 ) 질문 하실때 꼭 확인하세요 - 제목만 보고도 무슨 문제가 있는지 대충 알 수 있도록 자세한 제목을 정해주세요 (단순 단어 X) - 질문의 배경정보를 제공해주세요 (이 문제가 언제 어떻게 발생했고 어디까지 시도해보셨는지) - 문제를 재현하도록 코드샌드박스나 깃허브 링크로 전달해주세요 (프로젝트 코드에서 문제가 발생할 경우) - 답변이 달렸다면 꼭 확인하고 반응을 남겨주세요 - 강의의 몇 분 몇 초 관련 질문인지 알려주세요! - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오)y 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)y 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)y [질문 내용] Caused by: org.hibernate.AnnotationException: Entity 'jpabook.jpashop.domain.Category' has no identifier (every '@Entity' class must declare or inherit at least one '@Id' or '@EmbeddedId' property) 실행시 에러메세지가 뜨는데 @Id 에노테이션이 있음에도 해결되지않습니다. 소스파일도 첨부합니다 https://drive.google.com/file/d/126dOVMwaCPYOSqD4f7XOC0BkCUqtONAK/view?usp=sharing
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] intellij 단축키 표시가 파란색으로 나오는데 어떤 plugin을 설치해야 하나여?
안녕하세요! 스레드 강의 정말 잘 듣고 있습니다~ 인터럽트에서 궁금한점이 있어서 질문드립니다. isInterrupted()는 Thread.currentThread에서 실행할 수 있고, interrupted()는 Thread에서 실행할 수 있는데 그럼 혹시 다른 스레드에서 인터럽트를 실행해도 Thread.interrupted()에 걸릴까 싶어 테스트를 해보니 그러지는 않더라구요. Thread.interrupted의 내부를 보니 currentThread()를 호출하긴하던데, Thread.currentThread.interrupted()가 안되는 이유는 스레드의 내부적인 부분으로 보면 될까요? 궁금해서 혹시하고 질문드렸습니다ㅠ
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문 전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. 마지막 notifyall에서 만약에 c1 다음에 p1이 락을 획득하면 나머지 c2, c3, c4, c5는 대기집합에 들어가나요 아니면 깨어있는 상태로 계속있나요?
혹시 해당 내용을 공식문서에서 직접 찾아보려구 했는데 안나와서요 해당 내용이 문서 어디를 참조하면 될까요? 🚨 아래의 가이드라인을 꼭 읽고 질문을 올려주시기 바랍니다 🚨 질문 하시기 전에 꼭 확인해주세요 - 질문 전 구글에 먼저 검색해보세요 (답변을 기다리는 시간을 아낄 수 있습니다) - 코드에 오타가 없는지 면밀히 체크해보세요 (Date와 Data를 많이 헷갈리십니다) - 이전에 올린 질문에 달린 답변들에 꼭 반응해주세요 (질문에 대한 답변만 받으시고 쌩 가시면 속상해요 😢 ) 질문 하실때 꼭 확인하세요 - 제목만 보고도 무슨 문제가 있는지 대충 알 수 있도록 자세한 제목을 정해주세요 (단순 단어 X) - 질문의 배경정보를 제공해주세요 (이 문제가 언제 어떻게 발생했고 어디까지 시도해보셨는지) - 문제를 재현하도록 코드샌드박스나 깃허브 링크로 전달해주세요 (프로젝트 코드에서 문제가 발생할 경우) - 답변이 달렸다면 꼭 확인하고 반응을 남겨주세요 - 강의의 몇 분 몇 초 관련 질문인지 알려주세요! - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
> onebite-books-server@0.0.1 seed > tsx prisma/seed/seed.ts file:///Users/majunghan/dev/onebite-books-server/node_modules/tsx/dist/resolve-ts-path-DUkQ8uuR.mjs:1 import o from"node:path";import{parseTsconfig as x,getTsconfig as m,createFilesMatcher as u,createPathsMatcher as g}from"get-tsconfig";let i,r,l=!1;const j=s=>{let t=null;if(s){const e=o.resolve(s);t={path:e,config:x(e)}}else{try{t=m()}catch{}if(!t)return}i=u(t),r=g(t),l=t?.config.compilerOptions?.allowJs??!1},P=` ^^^^^^^^^^^^^^^^^^ SyntaxError: The requested module 'get-tsconfig' does not provide an export named 'createPathsMatcher' npm run seed하고 이런 에러뜨면은 1. npm install get-tsconfig@latest 2. node modules 폴더 지우기 3. npm i 4. npm run seed 하시면 잘됩니다.
안녕하세요. 강의 잘 보고 있습니다. em.createQuery에서 distinct를 사용해도 DB에서 받아올 때는 뻥튀기된 데이터를 받아오는 것이 맞을까요? em.createQuery의 반환값으로 List<Order>에 담을 때 Order의 id 중복을 제거해서 담은 뒤 반환한다는 것이 맞을까요? 결국 distinct를 사용하나 안 하나 DB에 나가는 쿼리는 같을까요? public List<Order> findAllWithItem() { return em.createQuery( "select distinct o from Order o" + " join fetch o.member m" + " join fetch o.delivery d" + " join fetch o.orderItems oi" + " join fetch oi.item i", Order.class) .getResultList(); } 참고한 질문과 답변입니다. https://www.inflearn.com/course/lecture?courseSlug=%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8-JPA-API%EA%B0%9C%EB%B0%9C-%EC%84%B1%EB%8A%A5%EC%B5%9C%EC%A0%81%ED%99%94&unitId=24332&tab=community&category=questionDetail&q=555554
데이터 패칭 후 캐싱 옵션에 따라 넥스트 서버에서 캐싱된 데이터를 갖고 있을 수도 있다고 하셨는데 캐싱을 강제하는 옵션인 'force-cache'를 했을 경우 브라우저에서 캐시 비우기 및 강력 새로고침을 하게 되면 다시 데이터 패칭을 해오더라구요 캐싱 데이터는 next서버에 저장돼있는 건데 왜 브라우저의 기능에 영향을 받는 건지 알 수 있을까요??? 🚨 아래의 가이드라인을 꼭 읽고 질문을 올려주시기 바랍니다 🚨 질문 하시기 전에 꼭 확인해주세요 - 질문 전 구글에 먼저 검색해보세요 (답변을 기다리는 시간을 아낄 수 있습니다) - 코드에 오타가 없는지 면밀히 체크해보세요 (Date와 Data를 많이 헷갈리십니다) - 이전에 올린 질문에 달린 답변들에 꼭 반응해주세요 (질문에 대한 답변만 받으시고 쌩 가시면 속상해요 😢 ) 질문 하실때 꼭 확인하세요 - 제목만 보고도 무슨 문제가 있는지 대충 알 수 있도록 자세한 제목을 정해주세요 (단순 단어 X) - 질문의 배경정보를 제공해주세요 (이 문제가 언제 어떻게 발생했고 어디까지 시도해보셨는지) - 문제를 재현하도록 코드샌드박스나 깃허브 링크로 전달해주세요 (프로젝트 코드에서 문제가 발생할 경우) - 답변이 달렸다면 꼭 확인하고 반응을 남겨주세요 - 강의의 몇 분 몇 초 관련 질문인지 알려주세요! - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
인텔리제이 무료버전이 다 끝나서 다시 지우고 무료료 쓸 수있는 학생버전으로 깔았는데 그 다음부터 김영한님의 파일들이 잘 작동이 안됩니다. 일텔리제이 버전은 아래와 같습니다: IntelliJ IDEA 2024.2.1 (Ultimate Edition) Build #IU-242.21829.142, built on August 29, 2024 Licensed to xx Subscription is active until September 2, 2025. For educational use only. Runtime version: 21.0.3+13-b509.11 aarch64 (JCEF 122.1.9) VM: OpenJDK 64-Bit Server VM by JetBrains s.r.o. 김영한님의 폴더를 오픈하면 소스 파일이 안뜨고 이런식으로 뜹니다 또 어쩔때는 소스파일이 다 뜨지만 run을 하면 run이 실행되고 다시 프로젝트 목록의 소스파일들이 다 사라집니다
처음 index페이지에 접근할 땐 사전렌더링 후 하이드레이션 과정을 거치게 되고 그 후 라우팅을 하며 페이지 이동과정에선 CSR 방식으로 동작하는 걸로 이해하고 있습니다! 책 디테일 페이지의 경우 서버 컴포넌트이며 데이터 페칭을 받아 렌더링 되는 코드가 적혀있는데 만약 인덱스 페이지에서 디테일 페이지로 링크 컴포넌트를 통해서 페이지를 이동하게 되면 서버에서 클라이언트로 데이터 페칭을 마친 후 RSC 페이로드를 내려주는 게 맞을까요?? 그리고 클라이언트에서는 이 페이로드를 역직렬화 하여 화면에 렌더링 해주게 되는 걸까요? 🚨 아래의 가이드라인을 꼭 읽고 질문을 올려주시기 바랍니다 🚨 질문 하시기 전에 꼭 확인해주세요 - 질문 전 구글에 먼저 검색해보세요 (답변을 기다리는 시간을 아낄 수 있습니다) - 코드에 오타가 없는지 면밀히 체크해보세요 (Date와 Data를 많이 헷갈리십니다) - 이전에 올린 질문에 달린 답변들에 꼭 반응해주세요 (질문에 대한 답변만 받으시고 쌩 가시면 속상해요 😢 ) 질문 하실때 꼭 확인하세요 - 제목만 보고도 무슨 문제가 있는지 대충 알 수 있도록 자세한 제목을 정해주세요 (단순 단어 X) - 질문의 배경정보를 제공해주세요 (이 문제가 언제 어떻게 발생했고 어디까지 시도해보셨는지) - 문제를 재현하도록 코드샌드박스나 깃허브 링크로 전달해주세요 (프로젝트 코드에서 문제가 발생할 경우) - 답변이 달렸다면 꼭 확인하고 반응을 남겨주세요 - 강의의 몇 분 몇 초 관련 질문인지 알려주세요! - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
안녕하세요! 이정환 강사님. next 강의를 거의 다 수강해가는 것 같아서 배운걸 활용해 혼자 간단한 투두리스트를 구현해보고 있는데요. 새로고침 시에도 할일목록이 유지되도록 하기 위해 로컬스토리지에 저장된 목록을 가져오고 또 저장하는 로직을 작성하였더니 ReferenceError: localStorage is not defined 이와 같은 오류를 만나서 useEffect를 사용해서 아래와 같이 작성하였습니다. // useTodo 커스텀 훅 일부 const [todoList, setTodoList] = useState<Todo[]>([]); const [isLoading, setIsLoading] = useState(true); useEffect(() => { const storedTodos = getStoredTodoFromLocalStorage(); setTodoList(storedTodos); setIsLoading(false); }, []); useEffect(() => { if (todoList.length > 0) saveTodoToLocalStorage(todoList); }, [todoList]); // ToDoItemList.tsx export default function ToDoItemList({ isLoading, todoList, toggleTodoCompletion, }: ToDoItemListProps) { if (isLoading) { return <S.ToDoItemList>로딩중...</S.ToDoItemList>; } if (todoList.length === 0) return ( <S.ToDoItemList> <S.EmptyList>할일을 생성해보세요✨</S.EmptyList> </S.ToDoItemList> ); return ( <S.ToDoItemList> {todoList.map(todo => ( <ToDoItem key={todo.id} todo={todo} toggleCompletion={toggleTodoCompletion} /> ))} </S.ToDoItemList> ); } 처음엔 로딩상태를 만들지 않고 todolist.length가 0이면 "할일을 생성해보세요"가 보이고 아니면 할일 목록을 보여주도록 했습니다. 하지만 그렇게 하니까 할일 목록을 작성하고 새로고침을 누르면 "할일을 생성해보세요"가 잠깐 나타나고 기존에 작성한 할일 목록이 나타나더라구요... 그래서 로딩중을 추가했는데 이제는 이 투두리스트에 처음 접근한 사람도 아직 아무 데이터도 없는데 로딩중이 보이고 할일을 생성해보세요가 나타나게 되는 문제에 직면했습니다. 이러한 로직은 어떻게 다루어야 좋을까요?? 제가 의도했던 건 처음 투두리스트 작성하려는 유저에겐 "할일을 생성해보세요"가 바로 보이고, 할일을 작성하면 할일목록을, 새로고침을 해도 할일목록을 보여주기 이전에 작성한 투두리스트가 있는 유저에겐 할일 목록을 보여주고 새로고침을 해도 그대로 유지해서 보여주기 인데 어떻게 해결할 수 있을지 모르겠습니다... 🥲