묻고 답해요
161만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결[켠김에 출시까지] 유니티 캐주얼 모바일 MMORPG (M2)
선 이동과 히트 판정에 대해 질문 드립니다.
안녕하세요. 루키스님!M2 코드를 분석하면서, 약간 다른 게임을 (브롤스타즈같은 모바일 탑뷰 슈팅게임) 만들고 있습니다.선 이동으로 구현하고 있는데, 서버 판정 이후 해결되지 않는 부분이 있어 질문 드립니다. 현재까지 구현한건 키보드 기반 간단한 이동 동기화 입니다. 이동 방법은 키보드나 조이스틱 기반의 선 이동으로 구현하려 합니다.지금 이동 코드는 루키스님 질의응답과 해외 커뮤 글을 토대로 아래 방식으로 구현 했습니다.0.1초마다 동기화를 시도함키보드 입력이 있으면 desirePos를 그 방향으로 0.1초동안 갈 수 있는 pos 를 찍음클라 판단으로 갈 수 있는 곳(벽X, 장애물 X) 이면 destPos를 갱신서버로 전송서버에서 정당한 이동 요청인지 판정맞으면 브로드캐스트각 클라에서 이동 패킷 수신 후 캐릭터 갱신 여기까지 하면 어느정도 자연스럽게 작동은 합니다.하지만 이동을 보낸 클라 입장에서 서버로 부터 받은 판정을 적용하는 부분에 어려운 부분이 있습니다.아무래도 선 이동이 예측 이동 후 보정이라 네트워크 지연으로 예측과 판정이 너무 많이 틀어지는 경우가 있을 것 같습니다.예를들어, 클라에서 단순 우측으로만 움직인다고 가정하고, x 축으로 10 -> 11 -> 12 -> 13 선 이동을 했다는 가정으로 시작하겠습니다.네트워크 지연으로 13에 도달했을 때 서버에서 10 이동 동기화가 왔다면, 선 이동 클라는 10으로 튕겨 버립니다. 그 후 방향을 바꿔 왼쪽으로 움직이면 10 -> 9 -> 8 -> 7 로 먼저 움직이겠지만, 이미 서버로 보낸 이동 좌표로 인해 11, 12, 13이 또 오기 때문에 캐릭터는 퉁퉁 튀면서 움직이지 못하는 상태가 될 것 같습니다.또한, 다른 클라에서 공격을 해도 히트 판정이 다 꼬여 게임이 이상해질 것 같습니다. 이 문제를 해결하기 위해 고민해보니, 클라에서 선 이동 버퍼(기록)을 둔다고 합니다.이 버퍼는 아래 문제가 생겼을 때 서버 판정을 다시 replay 하고, 서버 판정을 완료하면 다시 저장된 선 이동 버퍼를 replay 해 클라에서 너무 앞서나가지 않도록 하더라구요.선이동 버퍼의 index와 서버 판정의 index가 n 이상 벌어지면, 서버 판정 index의 pos 로 플레이어 위치를 되돌리고 클라 선 이동 판정을 다시 실행시킴. 서버 판정으로 이동할 수 없는 pos 라면, 해당 pos 로 되돌리고 그 그 이후 선 이동 버퍼를 replay 여기서부터 질문입니다만,이런 방법이 쓰이는 이유는 게임 전체의 공정성 때문 일까요?네트워크 문제가 있는 일부 클라는 계속 롤백되는 경험을 하지만, 다른 유저들은 서버에서 허가한 상태만 보니까요.보통 선 이동 버퍼와 서버 판정은 어느정도로 갭을 두나요?0.1초마다 동기화 한다고 가정 하고 이동 패킷은 ++1 인 정수형 인덱스로 구분한다고 했을 때, 저는 한 4 정도로 생각했습니다.선 이동과 서버 판정이 약 0.4초이상 벌어지면 롤백하고 다시 동기화 한다 입니다.히트 판정의 경우 클라들, 서버가 같은 ticktime을 공유하고 있고 서버에서 내려준 히트 시작 시간을 보내주면, 클라에서 timejob queue에 넣어두었다가 해당 시간이 되면 애니메이션을 시작하면 되지 않을까? 라는 생각 입니다.고민을 많이 해보았는데, 이 이상 생각이 안되어 질문 드립니다.바쁘시겠지만 답변 주시면 감사히 학습에 사용하겠습니다.
-
미해결비전공자도 이해할 수 있는 DB 설계 입문/실전
[JSCODE 쇼핑몰 (2)] 상품 테이블의 등록한 사람 질문 입니다.
[실습] 요구사항을 보고 DB 설계해보기 - 쇼핑몰 프로젝트에서 '상품' 테이블 질문입니다! 상품을 등록한 사람이 관리자가 아닌 일반회원인건가요?
-
해결됨스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판
2Depth 강의 도중 궁금한 점 있어요!!
CommonService 클래스 부분에서이 코드 테스트를 하며 생각을 해봤는데요EX)루트 댓글 A(논리삭제) ㄴ 댓글 B ㄴ 대댓글 C상황인 경우에서 B를 삭제했을 경우에 논리 삭제 되어있던 루트 댓글A도 삭제가 되면서루트 댓글 A(물리삭제) ㄴ 댓글 B(물리삭제) ㄴ 대댓글 C이런 상황으로 된다면 대댓글 C는 물리삭제 된 루트 댓글A를 parent로 가지는 고아 댓글이 되어버리는 것은 아닌가 궁금해서요!! 깔끔하게 딥한 강의 너무 잘 듣고 있어요!! 감사합니다 :)
-
미해결김영한의 실전 데이터베이스 - 설계 1편, 현대적 데이터 모델링 완전 정복
BCNF 정규화에 대한 질문
professor_bcnf, enrollment_bcnf로 테이블을 분리하는 과정에서 질문이 있습니다. 이전에 이름과 같은 자연키는 기본키로 두면 안된다고 들었는데 현재는 professor_bcnf에서 professor_name이 기본키로 있습니다. 이런 경우에는 문제가 딱히 생기지 않나요?
-
미해결[백문이불여일타] 데이터 분석을 위한 기초 SQL
해커랭크 문제풀이 처음부터 난이도 높아서 틀렸는데요.
해커랭크 문제가 영상이랑 다르게 조금 더 난이도 높게 나온 거 같아요 틀렸는데 어떻게 해야해요. 틀렸을 때 방법은 안나와서요..
-
해결됨[켠김에 출시까지] 유니티 캐주얼 모바일 MMORPG (M2)
Job Scheduler - Cache locality
Hello, games are known from deep performance optimizations that going to thinking about getting data alligned in cache lines. Does Job Scheduler isnt killing it? Isnt this days more like One room = one thread and everything is flaten to array of structs / structs of arrays without lambdas, linq and events? Isnt context switching adding pauses even if there is no allocs because of locks?
-
해결됨6주 완성! 백엔드 이력서 차별화 전략 4가지 - 똑같은 이력서 속에서 돋보이는 법
k6 dashboad 안나오는 상
1. 현재 학습 진도2-9 2. 어려움을 겪는 부분window 11 에서 k6 1.3.0 버전을 사용 중 이고set K6_WEB_DASHBOARD=truek6 run k6-scripts/k6-test.js로 명령어를 쳐도 테스트 자체는 실행이 되지만 대쉬보드가 나오지 않습니다 3. 시도해보신 내용처음엔 버전 문젠가 해서 최신 버전으로 수정 했고 5665 포트도 사용 중 은 아닌 것 을 확인 이 외에 체크를 해야 할 것이 있는지 모르겠습니다.
-
미해결6주 완성! 백엔드 이력서 차별화 전략 4가지 - 똑같은 이력서 속에서 돋보이는 법
2-4 도커 빌드 에러가 계속 납니다.
1. 현재 학습 진도2챕터 4강 2. 어려움을 겪는 부분docker compose -d --build 를 터미널에 입력하면이렇게 => ERROR [internal] load metadata for docker.io/library/openjdk:17-jdk-slim 해당 에러가 계속 발생합니다.(docker compose -d 는 정상 실행 됩니다.)3. 시도해보신 내용찾아보니 docker 설정 파일을 삭제하고 하라던지 jdk 이미지를 삭제하고 하라던지 해서 rm ~/.docker/config.json 라던지 등을 해봤습니다만 계속 문제가 생깁니다.현재 해당 도커 이미지가 사용 중지된거같아서Dockerfile 에 FROM eclipse-temurin:17-jdk-jammy 로 수정했는데 이래도 괜찮을까요 ?
-
해결됨6주 완성! 백엔드 이력서 차별화 전략 4가지 - 똑같은 이력서 속에서 돋보이는 법
AWS EC2에 도커 컨테이너가 동작하지 않을 때 확인 해야하는 것
안녕하세요 딩코님. 강의 즐겁게 수강하고 있습니다.딩코님의 테라폼 코드를 토대로, 저의 프로젝트에 도입하는 와중에테라폼 정상 작동 및 AWS 모든 서비스 정상 작동 -> 빌드 -> 커밋 & 푸시 -> CI/CD Actions 통과 까진 성공하나, 막상 EC2에서 docker ps 입력시 아무 컨테이너가 띄워지지 않습니다. 뭔가 ECR에 아무 이미지가 업로드 되지 않고 있나? 라는 합리적 의심이 들긴하는데, 혹시 어느부분부터 점검해야할지 감이 잡히지 않아 도움 부탁드리고자 질문 남깁니다. 추운데 늘 건승하세요. 읽어주셔서 감사합니다.
-
해결됨스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판
샤딩에 대해서 궁금점있습니다.
저의 짧은 지식으로는 샤딩은 수평분할에 기반한 방식이라 수직은 존재하지 않는 것으로 알고 있습니다. 혹시, 이부분에 대해서 설명을 해주실 수 있으신가요?
-
해결됨6주 완성! 백엔드 이력서 차별화 전략 4가지 - 똑같은 이력서 속에서 돋보이는 법
성능 측정시
이력서에 넣을 성능을 측정할 때단순한 쿼리 실행 속도나 API 응답 속도까지로컬이 아니라 aws에 띄워서 비교하는 게 좋을까요?
-
미해결업무에 바로 쓰는 SQL 튜닝
7-8 질문
현재 실행 계획이 강의랑 반대라서 질문 남겨봅니다 드라이빙 테이블이 de 로 나오는 이유가 뭘까요 ?
-
미해결김영한의 실전 데이터베이스 - 기본편
실제 상용 서비스 질문
안녕하세요 강사님, 덕분에 입문부터 기초까지 듣게되었으며, 추후 설계부분도 들으려 결제를 해놓은 상태입니다. 지금 상용 서비스에 mysql과 fastapi를 활용하여 서버를 구축하려 하는데, 궁금증이 생겨 문의 드립니다. mysql의 용량은 저희 서버의 용량이 허락하는 한 무료로 활용이 가능한지?서버에서 db에 연동해서 데이터를 불러올 때, 최대한 sql문법을 활용하는지? 아니면 상황에 따라 모든 데이터를 불러와서 서버내 프레임워크에서 정제를 하는지?이외에도 주의할 사항이 있는지? 혼자하는 진행하는 프로젝트기에 생각과 걱정이 많았지만, 강사님이 한 줄기 빛으로 다가왔습니다. 위 질문에 답변해주시면 감사하겠습니다.
-
해결됨스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판
댓글 테이블 설계
안녕하십니까 선생님,댓글 테이블의 parent_comment_id 컬럼에 외래키 제약조건을 걸지 않고 설계를 하셨는데 이러한 선택의 구체적인 이유가 있을까요?? 저는 무결성 보장을 위해 셀프 조인 + FK제약조건을 생각했었습니다.
-
해결됨비전공자도 이해할 수 있는 MySQL 성능 최적화 입문/실전 (SQL 튜닝편)
쿼리 결과 그리드에서 TYPE, POSSIBLE_KEYS 다릅니다
상단의 스크린샷이 저의 로컬에서 확인된 거구요아래는 선생님의 결과 입니다 [실습] 유저 이름이름 특정기간에 작성된 글 검색하는 SQL문 튜닝하기3:30초 구간 입니다 똑같이 했는데 왜 TYPE과 KEY 변경되어 있을까요?제가 잘못하고 있는건가요? 따라 쓴거도 아니고 NOTION에 있는걸 복붙 했습니다 ;;;
-
해결됨스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판
샤딩의 기준
안녕하세요 쿠케님 강의 잘 보고 있습니다!강의를 보다가 갑자기 궁금한 점이 생겨서 질문 드립니다. 샤딩의 기준이 현재는 article_id로 되어 있는데, 특정 샤드에 댓글 데이터가 엄청 생성되어서 불균형하게 저장이 되는 경우도 있을까요?? 있다면 샤딩의 기준을 다시 정의하는 일도 있는지 궁금합니다.항상 잘 보고 있습니다. 감사합니다.
-
미해결[개정3판] Node.js 교과서 - 기본부터 프로젝트 실습까지
aws - lightsail 이용 관련
강사님 현재 aws - Lightsail은 7월15일 이후 계정 생성시 유료로 전환이 되었다고 하는데 이럴 경우에는 강의 내용과 완전히 바뀌는 것 같습니다. 이럴 때는 어떤 걸 사용해야 할까요?
-
해결됨스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판
lockType 오류 및 카운트 체크 안 됨
안녕하세요! 강의 잘 듣고 있습니다. 좋은 강의 감사합니다.실습하다가 오류가 생겨 문의 드립니다. void like(Long articleId, Long userId, String lockType) { restClient.post() .uri("/v1/article-likes/articles/{articleId}/users/{userId}/" + lockType, articleId, userId) .retrieve(); } @Test void likePerformanceTest() throws InterruptedException { ExecutorService executorService = Executors.newFixedThreadPool(100); // 100개의 스레드 풀 생성 // 각 lock type별로 테스트 likePerformanceTest(executorService, 1111L, "pessimistic-lock-1"); likePerformanceTest(executorService, 2222L, "pessimistic-lock-2"); likePerformanceTest(executorService, 3333L, "optimistic-lock"); } void likePerformanceTest(ExecutorService executorService, Long articleId, String lockType) throws InterruptedException { CountDownLatch latch = new CountDownLatch(3000); System.out.println(lockType = " start"); like(articleId, 1L, lockType); long start = System.nanoTime(); for (int i = 0; i < 3000; i++) { long userId = i + 2; // String finalLockType = lockType; executorService.submit(() -> { like(articleId, userId, lockType); latch.countDown(); }); } latch.await(); long end = System.nanoTime(); System.out.println("lockType = " + lockType + ", time = " + (end - start) / 1_000_000 + " ms"); System.out.println(lockType + " end"); Long count = restClient.get() .uri("/v1/article-likes/articles/{articleId}/count", articleId) .retrieve() .body(Long.class); System.out.println("count = " + count); }여기서 '람다 식에 사용되는 변수는 final 또는 유사 final이어야 합니다' 라는 오류가 뜨더라고요. // String finalLockType = lockType; 부분 주석 해제하고 람다 내부에 like(articleId, userId, finalLockType); 으로 하면 startlockType = start, time = 914 ms start endcount = 0 startlockType = start, time = 589 ms start endcount = 0 startlockType = start, time = 567 ms start endcount = 0 으로 출력도 잘 안 나옵니다. 애플리케이션 콘솔에는 아래 로고만 찍히고 나머지는 안 나옵니다.Hibernate: select alc1_0.article_id,alc1_0.like_count,alc1_0.version from article_like_count alc1_0 where alc1_0.article_id=?Hibernate: select alc1_0.article_id,alc1_0.like_count,alc1_0.version from article_like_count alc1_0 where alc1_0.article_id=?Hibernate: select alc1_0.article_id,alc1_0.like_count,alc1_0.version from article_like_count alc1_0 where alc1_0.article_id=? 어느 부분이 문제일까요? ArticleLikeController에서 count 경로는 테스트처럼 뒤에 /count 추가했습니다.
-
미해결김영한의 실전 데이터베이스 - 설계 1편, 현대적 데이터 모델링 완전 정복
주문, 결제 엔티티의 분류
"실전 개념적 모델링 - 시작" 파트를 들으면서 궁금한 점이 있어 질문드립니다. 주문, 결제 엔티티의 경우, 주문은 '결제'까지 포함하는 비즈니스 트랜잭션 단위라 하였는데, 왜 두개의 엔티티로 분류해야하는지 궁금합니다.현재 요구사항에서는 하나로 합쳐도 문제가 없는건가요?
-
미해결[리뉴얼] 처음하는 SQL과 데이터베이스(MySQL) 부트캠프 [입문부터 활용까지]
섹션1 4강부터 강의 실행 안됨 이슈
섹션1 강의에서 4강 '아나콘다와 주피터 노트북의 이해' 강의부터 강의 실행이 안됩니다.검정색 화면만 나와요... 해결방법 확인 부탁드립니다.