묻고 답해요
156만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결모든 개발자를 위한 HTTP 웹 기본 지식
3xx-리다이렉션 강의 중 질문 있습니다.
안녕하세요:) 결제 API에서 클라이언트와 서버 통신 예외처리에 대해 질문이 있습니다. 6분 34초경에 "클라이언트에서 유저가 페이지 리로드할 경우가 있어서 동일 주문이 서버에 요청이 될 수 있기 때문에 서버에서도 예외처리해놔야한다"고 하셨습니다. 제가 영한님의 말씀을 듣고 처음 생각난 방식은 클라이언트에서 주문번호를 난수로 만들어준 다음 쿠키에 저장하여서 동일한 주문번호를 서버에 요청했을 때 서버에서 거절하면 된다고 생각했은데, 클라이언트에서 주문번호를 자리수가 짧은 난수로 만들었을 때 중복되는 값이 발생할 것으로 생각이 드네요. 그래서 이 방법은 또 다른 이슈를 발생시킬 것 같아 좋은 방법은 아닌 것 같고... 2 번째로는 처음 생각한 방법을 응용한건데 난수를 유저테이블의 index와 구분자 그리고 현재 유닉스시간까지 숫자를 합쳐서 만들면 중복될 가능성이 낮아질 것 같다는 생각을 했습니다. 예) 12/1609305240 혹시 더 나은 방법이 있을까요? 8분30초 경에 말씀해주시는 주문 중복을 피하는 방법에 대해서는 이해했습니다!
-
미해결모든 개발자를 위한 HTTP 웹 기본 지식
patch가 멱등하지 않은이유가 궁금합니다
put이 지칭한 서버의 리소스를 새로 덮어씌우기 때문에 멱등한것은 알겠습니다. 그런데 patch도 지정된 리소스의 부분만을 접근해서 변경하는 행위를 반복하는건데 왜 멱등하지 않은지 궁금합니다. 어짜피 외부의 변경은 고려하지 않는다면 항상 같은 결과가 나올것이라고 보장할 수 있는거 아닌가요?
-
미해결모든 개발자를 위한 HTTP 웹 기본 지식
no-store 로도 충분할 것 같은데 no-cache, must-revalidate 는 왜 같이 추가하는 것인가요?
하위 호환을 위해서 Pragma : no-cache 헤더를 추가하는 것은 이해가 되는데. no-cache, must-revalidate 는 왜 추가하는 것인지 이해가 되지 않습니다. 데이터가 이미 캐시가 되어 있는 경우 또는 새로운 데이터를 응답하는 경우 모두 캐시를 무효화 시키고 싶다면 서버에서 no-store 로도 응답하면 되는 것아닌가요?
-
해결됨모든 개발자를 위한 HTTP 웹 기본 지식
클라이언트의 협상 관련 헤더에 따른 응답은 WAS 에서 개발자가 로직으로 처리해줘야 하는 것이죠?
안녕하세요 강사님 좋은 강의 감사합니다! 질문이 2가지가 있는데요.1. 예를들어요청의 흐름이 다음과 같을 때 브라우저 -> Nginx -> Spring Request Header 의 Accept-Langauge 가 ko 로 옵니다.그럼 서버에서는 1, 지원하는 language 가 뭔지 파악 2. accept-langauge 를 토대로 적절한 langague 로 본문을 응답이런 로직이 있어야 하는데 해당 로직은 WAS 에 개발자가 직접 로직을 작성해야 하는 것 맞나요? 2. 아래 그림의 Quality 값은 브라우저가 자동으로 넣어주는 값인가요? 아니면 개발자가 서버에 요청시 세팅해주는 값인가요?
-
미해결모든 개발자를 위한 HTTP 웹 기본 지식
Persistent Connections에 대한 질문이 생겼습니다 선생님!
선생님 강의 정말 잘 듣고 있으며 좋은 자료 또한 제공해주셔서 피상적이었던 지식이 구체화 되는 작업에 정말 도움이 많이 되고 있습니다. 다름이 아니라 지속 연결에 대해서 한 가지 궁금한 점이 생겨서 이렇게 질문 남깁니다. http 의 방향이 stateful -> stateless 이렇게 진화한다고 저는 이해했습니다. 진화한 이유는 클라이언트와 서버간의 연결을 계속 지속한다면 자원의 고갈이 일어나기 때문이죠! 그렇다면 지속연결이 탄생한 배경은 stateless가 자원의 고갈은 방지하나 여려번의 3 way handshake가 비효율적이기 때문에 이를 방지하고자 여러번의 3 way handshake의 횟수를 줄이기 위해서 하나의 연결이 지속될때 어느정도 까지는 쭈욱 유지하자 라고 이해했습니다! "그렇다면 Persistant Connections가 언제까지 유지되어야하는 그러한 규약같은건 따로 없는지요?" "또한 Persistent Connections는 비연결성과 연결성의 중간 지점이라고 생각해도 되는지요?" 이 두가지가 강의 도중 궁금하여 질문 남깁니다~!! 고맙습니다!!!!
-
미해결모든 개발자를 위한 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: 게임 서버
3d 게임에서의 이동 동기화 패킷 관련해서 질문드려요.
1. 보통 3d게임에서 이동 동기화 패킷을 클라이언트가 ms단위로 보내는 걸로 알고 있는데 보통 초당 몇번의 이동 패킷을 서버로 보내야 케릭터 움직임이 부드럽게 동기화가 되는지 궁금합니다. 실무에서 어느 정도 정해진 평균치 같은게 있는지도 궁금해요. 2. 꼭 ms단위로 보낼 수 밖에 없는지 궁금합니다. 캐릭터의 다이나믹한 움직임 및 언덕 올라가기등.. 서버에서도 똑같이 시뮬레이션 할 수있다면 서버 클라 각자 이동 시뮬레이션을 돌려서 도착지점에서 동기화 해주면 될 것같지만 현실은 서버에서 그런 시뮬레이션 하기가 어렵기 때문에 클라가 그냥 무식하게 이동패킷을 막 쏘는 것 같은데 이런 경우는 현실적으로 어쩔 수 없는 부분일까요..? 이동 패킷 처리 비용이 너무 아깝네요.. 실무에서는 이런경우 어떤 식으로 대처하는지 궁금합니다. 타일 단위로 움직이는 2d나 턴제 게임서버 개발하고 싶네요.. 강의 항상 감사드립니다~!
-
미해결[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: 게임 서버
lock과 send 질문!
public void Send(byte[] sendBuff) { lock (_lock) { _sendQueue.Enqueue(sendBuff); if (_pendinglist.Count == 0) RegisterSend(); } } // private void RegisterSend() { while (_sendQueue.Count > 0) { byte[] buff = _sendQueue.Dequeue(); _pendinglist.Add(new ArraySegment<byte>(buff, 0, buff.Length)); } _sendArgs.BufferList = _pendinglist; bool pending = _socket.SendAsync(_sendArgs); if (pending == false) { OnSendCompleted(null, _sendArgs); } } 처음에 send에서 lock을 걸고 pendinglist의 Count가 0일 때만 RegisterSend()를 호출하는데, RegisterSend() 내부에서 while문을 돌며 sendqueue의 count만큼 pendinglist에 sendqueue 데이터를 넣어주고 있잖아요? 근데, sendqueue의 count가 2이상인 경우가 가능한지 궁금합니다.. 위의 Send에서 lock을 걸어두면 RegisterSend()의 호출이 끝날때까지 다른 Session이 접근 못하지 않나요?