묻고 답해요
161만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결실전! Querydsl
searchPageSimple 테스트코드 질문
강의 내용에서 memberRepository.searchPageSimple 의 코드에 orderBy 가 없는데 result가 member1, member2, member3인 것을 어떻게 보장하는 건가요 ?
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part7: MMO 컨텐츠 구현 (Unity + C# 서버 연동 기초)
화살 쏘는 것을 처리하는 방식
안녕하세요 루키스님!제가 루키스님이 강의중 만드신 게임에서 쓰이는 좌표를 float으로 바꾸고 화살이 이동하는 방식을 수정하였습니다.(저는 화살이 아니라 기본 동그라미 이미지의 총알로 사용해봤습니다)수정 내용은 화살 이동 로직을 처리하는 방법입니다. 기존 로직은 서버에서 GetFrontCellPos 함수를 이용하여 서버에서 이동된 좌표를 클라로 알려줘 이동되는 것으로 알고 있습니다. 클라에서는 UpdateMoving를 통해 움직이고 있구요!GetFrontCellPos 함수를 활용하여 서버에서 화살을 움직이기에는 좌표 단위가 Int가 아니라 float이니 어떻게 해결 해야할지 고민을 하다가 생각난 방법이 있습니다.화살을 쏜 후 유니티의 update 문에서 60fps로 서버에 화살이 이동했다는 것을 가르쳐준 후 브로드캐스팅 되게 했습니다. 그 후 서버에서는 받은 패킷에 따라 브로드 캐스팅하게 핸들링 해줬구요.이제 2명을 접속시키고 화살을 쏴보니 패킷이 밀려서 그런지 몰라도 쐈던 자리로 다시 롤백되는 현상을 발견했습니다(배그에서 트레이서 되는 느낌)60fps가 너무 자주 요청하는 건가 싶어서 15fps로 돌리니 클라 화면에서 내가 쏜 총알은 똑같이 롤백되면서 총알이 나가지만 다른 Player가 쏜 총알은 롤백이 되지 않았습니다. 하지만 이동된다기 보다는 순간이동 하는 것 처럼 보이기 시작했습니다.몇가지 실험을 해보니 혼자 접속중일때는 총알이 롤백현상이 일어나지 않고 곧게 잘 날아가는 것을 확인할 수 있으나 인원수가 한 명 늘어나는 순간부터 총알의 롤백 현상이 생기는 것을 확인했습니다. 브로드 캐스팅의 연산량이 늘어나서 패킷이 밀리는 것이 원인인 것 같습니다.C_SkillMove, S_SkiilMove 라는 패킷을 새로 파주고 실행했습니다. message C_SkillMove{int32 objectId = 1;PositionInfo posInfo = 2;}message S_SkillMove{int32 objectId = 1;PositionInfo posInfo = 2;}클라의 업데이트 문에선if (Time.frameCount % 15== 0){C_SkillMove skillMovePacket = new C_SkillMove();PosInfo.PosX = transform.position.x;PosInfo.PosY = transform.position.y;skillMovePacket.PosInfo = PosInfo;skillMovePacket.ObjectId = Id;Managers.Network.Send(skillMovePacket);} 이런 코드로 움직입니다. 서버에선public static void C_SkillMoveHandler(PacketSession session, IMessage packet){C_SkillMove skillMovePacket = packet as C_SkillMove;ClientSession clientSession = session as ClientSession;Arrow arrow= ObjectManager.Instance.Find<Arrow >(skillMovePacket.ObjectId);if (arrow== null)return;GameRoom room = arrow.Room;if (room == null)return;room.HandleSkillMove(arrow, skillMovePacket);} 이런식으로 핸들링 하고 HandleSkillMove 함수는 public void HandleSkillMove(Arrow arrow, C_SkillMove skillMovePacket){if (arrow == null)return;lock (_lock){ObjectInfo info = arrow.Info;info.PosInfo = skillMovePacket.PosInfo;S_Move resMovePacket = new S_Move();resMovePacket.ObjectId = arrow.Info.ObjectId;resMovePacket.PosInfo = skillMovePacket.PosInfo;Broadcast(resMovePacket);}}이런 로직으로 움직입니다.float일 때의 서버에서 이동 처리 방법이 궁금합니다! 또한 위처럼 순간이동되게 가는 것을 방지하는 법도 궁금합니다.. (스르륵 이동하게 처리하는 부분)
-
해결됨[코드캠프] 부트캠프에서 만든 고농축 프론트엔드 코스
서버 라우터 에러 문의
state 끌어올리기 수업부분에서 계속 이런 오류가 나서 문의드립니다. 혹시나 해서 다른 서버들은 종료를 해놓고 이것만 다시 실행을 했는데도 계속 오류가 발생하네요. 어떤부분이 잘못된 것인가요?
-
해결됨[코드캠프] 부트캠프에서 만든 고농축 프론트엔드 코스
이미지 업로드 후 url 접속 에러와 관련해서 질문드립니다. (섹션 19)
이미지를 업로드 후 받아오는 url을 통해, 이미지를 로딩해오는 과정에서 오류가 발생해서 질문드립니다.data는 uploadFile mutation 후 받아온 result에 대한 출력 결과이고, 여기서 받아온 url을 https://storage.googleapis.com/. 뒤에 붙여서 이미지를 불러오려고 하면 오류가 발생합니다. 이 부분에 대한 에러를 해결할 수가 없어서 질문드립니다.
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2-F 강의 무편집본 업로드인건지 확인 부탁드려요.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.강사님 매번 좋은 강의 감사드립니다.2-F 강의 영상이 잘못 업로드된 게 아닌가 싶습니다. 설명하시는 중간중간에 설명이 막히는 부분을 헤쳐나가는 과정을 적나라하게 볼 수 있었는데, 이게 강의용으로 업로드된 영상이 맞는지 확인 한번 부탁드려요.강의 준비하시는 노고까지 느낄 수 있는 영상이긴 한데, 수강용으로는 부적합하지 않나 생각이 들어 문의드려요.
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
숫자를 문자로
안녕하세요 선생님 수업 잘 듣고 있습니다!!!http://boj.kr/6f133cb4983d4c4fbbfd9bdb9dd87ba1선생님께서는 새로운 스트링을 만들어서 스트링을 프린트하시는 방식으로 문제를 푸셨는데 저는 숫자를 각각 문자로 바꾸어서 프린트해보려고 했으나 오류가 발생했습니다. to_string을 사용했을때숫자를 문자로 바꾸는 방식으로 (char)를 사용할때무엇이 문제였는지 설명해주시면 정말 감사하겠습니다!제가 19번째와 20번째 줄에 쓴 코드들은 서로 같이 쓰는것이 아닌 두가지 방법을 사용해본것입니다!
-
미해결전문의가 강의하는 산업보건지도사 2차 주관식과 3차 면접 6편
강의 분량
이 강의는 몇 편까지 계획되어 있나요?강의자료만 공부하면 되나요? 아니면 추가로 봐야할 부분이 있을까요?
-
해결됨홍정모의 따라하며 배우는 C++
3.6 9분 55초
x = 5, y = 5의 경우x equals y가 출력되는데, 선생님께서 x와 y가 같다고 잘못 결과를 내고 있다고 하시는데...왜 결과가 잘못 나온 건가요?ㅠㅠx와 y가 똑같이 5인데 뭐가 잘못된 건지 잘 모르겠습니다ㅠㅠ
-
미해결홍정모의 따라하며 배우는 C++
3.7 33분 49초
안녕하세요?1001 1110를 unsigned integer로 생각하고 변환을 하게 되면128 + ~ 식으로 나온다고 하셨습니다. (32분 쯤)그런데33분 49초에 1001 1110 을 <사인드>라 가정하고 변환을 하면2^7 1 + 2^41 + 2^3*1 + 2^2*1 + 2^1*1 = 158 이렇게 나온다고 하셨는데이 방식은 1001 1110를 unsigned integer로 생각하고 변환한 것이 아닌가요?ㅠ선생님께서 잘못 말씀하신 건가요?ㅠ사인드라 생각하면 맨앞의 숫자 1이 숫자의 크기가 아닌 부호를 의미하기에 다르게 계산해야 하는 것으로 알고 있어서요ㅠㅠㅠㅠ
-
미해결한 입 크기로 잘라 먹는 리액트(React.js) : 기초부터 실전까지
Unmount 시점 질문
강의 중 20분 57초 Unmount 관련 질문입니다.const [isVisible, setIsVisible] = useState(false);보면 isVisible의 기본값이 false입니다. 이 값이 true로 변경되었다가(update), 다시 반드시 제 값 'false'로 돌아오는 시점이 Unmount 시점인건가요?
-
해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
SessionConst
교재 6.로그인처리1 p 35 보면SessionConst가 있는데요 이거 enum으론 하면 안될까요?
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
특강을 보고 공부 순서 관련해서 궁금한 점이 있습니다!
내가 IT 대기업에 합격한 방법 영상에서 말씀해주신 회사별 코딩테스트 난이도, 필수 알고리즘 개념 등이 다른 것 같은데 혹시 말씀해주신 야놀자, NHN등 스타트업의 코테에 우선적으로 지원해보려면 순서대로 강의들을 다 듣는게 맞을까요 아니면 건너뛰거나 먼저 들어볼 법한 주차가 있을까요? eg. 스타트업 코테를 목표로 알고리즘 공부를 하고 있으면 일단 몇 주차 개념과 문제를 풀어보고 일단 지원해보는 것을 추천. 등의 답변을 해주신다면 감사드리겠습니다! 현재 실력은 스타트업 코테 문제들에서 평균적으로 테케 3번까지는 맞는데 그 이후 효율성 검사 케이스들 또는 반례 케이스들에서 거의 대부분 해결을 못합니다 ㅜ
-
미해결토비의 스프링 부트 - 이해와 원리
Service 계층에서 테스트 관련해서 질문이 있습니다.
안녕하세요 토비님제가 프로젝트를 진행하면서 도저히 모르는 부분이 있습니다.강의와 관련이 없는 질문이지만, 간절한 마음으로 질문해봅니다 Service 계층은 상태검증과 행위 검증에 대한 고민이 있습니다.특히, 객체의 책임과 테스트 범위에 대한 관점에 대한 차이때문에 고민이 있습니다.우선, 코드를 보여드리겠습니다.CommunityCommandService.updateCommunity는 커뮤니티의 소개란과 해시태그를 업데이트하는 부분입니다.//CommunityCommandService.java public void updateCommunity(Long userId, Long communityId, String description, List<String> newTags) { Community community = communityRepository.findCommunityById(communityId); memberQueryService.getManager(userId, communityId); community.updateCommunity(description, newTags); }해당 코드는 communityId로 community를 가져오고, userId / communityId로 요청한 유저가 메니저인지 확인합니다.그 후, community 객체에게 update를 위임합니다. 그러면 community 객체는 내부 상태값을 변경합니다. 여기서, 상태 검증인지 행위 검증인지에 따라 테스트가 달라집니다.public class CommunityCommandServiceTest { @Test void 상태검증_테스트() { Community community = new Community("dummy Intro", List.of("dummy tag")); given(communityRepository.findById(any)).willReturn(community); communityCommandService.updateCommunity(1L, "new intro", List.of("new tag")); assertThat(community.getIntroduce).isEqualTo("new intro"); assertThat(community.getTags).containsExactly("new tag"); } @Test void 행위검증_테스트() { Community community = mock(Community.class); given(communityRepository.findById(any)).willReturn(community); communityCommandService.updateCommunity(1L, "new intro", List.of("new tag")); then(community).should(times(1)).update("new intro", List.of("new tag")) } }상태검증_테스트의 검증 부분을 보면, 위임한 결과에 대해서 테스트를 진행하고 있습니다. Community 클래스의 update를 또 테스트하는 것 같은 느낌이 있습니다. 즉, 서비스 계층의 테스트 영역을 넘어서는 것인지 의문입니다.반면, 행위검증_테스트는 community.update가 호출하면서 위임했는지에 대해서만 테스트합니다. 하지만, 내부 로직에 하드코딩 되어있는 듯 합니다.사실 저는 상태검증을 더 선호합니다. 하지만 상태 검증이 객체지향스러운지 잘 모르겠습니다. 어느정도 감수해야하는 것 일까요? 정리하자면,상태검증CommunityCommandService.updateCommunity로 변경된 상태를 테스트개인적으로 선호하는 방식. 하지만, 상태를 테스트하기 때문에 객체지향의 관점에서 맞는지 확신이 없다. 테스트코드는 이 부분을 감수하는 것인지?행위검증협력한 객체의 행위에 대한 테스트객체지향의 관점에서 위임이 잘 이루어졌는지 테스트하는게 자연스럽다고 생각 질문하자면,서비스계층에서 Community.update()로 커뮤니티 내부 값에 대한 변경을 요청하였습니다.객체지향에서는 객체들이 서로 책임을 위임하며 상호작용하는 것이기 때문에Service 계층에서는 위임이 되었는지 호출 여부만 판단하는게 적절한지, 아니면, Service 계층에서 위임한 그 결과 Community의 내부값을 바꾼게 적절한 테스트인지..만약 이 방법이 맞다면 객체지향스럽다고 말할 수 있는지..?어떤 방식이 적절한지 잘 모르겠습니다. 이론적인 부분과 실제 테스트에 대한 괴리때문에 발생하는 문제 같습니다. 긴 질문 읽어주셔서 감사드립니다!
-
미해결유니티 Addressable 을 이용한 패치 시스템 구현
CheckForCatalogUpdates() 대한 이해
1)Addressables.CheckForCatalogUpdates()를 통해 업데이트 할께 있다. 없다를 판단 하는거 같습니다. 체크를 통해 Count가 0 이상이면 업데이트 할께 있으므로 다운로드 진행으로 알고 있습니다. 그런데 의문점 드는 부분의 코드가 CheckForCatalogUpdates() 체크 후Count 0 이상 > 카탈로그 업데이트 > 다운로드 사이즈 체크 Count 0 이하 > 다운로드 사이즈 체크 2번 같은 경우 카탈로그 체크로 인해 0 이므로 다운로드를 받을 필요가 없는데 굳이 다운로드 사이즈 체크해서 다운로드를 하는 이유가 무엇인가요? 2) 제공 해주신 프로젝트로 카탈로그 테스트 중 이상 현상이 나와 질문 드립니다. 번들 빌드를 한후 서버에 올리고 다운을 받으면, AppData\LocalLow\Unity/프로젝트이름/ 위치로 다운 받아 지는 거 같습니다. 다시 테스트를 위해 위 위치의 캐시를 지운 후 테스트를 하면 카탈로그체크카운트가 0입니다.내 캐쉬에 없는데도 카탈로그체크카운트가 0이상이지 않습니다. 혹시나 몰라 addressables_content_state.bin도 삭제 Group > Clean Build 를 해보아도 카탈로그체크카운트가 카운트 되지 않습니다.최초 실행은 카탈로그체크카운트가 카운트 되지 않나요?아님 리셋 시키는 방법이 있을까요?
-
미해결실리콘밸리 엔지니어에게 배우는 파이썬 아파치 스파크
EMR 환경시 분산처리가능하게하는 conf 설정 문의
EMR 환경에서 spark_app = SparkSession.builder.appName(app_name).getOrCreate() 하면 자동으로 분산처리가 되나요? 아니면 conf를 따로해줘야하는지요? 따로 할경우는 어떻게 conf를 잡으면 될까요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
test/resources/application.yml이 없으면
main/resources/application.yml 을 따라가게 되는 건가요 ? 자바에서는 디비를 사용하고 싶고, test에서만 메모리 DB를 사용하고 싶다면 아무런 내용이 없는 application.yml를 test/resources 아래 생성만 하면 되는 건가요 ?
-
미해결스프링과 JPA 기반 웹 애플리케이션 개발
회원가입 인증 메일 확인
accountService 애서 processNewAccount 을 Account newAccount = saveNewAccount(signUpForm);;newAccount.getGenerateEmailCheckToken();accountRepository.flush();sendSignUpConfirmEmail(newAccount);로하면@Transactional 을 메서드 상단에 선언을 안해도 해결이 가능한데요. @Transactional 를 사용하지않고강제로 플러시를 해준경우에 추후에 문제가 될만 소지가 있을까요?
-
해결됨[코드캠프] 입문자를 위한 Javascript 알고리즘 이론+실습
섹션7 반복문 filter [그건 제 잔상입니다만?] 파트에서 코드스니펫 오류
function solution(nameList) {// 여기에 코드를 작성하세요 }solution( ["123.123.02", "123.123.02", "432.223.07", "123.173.08"], "123.123.02");// ["432.223.07", "123.173.08"]solution( ["228.093.22", "228.093.22", "228.093.22"], "228.093.22");// [] 노션에 nameList라고 매개변수가 주어져 있는데안내사항과 강의에서는 userList, ip를 이용합니다.수정 부탁드려요 ^^
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
명시적, 암시적 형변환 관련 질문입니다
explicit Knight(int hp) { cout << "Knight 기본 생성자 호출" << endl; _hp = hp; _attack = 10; _posY = 0; _posX = 0; }명시적 형변환 문법인 explicit를 뺀 상태에서k5 = 1 일때 컴파일러에 의해 암시적 형변환으로 인해함수의 인자 int hp에 1이 들어가는 건가요??
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
MyBatisItemRepository와 MybatisConfig
MyBatisItemRepostiory에서 @Repostiory와 @RequiredArgsConstructor을 통해서 스프링빈으로 등록하고 ItemMapper와 의존관계를 주입했잖아요근데 MYBatisConfig에서 다시MybatisConfig에 ItemMapper의존관계를 주입하는 이유가 뭔가요?