묻고 답해요
156만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결모든 개발자를 위한 HTTP 웹 기본 지식
영구 리다이렉션과 일시적인 리다이렉션
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]영구 리다이렉션과 일시적인 리다이렉션에 관하여 질문이 있습니다. 제가 이해한바로는 영구 리다이렉션은 흔히 웹 사이트 주소가 바뀔때 유저가 예전 URL로 접근할시 새로운 URL로 연결해주는 역할을 합니다. 반면 일시적인 리다이렉션은 주문 후에 새로 고침으로 인한 중복 주문 방지로 주로 쓰입니다. 영구 리다이렉션과 일시적인 리다이렉션의 차이점으로 리소스의 URI가 일시적으로 변하냐 영구적으로 변하냐라고 이해했습니다. 제가 궁금한 점은 1. 제가 이해한 내용이 맞는지 궁금합니다. 2. 일시적인 리다이렉션은 많이 사용한다고 하셨는데 왜 영구적인 리다이렉션은 잘 사용안하는지가 궁금합니다. 감사합니다.
-
미해결모든 개발자를 위한 HTTP 웹 기본 지식
http 헤더
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]HTTP 헤더 분류를 RFC2616(과거)에서는 General, Request, Response, Entity헤더로 4개로 분류했다고 하셨습니다. 그런데 RFC7230~7235가 등장하면서 엔티티 대신 표현을 사용한다고 하셨는데 그러면 현재 Http를 분류할때는 General, Request, Response, Representation으로 분류한다고 알고 있으면 되는건가요?
-
미해결모든 개발자를 위한 HTTP 웹 기본 지식
서버단에서 트래픽이 증가할때 포트 갯수 문의
어플리케이션 포트는 0~65535까지라고 하는데, 만약 구글서버에서 동시에 100만명의 접속자가 들어오면 클라이언트별로 포트를 다 할당하나요? 그러면 100만명을 수용 못할거 같은데 어떻게 처리하는지 궁금합니다. 만약 포트는 동일한 포트를 쓰고 app단에서 사용자 처리를 한다면 app에서는 100만명의 주소와 포트를 다 관리하는 것인지요? 감사합니다.
-
미해결모든 개발자를 위한 HTTP 웹 기본 지식
POST, PUT, PATCH에 대해 간단한 질문이 있습니다.
안녕하세요 간단하게 질문이 2가지가 있어서 올립니다!!! 질문 1. 회원을 등록할 때는 서버에 일일히 경로를 지정하기가 번거로우니까 서버가 리소스의 URI를 자동으로 생성해주는 POST를 쓰는 것이 맞고 온라인 이력서에 올리는 면접 사진과 같은 파일들은 등록할 때 어떤 경로에서 등록하는지 클라이언트가 정하니까 파일 등록은 PUT을 쓰는 것이 맞다. 이 말이 맞는거죠...? 질문2. POST와 PATCH를 쓰는 상황의 차이가 PATCH는 단순 수치 변경을 할 떄, 주로 쓰는 것이고 POST는 단순 수치 변경보다는 변경으로 인해 프로세스가 바뀌게 되는 상황일 때, 쓰는 것? 이렇게 이해하는게 맞는지 궁금해서 질문합니다!!!
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
3D서버 만들 때 질문입니다
복학 전에 개인 작업으로 FPS게임서버를 만들고 있습니다. 구현된 것들: - 신규 유저 접속 시 기존 유저 데이터 전송, 기존 유저에게 신규 유저 스폰 전송 - 키보드 입력(Vertical, Horizontal)을 하나의 Vector3에 저장하여 이전 값과 다를 경우 패킷을 전송 ( 데드레커닝이 맞는진 모르겠음) - 카메라 회전 값을 각 클라이언트에서 0.25초 단위로 동기화 패킷 전송 ( 회전값은 서버에서 검증이 필요없을 거라 생각해서 검증 없이 Echo ) 위에 적은 대로 위의 기능은 문제없이 잘 작동하지만 이동 동기화에 대해서 문제가 심각합니다.... 데드레커닝처럼 이전값과 다를 때만 패킷을 보내는데, 상대 클라이언트는 회전값 동기화가 0.25 + (내RTT/2 + 상대RTT/2)이상이라 이동패킷이 더 빠르게 가버리면 위치값에 대한 데이터 일관성이 깨집니다. 그래서 추가로 1초 단위로 현재 위치를 서버에 전송합니다. 서버는 새로운 위치값을 받고 자신이 갖고 있던 해당 플레이어의 위치값 ( 서버 내에서도 이동방향, 회전값, RTT/2, 오차범위를 기준으로 위치값을 0.25초 단위로 업데이트함) 과 비교하여 이 값이 정상적인 데이터인지 검증합니다. 만약 결과가 정상적이라면 Broadcast, 비정상적이라면 Leave로 구현했습니다. 그런데 문제는 서버에서 검증하는 시간 + 내 RTT / 2 + 상대 RTT / 2 차이 때문에 데드레커닝으로 예측하더라도 계속 이전 위치로 돌아가는 현상이 발생했습니다. 데드레커닝을 포기하자니 너무 느린 반응때문에 FPS에 적합하지 않은 것 같고, 서버 검증을 포기하자니 에디터에 Inspector에서 위치 이동만 해도 핵처럼 보였습니다. FPS에서는 검증을 어떻게 하는게 맞을까요?
-
해결됨모든 개발자를 위한 HTTP 웹 기본 지식
stateless와 비연결성의 차이
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. stateless (무상태성): 필요한 상태에 대한 정보를 클라이언트가 가지고 오기 때문에 클라이언트의 요청에 어느 서버가 응답해도 상관 없음. 따라서 클라이언트의 요청이 대폭 증가하면 서버를 증설해 해결할 수 있음 connectionless (비연결성): 클라이언트가 서버에 요청을 하고 응답을 받으면 바로 TCP/IP 연결을 끊어 연결을 유지하지 않음으로써 서버의 자원을 효율적으로 관리하고 수 많은 클라이언트의 요청에 대응할 수 있게 함 라고 이해했는데, 손님 - 직원의 예시로 봤을 때 무상태성: 고객이 직원에게 "저는 어떤 물품을 원해요"라고 필요한 정보들 ( = 필요한 상태)을 가진 채로 직원에게 요청 비연결성: 직원이 고객에게 필요한 물품 ( = 응답)을 전달해주었으므로 직원과 고객이 단절됨 ( = 연결 끊김), 이후 직원은 다른 손님에게 "어서오세요 손님"이라고 하면서 맞이함 이렇게 이해하면 될까요?
-
해결됨모든 개발자를 위한 HTTP 웹 기본 지식
혼자 정리해 본 Stateful과 Stateless의 차이
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 강의에서의 예시로 보면 Stateful에서는 점원이 바뀌면 구매자가 어떤 것을 사고 싶은지 점원이 파악하지 못함 Stateless에서는 점원이 바뀌더라도 구매자가 필요한 모든 정보를 가진 채로 요청하기 때문에 주문에 문제 없음 이렇게 이해했는데, 그렇다면 Stateful에서는 "서버"가 "클라이언트"의 상태를 기억하고, Stateless에서는 "클라이언트"가 애초에 접속할 때 "서버"에게 필요한 상태를 제공하는 것으로 이해하면 될까요? 만약 그렇다면 "필요한 상태를 가지고 있어야 할 책임이 어느 쪽에 있는가?"에 따라 Stateful과 Stateless로 나누면 되는 것인지 궁금합니다!
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
유저 간 패킷전송의 평등성? 에 대한 질문입니다.
온라인 게임을 하다보면 pc의 성능이 안좋거나 인터넷 환경이 불안정한 경우 렉이 걸려 해당 유저의 캐릭터가 멈추는 경우를 봤습니다. 이는 아마도 서버와 패킷을 전송하는 과정에서 pc성능의 문제로 패킷을 소화하지 못하거나 인터넷이 끊겨 패킷을 제때 전달받지 못해서 발생하는 문제라고 생각합니다. 그렇다면 반대의 경우 pc 성능이나 인터넷 환경이 타유저에 비해 압도적으로 뛰어난 경우는 타 유저에 비해 보다 많은 패킷을 주고 받을 수 있을 거라 생각합니다. 그럴 경우 타인보다 더 많은 이동, 공격을 하는 등 유저 간 벨런스에 문제가 생길 것 같고 그를 방지하기 위해 패킷 전송에 있어 일종의 상한선을 걸어야 하지 않을까 라는 생각을 합니다. 마치 프레임 제한을 거는 것처럼요. 이게 맞다면 제 개인적인 판단으로는 그러한 한 번에 전송할 수 있는 패킷의 양, 전송대기 시간 등을 클라이언트 쪽에서 제한하는 쪽으로 코드를 짜야하는 게 맞다고 생각이 드는데 이런 부분을 클라쪽에서 관리를 해야할까요? 아니면 서버 쪽에서 관리를 해줘야 할까요? -- 번외의 질문입니다. 롤의 경우 렉이 걸리는 유저는 혼자 렉이 걸리고 심할 경우 게임에서 나가지는 식인 반면에 닌텐도의 슈퍼마리오메이커2는 유저대전에서 한 명이 렉이 걸리면 전원이 렉이 걸리는 방식으로 알고 있습니다. 게임을 개발하는 개발자로서 마리오 방식보다는 롤의 방식이 유저에게 좀 더 긍정적인 평가를 받을 수 있을 거라 생각하는데 게임사 측에서 마리오 방식을 택하는 이유가 있을까요? 늘 좋은 강의 감사합니다.^^
-
미해결모든 개발자를 위한 HTTP 웹 기본 지식
컬렉션과 스토어 질문
안녕하세요. 다른 질문답변을 전부 찾아보았는데도, 컬렉션과 스토어 관해 이해가 명확히 되지 않아 질문드립니다. 컬렉션은 서버가 리소스의 URI를 생성하고 관리한다는 말이 회원 등록 POST에서 /members 라는 URI를 스프링 컨트롤러에 회원 등록 메소드(@PostMapping("/members"))를 만들어두었다는 것을 말하나요? 그러면 스토어는 클라이언트가 리소스의 URI를 알고 관리한다고 되어 있는데, 결국에 파일을 등록 PUT 하기 위해서는 /files/test.png 로 등록 요청을 해야할텐데 그러면 스프링 컨트롤러에서 (@PutMapping("/files")) 가 있어야 하지 않나요? 스토어 또한 결국 서버가 리소스 URI를 생성한거고 그거에 따라 클라이언트가 해당 URI에 맞춰 요청을 하는 것이 아닌가요? 컬렉션과 스토어 둘 다 어떤 요청이던간에 스프링 컨트롤러에 URI가 매핑된 메소드가 정의되어 있어야 해당 URI에 요청이 가능할텐데, 그러면 둘 다 서버가 URI를 생성하고 관리하는 것이 아닌지.. 잘 이해가 안되네요 ㅠㅠ 답변 부탁드립니다. 감사합니다.
-
해결됨[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
리눅스에서 이벤트 사용
쓰레드 강의파트에서 리눅스 영역을 고려해 <windows.h>를 사용하지 않고 <thread>를 사용한다고 하셨는데 이벤트는 <windows.h> 헤더를 대체할만 것이 있을까요?
-
해결됨네트워크, 그림으로 이해하자(2022ver.)
결제수단 변경으로 질문드립니다.
어디에 남겨야 보실 수 있는지 모르겠어서 부득이하게 이곳에 질문드립니다. 삭제 요청하시면 바로 삭제하겠습니다 07/12일에 결제했는데 회사에서 교육 지원이 가능하다고 하여 결제한 카드를 변경하고 싶은데 이미 시간이 지났고 학습자료도 다운 받은 상태라서 결제수단을 변경할 수 있을까요? - 재결제 후 기존 카드결제를 환불하거나 이런식으로요
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
신규 강의 질문
안녕하세요 루키스님! 유튜브에 온라인 출판사 영상을 보고 궁금하게 생겨서 이렇게 질문드려요! 유튜브 영상에서는 WinAPI-D2D-D3D 커리큘럼, UE 커리큘럼, Unity 커리큘럼 이렇게 3개를 구상중이라고 하셨는데 C++ IOCP + UE5 연동 강의는 일정이 어떻게 되는지 알 수 있을까요? ㅠㅠ
-
해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
Func<Session> sessionFactory 사용에대해서 궁금합니다
Func가 리턴값이 하나인 함수를 캡슐화한다고 공식문서에서 찾아봤는데요 함수를 캡슐화한다는게 함수에서 매개변수로써 사용한다고 생각하면 될까요?
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
생각을 해봤는데 이해가 잘 되지않습니다. 질문 드립니다
안녕하세요. 지금 ReadLock WriteLock 강의듣고 혼자서 구현해보는 연습중에 궁금한점이 있어서 문의드립니다. Main부분에서 for (int i = 0; i < 2; i++) { threaManger->Luncher(ThreadWrite); } for (int i = 0; i < 5; i++) { threaManger->Luncher(ThreadRead); } 고유 스레드 아이디를 부여해서스레드 2개는 Write("스레드 아이디" 1,2)스레드 5개는 Read ("스레드 아이디" 3,4,5)일을 시키는데이렇게 되면 Read만 하는 스레드는 ReadLock만 잡고Write만 하는 스레드는 WirteLock만 잡게 되어서1번 아이디의 스레드(Write)가 Read Lock을 잡을 수 없지 않나요?아래 코드에서 Readlock 함수를 보면WRITE_THREAD_MASK를 씌어서 threadId를 비교하는데 이 부분은 실행 안될 거라고 생각되는데 맞나요?실제로 디버그에서 ReadLock에 포인트를 잡고 봤는데 브레이크 포인트에 걸리지는 않았습니다.제가 궁금한 걸 글로 쓰려니 잘 정리가 안돼서 죄송합니다.질문을 요약하자면1.ReadLock을 잡는 스레드의 id는 WriteLock을 잡는 스레드 id와 똑같을 수가 있나요? // ReadLock const int lockThreadId = (_lockFlag.load() & WRITE_THREAD_MASK) >> 16; if (lockThreadId == SharedThreadId) { _lockFlag.fetch_add(1); return; } // WriteLock const int lockThreadId = (_lockFlag & WRITE_THREAD_MASK) >> 16; if (lockThreadId == SharedThreadId) { _writeCount++; return; }
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
pushOnly 인자를 주는 이유
JobQueue::Push 에서 pushOnly를 추가해야 하는 이유를 잘 모르겠습니다. JobQueue::Push 함수가 실행되었다는 것은 이미 예약한 시간이 되어서 실행되어도 좋은 Job이 JobQueue에 Push된다는 뜻이 아닌가요? 지금 당장 실행되어도 좋은 Job을 Push 하려는데, 왜 굳이 JobQueue::Execute를 건너뛰고 GlobalQueue::Push를 호출해서 한 타이밍 늦게 Job을 실행시키는지 잘 모르겠습니다.
-
해결됨[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
하나의 쓰레드에만 일감이 몰리는 현상이 왜 안좋은가요?
하나의 쓰레드가 여러 개의 JobQueue를 점유하는 현상이 안좋은 이유는 알겠습니다. 다른 쓰레드가 다른 JobQueue의 Job들을 처리하지 못하게 되니까요. 그런데 모든 쓰레드가 모든 일감을 처리할 수 있는 만능 일꾼이 된 상황에서, 하나의 쓰레드가 하나의 JobQueue를 오래동안 잡고있는 현상이 왜 안좋은지는 잘 이해가 안갑니다. 어차피 하나의 쓰레드가 붙잡고 해야할 일이 아닌가요? 동시에 여러 쓰레드가 처리 가능한 것도 아닌 것 같구요... 예를 들어, 쓰레드 A, B, C가 있다고 해봅시다. 쓰레드 A가 JobQueue 'ㄱ'를 점유하고 계속 작업을 하고 있습니다. 쓰레드 B와 C는 'ㄱ'과 관련된 일은 모두 A에게 몰아주고 나머지 작업들을 처리하고 있습니다. 그런데 A의 'ㄱ'점유가 너무 길어져서 'ㄱ'의 점유를 B에게 넘겨주었습니다. 그리고 A는 B와 C가 하던 것 처럼 나머지 작업들을 처리하게 되었습니다. 그럼 결국 'ㄱ'의 점유가 A에서 B로 넘어갔을 뿐 달라진 것이 없지 않나요? 오히려 쓸 데 없는 스위칭 비용만 발생한 것이 아닌가요?
-
미해결모든 개발자를 위한 HTTP 웹 기본 지식
분할전송과 범위전송 관련하여 질문있습니다!
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요. 영한님 HTTP 강의 잘 듣고 있습니다. 이번 강의는 전송방식을 다루는 부분이다보니까, 서버 -> 클라이언트로 데이터를 전송하는 예시가 나오는데분할전송과 범위전송의 차이가 궁금합니다. 제가 이해한 바로는 아래와 같습니다. 일단 기본적으로 둘 다 보내고자하는 데이터를 나눠서 보낸다는 점은 동일한거 같은데, 범위 전송의 경우, 여러번의 요청과 응답(?)으로 이루어지는 방식이라, 중간에 전송이 실패하더라도 성공적으로 보냈던 이후, 부터 다시 전송이 가능해보이지만 분할전송의 경우, 한번의 요청과 응답(?)으로 이루어지는 방식이라, 중간에 전송이 실패하면, 다시 처음부터 요청과 응답을 해야되지 않을까? 제가 제대로 이해한게 맞을까요?? 아니라면, 어떠한 차이점이 있는지 궁금합니다!!
-
미해결모든 개발자를 위한 HTTP 웹 기본 지식
HOST와 PORT 관련 질문입니다.
다른 분들의 질문들을 읽어보다가 생긴 궁금증입니다. Q1. 여러 도메인을 한번에 처리할 수 있는 서버라는 뜻이 여러 도메인이 같은 IP주소를 갖는다는 의미인건가요? Q2. 그렇다면 각각의 여러 도메인의 포트번호는 다를 수도 있고, 같을 수도 있는지 궁급합니다.
-
미해결풀스택을 위한 도커와 최신 서버 기술(리눅스, nginx, AWS, HTTPS, 배포까지) [풀스택 Part3]
docker-compose up -d 명령 실행 후 커서 작동 안함
안녕하세요 강사님, docker-compose up -d 실행후 lock이 걸린듯 아무 key 먹지 않습니다. 그래서 강제로 터미널을 종료하고 다시 ssh -i ~ 명령으로 ubuntu로 들어가려고 하면 ubuntu로 못 넘어가네요.. docker도 restart 해보고 AWS 인스턴스도 재부팅을 해 보았는데 똑 같은 상태 입니다. AWS 인스턴스를 중지하고 다시 기존 보안코드로 시작을 하였더니, ubuntu로 다시 들어 갈 수 있었고 docker-compose up -d 를 실행 할 수 있었습니다. docker-compose up -d 실행 때 갑자기 이런 현상이 또 발생할 경우 순조롭게 하려면 어떻게 하면 좋은지 알려 주시면 감사하겠습니다.
-
해결됨모든 개발자를 위한 HTTP 웹 기본 지식
GET도 message body를 포함하는 경우 캐시하기 힘든가요 ?
밑에 질문 글과 강의를 종합해 볼 때 1. 리소스가 변경되는 Method일 때는 캐시가 유용하지 않다 2. 요청이 message body를 포함할 때 캐시키를 만들기 어려워서 구현이 어렵다 이렇게 이해했는데요. 2번에 걸려서 GET도 캐시가 어려워질 수 있는지 궁금합니다