묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨김영한의 실전 자바 - 중급 1편
불변 객체가 되기 위한 조건
불변 객체가 되기 위해서는 해당 객체의 상태가 변경될 수 없는 형태여야하는데, 상태(필드, 멤버 변수) 중 변경 가능한 상태와 변경 불가능한 상태가 모두 존재하는 경우는 불변 객체로 보나요?
-
미해결Practical Testing: 실용적인 테스트 가이드
동시성 문제 테스트 관련해서 질문드립니다.
학습 관련 질문을 남겨주세요. 어떤 부분이 고민인지, 무엇이 문제인지 상세히 작성하면 더 좋아요!먼저 유사한 질문이 있었는지 검색해 보세요.서로 예의를 지키며 존중하는 문화를 만들어가요. 안녕하세요. 개인 프로젝트를 진행하다 궁금한 점이 있어 질문드립니다.현재, 서로 다른 두 트랜잭션이 동시에 실행될 때 발생할 수 있는 동시성 문제를 해결하기 위해 락을 적용해두었습니다. 테스트 코드에서는 락이 없는 경우에는 문제 상황이 발생하고, 락 적용 시에는 정상 작동함을 보여주고자 합니다.인터넷에서 관련 자료를 찾아본 결과, Executor와 CountDownLatch를 활용하여 동시성 문제를 테스트하는 방식을 많이 사용하길래, 저도 이를 적용해 테스트를 구성하려 하고 있습니다. 멀티스레딩 환경에서는 실행 순서가 보장되지 않으므로, 운이 나쁘면 두 트랜잭션이 순차적으로 실행될 수도 있다고 생각했고 실행 순서를 제어하여 문제가 발생할 수 있는 상황을 코드로 만들어야 한다고 생각했습니다.그러나 Executor와 CountDownLatch만으로는 트랜잭션 단위로 묶인 작업들의 실행 순서를 제어하기 어려워, 원하는 동시성 문제 시나리오를 재현하는 데 한계가 있었습니다. wait, notify 등의 스레드 제어 메서드를 활용하면 원하는 실행 순서를 만들 수 있을 것 같지만, 이것이 최선의 방법인지 고민이 되어 질문드립니다. 선생님께서는 동시성 문제 테스트를 진행할 때, 실행 순서를 제어하여 문제가 발생하는 시나리오를 인위적으로 만들고 이런 상황에서도 정상 작동함을 확인하시나요? 아니라면 동시성 문제를 테스트할 때 어떤 방법을 사용하시는지 궁금합니다
-
해결됨[Unity6] 유니티6로 배우는 실전 멀티플레이 디펜스
잔상
안녕하세요. 혹시 캐릭터의 위치를 서로 바꿀때 클라이언트의 서버 스포너위치에 옮겨질 캐릭터의 잔상이 남는데 무엇이 문제인가요? hero쪽에 if (IsServer) transform.parent = target.transform; 이 구문을 빼면잔상이 없어지긴 합니다.
-
미해결이득우의 언리얼 프로그래밍 Part2 - 언리얼 게임 프레임웍의 이해
패키징에 관한 질문입니다
UATHelper: Packaging (Windows): Running AutomationTool...UATHelper: Packaging (Windows): Using bundled DotNet SDK version: 6.0.302UATHelper: Packaging (Windows): Starting AutomationTool...UATHelper: Packaging (Windows): Parsing command line: -ScriptsForProject=D:/UnrealGame/Test/Test.uproject Turnkey -command=VerifySdk -platform=Win64 -UpdateIfNeeded -EditorIO -EditorIOPort=64148 -project=D:/UnrealGame/Test/Test.uproject BuildCookRun -nop4 -utf8output -nocompileeditor -skipbuildeditor -cook -project=D:/UnrealGame/Test/Test.uproject -target=Test -unrealexe="C:\Program Files\Epic Games\UE_5.4\Engine\Binaries\Win64\UnrealEditor-Cmd.exe" -platform=Win64 -installed -stage -archive -package -build -clean -pak -iostore -compressed -prereqs -archivedirectory=D:/UnrealGame/Test/package -clientconfig=Shipping -nodebuginfo -nocompile -nocompileuatUATHelper: Packaging (Windows): Initializing script modules...UATHelper: Packaging (Windows): Total script module initialization time: 0.30 s.UATHelper: Packaging (Windows): Using C:\Program Files\Microsoft Visual Studio\2022\Community\MSBuild\Current\Bin\MSBuild.exeUATHelper: Packaging (Windows): Executing commands...UATHelper: Packaging (Windows): Installed Sdk validity:UATHelper: Packaging (Windows): Win64: (Status=Valid, MinAllowed_Sdk=10.0.18362.0, MaxAllowed_Sdk=10.9.99999.0, Current_Sdk=10.0.22621.0, Allowed_AutoSdk=10.0.19041.0, Current_AutoSdk=, Flags="InstalledSdk_ValidVersionExists")UATHelper: Packaging (Windows): Scanning for envvar changes...UATHelper: Packaging (Windows): ... done! UATHelper: Packaging (Windows): Cleaning Temp Paths...UATHelper: Packaging (Windows): BUILD SUCCESSFULUATHelper: Packaging (Windows): Setting up ProjectParams for D:\UnrealGame\Test\Test.uprojectUATHelper: Packaging (Windows): ********** BUILD COMMAND STARTED **********UATHelper: Packaging (Windows): Running: C:\Program Files\Epic Games\UE_5.4\Engine\Binaries\ThirdParty\DotNet\6.0.302\windows\dotnet.exe "C:\Program Files\Epic Games\UE_5.4\Engine\Binaries\DotNET\UnrealBuildTool\UnrealBuildTool.dll" Test Win64 Shipping -Project="D:\UnrealGame\Test\Test.uproject" -Clean -NoHotReload "D:\UnrealGame\Test\Test.uproject" -NoUBTMakefiles -remoteini="D:\UnrealGame\Test" -skipdeploy -log="C:\Users\user\AppData\Roaming\Unreal Engine\AutomationTool\Logs\C+Program+Files+Epic+Games+UE_5.4\UBA-Test-Win64-Shipping.txt"UATHelper: Packaging (Windows): Log file: C:\Users\user\AppData\Roaming\Unreal Engine\AutomationTool\Logs\C+Program+Files+Epic+Games+UE_5.4\UBA-Test-Win64-Shipping.txtUATHelper: Packaging (Windows): No target name was specified on the command-line.UATHelper: Packaging (Windows): Took 0.30s to run dotnet.exe, ExitCode=6UATHelper: Packaging (Windows): UnrealBuildTool failed. See log for more details. (C:\Users\user\AppData\Roaming\Unreal Engine\AutomationTool\Logs\C+Program+Files+Epic+Games+UE_5.4\UBA-Test-Win64-Shipping.txt)UATHelper: Packaging (Windows): AutomationTool executed for 0h 0m 2sUATHelper: Packaging (Windows): AutomationTool exiting with ExitCode=6 (6)UATHelper: Packaging (Windows): BUILD FAILEDPackagingResults: Error: Unknown Error 패키징이 안되는데 무슨 문제일까요???
-
미해결코드로 배우는 React 19 with 스프링부트 API서버
자꾸만 이런식으로 에러가나는데 이유점 알려주세요 ㅠㅠㅠ
살려주세요 선생님..ㅠ
-
해결됨한 번에 끝내는 자바스크립트: 바닐라 자바스크립트로 SPA 개발까지
TabBar.js 오류가 자꾸 발생하는데 무슨이유인지 모르겠습니다;;
전체 사진 처음 화면은 로딩 되서 잘나오는데 펭귄이나 다른탭을 클릭하면 아래와 같은 오류가 나오는데 TabBar.js onclick 함수가 아니라는데;; 왜이런건지 함수가 맞는데 아래에 제가 작성한 코드 입니다 검토 좀 부탁드립니다.^^;;TabBar.jsexport default function TabBar({ $app, initialState, onClick }) { // TabBar 클래스를 생성합니다. 초기값과 클릭 이벤트를 받습니다. this.state = initialState; // 초기값 설정 this.onClick = onClick; // 클릭 이벤트 설정 this.$target = document.createElement("div"); // 새로운 div 요소를 생성합니다. this.$target.className = "tab-bar"; // div 요소에 클래스 이름을 추가합니다. $app.appendChild(this.$target); // $app 요소에 div 요소를 추가합니다. this.template = () => { let temp = `<div id="all">전체</div><div id="penguin">펭귄</div> <div id ="koala">코알라</div><div id ="panda">판다</div>`; // 전체 탭을 추가합니다. return temp; // temp를 반환합니다. }; this.render = () => { // 렌더링 함수 this.$target.innerHTML = this.template(); // div 요소의 innerHTML을 template 함수의 반환값으로 설정합니다. let $currentTab = document.getElementById(this.state); // 현재 탭을 선택합니다. // $currentTab ? ($currentTab.className = "clicked") : ""; // 현재 탭이 존재하면 clicked 클래스를 추가합니다. 없으면 변화없음. $currentTab && ($currentTab.className = "clicked"); // && 연산자를 사용하여 현재 탭이 존재하면 clicked 클래스를 추가합니다. const $tabBar = this.$target.querySelectorAll("div"); // 모든 div 요소를 tabBar 요소에 담아온다. $tabBar.forEach((elm) => { elm.addEventListener("click", () => { // 각 div 요소에 클릭 이벤트 리스너를 추가합니다. this.onClick(elm.id); // 클릭한 div 요소의 id를 onClick 함수에 전달합니다. }); }); }; this.setState = (newState) => { // state를 변경하는 함수 this.state = newState; // state를 새로 받은 newState로 업데이트합니다. this.render(); // state가 변경되면 렌더링 함수를 다시 호출하여 화면을 업데이트합니다. }; this.render(); // 렌더링 함수를 호출합니다. } App.jsimport TabBar from "./components/TabBar.js"; // TabBar.js 파일을 불러옵니다. import Content from "./components/Content.js"; // Content.js 파일을 불러옵니다. import { request } from "./components/api.js"; // api.js 파일을 불러옵니다. export default function App($app) { // App 생성자 함수를 생성합니다. // $app은 App 컴포넌트가 렌더링될 DOM 요소입니다. this.state = { //state 초기값 설정 currentTab: "all", // 탭 초기값 설정 tabbar 컴포넌트에 전달할 현재 탭 데이터 photos: [], // 사진 초기값 설정 content 컴포넌트에 전달할 사진 데이터 }; const tabbar = new TabBar({ $app, // App 컴포넌트가 렌더링될 DOM 요소를 전달합니다. initialState: "", // 초기값 설정 oncClick: async (name) => { // 클릭 이벤트 설정 변경값을 currentTab에 저장 this.setState({ // 클릭한 탭의 데이터를 state에 저장합니다. ...this.State, // 기존 state를 복사합니다. 스프레드 연산자 currentTab: name, // 클릭한 탭의 이름을 currentTab에 저장합니다. photos: await request(name === "all" ? "" : name), // 클릭한 탭의 새로운 사진을 request 이름으로 함수를 불러와 저장합니다. // request 함수는 비동기 함수로 async await를 사용하여 데이터를 받아옵니다. }); }, }); const content = new Content({ $app, // App 컴포넌트가 렌더링될 DOM 요소를 전달합니다. initialState: [], // 초기값 설정 }); this.setState = (newState) => { // 업데이트 값을 newState로 받습니다. this.state = newState; // state를 새로 받은 newState로 업데이트합니다. tabbar.setState(this.state.currentTab); // tabbar 컴포넌트에 state를 전달합니다. content.setState(this.state.photos); // content 컴포넌트에 state를 전달합니다. }; const init = async () => { //웹페이지가 로드되면 실행되는 함수 try { const initialPhotos = await request(); // request 함수를 불러와 initialPhotos에 저장합니다. this.setState({ // state를 initialPhotos로 업데이트합니다. ...this.state, // 기존 state를 복사합니다. 스프레드 연산자 photos: initialPhotos, // initialPhotos를 photos에 저장합니다. }); } catch (err) { console.log(err); } }; init(); // 웹애플리케이션이 실행될때 init 함수를 실행합니다. } index.jsimport App from "../src/App.js"; const $app = document.getElementById("app"); new App($app); api.jsconst API_URL = "https://animal-api-two.vercel.app"; // 이미지 url을 변수에 저장 // const $content = document.querySelector("div.content"); //(api 불러오는 코드만 남겨놓기 위해 삭제제) // let template = []; // (api 불러오는 코드만 남겨놓기 위해 삭제제) //API export const request = async (name) => { const res = await fetch(name ? `${API_URL}/${name}` : API_URL); // fetch 함수를 사용하여 API_URL을 호출합니다. name이 있으면 name을 호출합니다. 없으면 API_URL을 호출합니다. try { if (res) { let data = await res.json(); return data.photos; } } catch (err) { console.log(err); } }; index.html<!DOCTYPE html> <head> <title>Animal Album</title> <meta charset="UTF-8" /> <link rel="stylesheet" href="../project2/src/style.css" /> <script type="module" src="../project2/src/index.js" defer></script> </head> <body> <div id="app"> <!-- TAB BAR --> <!-- CONTENT --> </div> </body> content.jsexport default function Content({ $app, initialState }) { this.state = initialState; this.$target = document.createElement("div"); this.$target.className = "Content"; $app.appendChild(this.$target); this.template = () => { let temp = []; if (this.state) { this.state.forEach((elm) => { temp += `<img src="${elm.url}"></img>`; }); } return temp; }; this.render = () => { this.$target.innerHTML = this.template(); }; this.setState = (newState) => { this.state = newState; this.render(); }; this.render(); } 콘솔 오류코드 TabBar.js:26 Uncaught TypeError: this.onClick is not a function at HTMLDivElement.<anonymous> (TabBar.js:26:14)
-
미해결3D 모델링 입문을 위한 라이노(Rhino) '꿀팁' Part.1
백그라운드 색상이 화이트로 되어있는데 변경하고 싶습니다!
라이노 백그라운드 색상이 화이트로 되어있어서 개체를 그릴때 선이 잘 안보입니다. 강사님처럼 회색 색상으로 어떻게 설정하는지 궁금합니다!.
-
미해결Three.js로 시작하는 3D 인터랙티브 웹
GLF파일 export한 후에 three.js에서 렌더링 된 모델에는 텍스처 적용이 안되어있습니다..!
블렌더에서는 텍스처가 적용된걸로 보이는데, export한 후에 three.js에서 렌더링 하면 텍스처가 적용되지 않은 모델로 보입니다 ㅜㅜ제공된 ilbuni.glb 파일을 사용하면 문제가 없는걸로 보아 코드 문제는 아니고, 블렌더에서 뭔가 잘못된거 같은데 이유를 모르겠습니다..! 아시는분들 답변부탁드립니다!! 익스포트 설정
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
3-I 로직 질문있습니다
안녕하십니까 큰돌님 !강사님 코드의 로직이수빈이가 해당 정점에 3초에 오고 동생이 5초에 와도 종료된다. 인데궁금한게 있습니다.동생이 더 빨리 오고 수빈이가 늦게 오는 상황이 생길 수 있는 거 같은데(동생이 3초에 오고 수빈이가 5초에 온다)만약에 위의 상황이 가능해도 저때는 continue만 될 뿐이지, 로직을 종료하는 if문에는 걸리지 않아서 종료가 안 되는게 맞는 거죠 ??
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
6-J 질문드립니다.
https://www.acmicpc.net/source/share/d3badefb105540ecba6f33175becc56c해당 코드에서 hi = 1e12로 바꾸니 정답처리가 됩니다.그리고 큰돌님 코드에서 max_n을 대략 1e17로 바꾸니 오답이 되는 것을 확인했습니다. 왜 크기가 더 커진다해서 오답이 되는지 궁금합니다.
-
미해결김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
오타 있습니다
강의 자료 : 8. 생산자 소비자 문제1.pdf43페이지큐가 가득 찾을 때 -> 큐가 가득 찼을 때
-
해결됨스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판
@Value 추가 시 에러 발생
학습 관련 질문을 최대한 상세히 남겨주세요!고민 과정도 같이 나열해주셔도 좋습니다.먼저 유사한 질문이 있었는지 검색해보세요.인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.좋아요 수 구현 부분 강의를 듣고 따라하던 도중 문제가 생겼습니다.ArticleLikeCount의 엔티티에서 version에 @Version을 붙이고 난 후, 테이블의 값을 모두 삭제하고 나서 테스트를 돌리면 에러가 발생합니다. 계속해서..Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect):위 에러가 계속 발생하네요.테스트는 like 메서드를 실행했습니다.이상하게도 강사님 코드로는 정상 작동이 되어서, 그대로 복사해서 붙여넣기로 가져와서 돌려보면 안되네요.테이블에 데이터가 이미 존재하면 그때부터는 정상적으로 되는 것 같은데, 테이블이 비어있으면 에러가 발생합니다 ㅜㅜ혹시라도 확인하실 수 있도록 제 프로젝트 파일을 압축해서 올려놓은 링크 공유하겠습니다. ㅜㅜhttps://drive.google.com/file/d/1H9UR9UXZhgmBH-XrXoXPc2-dgrixF7b-/view?usp=drive_link
-
미해결이득우의 언리얼 프로그래밍 Part4 - 게임플레이 어빌리티 시스템
콤보 애니메이션 몽타주의 MontageJumpToSection에 대하여
안녕하세요. 하나의 콤보 애니메이션 몽타주에서 섹션으로 점프하는 방식으로 강의 내용이 진행되고 있는데요. 강의 프로젝트 재확인하는 느낌으로 개인 프로젝트를 조금씩 진행하고 있는 중 콤보 공격을 넣기 위해 강의 내용따라 애니메이션 몽타주를 만들었습니다. JumpToSection 을 사용하게 되면 애님 몽타주 내부에서 해당 지점으로 바로 점프해버리다보니 점프 직전 프레임과 이후 프레임간의 모션 차이가 클 경우 상당히 눈에 띄더라구요. 그래서 각 콤보 공격의 단계를 개별 애니메이션 몽타주로 제작하고 다음 콤보 입력시 개별 애니메이션 몽타주 재생을 해봤는데 이 경우는 애니메이션 블렌딩이 되어 자연스럽게 이어지는것 처럼 보였습니다. 여기서 질문인데, JumpToSection 이 직전/직후 프레임간의 애니메이션 블렌딩이 불가능하다면 실제 프로젝트에서는 어떤 상황에서 사용하게 되는지 궁금합니다. 감사합니다.
-
미해결[2024 업데이트] UX/UI 시작하기 : Figma 입문 (Inflearn Original)
툴바가 캔버스 하단 중앙에 있는데 강의화면에서 보이는 것처럼 상단 중앙으로 이동할 수는 없나요
툴바가 캔버스 하단 중앙에 있는데 강의화면에서 보이는 것처럼 상단 중앙으로 이동할 수는 없나요
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
java -jar jpashop-0.0.1-SNAPSHOT.jar 예외발생
20분 47초경에서 정체중입니다.위와같은 오류가 계속 발생중입니다.위는 project structure입니다인텔리제이에서 그냥실행했을떄는 잘 작동합니다.
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
java -jar hello-spring-0.0.1-SNAPSHOT.jar 까지 가는 경로 질문
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 현재 cmd에서C:\Users\choiminseok>cd studyC:\Users\choiminseok\study>cd hello-springC:\Users\choiminseok\study\hello-spring>gradlew이렇게 쳐서 build successful이 나왔고C:\Users\choiminseok\study\hello-spring>gradlew build이렇게 입력해서마찬가지로 build successful이 나왔습니다.이제 여기서java -jar hello-spring-0.0.1-SNAPSHOT.jar이런게 보이는 쪽으로 가야하는데 뭘 입력하면 되나요?강사님은 ls -arlth를 입력해 뭔가 나오는데저는 ls를 입력하면 'ls'은(는) 내부 또는 외부 명령, 실행할 수 있는 프로그램, 또는 배치 파일이 아닙니다.라고 나옵니다. 해결방법 알려주세요참고로 윈도우입니다.
-
해결됨실리콘밸리 엔지니어가 가르치는 파이썬 장고 웹프로그래밍
Logging 질문
LOGGING ={ 'version':1, 'disable_existing_loggers':False, 'handlers':{ 'file':{ 'level':'DEBUG', 'class':'logging.FileHandler', 'filename':os.path.join(BASE_DIR, 'logs/django.log'), 'formatter':'json', }, 'console':{ 'class':'logging.StreamHandler', 'formatter':'json', }, }, 'formatters':{ 'json':{ 'class': 'pythonjsonlogger.jsonlogger.JsonFormatter', 'format': '%(asctime)s %(levelname)s %(name)s %(message)s', }, }, 'root':{ 'handlers':['file','console'], 'level':'DEBUG', }, 'loggers':{ 'django':{ 'handlers':['file','console'], 'level': 'DEBUG', 'propagate':False, }, }, runserver 하는 순간 {"asctime": "2025-02-14 20:41:50,823", "levelname": "DEBUG", "name": "django.utils.autoreload", "message": "File C:\\Users\\moon\\miniforge3\\envs\\workout\\Lib\\site-packages\\PIL\\__init__.py first seen with mtime 1739352505.781736"} 이런 변경한 적 없는 것들이 자동리로드 되면서 콘솔에 계속 올라옵니다. 이유가 궁금합니다.
-
미해결[웹 개발 풀스택 코스] 부트스트랩 기초
db.json 문제 해결후 조회버튼을 누르면 테이블이 형성이 안됨
브라우저에서 조회버튼을 누르면 아무 반응이 없어요 어떻게 해야 하나요
-
미해결[웹 개발 풀스택 코스] 부트스트랩 기초
cd json-server와 json-server --watch db.json 오류
C:\Project\Bootstrap>cd json-serverThe system cannot find the path specified.C:\Project\Bootstrap>json-server --watch db.json--watch/-w can be omitted, JSON Server 1+ watches for file changes by defaultFile db.json not found이렇게 두가지 명령어에 오류가 뜹니다 어떻게 해야 하나요?
-
해결됨스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판
프론트에서 페이지네이션 count 계산법 질문드립니다!
페이지 번호 공식은 다음 버튼 활성화 유무만 판단하는 거고 이전 버튼 유무는 프론트에서'만' 제어하는 걸까요? 프론트에서도 페이지 번호 공식을 알고 있는걸까요? 2:50초 11~20번 페이지에 있을때프론트에서 계산한값(601) == 백엔드에서 내려준 값(601)=> 같으므로 '다음' 버튼 활성화 프론트에서 계산한값(601) == 백엔드에서 내려준 값(500)=> 601 미만 이므로 '다음' 버튼 비활성화 (강의 넘 재밌어요. 게임 하는거 보다 재밌다..)