묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
오류 원인을 찾기가 어렵네요.
안녕하세요.거의 하루종일 보고 있는 문젠데요.클라이언트에서 에코해줄 때 강사님은 OnRecvCompleted() 함수 안에서 인자로 받은 length가 아니라 sizeof send_buffer를 사용하고 계셔서 오류가 발생 안 했어요.인자로 받는 length를 해주면 프로그램 구동하고 나서 얼마 안돼서 주고받는 데이터가 영원히 증가합니다. 물론 ASSERT_CRASH가 있기 때문에 메모리 할당해주는 부분에서 결국 멈추긴 합니다.정확한 이유를 못 찾겠네요. 이리저리 중단점 찍어보는데, 한 가지 확실한 건 서버에서 WSASend() 해주고 클라에서 받을 때 갑자기 데이터 사이즈가 튑니다. 더미 클라에서 세션을 하나만 넣어줘도 재현돼요.이럴 때 비동기 + 멀티스레드는 정말 헬이네요. ProcessSend()로 들어오는 sendBytes가 갑자기 26, 52..이렇게 되어버립니다. GSendBufferManager에서 반환하는 메모리 위치는 문제가 없어요. 어느 순간 데이터를 미친 듯이 이어 붙입니다.위 이미지처럼 하나씩만 오고 가야 하는데(Hell, World!)어느 순간 아래 이미지처럼 확 늘어납니다.계속 누적돼요. 강사님 코드 거의 그대로입니다.WSASend() 동작이 중첩됐나까지 의심하게 되네요. 그러나 송신 큐 부분에 락 걸고 이후 코드는 스택 변수라 강사님과 동일하게 진행됩니다.void Session::RegisterSend() { _send_event.Init(); _send_event.owner = shared_from_this(); // 보낼 데이터를 send_event에 등록 // 레퍼런스 카운트 유지를 위해 SendEvent의 멤버변수를 이용한다 { WRITE_LOCK; while (false == _send_queue.empty()) { SharedSendBuffer send_buffer = _send_queue.front(); _send_queue.pop(); _send_event.send_buffers.push_back(send_buffer); } } xvector<WSABUF> wsabufs; wsabufs.reserve(_send_event.send_buffers.size()); for (SharedSendBuffer send_buffer : _send_event.send_buffers) { WSABUF wsabuf; wsabuf.buf = reinterpret_cast<char*>(send_buffer->Buffer()); wsabuf.len = static_cast<LONG>(send_buffer->WriteSize()); printf("wsabuf len: %d\n", wsabuf.len); wsabufs.push_back(wsabuf); } DWORD send_bytes = 0; int32 result = WSASend(_socket, wsabufs.data(), static_cast<DWORD>(wsabufs.size()), &send_bytes, 0, &_send_event, nullptr); int32 error = WSAGetLastError(); if (SOCKET_ERROR == result && error != WSA_IO_PENDING) { HandleError(error); // release ref _send_event.owner = nullptr; _send_event.send_buffers.clear(); _send_registered.store(false); return; } } 정상적인 에코 서버라면 주고 받는 데이터의 크기가 계속 일정해야 한다고 생각해서 테스트한 건데 고통의 시간을 겪고 있습니다..참고로 GameSession에서 OnRecv 재정의할 때 1회만 브로드캐스트 해주고 있습니다.int32 GameSession::OnRecvCompleted(BYTE* buffer, int32 length) { // temp echo printf("GameSession OnRecvCompleted len: %d\n", length); SharedSendBuffer send_buffer = g_send_buffer_manager->Open(4096); memcpy(send_buffer->Buffer(), buffer, length); send_buffer->Close(length); g_session_manager.Broadcast(send_buffer); return length; }
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
spring java 23설치했습니다.
제가 java기초강의에서 java23으로 공부했었는데이에따라 spring설치시 java23을 설치했습니다괜찮을까요??
-
미해결Vue3 완벽 마스터: 기초부터 실전까지 - "기본편"
npm vue 버전
안녕하세요npm install vue@3.1.9 로 설치하라고 하셨는데, > npm install vue@3.1.9 npm ERR! code ETARGET npm ERR! notarget No matching version found for vue@3.1.9. npm ERR! notarget In most cases you or one of your dependencies are requesting npm ERR! notarget a package version that doesn't exist.라고 나오고,npm view vue versions 에도 3.1.9버전이 없는데 그 다음 버전으로 보이는 3.2.0-beta.1 로 설치해도 될까요?
-
미해결[게임 프로그래머 도약반] DirectX11 입문
hlsl파일 컴파일
루키스님 항상 좋은 강의 감사합니다. 잘 듣고 있어요.궁금증이 생겼는데 shader파일은 두 가지의 빌드 방법이 있다는것은 알겠는데 설정 중에 특별하게 해준거라곤 main을 VS로 바꿔준 거 외에는 없는 것 같은데 어떻게 두 빌드 방법이 가능하게 되는건지 이해를 못해서 질문 남겼습니다
-
해결됨Axure RP 9,10 - 서비스 기획자를 위한 최적의 프로토타이핑 툴
(RP11) Forms에 있는 위젯들 크기 변경이 되질 않아요
안녕하세요, RP11 버전 사용하고 있습니다.라이브러리 위젯 사용하는데 'Forms'에 있는 리스트박스, 체크박스, 드롭리스트 등등의 위젯들이 크기 변경이 되질 않습니다.아래 드롭리스트 예시로 첨부드립니다.점표시 된 부분들을 늘리면 드롭박스 모양(V) 은 안 커지고,박스사이즈만 커지는데, 드롭박스 모양 자체를 키우려면 어떻게 해야할까요?
-
해결됨[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)
2회 기출유형(작업형2)
2회 기출유형(작업형2)에서 랜덤포레스트나 XGB에서 하이퍼파라미터 (max_depth)같은거 지정해서 성능 높여도되는걸까요?
-
해결됨새싹부터 시작하는 Unity 게임 개발
Game화면에서 캐릭터가 끊기듯 움직입니다.
섹션4 3D캐릭터 이동 구현까지 진행헸습니다. Scene에서는 아무 문제가 없는데 Game화면에서는 캐릭터가 끊기면서 움직입니다 카메라 문제 같은데 정확한 이유를 모르겠네요 ㅠ 영상에 있는 Lerp 까지 그대로 따라했습니다
-
미해결그림으로 쉽게 배우는 네트워크
스위치 포워딩
스위치는 처음부터 브로드 캐스팅 하지않고 포워딩으로 보내나요??
-
미해결Vue.js 완벽 가이드 - 실습과 리팩토링으로 배우는 실전 개념
깃허브 권한 요청 드립니다
인프런 아이디 : patagonia인프런 이메일 : libra10042@gmail.com깃헙 아이디 : libra10042@gmail.com깃헙 username : libra10042
-
미해결한 입 크기로 잘라 먹는 리액트(React.js) : 기초부터 실전까지
TodoList에서 checkBox 업데이트를 위한 onUpdate의 props전달?
TodoList에서 checkBox 업데이트를 위한 onUpdate의 props전달?에 대해서 질문이 있습니다 첫 번째, 부모 컴포넌트에서 자식 컴포넌트로 값(변수, 리스트, 함수 등)을 전달하는 것이 props인건지 햇갈립니다 두 번째, onUpdate의 구동방식은 이해되었습니다. 다만 app.jsx가 아니라 List.jsx에서 만들어도 되지 않나? 라는 의문점이 있습니다. 리렌더링 때문일까요? 아님 다른 이유가 있는건지 궁금합니다.
-
미해결파이썬/장고로 결제 시작하기 (Feat. 아임포트) - 기본편
웹훅 사용과 관련하여 질문 드립니다.
다이어그램을 면, 장고 서버에 네트워크 장애 등으로 인해 client에서 받은 콜백을 넘기지 못하는 경우 웹훅을 사용하는게 안정적이라 하셨는데,네트워크 장애로 아임포트에서 웹훅 연결이 안되는 경우 처리가 어떻게 되는지 알고 싶습니다.retry가 얼마나 되는지, 대기를 얼마나 하는지 등 웹훅을 이용한 메시지 전송 보장이 어떻게 되는지 질문 드립니다.만약, 웹훅의 100% 전송 보장이 안된다면 웹훅 또한 별도의 시나리오로 결과를 이중으로 확인 하도록 처리를 해야 하는 건지요? 실제 개발 하셨을 때에는 이 부분에 대해 어떻게 구현 하셨는지도 알고 싶습니다. 예를 들어 웹훅을 더 신뢰하는 것으로 가정한다면, 웹훅의 return을 기준으로 결과를 처리하고 일정 시간동안 타임아웃이 발생하면, 재결제를 시도하는 방식 등이 될거 같은데 실재로는 어떻게 구현이 되고 사용되는지 알고 싶습니다.
-
해결됨[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)
원핫인코딩하고 train에 대입하면 CLIENTNUM 컬럼이 사라집니다.
train = pd.get_dummies(train[cols]) test = pd.get_dummies(test[cols])하고나면 train과 test에 인코딩된 컬럼만 보여집니다.
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
실행문이 다르게 나옵니다.
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]8080도 뜨지않고 메인 코드를 실행한후 사이트에 들어가도 에러메세지가 나오지 않습니다. 아래 다르게 나오는 출력문입니다.오후 7:46:36: 실행 중...> Task :helpWelcome to Gradle 8.10.2.To run a build, run gradle <task> ...To see a list of available tasks, run gradle tasksTo see more detail about a task, run gradle help --task <task>To see a list of command-line options, run gradle --helpFor more detail on using Gradle, see https://docs.gradle.org/8.10.2/userguide/command_line_interface.htmlFor troubleshooting, visit https://help.gradle.orgBUILD SUCCESSFUL in 122ms1 actionable task: 1 executed오후 7:46:37: 실행이 완료되었습니다.
-
해결됨한 입 크기로 잘라먹는 Next.js(v15)
Next JS 14.2 public 폴더 미생성
15버전이 아닌 14.2버전으로 create-next-app을 진행했는데 public 폴더가 자동으로 생기지않습니다.15버전은 자동으로 생성이 되는데 14.2버전에는 생성되지 않는 이유가 있나요??
-
미해결BigQuery(SQL) 활용편(퍼널 분석, 리텐션 분석)
[빠짝스터디 2주차 과제] 윈도우 함수 연습 문제
강의 문제 1) user들의 다음 접속월과 다다음 접속월을 구하는 쿼리를 작성해주세요.-- 출제의도: 윈도우 함수(LEAD)를 사용하여 파티션을 나눠 데이터를 탐색할 수 있는가? SELECT user_id , visit_month AS visit_month_m0 , LEAD(visit_month) OVER (PARTITION BY user_id ORDER BY visit_month) AS visit_month_m1 , LEAD(visit_month, 2) OVER (PARTITION BY user_id ORDER BY visit_month) AS visit_month_m2 FROM advanced.analytics_function_01 ORDER BY user_id;강의 문제 2) user들의 다음 접속월과 다다음 접속월, 이전 접속월을 구하는 쿼리를 작성해주세요-- 출제의도: 윈도우 함수(LEAD)와 (LAG)을 함께 사용하여 파티션을 나눠 데이터를 탐색할 수 있는가? SELECT user_id , visit_month AS visit_month_m0 , LEAD(visit_month) OVER (PARTITION BY user_id ORDER BY visit_month) AS visit_month_m1 , LEAD(visit_month, 2) OVER (PARTITION BY user_id ORDER BY visit_month) AS visit_month_m2 , LAG(visit_month) OVER (PARTITION BY user_id ORDER BY visit_month) AS visit_month_p1 FROM advanced.analytics_function_01 ORDER BY user_id;강의 문제 3) Frame 설정을 활용한 윈도우 함수 사용SELECT order_id , order_date , user_id , amount , SUM(amount) OVER (ORDER BY order_date, order_id ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS amount_total , SUM(amount) OVER (ORDER BY order_date, order_id ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS cumulative_sum , SUM(amount) OVER (PARTITION BY user_id ORDER BY order_date, order_id ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS cumulative_sum_by_user , AVG(amount) OVER (ORDER BY order_date, order_id ROWS BETWEEN 5 PRECEDING AND 1 PRECEDING) AS last_5_orders_avg_amount FROM advanced.orders --QUALIFY last_5_orders_avg_amount >= 150 ORDER BY order_id;윈도우 함수 연습문제 1) 사용자별 쿼리를 실행한 총 횟수를 구하는 쿼리를 작성해주세요. 단, GROUP BY를 사용해서 집계하는 것이 아닌, query_logs의 데이터 우측에 새로운 컬럼을 만들어주세요. -- 출제의도: 윈도우 함수의 집계 함수 중 COUNT를 사용할 수 있는가? SELECT * , COUNT(user) OVER (PARTITION BY user) AS total_query_cnt FROM advanced.query_logs ORDER BY query_date, user;윈도우 함수 연습문제 2) 주차별로 팀 내에서 쿼리를 많이 실행한 수를 구한 후, 실행한 수를 활용해 랭킹을 구해주세요. 단, 랭킹이 1등인 사람만 결과가 보이도록 해주세요. -- 출제의도: GROUP BY와 윈도우 함수(순위)를 함께 사용할 수 있는가? SELECT * , RANK() OVER (PARTITION BY week_number, team ORDER BY query_cnt DESC) AS team_rank FROM (SELECT EXTRACT(WEEK FROM query_date) AS week_number , team , user , COUNT(user) AS query_cnt FROM advanced.query_logs GROUP BY ALL) QUALIFY team_rank = 1 ORDER BY week_number, team;윈도우 함수 연습문제 3) (2번 문제에서 사용한 주차별 쿼리 사용) 쿼리를 실행한 시점 기준, 1주 전에 쿼리 실행 수를 별도의 컬럼으로 확인할 수 있는 쿼리를 작성해주세요. -- 출제의도: GROUP BY와 윈도우 함수(LAG)를 함께 사용할 수 있는가? SELECT * , LAG(query_cnt) OVER (PARTITION BY user ORDER BY week_number) AS prev_week_query_count FROM (SELECT user , team , EXTRACT(WEEK FROM query_date) AS week_number , COUNT(user) AS query_cnt FROM advanced.query_logs GROUP BY ALL) ORDER BY user, week_number;윈도우 함수 연습문제 4) 시간 흐름에 따라, 일자별로 유저가 실행한 누적 쿼리 수를 작성해주세요. -- *FRAME의 DEFAULT 값: UNBOUNDED PRECEDING ~ CURRENT ROW -- 출제의도: GROUP BY와 윈도우 함수(SUM-누계합)를 함께 사용할 수 있는가? SELECT * , SUM(query_cnt) OVER (PARTITION BY user ORDER BY query_date) AS cumulative_query_count FROM (SELECT user , team , query_date , COUNT(user) AS query_cnt FROM advanced.query_logs GROUP BY ALL) ORDER BY user, query_date;윈도우 함수 연습문제 5) 다음 데이터는 주문 횟수를 나타낸 데이터입니다. 만약 주문 횟수가 없으면 NULL로 기록됩니다. 이런 데이터에서 NULL 값이라고 되어있는 부분을 바로 이전 날짜의 값으로 채워주는 쿼리를 작성해주세요. -- 출제의도: 윈도우 함수(LAST_VALUE)에서 IGNORE NULLS가 필요한 상황을 이해할 수 있는가? WITH raw_data AS( SELECT DATE '2024-05-01' AS date, 15 AS number_of_orders UNION ALL SELECT DATE '2024-05-02', 13 UNION ALL SELECT DATE '2024-05-03', NULL UNION ALL SELECT DATE '2024-05-04', 16 UNION ALL SELECT DATE '2024-05-05', NULL UNION ALL SELECT DATE '2024-05-06', 18 UNION ALL SELECT DATE '2024-05-07', 20 UNION ALL SELECT DATE '2024-05-08', NULL UNION ALL SELECT DATE '2024-05-09', 13 UNION ALL SELECT DATE '2024-05-10', 14 UNION ALL SELECT DATE '2024-05-11', NULL UNION ALL SELECT DATE '2024-05-12', NULL ) -- SELECT -- date -- , IFNULL(number_of_orders, LAG(number_of_orders) OVER (ORDER BY date)) AS number_of_orders -- FROM raw_data -- ORDER BY date; SELECT * , LAST_VALUE(number_of_orders IGNORE NULLS) OVER (ORDER BY date) AS number_of_orders FROM raw_data ORDER BY date;윈도우 함수 연습문제 6) 5번 문제에서 NULL을 채운 후, 2일 전 ~ 현재 데이터의 평균을 구하는 쿼리를 작성해주세요. -- 출제의도: 예외 값을 처리한 이후, 윈도우 함수로 이동 평균을 계산할 수 있는가? WITH raw_data AS( SELECT DATE '2024-05-01' AS date, 15 AS number_of_orders UNION ALL SELECT DATE '2024-05-02', 13 UNION ALL SELECT DATE '2024-05-03', NULL UNION ALL SELECT DATE '2024-05-04', 16 UNION ALL SELECT DATE '2024-05-05', NULL UNION ALL SELECT DATE '2024-05-06', 18 UNION ALL SELECT DATE '2024-05-07', 20 UNION ALL SELECT DATE '2024-05-08', NULL UNION ALL SELECT DATE '2024-05-09', 13 UNION ALL SELECT DATE '2024-05-10', 14 UNION ALL SELECT DATE '2024-05-11', NULL UNION ALL SELECT DATE '2024-05-12', NULL ) SELECT * , ROUND(AVG(number_of_orders) OVER (ORDER BY date ROWS BETWEEN 2 PRECEDING AND CURRENT ROW) , 1) AS moving_avg FROM( SELECT date , IFNULL(number_of_orders, LAG(number_of_orders) OVER (ORDER BY date)) AS number_of_orders FROM raw_data) ORDER BY date;윈도우 함수 연습문제 7) app_logs 테이블에서 Custom Session을 만들어주세요. 이전 이벤트 로그와 20초가 지나면 새로운 Session을 만들어 주세요. -- *Session은 숫자로(1,2,3…) 표시해도 됩니다. -- **2022-08-18일의 user_pseudo_id(1997494153. 8491999091)은 session_id가 4까지 나옵니다 -- 출제의도: 윈도우 함수를 웹 로그 데이터에 적용하여 활용할 수 있는가? -- Step 1. Session 정보 추출 WITH base AS( SELECT event_date , event_timestamp , DATETIME(TIMESTAMP_MICROS(event_timestamp), 'Asia/Seoul') AS event_datetime , event_name , user_id , user_pseudo_id , DATETIME(TIMESTAMP_MICROS(LAG(event_timestamp) OVER (PARTITION BY user_pseudo_id ORDER BY event_timestamp)), 'Asia/Seoul') AS before_event_datetime FROM advanced.app_logs WHERE event_date = '2022-08-18' AND user_pseudo_id = '1997494153.8491999091' ), -- Step 2. 세션 유지 시간 및 신규 세션 여부 계산 session_info AS( SELECT * , TIMESTAMP_DIFF(event_datetime, before_event_datetime, SECOND) AS second_diff , CASE WHEN TIMESTAMP_DIFF(event_datetime, before_event_datetime, SECOND) >= 20 OR TIMESTAMP_DIFF(event_datetime, before_event_datetime, SECOND) IS NULL THEN 1 ELSE NULL END AS session_start FROM base ) -- Step 3. 신규 세션 id 세팅 SELECT * , SUM(session_start) OVER (PARTITION BY user_pseudo_id ORDER BY event_datetime) AS session_id FROM session_info ORDER BY event_date, event_timestamp;
-
미해결[리뉴얼] 처음하는 SQL과 데이터베이스(MySQL) 부트캠프 [입문부터 활용까지]
서브쿼리를 JOIN으로 바꾸기
안녕하세요! SUBQUERY 이해 (업데이트) 강의에서 예2의 비교 부분의 쿼리문을 JOIN으로 바꿔서 표현해보려고 하는데 실행 결과 category_id가 1부터 전부 나옵니다. 어떻게 해야 5('Comedy')보다 큰 것만 추출할 수 있을까요?pdf파일 7page JOIN으로 바꿔서 표현해본 쿼리문 실행 결과
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
7-A 질문있습니다 :)
안녕하세요 선생님 🙂 외판원 순회 문제 질문있습니다.dp를 비트플래그를 이용해서 방문여부를 체크한다는 아이디어가 정말 참신하게 다가오는 것 같습니다. 이 문제를 처음 접했을 때, 비트플래그가 아닌dp[MAX_N][MAX_N * MAX_N] 형태를 생각했었는데요, 이 방식으로 푼다면 배열의 범위가 dp[16][65536]이 아닌 dp[16][256]이 됩니다. 이게 시간복잡도와 공간복잡도 면에서 더 효율적이라고 생각이 들지만, 방문처리를 어떻게 해야할지 모르겠더라구요. 혹시 이렇게도 풀 수 있는 방법이 있을까요?
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
OrderService에서 MemberRepository를 참조하는 이유
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]강의 듣다가 문득 궁금하여 질문드립니다.보통 Repository를 바로 접근하지 않기 위해서 Service를 만드는 건데, OrderService에서 MemberRepository에 바로 접근한 것은 OrderService 또한 같은 Service 단계이기 때문인가요?
-
미해결Vue3 완벽 마스터: 기초부터 실전까지 - "기본편"
eslinttrc.cjs 파일이 안떠요
eslinttrc.cjs 파일이 안떠요 똑같이 진행했는데 왜그런가요...?
-
미해결웰컴 투 태블로 월드
DB 드라이버 연결
안녕하세요, 태블로에 postgreSQL과 clickhouse DB 서버를 연결시키려고 하는데 드라이버가 설치는 된 것 같은데 서버에 연결이 안됩니다. 오류 코드는 두 DB 모두 아래와 같습니다.태블로 데스크탑 체험판을 사용하고있는데 체험판이라 연결이 안되는걸까요? 해당 에러 원인과 해결 방법을 알고싶습니다! 감사합니다:]