public void decrease(Long id,Long quantity){ while(true){ try{ service.decrease(id,quantity); break; }catch (Exception e){ Thread.sleep(50); } } } OptmisticLock 이 실패했을때 재시도로직에서 일정시간 대기후 서비스로 감소로직을 무한히 실행하는데 실무에서도 optimistic lock 을 이런 방법으로 처리하는지 궁금합니다. 이렇게될경우 로직이 성공할떄 까지 계속 쿼리를 날리게되는데 좀더 개선된 방법이 있을까요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] h2 버전을 1.4.200을 써야하나요 스프링부트 3.xx 버전 이상을 쓰는데 문서에는 2.1.214버전을 쓰라고 되어있고 강의자료에는 1.4.200버전을 쓰라고 안내되어 있습니다.
인덱스 페이지를 오류를 발생시키는 상황입니다. 과정에서 error.tsx 파일을 (with-searchbar) 폴더안에 만들었습니다. 데이터를 불러오는 서버를 끄로 인덱스 페이지를 새로고침하면 Footer에서 오류가 발생합니다. 글로벌 레이아웃에 Footer 컴포넌트를 불러와서 이런 오류가 발생하는 걸까요?
질문 주실 때 항상 2가지를 지켜주세요. 오류가 나는 부분이나 궁금한 부분의 브라우저 화면 캡쳐해서 올리기 HTML+SCSS+JS 코드 캡쳐 말고 텍스트로 붙여넣기 하기 만약 코드를 캡쳐해서 올리시면 제가 코드의 오류를 찾는게 너무 어렵습니다. 반드시 텍스트로 붙여넣기 해주세요. 위의 사진에서 폴더는 어디서 다운로드 하면 될까용 ?
안녕하세요 😀 강의 중 프로젝트 1 에서는 npm install 이 정상적으로 진행되었으나, 이번 useEffect 실습을 위해 강의내용처럼 새폴더 생성 후 npm i를 하니 아래와 같은 오류가 발생합니다. 구글링해서 여러 방법을 시도했으나 해결되지 않아 어떻게 해야할 지 질문드립니다 😥
동기화 강의 중 Room room = new Room(); Runnable cleaner1 = new Runnable() { @Override public void run() { System.out.println("-- 직원1 청소 시작 --"); for (int i = 1; i <= 5; i++) { room.clean("직원1"); try { Thread.sleep(1000); } catch (InterruptedException e) { throw new RuntimeException(e); } if (i == 2) { throw new RuntimeException("못해먹겠다!!"); } } System.out.println("-- 직원1 청소 끝 --"); } }; Runnable cleaner2 = () -> { System.out.println("-- 직원2 청소 시작 --"); for (int i = 1; i <= 5; i++) { room.clean("직원2"); try { Thread.sleep(1000); } catch (InterruptedException e) { throw new RuntimeException(e); } } System.out.println("-- 직원2 청소 끝 --"); }; Thread cleanerThread1 = new Thread(cleaner1); Thread cleanerThread2 = new Thread(cleaner2); cleanerThread1.start(); cleanerThread2.start(); 수업에 사용한 위 코드가 10번방까지 출력이 되는 것은, for 반복문으로 1~5 까지 5개씩의 반복을 두 개 만들었기 때문에 자연적으로 10번까지 출력할 수 있는건가요?
안녕하십니까! 해당 강의를 열심히 들으며 리엑트를 공부하고 있는 대학생입니다. 듣다가 막히는 부분이 생겨 질문을 하게 되었습니다. List.jsx 에서 검색 기능을 구현하는 부분에서 궁금한 것이 생겼습니다. 강의에서는 아래 코드처럼 getFilteredData 함수를 작성하셨습니다. const getFilteredData = () => { if(search === ""){ return todos; } return todos.filter((todo) => { todo.content.toLowerCase().includes(search.toLowerCase()) }); }; 하지만 저는 아무리 오타를 점검하고 수정해도 기능이 구현이 되지 않아서 답답한 마음에 GPT를 통해 질문을 했는데 위 함수에서 return이 빠져있다고 수정해주었습니다. 아래는 GPT가 수정해준 코드입니다. const getFilteredData = () => { if(search === ""){ return todos; } return todos.filter((todo) => { return todo.content.toLowerCase().includes(search.toLowerCase()) }); }; 위 코드를 보시면 filter() 안에 화살표 함수 내부에 return이 추가된 것을 볼 수 있습니다. 그리고 실제로 이렇게 수정을 하고서야 제 기능이 정상적으로 작동이 되었습니다. 왜 이런 결과가 생겼는지 궁금합니다. 제가 뭘 잘못했길래 강의와는 다르게 return을 추가해야만 기능이 제대로 구현이 되는지 여쭤보고 싶습니다. 혹시나 제가 찾지 못하는 오타가 있을까 해서 강의와 똑같이 따라한 전체 List.jsx 코드도 함께 첨부하겠습니다. 감사합니다! import './List.css'; import TodoItem from "./TodoItem"; import {useState} from "react"; const List = ({todos}) => { const [search, setSearch] = useState(""); const onChangeSearch = (e) => { setSearch(e.target.value); }; const getFilteredData = () => { if(search === ""){ return todos; } return todos.filter((todo) => { todo.content.toLowerCase().includes(search.toLowerCase()) }); }; const filteredTodos = getFilteredData(); return <div className="List"> <h4>Todo List 🌱</h4> <input value={search} onChange={onChangeSearch} placeholder="검색어를 입력하세요" /> <div className = "todos_wrapper"> {filteredTodos.map((todo) => { return <TodoItem key={todo.id} {...todo}/>; })} </div> </div> } export default List;
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 프로젝트를 하다보니 내부적으로만 동작하는 로직이 담긴 엔티티 및 레포지토리, 서비스가 있는데 이럴 때는 컨트롤러를 안만들기도 하나요? 예를 들어 포인트 계산 로직이 외부적으로 쓰이기보다 내부적으로 다른 파트에서 그때그때 계산이 필요할 때 가져다 쓰기 위해 설계를 했다고 치면 이럴 때는 컨트롤러 없이 구현하기도 하나요?
========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예 [질문 내용] "트리 구조의 구현" 부분에서 Node0의 왼쪽 노드는 자신의 왼쪽 자손 노드, 오른쪽 노드는 자신의 오른쪽 자손 노드라고 할 때 Node 객체의 필드를 구성하는 prev, item, next에서 prev는 left, next는 right로 생각하면 될까요? 해당 교재 내용에서 Node 객체 필드가 prev, item, next라고 되어있어 질문드립니다.
초기에 pnpm으로 example 다운받고 pnpm dev로 실행 후 기능을 사용해보면, 블로그의 글을 클릭하면 아래처럼 에러가 나오는데 이유와 해결방법이 어떻게 되나요? 아래는 명령창에 나오는 에러입니다. Error: Route "/blog/[slug]" used `params.slug`. `params` should be awaited before using its properties. Learn more: https://nextjs.org/docs/messages/sync-dynamic-apis at eval (app\blog\[slug]\page.tsx:55:70) at Array.find (<anonymous>) at Blog (app\blog\[slug]\page.tsx:55:34) 53 | 54 | export default async function Blog({ params }) { > 55 | let post = await getBlogPosts().find((post) => post.slug === params.slug); | ^ 56 | if (!post) { 57 | notFound(); // ?룷?뒪?듃媛� ?뾾?쑝硫? 404 ?럹?씠吏�瑜? 諛섑솚 58 | } 殊? [Error: A React Element from an older version of React was rendered. This is not supported. It can happen if: - Multiple copies of the "react" package is used. - A library pre-bundled an old copy of "react" or "react/jsx-runtime". - A compiler tries to "inline" JSX instead of using the runtime.] { digest: '685037146' } Error: Route "/blog/[slug]" used `params.slug`. `params` should be awaited before using its properties. Learn more: https://nextjs.org/docs/messages/sync-dynamic-apis at eval (app\blog\[slug]\page.tsx:15:64) at Array.find (<anonymous>) at Module.generateMetadata (app\blog\[slug]\page.tsx:15:28) 13 | 14 | export function generateMetadata({ params }) { > 15 | let post = getBlogPosts().find((post) => post.slug === params.slug) | ^ 16 | if (!post) { 17 | return 18 | }
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 안녕하세요 강사님 Closed for modification: 기존의 코드는 수정되지 않아야 한다. 이 부분에서 클라이언트는 수정되면 안되는 것으로 이해를 했는데 만약 Car에서 옵션기능이 추가 됐으면 Driver도 사용 할 수 있게 추가 되어야 될텐데 OCP 원칙을 어기는 걸까요?