묻고 답해요
160만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
- 
      
        
    해결됨스프링 시큐리티 OAuth2키클록 서버 종료후 realm 삭제안녕하세요.키클록 종료 후 재기동 하니 만들었던 realm, client, user 가 삭제됩니다. 원래 그런건가요..? 
- 
      
        
    미해결따라하며 배우는 리액트 테스트 [2023.11 업데이트]이미지가 안보인다 하셔서 다시 질문드립니다.안녕하세요 선생님!말씀 주신대로 7-6강 보고 왔지만... 혼자서는 문제의 원인 파악이 힘들어서 다시 재질문 드립니다 ㅠㅠ로그를 확인해 보니 calculate.test.js에서 Fail이 발생되고 있지만, 원인 파악은 아직 못한 상태입니다 ㅠㅠ 레포지토리 주소도 같이 올려드립니다! PASS src/pages/OrderPage/tests/Type.test.js (7.469 s) FAIL src/pages/OrderPage/tests/Calculate.test.js (7.513 s) ● Console console.error Warning: An update to Type inside a test was not wrapped in act(...). When testing, code that causes React state updates should be wrapped into act(...): act(() => { /* fire events that update state */ }); /* assert on the output */ This ensures that you're testing the behavior the user would see in the browser. Learn more at https://reactjs.org/link/wrap-tests-with-act at fn (D:\www\react-shop-test\src\pages\OrderPage\Type.js:8:17) 17 | try { 18 | const response = await axios.get(`http://localhost:5000/${orderType}`); > 19 | setItems(response.data); | ^ 20 | } catch (err) { 21 | setError(true); 22 | } at printWarning (node_modules/react-dom/cjs/react-dom.development.js:86:30) at error (node_modules/react-dom/cjs/react-dom.development.js:60:7) at warnIfUpdatesNotWrappedWithActDEV (node_modules/react-dom/cjs/react-dom.development.js:27589:9) at scheduleUpdateOnFiber (node_modules/react-dom/cjs/react-dom.development.js:25508:5) at setItems (node_modules/react-dom/cjs/react-dom.development.js:17527:7) at loadItems (src/pages/OrderPage/Type.js:19:7) ● update product's total when products change expect(element).toHaveTextContent() Expected element to have text content: 0 Received: 총 가격: 6 | 7 | const productsTotal = screen.getByText("총 가격:", { exact: false }); > 8 | expect(productsTotal).toHaveTextContent("0"); | ^ 9 | 10 | // const americaInput = await screen.findByRole("spinbutton", { 11 | // name: "America", at Object.<anonymous> (src/pages/OrderPage/tests/Calculate.test.js:8:25) PASS src/App.test.js (7.781 s) ● Console console.error Warning: An update to Type inside a test was not wrapped in act(...). When testing, code that causes React state updates should be wrapped into act(...): act(() => { /* fire events that update state */ }); /* assert on the output */ This ensures that you're testing the behavior the user would see in the browser. Learn more at https://reactjs.org/link/wrap-tests-with-act at fn (D:\www\react-shop-test\src\pages\OrderPage\Type.js:8:17) at div at div at OrderPage at div at App 17 | try { 18 | const response = await axios.get(`http://localhost:5000/${orderType}`); > 19 | setItems(response.data); | ^ 20 | } catch (err) { 21 | setError(true); 22 | } at printWarning (node_modules/react-dom/cjs/react-dom.development.js:86:30) at error (node_modules/react-dom/cjs/react-dom.development.js:60:7) at warnIfUpdatesNotWrappedWithActDEV (node_modules/react-dom/cjs/react-dom.development.js:27589:9) at scheduleUpdateOnFiber (node_modules/react-dom/cjs/react-dom.development.js:25508:5) at setItems (node_modules/react-dom/cjs/react-dom.development.js:17527:7) at loadItems (src/pages/OrderPage/Type.js:19:7) console.error Warning: An update to Type inside a test was not wrapped in act(...). When testing, code that causes React state updates should be wrapped into act(...): act(() => { /* fire events that update state */ }); /* assert on the output */ This ensures that you're testing the behavior the user would see in the browser. Learn more at https://reactjs.org/link/wrap-tests-with-act at fn (D:\www\react-shop-test\src\pages\OrderPage\Type.js:8:17) at div at div at div at OrderPage at div at App 17 | try { 18 | const response = await axios.get(`http://localhost:5000/${orderType}`); > 19 | setItems(response.data); | ^ 20 | } catch (err) { 21 | setError(true); 22 | } at printWarning (node_modules/react-dom/cjs/react-dom.development.js:86:30) at error (node_modules/react-dom/cjs/react-dom.development.js:60:7) at warnIfUpdatesNotWrappedWithActDEV (node_modules/react-dom/cjs/react-dom.development.js:27589:9) at scheduleUpdateOnFiber (node_modules/react-dom/cjs/react-dom.development.js:25508:5) at setItems (node_modules/react-dom/cjs/react-dom.development.js:17527:7) at loadItems (src/pages/OrderPage/Type.js:19:7) Test Suites: 1 failed, 2 passed, 3 total Tests: 1 failed, 4 passed, 5 total Snapshots: 0 total Time: 13.137 s Ran all test suites related to changed files.👇 기존 질문https://www.inflearn.com/questions/985742 
- 
      
        
    미해결[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!섹션23 미세먼지앱 postman강의대로 다운로드받고, 작성했는데SEND를 눌러도 그대로이고MAP값들을 불러오지를 못하네요 
- 
      
        
    미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트못 푼 문제에 대하여안녕하세요, 큰돌 강사님아직 1주차밖에 진도가 나가지않아, 큰 어려움이 없이 문제를 풀어나가고 있습니다. 그러나 나중에 난이도가 올라가서 풀지 못할정도의 어려운 문제를 만나면 어떻게 하는 것이 좋을지 궁금합니다.저는 최대 30분 ~ 1시간 텀으로 문제를 풀고 이 시간이 초과된다면 강의를 통해 해설을 본다음 다음날 다시 풀어보고 못 푼 문제를 체크하여 강의를 완강후 다시 풀어볼려합니다. 이 방법에 대해서는 어떻게 생각하는지 또는 더 좋은 추천하는 방법이 있는지 궁금합니다.p.s) 좋은 강의 감사합니다. 
- 
      
        
    미해결Practical Testing: 실용적인 테스트 가이드강의 내용 블로그 포스팅 문의 드립니다.안녕하세요 강사님, 다름이 아니라 강의 내용을 블로그(벨로그) 글로 정리해서 기록해도 될까 여쭤봅니다. 코드, 내용을 사용하고 싶은데 허락해주실까요? ㅠ 출처글을 항상 남기겠습니다. 
- 
      
        
    미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버TSharedPtr<T>이 thread safe한지에 대한 질문안녕하세요. 강의 감사히 들었습니다.TSharedPtr<T>이 thread safe한지에 대해 고민해보던 중 질문이 생겨 글 작성하였습니다. 관련된 다른 질문들을 보아도 의문이 해결되지 않아서요. class User { public: changeWraight(WraightRef wraight) { wraight_ = wraight; } WraightRef wraight() { return wraiht_; } private: WraightRef wraight_; }; thread 1User *user = Server::getUser(userId); user->changeWraitht(wraight); thread 2User *user = Server::getUser(userId); WraightRef wraightRef = user->wraight(); 위 상황에서 thread 2 가 실행되어 복사생성자가 호출되었고, 복사생성자에서 Set함수가 호출되어 아래 조건문 까지 검사하고 thread1이 실행되었다고 가정한다면 WraightRef를 사용하여도 복사시 문제가 발생할 수 있을 것이라고 생각했는데요. 제가 잘못생각한 것이 있다면 피드백 부탁드리고 싶습니다.inline void Set(T* ptr) { _ptr = ptr; if (ptr) { ptr->AddRef(); } } 
- 
      
        
    미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part9: MMO 컨텐츠 구현 (DB연동 + 대형 구조 + 라이브 준비)17분 30초 부분 질문드립니다.안녕하세요 선생님, 항상 좋은 강의 감사드립니다.다름이 아니라 강의 17분 30초경에S_CreatePlayer newPlayer = new S_CreatePlayer() { Player = new LobbyPlayerInfo() };newPlayer.Player.MergeFrom(lobbyPlayer);부분에서 질문드립니다.여기에서S_CreatePlayer newPlayer = new S_CreatePlayer() { Player = lobbyPlayer}; 와 같이 위에서 만들어 놓은 lobbyPlayer를 바로 사용하여 코드를 작성하지 않고, 새롭게 LobbyPlayerInfo 객체를 생성해 MergeFrom(LobbyPlayerInfo)를 하는 방식으로 해야 하는지가 궁금합니다. 
- 
      
        
    해결됨[게임 프로그래머 도약반] DirectX11 입문SwapChain에 대해서 질문이 있습니다SwapChain에 대해서 제대로 알고있는게 맞는지 개념 확인좀 부탁드립니다.SwapChain 사용 이유SwapChaine을 생성할시 프론트버퍼와 백버퍼가 생성이되고 프론트버퍼에 있는 데이터가 모니터로 복사가되고 백버퍼에 다음 장면을 렌더링 하는식으로 돌아가게 된다.이렇게 하는 이유는 버퍼에서 모니터로의 비트 데이터 복사 속도가 매우 느리기 때문에 버퍼를 하나만 쓰다간 모니터에 모든 버퍼의 데이터가 복사되기 전에 먼저 다음 프레임의 비트 데이터가 버퍼에 갱신되어서 모니터에 이전 프레임의 비트 데이터가 복사되던 도중 갑자기 갱신된 현재 프레임의 비트 데이터 복사될수도 있기 때문이다. SwapChain Present 동작 원리비트 데이터를 전부 화면에 복사한 프론트버퍼를 가리키는 포인터와 현재 프레임의 비트 데이터로 갱신된 백버퍼의 포인터가 서로 가리키고 있는 버퍼를 교체하면서 화면 복사와 다음 프레임 데이터 갱신을 이어나가게 한다. SwapChain을 만들때 BufferCount를 1개로 설정해주던데 이거는 백버퍼의 개수이고 프론트 버퍼는 개수를 지정해줄 수 없고 자동으로 한개만 생성된다 
- 
      
        
    미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술RequestMappingHandlerAdapter가 V1,V2,V3의 핸들러들을 모두 처리할 수 있는 이유[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]SpringMemberControllerV1,V2,V3에서 newForm, save, members메서드들이 RequestMappingHandlerMapping에 핸들러 매핑정보로 등록되어있고,RequestMappingHandlerAdapter 가 V1,V2,V3들의 모든 매서드들을 처리하는 것으로 이해하였습니다. 여기서SpringMemberControllerV1, V2, V3의 newForm, save, members메서드들은 인자값과 반환값이 다릅니다.V1,V2인자: HttpServletRequest , HttpServletResponse반환: ModelAndView V3인자: RequestParam, Model반환: String하나의 어뎁터로 인자값과 반환값이 다른 핸들러들를 모두 처리할 수 있는 점이 이해가 잘 되지 않았습니다.RequestMappingHandlerAdapter 를 살펴보았을때, HttpServletRequest , HttpServletResponse 를 인자로 받고 ModelAndView 를 반환하는 handleInternal 함수만 찾을 수 있었습니다.위의 3가지 이유로 `RequestMappingHandlerAdapter V1,V2 버전을 처리하는 것은 이해하였지만, V3를 처리할 수 있는 이유가 무엇인지 궁금합니다. 제가 추측하는 이유는 다음과 같습니다.RequestMappingHandlerAdapter 가 V1,V2를 처리하고 V3를 따로 처리하는 어뎁터가 있나요?RequestMappingHandlerAdapter 가 V1,V2,V3를 모두 처리할 수 있게하는 애노테이션의 기능이 있나요? 
- 
      
        
    해결됨[코드캠프] 부트캠프에서 만든 고농축 백엔드 코스안녕하세요!훈훈한 Javascript섹션4-for문과 while문마지막 예제에서let i = 0; while(i < 10) { console.log(i) i = i + 1 }결과 10이 출력되는건 반복 횟수이고 0~9 까지 출력이 맞는거 같은데 확인 부탁드립니다! 
- 
      
        
    해결됨Flutter 앱 개발 기초5강 파이어베이스 연결하기, 업데이트로 바뀌엇어요. 아시는분?5 강 파이어베이스 연결 되시는분 귀뜸좀 해주세요 .막혀서 진행 못하고 있습니다. 5강 파이어베이스 연결하기 . 안드로이드로 하는데 달라요 .app> build.gradle 에러throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.")gradle>build.gradle 파이어베이스 연결하는게 사이트와 다릅니다.다른 연결하는 법을 알려 주세요 .android 하고 새로이 바뀐건 또 flutter가 업데이트되었습니다. 
- 
      
        
    미해결따라하며 배우는 노드, 리액트 시리즈 - 레딧 사이트 만들기(NextJS)(Pages Router)서버 배포 후 생기는 보안오류 문제이렇게 pm2로 client, server를 둘다 실행 시켰고, 맨 처음 client만 실행했을 때는 포트 80번이 3000번으로 잘 우회되어 보여졌는데 서버 실행 부분을 따라하면서 pm2로 서버를 실행시킨 후 부터 보안오류가 떠서 사이트 접근이 막혔습니다..이러한 보안 오류가 떴습니다. 이후, EC2 인스턴스 퍼블릭 IPv4 DNS주소로 들어가기만 하면 저런 경고 사이트가 뜹니다.ㅠㅠ어떻게 해결할 수 있을까요?..아래에 작성한 코드 첨부 했습니다. server package.json 파일의 scripts 부분 코드 입니다. "scripts": { "start": "ts-node src/server.ts", "start:production": "env-cmd -f .env.production ts-node ./src/server.ts", "dev": "env-cmd -f .env.development nodemon --exec ts-node ./src/server.ts", "test": "echo \"Error: no test specified\" && exit 1", "typeorm": "typeorm-ts-node-commonjs" }, server의 .env.production 파일입니다. (token시크릿 키는 제외시킨 부분)PORT=4000 NODE_ENV=production APP_URL=http://ec2-54-81-196-163.compute-1.amazonaws.com:4000 ORIGIN=http://ec2-54-81-196-163.compute-1.amazonaws.com 추가적으로, pdf 파일에는 백엔드 서버 실행 다음 부분에 백엔드 서버와 데이터 베이스 도커를 통해 연결하기 파트가 있던데 해당 부분은 영상 제작에서 제외시키신 건가요? 아니면 배포 영상 쪽 말고 다른 영상에서 찍으신거면 어떤 영상에서 확인 가능한지 알려주시면 감사하겠습니다..! 
- 
      
        
    미해결생산성을 향상시키는 스프링부트 기반의 API 템플릿 프로젝트 구현OAuthAttributes 클래스의 toMemberEntity의 파라미터로 memberType이 들어가야하는 이유가 궁금합니다.@Getter @Builder public class OAuthAttributes { private String name; private String email; private String profile; private MemberType memberType; public Member toMemberEntity(MemberType memberType, Role role){ return Member.builder() .memberName(name) .email(email) .profile(profile) .memberType(memberType) .role(role) .build(); } }강사님 안녕하세요 강의 잘 듣고 있습니다.다름이 아니라 소셜로그인(4) 소셜 로그인 구조 설계 강의를 듣던 중 toMemberEntity 메소드에 대해 궁금한 점이 있어서 질문 드리게 되었습니다. OauthAttributes 클래스 같은 경우 필드로 memberType을가지고 있는데 메소드 파라미터로 따로 memberType을 받아야 하는 특별한 상황이 있는지 궁금합니다. 감사합니다 :) 
- 
      
        
    해결됨[코드캠프] 부트캠프에서 만든 고농축 프론트엔드 코스섹션1 : 시작은 프리캠프 final 과제 타이머 부분 JS 문의프리캠프 final sign up 과제 중 타이머 부분 관련 문의드립니다.자바스크립트 이용하여 '인증번호 전송' 버튼을 누르면 타이머가 동작하는 부분까지는 구현하였습니다.이후 타이머 동작 중, 인증 완료 버튼을 누르면 "인증 완료" 팝업이 뜨고타이머가 종료되며 "인증 완료" 텍스트로 표시되도록 하고싶은데 팝업이 뜨고 텍스트는 변경되나 바로 다시 타이머가 동작합니다.(consle.log 를 찍어보면 인증완료 버튼 클릭 시 '인증완료' 로그가 찍히나, 타이머는 그대로 동작하고 00초가 되면 '시간 초과' 로그도 찍힙니다.)else 뒤에 넣는 것이 아니라 아예 따로 빼서 onclick 함수를 새로 만들어야 할까요? 답변 부탁드립니다! 아래는 제가 작성한 코드입니다.// 타이머 작동 & 인증버튼 활성화 // let isStarted = false; let auth = () => { if(isStarted === false) { // 버튼 클릭 시 인증번호 부여 및 타이머 작동 // isStarted = true document.getElementById("b2").disabled = false document.getElementById("b2").style.color = "white" document.getElementById("b2").style.border = "1px solid #0068ff" document.getElementById("b2").style.backgroundColor = "#0068ff" document.getElementById("b2").style.cursor = "pointer" const token = String(Math.floor(Math.random() * 1000000)).padStart(6, "0") document.getElementById("target").innerText = token let time = 10 let timer timer = setInterval(function() { if(time>=0) { let min = Math.floor( time / 60 ) let sec = String(time % 60).padStart(2, "0") document.getElementById("timer").innerText = min + ":" + sec time = time - 1 } else { document.getElementById("b2").disabled = true document.getElementById("b2").style.color = "#d2d2d2" document.getElementById("b2").style.border = "1px solid #d2d2d2" document.getElementById("b2").style.backgroundColor = "transparent" document.getElementById("b2").style.cursor = "default" document.getElementById("timer").innerText = "3" + ":" + "00" document.getElementById("target").innerText = "000000" console.log("시간 초과") isStarted = false clearInterval(timer) } },1000) } else { // 타이머가 작동중일 때 인증 확인 클릭하면 // alert("인증완료") document.getElementById("b2").disabled = true document.getElementById("b2").style.cursor = "default" document.getElementById("timer").innerText = "인증완료" isStarted = true clearInterval(timer) console.log("인증 완료") } } 
- 
      
        
    미해결JSP 웹 쇼핑몰 프로그래밍 기본 과정(JSP WEB Programming)게시판날짜데이터에 시간이 나올려면 어케 해야되나요?게시판날짜데이터에 시간이 나올려면 어케 해야되나요?jstl쓰고 java format 써도 잘 안나오는데요.. 
- 
      
        
    해결됨[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!토큰 재발급 관련 질문입니다.안녕하세요. 기초를 수강하고, 중급 강의 절반 정도 수강한 학생입니다. 우선, 기초와 중급 모두 좋은 퀄리티의 영상과 강의를 올려주셔서 정말 감사드린다는 말씀 드립니다!현재 강의와는 별개로 따로 진행하고 있는 프로젝트에서 한 페이지에 여러 api 호출을 진행하는 과정에서 access 토큰이 만료되었을 때의 상황에서 문제를 겪고 있습니다.예를 들어, 3개의 api를 호출하여 FutureBuilder 3개 혹은 Future.wait으로 3개의 데이터를 가져오는 상황입니다.우선, 모든 요청에 access 토큰 만료를 백엔드에서 계산하고 있습니다. 만료가 되었을 때, 프론트로 401이 던져지고 onError에서 이를 캐치하여 재발급 api를 호출하고 다시 토큰을 갱신하여 secure storage에 저장하고 있습니다.(백엔드에서는 access 토큰이 만료되어 재발급 요청을 받으면, 유효한 refresh 토큰인지 확인하여 유효시 두 토큰 모두 갱신하여 재발급해줍니다.)이 과정에서 3개의 모든 api 요청에 대한 재발급을 시도하여 3번의 재발급 요청이 이루어지게 됩니다. 그리고나서 3개의 모든 api 요청에 다시 resolve를 하게 되는데, 이러한 순서의 로직이 맞는 부분인지 궁금합니다.어려움을 겪고 있는 부분에는 3개의 요청 중 2개의 요청은 요청된 시간이 밀리세컨드 단위로 다르지만, 재발급 된 토큰이 동일해 요청이 성공적으로 진행됩니다. (5개라면 2개가 성공할 때가 있고, 3개가 성공할 때가 있고 시시각각 변합니다..) 하지만, 남은 api 요청은 앞선 요청에서 이미 새롭게 토큰이 발급되었기 때문에 갱신되지 않은 토큰으로 요청을 보내게 되고, 서버에서는 토큰이 새로 갱신되었기 때문에 토큰이 유효하지 않다는 오류가 발생하게 됩니다. 여러 레퍼런스를 참고하여 QueuedInterceptorsWrapper 및 일부 코드를 추가하여 임시로 해결해놓은 상태이지만, 근본적인 원인 해결이 되지 않았다고 생각하여 질문드립니다.(여전히 5개의 요청이라면, 5개의 재발급 요청을 보내는 상황입니다...)아직 남은 강의를 모두 들어보지 않아 해결하지 못하는 문제일 수 있지만, 미리 질문부터 드리는 점 양해 드립니다,,ㅠ서둘러 완강해보도록 하겠습니다!감사합니다 :) 
- 
      
        
    해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편MappedSuperClass 사용 기준학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]MappedSuperclass도 결국 상속 받는거고이전 예시의 Item도 결국 값, 이름만 상속해서 결국 공통정보를 사용하는거 같은데어느상황에서 MappedSuperclass를 사용하고 어떨 때 상속을 받아 사용하는지 궁금합니다.MappedSuperclass를 사용하면 결국 디비는 다르다는게 결국은 단일테이블 전략으로 상속하는거랑 비슷한거 아닌가요?? 
- 
      
        
    해결됨[게임 프로그래머 도약반] DirectX11 입문ConstantBuffer에 대해서 질문이 있습니다.안녕하세요 ConstantBuffer에 관련되어 강의를 듣는도중 질문이 3가지 정도 생겼습니다.VertexBuffer에 있는 내용을 직접 변경해서 다시 랜더링하기 위해선 처음 설정할때 GPU에서 초기화하고 읽기 전용으로만 생성했기때문에 VertexBuffer를 다시 생성하고 GPU로 다시 복사해줘야 한다고 말하셨는데 GPU에서 읽기, 쓰기 둘다 가능한 D3D11_USAGE_DEFAULT 타입으로 생성해준 뒤 GPU내부에 VertexBuffer를 다시 생성할 필요가 없이 쓰기 작업만 해주면 안되는 건가요? 1번 경우가 어떤 이유때문에 안될것이지만 왜 저렇게 하면 안될까 이유가 궁금해서 쓴 것이고 VertexBuffer를 ReadOnly로 설정하고 Offset을 더해주어 모델링이 움직일때 이러한 개념으로 생각해도 되나요?우선 현재 렌더링 되고있는 Enemy 100마리가 존재하고 100마리 전부의 위치를 각기 다르게 수정해준다고 가정.2-1. VertexBuffer를 통해 위치 정보를 직접 수정하는 경우첫 번재, 현재 VRAM에 100마리 만큼의 모델링 정보가 있는 상태에서 100마리 만큼의 위치변환 정보만 전송해주는 방법.두 번째, CPU가 GPU로 정보를 보내줄때 아예 그냥 100마리만큼의 모델링 정보 + 100마리 만큼의 위치변환 정보를 전부 전달해주는 방법.이 있는데 첫 번째 경우로 한다하면 VRAM에 100마리 만큼의 모델링 정보를 감당할 메모리가 존재하지 않아 불가능하고 두 번째 경우로 한다면 보내주는 용량이 너무 많아 전송 시간이 너무 오래 걸리기 때문에 힘들다라고 이해했습니다.그래서 제가 이해해본 강사님께서 말한 방식이 2-2 방법인데2-2. ConstantBuffer를 통해 위치 정보를 간접 수정하는 경우CPU에서 GPU로 정보를 보내줄때 100마리의 위치 정보만 보내주고 VRAM에 존재하는 하나의 모델링에 100개의 각기 다른 위치 정보를 더해주어 렌더링함으로써 C++에서 l-value 하나에 여러 상수를 더하면서 여러 r-value를 쓰듯이 사용하는 방법.이 경우를 통해 1개의 모델링과 100개의 위치변화 정봅만 있으면 100개의 Enemy를 렌더링 할 수 있다 라고 이해했습니다 혹시 이게 맞나요? 마지막 질문입니다 Update 함수에서 memcpy를 사용해서 subResource.pData에 들어온 데이터를 통해 constantBuffer의 상수 데이터를 변경시킨다고 알고 있는데 이 함수 내용에선 직접적으로 constantBuffer에 subResource.pData의 데이터를 할당하는 부분이 없는데 어디서 할당이 되는 건가요? 혹시 몰라서 subResource.pData와 constantBuffer.Get()의 포인터 정보도 찍어봤는데 서로 다른 곳이였어서 deviceContext에서 자동으로 알아서 전달해주는 건가요?제가 궁금한게 생기면 못 넘어가는 성격이라 질문이 길어서 죄송합니다. 
- 
      
        
    해결됨Next.js 시작하기(feat. 지도 서비스 개발)상태관리 질문 있습니다!안녕하세요 용주님swr 대신에 React-query랑 Recoil로 상태관리를 하고 있는데, map에 대한 data를 setMapInfo에 저장하고 있고, Markers에서 mapInfo에 대한 값을 useRecoilValue로 가져오고 있는 상황입니다. const [mapInfo, setMapInfo] = useRecoilState(mapState) const initializeMap = () => { const mapOptions = { center: new window.naver.maps.LatLng(...initialCenter), zoom: initialZoom, minZoom: 9, scaleContorl: false, mapDataControl: false, logoControlOptions: { position: naver.maps.Position.BOTTOM_LEFT, }, } let map = new window.naver.maps.Map(mapId, mapOptions) mapRef.current = map setMapInfo(map) } 그런데 계속 아래와 같이 Type error가 발생하고 있는 상황입니다. 어떤 문제 때문에 발생하는지 알 수 있을까요? 수업과 무관한 질문이여서 죄송합니다! ㅜ참고로 @types/navermaps : 3.6.5 버전입니다. 
- 
      
        
    해결됨[신규 개정판] 이것이 진짜 크롤링이다 - 기본편페이지 반복문 오류아래와 같이 1페이지까지는 제대로 출력이 되나 2페이지 이후로는 뉴스 제목과 링크가 가져와지지 않아요.왜 이런 오류가 발생하는 건가요.?? 
