묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
spring webflux 와 spring data jpa Transaction 사용 시 문제
토이프로젝트를 하다 어쩌다 보니 spring webflux를 사용하게 되고 spring data jpa 는 reactive 환경에서 사용하지 못한다는 것을 모른 채 개발하다가...@SpringBootTest 에서 @Transactional 을 쓴 테스트에서 롤백이 되지 않는 현상을 발견했습니다.. TRACE 로 설정해 두고 실행시켜본 결과...```2024-01-11T00:54:00.058+09:00 INFO 18764 --- [ Test worker] c.s.o.s.StockMarketDataServiceTest : Started StockMarketDataServiceTest in 10.371 seconds (process running for 11.483)2024-01-11T00:54:00.124+09:00 DEBUG 18764 --- [ Test worker] o.s.orm.jpa.JpaTransactionManager : Creating new transaction with name [com.stock.oppenheimer.service.StockMarketDataServiceTest.testAddByStockName]: PROPAGATION_REQUIRED,ISOLATION_DEFAULT2024-01-11T00:54:00.125+09:00 DEBUG 18764 --- [ Test worker] o.s.orm.jpa.JpaTransactionManager : Opened new EntityManager [SessionImpl(2129901484<open>)] for JPA transaction2024-01-11T00:54:00.132+09:00 DEBUG 18764 --- [ Test worker] o.s.orm.jpa.JpaTransactionManager : Exposing JPA transaction as JDBC [org.springframework.orm.jpa.vendor.HibernateJpaDialect$HibernateConnectionHandle@7b5f886d]2024-01-11T00:54:00.606+09:00 DEBUG 18764 --- [ Test worker] o.s.orm.jpa.JpaTransactionManager : Found thread-bound EntityManager [SessionImpl(2129901484<open>)] for JPA transaction2024-01-11T00:54:00.606+09:00 DEBUG 18764 --- [ Test worker] o.s.orm.jpa.JpaTransactionManager : Participating in existing transaction2024-01-11T00:54:00.606+09:00 TRACE 18764 --- [ Test worker] o.s.t.i.TransactionInterceptor : Getting transaction for [com.stock.oppenheimer.service.StockMarketFacadeService.addStockMarketData]2024-01-11T00:54:00.607+09:00 DEBUG 18764 --- [ Test worker] o.s.orm.jpa.JpaTransactionManager : Found thread-bound EntityManager [SessionImpl(2129901484<open>)] for JPA transaction2024-01-11T00:54:00.607+09:00 DEBUG 18764 --- [ Test worker] o.s.orm.jpa.JpaTransactionManager : Participating in existing transaction2024-01-11T00:54:00.607+09:00 TRACE 18764 --- [ Test worker] o.s.t.i.TransactionInterceptor : Getting transaction for [com.stock.oppenheimer.service.StockDataService.addStockData]2024-01-11T00:54:00.628+09:00 TRACE 18764 --- [ Test worker] o.s.t.i.TransactionInterceptor : Completing transaction for [com.stock.oppenheimer.service.StockDataService.addStockData]2024-01-11T00:54:00.629+09:00 TRACE 18764 --- [ Test worker] o.s.t.i.TransactionInterceptor : Completing transaction for [com.stock.oppenheimer.service.StockMarketFacadeService.addStockMarketData]2024-01-11T00:54:02.705+09:00 DEBUG 18764 --- [ctor-http-nio-2] o.s.orm.jpa.JpaTransactionManager : Creating new transaction with name [org.springframework.data.jpa.repository.support.SimpleJpaRepository.save]: PROPAGATION_REQUIRED,ISOLATION_DEFAULT2024-01-11T00:54:02.706+09:00 DEBUG 18764 --- [ctor-http-nio-2] o.s.orm.jpa.JpaTransactionManager : Opened new EntityManager [SessionImpl(576234319<open>)] for JPA transaction2024-01-11T00:54:02.706+09:00 DEBUG 18764 --- [ctor-http-nio-2] o.s.orm.jpa.JpaTransactionManager : Exposing JPA transaction as JDBC [org.springframework.orm.jpa.vendor.HibernateJpaDialect$HibernateConnectionHandle@183cb66b]2024-01-11T00:54:02.706+09:00 TRACE 18764 --- [ctor-http-nio-2] o.s.t.i.TransactionInterceptor : Getting transaction for [org.springframework.data.jpa.repository.support.SimpleJpaRepository.save]2024-01-11T00:54:02.749+09:00 TRACE 18764 --- [ctor-http-nio-2] o.s.t.i.TransactionInterceptor : Completing transaction for [org.springframework.data.jpa.repository.support.SimpleJpaRepository.save]2024-01-11T00:54:02.749+09:00 DEBUG 18764 --- [ctor-http-nio-2] o.s.orm.jpa.JpaTransactionManager : Initiating transaction commit2024-01-11T00:54:02.749+09:00 DEBUG 18764 --- [ctor-http-nio-2] o.s.orm.jpa.JpaTransactionManager : Committing JPA transaction on EntityManager [SessionImpl(576234319<open>)]2024-01-11T00:54:02.758+09:00 DEBUG 18764 --- [ctor-http-nio-2] o.s.orm.jpa.JpaTransactionManager : Closing JPA EntityManager [SessionImpl(576234319<open>)] after transaction2024-01-11T00:54:02.759+09:00 DEBUG 18764 --- [ctor-http-nio-2] o.s.orm.jpa.JpaTransactionManager : Creating new transaction with name [com.stock.oppenheimer.service.MarketDataService.fetchMarketData]: PROPAGATION_REQUIRED,ISOLATION_DEFAULT2024-01-11T00:54:02.759+09:00 DEBUG 18764 --- [ctor-http-nio-2] o.s.orm.jpa.JpaTransactionManager : Opened new EntityManager [SessionImpl(222446599<open>)] for JPA transaction2024-01-11T00:54:02.759+09:00 DEBUG 18764 --- [ctor-http-nio-2] o.s.orm.jpa.JpaTransactionManager : Exposing JPA transaction as JDBC [org.springframework.orm.jpa.vendor.HibernateJpaDialect$HibernateConnectionHandle@7a4f5e33]2024-01-11T00:54:02.759+09:00 TRACE 18764 --- [ctor-http-nio-2] o.s.t.i.TransactionInterceptor : Getting transaction for [com.stock.oppenheimer.service.MarketDataService.fetchMarketData]2024-01-11T00:54:02.760+09:00 TRACE 18764 --- [ctor-http-nio-2] o.s.t.i.TransactionInterceptor : Completing transaction for [com.stock.oppenheimer.service.MarketDataService.fetchMarketData]2024-01-11T00:54:02.761+09:00 DEBUG 18764 --- [ctor-http-nio-2] o.s.orm.jpa.JpaTransactionManager : Initiating transaction commit2024-01-11T00:54:02.761+09:00 DEBUG 18764 --- [ctor-http-nio-2] o.s.orm.jpa.JpaTransactionManager : Committing JPA transaction on EntityManager [SessionImpl(222446599<open>)]2024-01-11T00:54:02.761+09:00 DEBUG 18764 --- [ctor-http-nio-2] o.s.orm.jpa.JpaTransactionManager : Closing JPA EntityManager [SessionImpl(222446599<open>)] after transaction2024-01-11T00:54:03.536+09:00 DEBUG 18764 --- [ctor-http-nio-2] o.s.orm.jpa.JpaTransactionManager : Creating new transaction with name [org.springframework.data.jpa.repository.support.SimpleJpaRepository.save]: PROPAGATION_REQUIRED,ISOLATION_DEFAULT2024-01-11T00:54:03.537+09:00 DEBUG 18764 --- [ctor-http-nio-2] o.s.orm.jpa.JpaTransactionManager : Opened new EntityManager [SessionImpl(1744980953<open>)] for JPA transaction2024-01-11T00:54:03.537+09:00 DEBUG 18764 --- [ctor-http-nio-2] o.s.orm.jpa.JpaTransactionManager : Exposing JPA transaction as JDBC [org.springframework.orm.jpa.vendor.HibernateJpaDialect$HibernateConnectionHandle@364f6c3d]2024-01-11T00:54:03.537+09:00 TRACE 18764 --- [ctor-http-nio-2] o.s.t.i.TransactionInterceptor : Getting transaction for [org.springframework.data.jpa.repository.support.SimpleJpaRepository.save]2024-01-11T00:54:03.546+09:00 TRACE 18764 --- [ctor-http-nio-2] o.s.t.i.TransactionInterceptor : Completing transaction for [org.springframework.data.jpa.repository.support.SimpleJpaRepository.save]2024-01-11T00:54:03.546+09:00 DEBUG 18764 --- [ctor-http-nio-2] o.s.orm.jpa.JpaTransactionManager : Initiating transaction commit```이러한 상황을 경험하게 되었습니다.2024-01-11T00:54:02.706+09:00 DEBUG 18764 --- [ctor-http-nio-2] o.s.orm.jpa.JpaTransactionManager : Opened new EntityManager [SessionImpl(576234319<open>)] for JPA transaction2024-01-11T00:54:02.759+09:00 DEBUG 18764 --- [ctor-http-nio-2] o.s.orm.jpa.JpaTransactionManager : Opened new EntityManager [SessionImpl(222446599<open>)] for JPA transaction2024-01-11T00:54:03.537+09:00 DEBUG 18764 --- [ctor-http-nio-2] o.s.orm.jpa.JpaTransactionManager : Opened new EntityManager [SessionImpl(1744980953<open>)] for JPA transaction기존에 쓰이던 엔티티매니저가 없어지고 계속 새로운 엔티티 매니저가 오픈이 되고 있었습니다. 2024-01-11T02:01:18.229+09:00 DEBUG 25524 --- [ Test worker] o.s.orm.jpa.JpaTransactionManager : Rolling back JPA transaction on EntityManager [SessionImpl(1495319789<open>)]하지만 마지막에 롤백 되는 엔티티메니저는 [Test worker thread] 에서 소환한 엔티티매니저 단 하나였습니다. 해당 부분을 소환하는 코드는 이렇습니다.. @Transactional public Flux<MarketData> saveMarketData(MktDataDTO marketDataDTO, StockData savedStockData) { MarketData marketData = conversionService.convert(marketDataDTO, MarketData.class); marketData.setStockData(savedStockData); marketDataRepository.save(marketData); return Flux.just(marketData); } 골이 당겨 오네요 ㅜㅜㅜ..r2dbc 로 마이그레이션을 하지 않고 transaction 설정을 잘 이용해서 이 상황을 해결할 방법이 있을지 한번 여쭤봅니다.코드 전문은 kimseunghyun-kr/oppenheimer at VolumeProfile (github.com)여기 있습니다..
-
미해결스프링 DB 1편 - 데이터 접근 핵심 원리
@Test void connection() { Connection connection = DBConnectionUtil.getConnection(); assertThat(connection).isNotNull(); }
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.H2 DB 연결확인후 테스트 코드 package hello.jdbc.connection; import lombok.extern.slf4j.Slf4j; import org.junit.jupiter.api.Test; import java.sql.Connection; import static org.assertj.core.api.Assertions.assertThat; @Slf4j class DBConnectionUtilTest { @Test void connection() { Connection connection = DBConnectionUtil.getConnection(); assertThat(connection).isNotNull(); } }실행시.무한 러닝 응답없음 터미널 창 상태mone@moneui-MacBookAir bin % ./h2.sh [14.589s][warning][os,thread] Failed to start thread "Unknown thread" - pthread_create failed (EAGAIN) for attributes: stacksize: 2048k, guardsize: 16k, detached.[14.590s][warning][os,thread] Failed to start the native thread for java.lang.Thread "H2 TCP Server (tcp://localhost:9092) thread-2006"Exception in thread "H2 TCP Server (tcp://localhost:9092)" java.lang.OutOfMemoryError: unable to create native thread: possibly out of memory or process/resource limits reachedat java.base/java.lang.Thread.start0(Native Method)at java.base/java.lang.Thread.start(Thread.java:798)at org.h2.server.TcpServer.listen(TcpServer.java:273)at org.h2.tools.Server.run(Server.java:647)at java.base/java.lang.Thread.run(Thread.java:829)6시간 삽집...
-
해결됨게임 수학의 이해
책 159페이지 벡터 함수
여기서 왜 벡터를 입출력으로 사용하는 선형성을 가지는 함수가 (ax, by)로 설계되는게 아니라 (ax + by, cx + dy)로 설계되나요?벡터는 (x, y) 형태로 알고 있는데 갑자기 왜 x와 y를 더하는 지 모르겠어요
-
미해결Flutter로 SNS 앱 만들기
provider등록중 에러 발생 되었어요.
(사진)
-
해결됨[보안] Wazuh+ELK(SIEM)를 활용한 위협헌팅(Threat Hunting) 시스템 구축 및 운영실습 (기초)
local_rules.xml 설정했는데 "Microsoft Office Product Spawning Windows Shell" 로만 뜹니다
<!-- Rules from https://github.com/Neo23x0/sigma/tree/master/rules/windows/sysmon @smtszk updated by @nissy34 --> <!-- Sysmon Wazuh Rules version 1.0--> <group name="local,syscheck,"> <!-- Rule for ZEROMINI_RANSOM_NOTE.txt --> <rule id="100001" level="10"> <decoded_as>json</decoded_as> <field name="syscheck.path">>/ZEROMINI_RANSOM_NOTE.txt</field> <description>ZEROMINI_RANSOM_NOTE.txt file detected.</description> </rule> <!-- Rule for .koyange extension --> <rule id="100002" level="10"> <decoded_as>json</decoded_as> <field name="syscheck.path">\.koyange$</field> <description>File with .koyange extension detected.</description> </rule> </group> <group name="sysmon,sysmon_process-anomalies,"> <rule id="300001" level="13"> <if_group>sysmon_event1</if_group> <field name="win.eventdata.Image">calc.exe</field> <description>Calc process started (possible ransomware simulation)</description> </rule> <rule id="300002" level="13"> <if_group>sysmon_event1</if_group> <field name="win.eventdata.CommandLine">vssadmin delete shadows</field> <description>Shadow copy deletion command detected (possible ransomware simulation)</description> </rule> <rule id="300003" level="13"> <if_group>sysmon_event1</if_group> <field name="win.eventdata.TargetFilename">ZEROMINI_RANSOM_NOTE.txt</field> <description>Ransom note detected (possible ransomware activity)</description> </rule> <rule id="300004" level="13"> <if_group>sysmon_event1</if_group> <field name="win.eventdata.parentImage">python.exe</field> <description>File with python extension detected (possible ransomware activity)</description> </rule> <rule id="300005" level="13"> <if_group>sysmon_event1</if_group> <field name="win.eventdata.CommandLine">ping 8.8.8.8</field> <description>Ping to 8.8.8.8 detected (possible network test or exfiltration attempt)</description> </rule> </group>이대로 추가 하고 재기동 후 정상작동 확인했는데Windows에서 실행하고 나서 wazuh에서 확인해보니 선생님처럼 "Ping to 8.8.8.8 detected"로 뜨는게 아니라 그냥 "Microsoft Office Product Spawning Windows Shell"로 뜨네요 ㅠㅠ 뭐가 문제일까요
-
해결됨한 입 크기로 잘라 먹는 리액트(React.js) : 기초부터 실전까지
한입리액트 섹션 6 - 페이지 구현 - 홈(/) 코드
// Home.js import { useState, useContext, useEffect } from "react"; import { DiaryStateContext } from "../App"; import MyButton from "./../components/MyButton"; import MyHeader from "./../components/MyHeader"; import DiaryList from "./../components/DiaryList"; const Home = () => { const diaryList = useContext(DiaryStateContext); const [data, setData] = useState([]); const [curDate, setCurDate] = useState(new Date()); const headText = `${curDate.getFullYear()}년 ${curDate.getMonth() + 1}월`; useEffect(() => { if (diaryList.length >= 1) { const firstDay = new Date( curDate.getFullYear(), curDate.getMonth(), 1 ).getTime(); const lastDay = new Date( curDate.getFullYear(), curDate.getMonth() + 1, 0 ).getTime(); setData( diaryList.filter((it) => firstDay <= it.date && it.date <= lastDay) ); } }, [diaryList, curDate]); useEffect(() => { console.log(data); }, [data]); const increaseMonth = () => { setCurDate( new Date(curDate.getFullYear(), curDate.getMonth() + 1, curDate.getDate()) ); }; const decreaseMonth = () => { setCurDate( new Date(curDate.getFullYear(), curDate.getMonth() - 1, curDate.getDate()) ); }; return ( <div> <MyHeader headText={headText} leftChild={<MyButton text={"<"} onClick={decreaseMonth} />} rightChild={<MyButton text={">"} onClick={increaseMonth} />} /> <DiaryList diaryList={data} /> </div> ); }; export default Home; // DiaryList.js import { useState } from "react"; const sortOptionList = [ { value: "latest", name: "최신순" }, { value: "oldest", name: "오래된 순" }, ]; const ControlMenu = ({ value, onChange, optionList }) => { return ( <select value={value} onChange={(e) => onChange(e.target.value)}> {optionList.map((it, idx) => ( <option key={idx} value={it.value}> {it.name} </option> ))} </select> ); }; const DiaryList = ({ diaryList }) => { const [sortType, setSortType] = useState("lastest"); return ( <div> <ControlMenu value={sortType} onChange={setSortType} optionList={sortOptionList} /> {diaryList.map((it) => ( <div key={it.id}>{it.content}</div> ))} </div> ); }; DiaryList.defaultProps = { diaryList: [], }; export default DiaryList; // App.js import React, { useReducer, useRef } from "react"; import "./App.css"; import { BrowserRouter, Routes, Route } from "react-router-dom"; import Home from "./pages/Home"; import New from "./pages/New"; import Edit from "./pages/Edit"; import Diary from "./pages/Diary"; const reducer = (state, action) => { let newState = []; switch (action.type) { case "INIT": { return action.data; } case "CREATE": { const newItem = { ...action.data, }; newState = [newItem, ...state]; break; } case "REMOVE": { newState = state.filter((it) => it.id !== action.targetId); break; } case "EDIT": { newState = state.map((it) => it.id === action.data.id ? { ...action.data } : it ); break; } default: return state; } return newState; }; export const DiaryStateContext = React.createContext(); export const DiaryDispatchContext = React.createContext(); const dummyData = [ { id: 1, emotion: 1, content: "오늘의일기 1번", date: 1704809815768, }, { id: 2, emotion: 2, content: "오늘의일기 2번", date: 1704809815769, }, { id: 3, emotion: 3, content: "오늘의일기 3번", date: 1704809815770, }, { id: 4, emotion: 4, content: "오늘의일기 4번", date: 1704809815771, }, { id: 5, emotion: 5, content: "오늘의일기 5번", date: 1704809815772, }, ]; function App() { const [data, dispatch] = useReducer(reducer, dummyData); console.log(new Date().getTime()); const dataId = useRef(0); // CREATE const onCreate = (date, content, emotion) => { dispatch({ type: "CREATE", data: { id: dataId.current, date: new Date(Date).getTime(), content, emotion, }, }); dataId.current += 1; }; // REMOVE const onRemove = (targetId) => { dispatch({ type: "REMOVE", targetId }); }; // EDIT const onEdit = (targetId, date, content, emotion) => { dispatch({ type: "EDIT", data: { id: targetId, date: new Date(Date).getTime(), content, emotion, }, }); }; return ( <DiaryStateContext.Provider value={data}> <DiaryDispatchContext.Provider value={{ onCreate, onEdit, onRemove }}> <BrowserRouter> <div className="App"> <Routes> <Route path="/" element={<Home />} /> <Route path="/new" element={<New />} /> <Route path="/edit" element={<Edit />} /> <Route path="/diary/:id" element={<Diary />} /> </Routes> </div> </BrowserRouter> </DiaryDispatchContext.Provider> </DiaryStateContext.Provider> ); } export default App; 해당 강의 23분경부터 계속 막힙니다. 아무리 정렬을 바꿔도 정렬이 변경되지 않아요. 따라친다고 따라쳤는데 어디가 틀린지 잘 모르겠습니다.
-
해결됨한 입 크기로 잘라 먹는 리액트(React.js) : 기초부터 실전까지
Console창 로그 문제
🚨 아래의 가이드라인을 꼭 읽고 질문을 올려주시기 바랍니다 🚨질문 하시기 전에 꼭 확인해주세요- 질문 전 구글에 먼저 검색해보세요 (답변을 기다리는 시간을 아낄 수 있습니다)- 코드에 오타가 없는지 면밀히 체크해보세요 (Date와 Data를 많이 헷갈리십니다)- 이전에 올린 질문에 달린 답변들에 꼭 반응해주세요 (질문에 대한 답변만 받으시고 쌩 가시면 속상해요 😢)질문 하실때 꼭 확인하세요- 제목만 보고도 무슨 문제가 있는지 대충 알 수 있도록 자세한 제목을 정해주세요 (단순 단어 X)- 질문의 배경정보를 제공해주세요 (이 문제가 언제 어떻게 발생했고 어디까지 시도해보셨는지)- 문제를 재현하도록 코드샌드박스나 깃허브 링크로 전달해주세요 (프로젝트 코드에서 문제가 발생할 경우)- 답변이 달렸다면 꼭 확인하고 반응을 남겨주세요- 강의의 몇 분 몇 초 관련 질문인지 알려주세요!- 서로 예의를 지키며 존중하는 문화를 만들어가요. - 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.=====================================1강 부터 듣고 있는데 CodeSandBox에서 1강이 끝나고 나와 있는 링크를 따라 CodeSandbox를 연결하였는데 console.log를 찍어도 아무런 반응도 없네요.어디가 문제인가요?
-
해결됨김영한의 실전 자바 - 기본편
static 메서드 질문
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. findPay 메서드가 static이면 이 안에서 호출되는 메서드는static이어야 하는것 아닌가요? equals 메서드는 String 메서드로 단지 option에만 쓰여서 해당되지 않는 건가용
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
em.clear() , em.close()
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]Team team = new Team();team.setName("TeamA");em.persist(team); em.flush();em.clear(); 1차 캐시 비우기em.close(); 영속성 컨텍스트 종료로 알고 있는데 System.out.println(" =============== ");System.out.println("team = " + team.getId());System.out.println(" =============== ");이 team.getId() 값이 null이 아니라 해당 id 값이 출력될 수 있는 이유가 persist 할떄 team id 필드에 초기화 되서 인건가요?
-
미해결이득우의 꼭 배워야하는 게임 알고리즘
알고리즘 확인(?) 질문
아직 아리까리해서 확인 질문드립니다 ㅜㅜ... 강의 예시 부분에서 주황색영역(AABB체크할 영역)에 포함되는 노드를 찾아 검사대상에 올리는데요. 깊이3 쿼드트리 노드 85개 전체를 돌면서 주황생영역이 포함된 노드를 찾게 되는 것일까요? 그런다음 검사대상인 노드만 돌면서 노드에 등록된 물체에 대해 AABB충돌체크를 진행 하게 되는걸까요?
-
해결됨[게임 프로그래머 도약반] DirectX11 입문
LosdShaderFromFile 매개변수 string(2)
삼각형 띄우기 31분 쯤 나오는 LosdShaderFromFile함수 작성시에 저는 string 헤더 추가하라고 오류가 뜹니다. (물론 추가 하는게 문제는 아닌데,) 선생님께서 올려주신 파일을 보니 별도로 추가 되어있지 않아서요,,,, 궁금해서 올려봅니다(너무 하찮은 질문이지만...ㅜㅜ ) 근데 using namespace std; 는 이미 pch에 저도 추가되어 있습니다...ㅠㅠㅠ선생님 파일을 받아서 열어보아도 저와 같이 오류가 뜹니다. 저는 현재 VS 2022를 쓰고 있습니다. VS 설정이나 기타 확장도구, 템플릿 등의 문제일까요? ㅜㅜ
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
실행(F9)을 하면 자꾸 응답없음이 뜹니다.
sasm 삭제하고 다시깔아봐도 헬로월드 실행이 안되네요.. 무슨 문제일가요? 자꾸 응답없음이 뜹니다.
-
해결됨HTML+CSS+JS 포트폴리오 실전 퍼블리싱(시즌1)
툴팁을 요소의 정중앙에 위치시키기 질문
안녕하세요.실전 퍼블리싱 파트1 강의 중 마우스오버 시 툴팁 나타나게 하는 부분 듣고 있는데요, span 태그의 transform 속성을 이용해서 툴팁이 아이콘의 너비에 상관없이 아이콘의 정중앙에 오게 하는 방법이 이해가 되지 않아 질문드립니다.강의에 보면 left: 50%; transform: translateX(-50%);위와 같이 속성을 부여하면 된다고 말씀하셨는데, translateX 속성은 span 태그의 현재 위치를 기준으로 위치를 바꾸는 것이라 이게 왜 아이콘의 중앙에 툴팁을 위치시킬 수 있는지 잘 이해가 되지 않습니다.추가적인 설명 해주시면 감사하겠습니다!
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
주문 내역 존재 시 에러발생
안녕하세요주문 내역이 없을 시 화면이 출력 되는데요값이 1개라도 존재할 경우 오류가 발생합니다.ChatGTP 돌려본 결과"Unable to access property 'name' through getter method" 와 같이 item.member.name 에 getter을 이용하여 접근할 수 없다는 내용의 에러가 나옵니다.또, Lazy로딩에 관한 문제로 member.name에 접근할 수 없다는 에러도 보이길래 fetch조인 사용해도 문제가 발생합니다 pdf에 존재하는 findAllByString() 메소드를 그대로 덮어쓰고orderList.html까지 그대로 사용해도 문제가 발생합니다.아래는 /orders 접속 시 발생한 에러입니다r Error, status=500).An error happened during template parsing (template: "class path resource [templates/order/orderList.html]")org.thymeleaf.exceptions.TemplateInputException: An error happened during template parsing (template: "class path resource [templates/order/orderList.html]") at org.thymeleaf.templateparser.markup.AbstractMarkupTemplateParser.parse(AbstractMarkupTemplateParser.java:241) at org.thymeleaf.templateparser.markup.AbstractMarkupTemplateParser.parseStandalone(AbstractMarkupTemplateParser.java:100) at org.thymeleaf.engine.TemplateManager.parseAndProcess(TemplateManager.java:666) at org.thymeleaf.TemplateEngine.process(TemplateEngine.java:1103) at org.thymeleaf.TemplateEngine.process(TemplateEngine.java:1077) at org.thymeleaf.spring6.view.ThymeleafView.renderFragment(ThymeleafView.java:372) at org.thymeleaf.spring6.view.ThymeleafView.render(ThymeleafView.java:192) at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1431) at org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1167) at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1106) at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979) at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014) at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:903) at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:564) at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885) at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:205) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:482) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:340) at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:391) at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:896) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1744) at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.base/java.lang.Thread.run(Thread.java:833) Caused by: org.attoparser.ParseException: Exception evaluating SpringEL expression: "item.member.name" (template: "order/orderList" - line 42, col 21) at org.attoparser.MarkupParser.parseDocument(MarkupParser.java:393) at org.attoparser.MarkupParser.parse(MarkupParser.java:257) at org.thymeleaf.templateparser.markup.AbstractMarkupTemplateParser.parse(AbstractMarkupTemplateParser.java:230) ... 48 more Caused by: org.thymeleaf.exceptions.TemplateProcessingException: Exception evaluating SpringEL expression: "item.member.name" (template: "order/orderList" - line 42, col 21) at org.thymeleaf.spring6.expression.SPELVariableExpressionEvaluator.evaluate(SPELVariableExpressionEvaluator.java:292) at org.thymeleaf.standard.expression.VariableExpression.executeVariableExpression(VariableExpression.java:166) at org.thymeleaf.standard.expression.SimpleExpression.executeSimple(SimpleExpression.java:66) at org.thymeleaf.standard.expression.Expression.execute(Expression.java:109) at org.thymeleaf.standard.expression.Expression.execute(Expression.java:138) at org.thymeleaf.standard.processor.AbstractStandardExpressionAttributeTagProcessor.doProcess(AbstractStandardExpressionAttributeTagProcessor.java:144) at org.thymeleaf.processor.element.AbstractAttributeTagProcessor.doProcess(AbstractAttributeTagProcessor.java:74) at org.thymeleaf.processor.element.AbstractElementTagProcessor.process(AbstractElementTagProcessor.java:95) at org.thymeleaf.util.ProcessorConfigurationUtils$ElementTagProcessorWrapper.process(ProcessorConfigurationUtils.java:633) at org.thymeleaf.engine.ProcessorTemplateHandler.handleOpenElement(ProcessorTemplateHandler.java:1314) at org.thymeleaf.engine.OpenElementTag.beHandled(OpenElementTag.java:205) at org.thymeleaf.engine.Model.process(Model.java:282) at org.thymeleaf.engine.Model.process(Model.java:290) at org.thymeleaf.engine.IteratedGatheringModelProcessable.processIterationModel(IteratedGatheringModelProcessable.java:368) at org.thymeleaf.engine.IteratedGatheringModelProcessable.process(IteratedGatheringModelProcessable.java:222) at org.thymeleaf.engine.ProcessorTemplateHandler.handleCloseElement(ProcessorTemplateHandler.java:1640) at org.thymeleaf.engine.TemplateHandlerAdapterMarkupHandler.handleCloseElementEnd(TemplateHandlerAdapterMarkupHandler.java:388) at org.thymeleaf.templateparser.markup.InlinedOutputExpressionMarkupHandler$InlineMarkupAdapterPreProcessorHandler.handleCloseElementEnd(InlinedOutputExpressionMarkupHandler.java:322) at org.thymeleaf.standard.inline.OutputExpressionInlinePreProcessorHandler.handleCloseElementEnd(OutputExpressionInlinePreProcessorHandler.java:220) at org.thymeleaf.templateparser.markup.InlinedOutputExpressionMarkupHandler.handleCloseElementEnd(InlinedOutputExpressionMarkupHandler.java:164) at org.attoparser.HtmlElement.handleCloseElementEnd(HtmlElement.java:169) at org.attoparser.HtmlMarkupHandler.handleCloseElementEnd(HtmlMarkupHandler.java:412) at org.attoparser.MarkupEventProcessorHandler.handleCloseElementEnd(MarkupEventProcessorHandler.java:473) at org.attoparser.ParsingElementMarkupUtil.parseCloseElement(ParsingElementMarkupUtil.java:201) at org.attoparser.MarkupParser.parseBuffer(MarkupParser.java:725) at org.attoparser.MarkupParser.parseDocument(MarkupParser.java:301) ... 50 more Caused by: org.springframework.expression.spel.SpelEvaluationException: EL1021E: A problem occurred whilst attempting to access the property 'name': 'Unable to access property 'name' through getter method' at org.springframework.expression.spel.ast.PropertyOrFieldReference.readProperty(PropertyOrFieldReference.java:220) at org.springframework.expression.spel.ast.PropertyOrFieldReference.getValueInternal(PropertyOrFieldReference.java:111) at org.springframework.expression.spel.ast.PropertyOrFieldReference$AccessorLValue.getValue(PropertyOrFieldReference.java:416) at org.springframework.expression.spel.ast.CompoundExpression.getValueInternal(CompoundExpression.java:98) at org.springframework.expression.spel.ast.SpelNodeImpl.getValue(SpelNodeImpl.java:114) at org.springframework.expression.spel.standard.SpelExpression.getValue(SpelExpression.java:338) at org.thymeleaf.spring6.expression.SPELVariableExpressionEvaluator.evaluate(SPELVariableExpressionEvaluator.java:265) ... 75 more Caused by: org.springframework.expression.AccessException: Unable to access property 'name' through getter method at org.springframework.expression.spel.support.ReflectivePropertyAccessor$OptimalPropertyAccessor.read(ReflectivePropertyAccessor.java:698) at org.springframework.expression.spel.ast.PropertyOrFieldRefe
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
Test 오류...
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]코드 다 알맞게 치고 SpringDataJpaMemberRepository 테스트를 돌리니까 이렇게 오류가 나네요 ㅠㅠ 문제가 뭘까요?
-
해결됨[R을 R려줘] R 데이터 시각화
scirpt_v2_2
getwd() setwd("C:/Users/yun/Desktop/") #### 1. 인구 통계 처리 #### df_pop = read.csv("Population.csv") head(df_pop) df_pop[, "value"] = gsub(pattern = ",", replacement = "", df_pop$value) class(df_pop$value) df_pop[, "value"] = as.numeric(df_pop$value) head(df_pop) df_pop = df_pop[, c("name", "value")] head(df_pop) # colnames(df_pop) = c("country", "pop") head(df_pop, 2) #### 2. 백신 접종 데이터 처리 #### df = read.csv("country_vaccinations.csv") head(df, 2) df = df[, c("country", "iso_code", "date", "total_vaccinations", "vaccines")] head(df) colnames(df)[4] = "total" head nrow(df) df_agg = aggregate(data = df[, -5], total ~ ., FUN = "sum") #######? class(df_agg$date) df_agg[, "date"] = as.Date(df_agg$date) nrow(df_agg) head(df_agg) min(df_agg$date) max(df_agg$date) df_agg_unique = unique(df_agg[, c("iso_code", "date")]) #겹치는 항목 날리기 head(df_agg_unique) #가장최근값만 얻기(2021년도 백신접종데이터만 알면됐지, 2020년도는 알필요 없으니까) df_agg_unique = aggregate(data = df_agg_unique, date ~ iso_code, FUN = "max") head(df_agg_unique) library("dplyr") df_vac = left_join(df_agg_unique, df_agg, by = c("iso_code" = "iso_code", "date" = "date")) df_vac=df_vac[,c(3,2,1,4)] head(df_vac) #### 3. 세계 지도 데이터 처리 #### library("rnaturalearth") df = countries110 head(df, 2) library("ggplot2") ggplot() + geom_sf(data = df, color = "#000000", fill = "#FFFFFF") #### 4. 데이터 병합 및 시각화 #### head(df) df_map_id = data.frame(id = 0:(length(df$ISO_A3) - 1), iso = df$ISO_A3) head(df_map_id) length(unique(df_map_id$iso)) class(df_map_id$id) head(df, 2) df_map_id[, "id"] = as.character(df_map_id$id) df=df[,c("ISO_A3","geometry")] df_map_join = left_join(df, df_map_id, by = c("ISO_A3" = "iso")) head(df_map_join) ggplot(data = df_map_join, aes(fill = id)) + geom_sf(color = "#000000") + theme(legend.position = "none") df_map_join_vac = left_join(df_map_join, df_vac, by = c("ISO_A3" = "iso_code")) head(df_map_join_vac) ggplot(data = df_map_join_vac, aes(group = id, fill = total)) + geom_sf(color = "#000000") + theme_bw() + theme(legend.position = c(0.1, 0.35)) #### Quiz #### head(df_map_join_vac) df_vac_2 = left_join(df_map_join_vac, df_pop, by = c("country" = "country")) head(df_vac_2) df_vac_2[, "ratio"] = df_vac_2$total / df_vac_2$pop head(df_vac_2) ggplot(data = df_vac_2, aes(group = id, fill = ratio)) + geom_sf(color = "#000000") + theme_bw() + theme(legend.position = c(0.1, 0.35)) 올렸습니다. 도움부탁드립니다. 그리구 외국에서 돌아오시면 자료를 받아서 공공데이터시각화도 듣고싶습니다.아 그리고, (지금과 반대로, 지금은 백신접종률이 높을수록 색의 연해짐) ratio이 높을수록 색깔이 점점더 진한것이 보기에 더 효과적일것같아요. 그건 코드로 구현이 어렵겠죠..? 그리고 이 na결측치는 없애야되는게 맞죠?
-
미해결모든 개발자를 위한 HTTP 웹 기본 지식
3way handshaking 시점의 패킷들의 정보
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]강의 너무 잘 듣고 있는데 궁금한 부분이 생겼어요..실제로 소켓 라이브러리를 통해서 TCP/IP에서 가상연결 ?의 느낌으로 3Way HandShaking이 일어난다고 말씀 하셨는데그렇다면 1. 구글 서버와 연결 하기 위해서 실제로 TCP/IP 계층의 패킷들이 만들어져야 하는데 거기서 세그먼트는 전송데이터(HTTP 메세지)는 빠지고 출발지, 목적지의 IP,PORT 들만 가지고 만들어져서 아래계층으로 헤더들을 추가해서서버랑 connetion 이 되는건가요 ?좀 더 부가적으로 설명하자면 전송데이터(HTTP 메세지)만 빠진 데이터들이 예를 들어 다시 밑으로 전송계층 -> 인터넷계층 -> 네트워크 계층으로 하나씩 감싸져서 상대 서버에 도착 후 3Way HandShaking 이후 connetion 이후 다시 소켓이나 혹은 애플리케이션 계층으로 돌아 전송데이터(HTTP 메세지)를 가지고 다시 차례대로 계층으로 헤더들이 다시 추가되어서 실제 데이터가 전송되는 지 너무 궁금해요.. (전 먼저 Connetion을 위해 HTTP메세지 없이 캡슐화 해서 보내고, Connetion 이후 다시 역캡슐화로 윗 계층가서 헤더 추가하고 다시 캡슐화 하고 보내는 걸로 이해했어요)그렇다면 가상연결의 느낌이랑 다른 거 같아서.. 가상연결은 TCP/IP에서 소켓 라이브러리를 통해 바로 연결되는 느낌인데 이론상 물리계층으로 데이터가 전달될텐데 이게 가능할 거 같진 않아서 헷갈려요 ㅠㅠ
-
해결됨Do It! 장고+부트스트랩: 파이썬 웹개발의 정석
섹션 6-2 알림 내용 중 링크가 잘못되어 있네요.
안녕하세요섹션 6. 정적파일 (static files) & 미디어 파일 (media files) - 정적파일 관리하기 - 블로그 포스트 상세 페이지에 부트스트랩 적용하기 을 듣고 있습니다. 거기서 1:31 경, Bootstrap 관련 링크가 수정되었다고 알림이 뜨는데, 그 링크가 잘못되어있습니다. 그 링크를 이용하면, post list 를 카피하게 됩니다.Post detail을 이용하기 위해서는 아래 링크를 사용해야 합니다. https://github.com/StartBootstrap/startbootstrap-blog-post/tree/18e5cfdfb75bc7b06fbb8b04b7d957e0395fe8cc확인 후 수정 부탁드립니다.감사합니다.
-
미해결[개정3판] Node.js 교과서 - 기본부터 프로젝트 실습까지
혹시 제로초님 webstorm 세팅을 알 수 있을까요?
저번에 Unresolved variable 워닝이 뜬다고 했던 수강생입니다.저 워닝 안 뜨게 하려고 종일 구글링했는데도 해결 방법을 못 찾았습니다 ㅠㅠ제로초님 강의에서는 함수로 잘 인식하던데 혹시 수고롭지 않으시다면 webstorm 세팅을 알려주실 수 있나요?Settings에서 Languages & Frameworks => JavaScript => Libraries에 Node.js Core도 체크되어 있고 구글에서 하라는 건 다 해봤는데 안 되네요 ㅠㅠmodels/index.js에서 const sequelize = new Sequelize(~~); 에서 Sequelize도 constructor가 아닌 function으로 인식하네요따로 설정 안 하셨다면 어쩔 수 없지만 혹시 따로 세팅하신 게 기억이 나신다면 공유해주시면 감사하겠습니다
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
index.html이 webapp 아래에서도 welcom page로 잡히는 이유가 궁금합니다.
https://docs.spring.io/spring-boot/docs/2.3.1.RELEASE/reference/html/spring-boot-features.html#boot-features-spring-mvc-welcome-page 다음 링크를 읽어보면 SpringBoot의 정적 자원 접근을 위한 default 설정이 /static, /public, /resources 밑으로 되어있다고 나와있습니다.그런데 default 설정을 건든적이 없음에도 어떻게 webapp폴더 아래에 있는 index.html파일을 찾아내서 welcom page로 사용하는건지 궁금합니다.