묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결모든 개발자를 위한 HTTP 웹 기본 지식
질문이 있습니다.
보통 서버 에서 POST/PUT/PATCH 로 받아도, service의 로직에 따라 의미가 달라질텐데, (예를들어 PUT으로 받아도, 부분 수정이 가능하도록 짜는 경우?) 강의에서 말씀하시는 내용들은 HTTP Method의 단순 개념에 대해 말씀하시는걸까요??
-
미해결모든 개발자를 위한 HTTP 웹 기본 지식
상태코드를 지정하는 방법
안녕하세요 강의 너무 잘 듣고 있습니다! 상태코드와 관련해서 이를 어떻게 설정하는지 이해가 잘 되지 않습니다.. 예를들어 303 코드를 지정하려면 특정 post요청이 올 경우 특정 get으로 보내주어야 하는데 이에 대한 설정들은 어떻게 이루어지나요? 응답에 Location 헤더가 존재할 경우 알아서 3XX을 반환하는건가요..? 이제껏 개발자가 직접 지정하는 영역이 아니라 브라우저가 알아서 판단 후 내보낸다고 생각했는데.. 예를들어 말씀하신 것처럼 302가 아닌 303으로 지정하려면 어디에 어떠한 설정을 해주어야 하는건지 질문드립니다. 항상 좋은 강의 감사합니다.
-
미해결모든 개발자를 위한 HTTP 웹 기본 지식
5XX 관련 질문있습니다.
안녕하세요강의 중 20살 이상인 경우에 통과하는 로직이 있는데 15살이 들어온 경우 5XX 가 아닌 다른 에러를 출력하라고 하신 부분에 대한 질문입니다. 위와 같은 경우에는 400 Bad Request 에러를 내야 하는 건가요 ?? 아니면 다른 대안이 있을까요??
-
미해결모든 개발자를 위한 HTTP 웹 기본 지식
안녕하세요! 질문있습니다.
안녕하세요. 영한님, 항상 좋은 강의 감사드립니다. 한가지 궁금한 점이 생겼는데요. 만약 http 통신을 하는 상황에서, 로그인을 한 후에 set-cookie로 발급받은 sessionId를 해커에게 탈취당하면 해커는 해당 sessionID를 이용하여 제 아이디로 로그인이 가능한 상황이 되는 건가요??
-
미해결모든 개발자를 위한 HTTP 웹 기본 지식
Patch 메서드가 멱등이 아닌 이유
패치의 경우 멱등성을 갖지 않는 이유가 무엇인가요? 외부 요인에 의해 값이 변경되지 않는 이상 항상 같은 결과를 가져오는 것 아닌가요..?
-
미해결모든 개발자를 위한 HTTP 웹 기본 지식
http status
안녕하세요 ㅎㅎ 강의를 보다가 또 다른 질문이 생겨서 이렇게 질문 남깁니다.ㅎㅎ 1. 유저A 가 유저 B의 order id를 요청하는 경우 URL-GET orders/2-(유저 B order id) 403,404? 어떤 상태 코드를 실무에서는 많이 쓰고 이유가 있을까요? 2. PRG POST /orders -주문 API 주문생성을 예로 들어 PRG를 중복 주문을 막기 위해 쓰신다고 하셨는데 혹시 그렇게 되면 주문생성 API 사용성이 떨어지는 문제는 없나요? 가령 모바일에서도 해당 API를 사용한다든지, 여러 클라이언트(모바일, 웹)등 에서 redirect 하려는 페이지가 다르다든지.. 차라리 서버에서 중복을 잘 막고 나머지는 클라이언트 처리하는 방식은 실무에서 자주 쓰는 방법은 아닌가요? 이번에도 좋은 강의 감사합니다. ㅎ
-
미해결모든 개발자를 위한 HTTP 웹 기본 지식
POST /orders/{orderId}/start-delivery 질문있습니다.
배달의 경우 여러가지 상태값[배달전, 배달 시작, 배달 끝]이 있을거 같은데 배달 상태의 변경의 의미가 있는 PATCH /orders/{orderId}/delivery/{배달 상태값} 같은 식으로 url을 만들어야 하는거 아닌가요??
-
미해결모든 개발자를 위한 HTTP 웹 기본 지식
질문 있습니다.
안녕하세요 새로 나온 강의 잘 보고 있습니다.ㅎㅎ 강의를 보다 궁금한 점이 있어서 질문드립니다. 1.put vs post 강의에서 말씀하신 것처럼 주문의 배송 시작을 예로 들자면.. post /orders/{order-id}/start-delivery patch /orders/{order-id} - {deliveryStatus:start} (배송상태를 start로 바꾼다) 이렇게 두 가지 방법이 있을 것 같은데 혹시 어떤 방법이 더 낫고 이유를 알 수 있을까요? 배송 시작이라는 프로세스가 라이더 호출 등 복잡한 프로세스가 포함된다면 post가 나은 방식인가요? 2.resource 보통 api resource는 비즈니스 도메인과 비슷하게 구성하나요? 아니면 아예 독립적으로 구성을 하나요? 항상 좋은 강의 감사합니다.
-
미해결모든 개발자를 위한 HTTP 웹 기본 지식
웹 브라우저 요청 흐름에 대한 질문입니다
1. resource 요청 시, 웹 브라우저가 HTTP 메시지 생성 2. SOCKET 라이브러리를 통해 TCP/IP로 3way handshake를 실행해 서버와 연결한다. 3. 운영체제 TCP/IP 계층으로 데이터 전송을 하기 위해 데이터를 전달한다. 4. HTTP 메시지가 포함된 TCP/IP 패킷을 생성한다. 5. 패킷 정보가 인터넷으로 흘러간다. 6. 서버에 요청 패킷이 도착하여 패킷 껍데기는 버리고 HTTP 메시지를 서버가 해석한다. 7. HTTP 응답 메시지를 마찬가지 방식으로 패킷을 생성하여 응답 패킷을 전달한다. 8. 수 많은 노드들을 통해서 응답 패킷이 도착하게 되면 웹 브라우저가 HTML 렌더링하여 화면에 보여준다. 강의를 들으면서 요청 응답 흐름을 정리해보았는데, 제가 이해한 내용이 맞는지 여쭤보고자 글 남깁니다.
-
해결됨모든 개발자를 위한 HTTP 웹 기본 지식
클라이언트 서버 구조 강의 파트에 대한 질문입니다.
안녕하세요, 클라이언트 서버 구조 강의 파트를 학습하다 궁금한 점이 생겨 질문드립니다. 해당 강의에서 매번 언급하셨던 '클라이언트 서버'란 단순하게 물리적인 서버에 요청을하는 '클라이언트(사용자)'를 뜻하는 의미가 아닌 개발적인 측면에서 Front-end 서버를 의미하는 것일까요? 만약, 그렇다고 한다면 제 입장에서 이해하는 클라이언트 서버란 요즘 트렌드인 Vue, React, Angular(+ Svelte)와 같은 Front-end 라이브러리 또는 프레임워크를 사용하여 구현된 홈페이지로 생각을 해도 되는지 궁금합니다 그럼 클라이언트의 요청(Request)에 따른 응답(Response) 과정은 아래와 같은 구조를 띄지 않을까 합니다.(과정은 최대한 단순화 하였습니다.) Client <--Req/Res--> Client Server(프론트엔드 서버) <--Req/Res--> Server(HTTP API가 구현된 백엔드 서버(+ DB 서버))
-
해결됨모든 개발자를 위한 HTTP 웹 기본 지식
TCP 관련 질문 있습니다.
TCP의 특징중 3-way-handshake에서 클라이언트와 서버가 연결이 확인 된 후 3단계 혹은 4단계에서 데이터를 전송할 수 있다고 설명해 주셨는데, TCP/IP 패킷 정보 장표에서 전송 데이터를 포함한 여러가지 정보들이 패킷으로 나가는게 이해가 안됩니다.. 데이터를 주고 받기전 상호 확인단계에서는 TCP/IP 패킷을 주고 받는게 아닌 다른 신호를 주고 받는 것인가요?
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
C++ IOCP서버와 Unity Client 연동 관련
안녕하세요. 제가 C++을 이용한 IOCP서버와 Unity C# Client 연동해서 게임을 제작해야하는 상황에 있습니다. 사실 C++로 구현된 서버인줄 알고 구매했는데 C# 서버에 대한 강의인거 같더라구요.. C++서버와 C#을 사용하는 Unity와의 연동 그리고 Unity 자체에 대한 이해도 부족 이것이 저의 가장 큰 걱정거리인데요. 이 강의를 들어면 Unity 서버에 대한 이해도가 생겨서 C++로 독자 서버를 구축하는데 있어서 괜찮을까요??.. 그리고 여쭤보고 싶은것이 있습니다 ㅠㅠ 서버도 배운지 얼마 안되고 더더욱 Unity는 잘 몰르는데 프로젝트는 진행해야하고 처음 서버 설계 과정부터 궁금한 점이 너무 많았고 검색을 해도 잘 나오지 않아서 어려움이 많았고 항상 궁금해했는데 도움을 주시면 정말 감사하겠습니다.. 1. C++을 이용한 IOCP 서버와 Unity C# Client 연동을 위해서 어떠한 것을 고려하고 작업을 해야하는지가 궁금합니다. Byte Stream 외에도 고려해야할 부분이 뭐가 있을까요? 2. Visual Studio와 Unity 연동 이라는 것이 Visual Studio에서 서버를 키고 Unity Client를 키면 접속이 되게 하면 끝인건가요? 처음 기본 환결설정에 대해서도 궁금합니다. 3. Unity는 사실상 싱글 스레드만을 사용할 수 있는 것으로 알고 있습니다. 멀티 스레드가 지원된다고는 하나 유니티 객체에 접근하는 순간 에러가 난다고 알고 있습니다 (주워 들은 내용인데 맞는지는 모르겠습니다) 그런데 멀티스레드 사용이 필요하게 될 경우 유니티에서는 단순한 연산 작업외에는 멀티스레드를 사용하면 안되는 것인가요? 코루틴 이라는 기능이 멀티쓰레드와 비슷하다고 알고 있는데 멀티스레드 기능을 코루틴이 대체해서 사용하면 되는건가요? 4. IOCP서버를 이용하는데 싱글스레드?? 제가 C++ IOCP서버를 구현해야 하는데 이 이유에 대해 타당하게 설명을 해야하는데 저부터가 의문이 듭니다. IOCP를 사용하긴 할건데 Unity에서 멀티쓰레드를 사용하지 못한다면 IOCP로 하는것이 의미가 있을까에 대한 의문입니다. 3번 질문과 연관이 되는 질문이긴 한데요.. 간략하게 제가 만들어야 하는 게임을 설명드리자면 RPG와 FPS 장르가 합쳐진 RPS 게임으로 다중접속이 필요합니다. FPS게임이기는 하나 반응에 민감한 전통 FPS 방식은 아니라 매 프레임마다 패킷을 전송은 하지 않아도 됩니다(TCP를 사용할 것이라는 뜻이기도 합니다) 어느정도 많은 인원의 동시접속을 받아야 하기 때문에 IOCP를 사용하긴 할 것인데 이 부분에 대해서 궁금합니다. 5. 1000명이 접속하더라도 로비에 모여서 4명의 플레이어가 파티를 맺고 4명의 플레이어가 오픈월드 및 던전에 들어가게 됩니다. 즉, 유저 입장에서 보기에는 4명의 파티만을 위한 1개의 오픈월드가 펼쳐지는 것이고, 서버 입장에서는 그러한 오픈월드가 250개가(250x4 = 1000명) 펼쳐지게 되는 것입니다. (Ex.배틀 그라운드) 이러한 게임을 만들고자 할 때 게임 서버를 처음에 어떤식으로 설계해야할지 잘 모르겠고 막막합니다.. 서버와 DB를 연동하는 방법은 간략하게 배워서 DB를 사용해야한다는 점은 알겠는데 그 외의 부분에 있어서 어떤식으로 구현을 해야할지 궁금합니다. 처음부터 너무 많은 질문을 적었는데 죄송합니다. 궁금한게 너무 많았는데 질문이라도 할 수 있는 상황이 생겨서 너무 길게 적게 되었네요. 질문에 대한 도움을 주시면 정말로 감사하겠습니다..!
-
해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
강의 듣던 중 궁금한 점이 있습니다.
지금까지 강의를 듣던 중에 가비지컬렉터 부분이 궁금합니다. C#은 가비지컬렉터가 작동하는데, 가비지컬렉터로 인해 반응성이 좋지 않을 수 있다고 들었습니다. 그래서 가비지 컬렉터가 최대한 작동하지 않도록 해야 한다고 생각했습니다. 따로 관리를 하는 게 맞나요?
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
17:30 초 부근에 QueueUserWorkItem 테스트하는 부분에서
ThreadPool.SetMinThreads(1, 1); ThreadPool.SetMaxThreads(5, 5); for (int i = 0; i < 4; i++) ThreadPool.QueueUserWorkItem((obj) => { while (true) { } }); ThreadPool.QueueUserWorkItem(MainThread); for문 체크하실 때 5에서 4로 바꾸셨는데 저도 똑같이 했는데 출력이 안됩니다. 3이하로 내리니까 출력이 됩니다. 디버그로 쓰레드가 몇개 있는지 확인해봤는데 주 쓰레드 포함 5개밖에 없다고 뜹니다. 왜이럴까요?
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
ArraySegment관련 질문
6분쯤에 ArraySegment가 Struct라서 스택영역에 할당되고 BufferList에 Add할 때 복사되어 전달된다고 설명하셨는데 struct가 스택영역에 할당되려면 몇가지 조건이 있는 것으로 알고 있습니다. 예를들면 16바이트 미만이고 멤버변수로 class가 없어야한다 등등... 그런데 위의 조건과 상관없이 Rookiss님이 설명하신 내용대로 되는 이유가 궁금합니다.
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
AcceptAsync() 수행시 항상 오류...
안녕하세요 마지막 DummyClient에서 ServerCore로 계속해서 요청 보내는 부분에서 이상한 에러가 나서 문의드립니다. ServerCore 쪽에서는 RegisterAccept에서 pending이 True 로 반환되고, DummyClient에서는 Connection refused Exception이 발생하네요 ㅠ System.Net.Internals.SocketExceptionFactory+ExtendedSocketException (61): Connection refused 192.168.35.35:7777 at System.Net.Sockets.Socket.DoConnect(EndPoint endPointSnapshot, SocketAddress socketAddress) at System.Net.Sockets.Socket.Connect(EndPoint remoteEP) at DummyClient.Program.Main(String[] args) in /Users/hun/Projects/Server/DummyClient/Program.cs:line 28 혹시 의심될만한 부분이 있을까요?
-
해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
강사님, 이동 동기화에 대한 질문 있습니다.
혹시, 이동 동기화에 대한 방법이 두 가지 있다고 하셨는데, 1) 서버에서 허락 패킷이 왔을 때 2) 클라이언트가 먼저 이동하고 있다가 서버에서 응답이 오면 보정(보간) 먼저, 2)은 배틀그라운드 게임이 제가 기억하기에 이동을 하다가 갑자기 순간적으로 뒤로 가는 현상이 발생하는데 이 방법을 사용한 것인가요?? --- 첫 번째 질문 1)의 경우에 대해서는 어떤 상황인지 잘 모르겠습니다. 혹시 예시가 있을까요?? --- 두 번째 질문 그리고, 제가 두달 전에 Unity의 WebGL 플랫폼을 사용하여 실시간 멀티플레이어 축구 게임을 만든 적이 있습니다. Unity Client + Node.JS로 만든 서버를 사용하였습니다. 저는 동기화에 대한 지식이 없었기에 생각해낸 방법이 Client에서는 숨겨진 '분신'을 만들어 절대 위치 패킷을 받으면 '분신'이 움직이고 실제로 보이는 캐릭터는 따라가도록 구현하였습니다. 그리고 서버에 보내는 좌표는 실제로 보이는 캐릭터의 좌표를 보냈습니다. (RagDoll Component를 사용하여서 다른 클라이언트와의 물리적 충돌이 활발하기 때문에 조금 늦게 모두 같이 이동시킬 방법을 생각하다가...) 물론 '분신'은 보이지 않고 Colider, Rigidbody도 없기 때문에 많이 애먹으면서 많은 런타임 버그들을 잡았었습니다. 혹시 이런 물리적 충돌이 많이 일어나는 경우의 실시간 멀티플레이어 게임들은 두 가지 동기화 방법 중 어떤 방법을 사용하나요? 또는 어떤 방법을 더 많이 사용하나요? --- 세 번째 질문 그리고 수업 너무 좋았습니다. 아직 더 배워야 겠다는 생각과 함께 뿌듯합니다. 감사합니다!! 답변부탁드리겠습니다!
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
Connect를 이용하여 여러소켓 생성후 문제점
안녕하세요 루키스님 정말 강의 도움 많이 받고 있어요 !!소켓을 10번 생성과함께 커넥트를 요청하는 부분에0.1초 딜레이를 주면 (*대부분*) 잘작동하더라구요 하지만, 저 딜레이를 빼면 아래 그림과같은 에러가 나와요! 저는 이것을 비동기에서 발생하는 문제점이라고 생각했습니다. 그래서 Receive에 _lock을 걸어서 실험도해봤지만여전히 같은 오류를 내고 있더라구요 혹시 이런 에러가 발생하는 부분의 가능성이나해결방법이 어떤게 있을까요? 딜레이를 주는경우대부분 잘되는것은 비동기 문제가 맞는걸까요?
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
백그라운드/메인 쓰레드 그리고....
1. PackatQueue를 OnRecvcallback을 통해 거치게되면 유니티에서 사용되는 메인쓰레드로 사용할 수 있다는 얘기로 들리는데. 유니티에서 그렇게 작동하도록 만든것인가요? 즉 유니티 오브젝트와 서버를 연동시키려면 쓰레드는 무조건 큐(Push,Pop)를 거쳐서 와야한다? 라고 유니티 측에서 규칙을 정해둔거? 그리고 2. 전 강의에서 설명하셨을 수도 있는데 너무 많은게 지나가서 질문 드립니다... HandlePacket만으론 유니티와의 연동이 되지않은 걸로 보이는데 HandlePacket을 자동화해서 사용하는 이유가 있나요. 제가 이해한 바로는 1번에 해당하는 경우에만 유니티가 제대로 작동되는 걸로 보여져 HandlePacket은 뭘하는지 잘 모르겠습니다. 3. 기존에는 (유니티 연동 전) 백그라운드 풀에서 쓰레드를 뽑아와서 쓴다고 하셨는데.. 이 부분은 제가 잊은건지 모르겠지만.. 쓰레드 풀 자체를 어디서 생성해줬는지 기억이 가물가물합니다... 분명 첫수업시간 때 Task를 이용해 쓰레드 풀을 만드는 건 어렴풋이 기억이 나는데 그런 코드는 여기서 작성한 기억은 없고... 쓰레드 자체가 어디에서 왔는가에 대해 알려주실 수 있나요.. 메모하면서 진행해왔는데 찾기가 어렵네요. 4. 그리고 복습하는 도중에 알려주신 모든 부분을 응용해서 학습할 수 있게 해주신점 감사드립니다. 그런데 한가지 ThreadLocal을 이용한 최적화는 파이널 프로젝트에 응용한게 없는듯한데 파트 7정도 때에나 이런 것들을 한꺼번에 볼 수있을까요. 감사합니다. ---------------------------------------------------
-
해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
TCP Remote Access 관련 질문입니다.
강사님의 서버개발 강의를 다 보고 완성해서 Windows App, Android App을 만들어 테스트를 해보려고 했는데 원격지에서 TCP 접속이 계속 Timeout이 발생합니다. 서버와 클라이언트(Windows, Android)는 동일한 Hub 내에서 동작하고 있어요 고정 IP 하나에서 DHCP로 내부 아이피 할당받아 사용중입니다. 예로 서버의 내부 아이피는 192.168.0.40 이고 포트는 7777번 사용 중이고 Client는 192.168.0.40:7777로 접속을 시도하는 중이에요. 혹시나 Server 쪽에서 In/OutBound 정책을 설정을 안했나 싶어서 TCP 7777번 포트를 모두 열어놓았으나 Timeout이 발생해 모든 포트를 다 열어서 테스트했는데 동일하게 Timeout이 발생합니다. 원격지에서 TCP서버로 접속하려면 다른 설정이나 코드가 필요한것인가요?