게시글
질문&답변
백엔드 개발자가 갖춰야 할 네트워크 지식의 범위와 깊이에 대해 질문드립니다.
드릴 말씀이 많기도 하고 길어지기도 하네요. 관련 내용에 대해 이미 여러 차례 제가 운영중인 유튜브 채널에서 답변을 드린 적이 있습니다. 이 영상들을 참고하시면 도움이 되리라 생각됩니다. 😄https://www.youtube.com/@nullnull_not_eq_null/search?query=%EB%B0%B1%EC%97%94%EB%93%9C그리고 네트워크에 대해서 한정해 말씀드리자면 외워서 끝내는 네트워크 핵심이론 - 기초는 물론 꼭 응용편까지 보시기 바랍니다. 부하분산에 관한 문제는 중요하기 때문입니다.https://www.youtube.com/watch?v=GAyZ_QgYYYo
- 0
- 2
- 6
질문&답변
게임에서 랜선 뽑았다 다시 꽂을 때, 입력 몰아 보내기가 가능한 이유가 궁금합니다
버퍼링 영역이 영역은 소켓에도 있고 TCP같은 전송 구현 자체(보통 OS에 구현되어 있음)에도 있습니다. 다만 UDP는 버퍼링 없이 즉시 전송합니다. 필요하다면 응용 프로그램 수준에서 버퍼를 구현해야 합니다. 그런데 그보다 더 큰 문제는 응용 프로그램 수준에서 UDP 소켓 사용 시 물리적으로 랜 케이블이 분리된 상황을 인지할 수 없다는 점 입니다.TCP와 버퍼네. 그렇게 작동합니다. 다만 그런 상황이 '혼잡' 상황과 연결됩니다. 이는 철저히 혼잡제어 규칙에 따릅니다. 버퍼링은 응용 프로그램 수준 및 OS수준 모두에서 일어납니다. 이런 절차를 간소화 하는 방식으로 불필요한 메모리 복사를 줄여 성능을 높이기도 합니다. (대표적으로 윈도우의 IOCP)그리고 몰아 보내기는 가능합니다. 이런 문제를 해결하기 위한 노력은 전적으로 게임서버 개발자의 몫이 되겠습니다.그리고 상점 뚫기를 넘어 아이템 복제같은 버그가 발생하기도 합니다. 참고하시기 바랍니다. 😄
- 0
- 1
- 5
질문&답변
임시 객체 복사 생성자 질문드립니다
testFunc() 함수가 반환하는 자료형이 TestData 클래스라면 testFunc() 함수 호출의 결과로 TestData 클래스 인스턴스가 생성되며 이는 임시객체에 해당합니다. 이 임시객체를 원본으로 result 인스턴스가 만들어집니다. 임시객체가 만들어지는 경우는 operator+() 연산자 같은 것을 정의하거나 함수의 반환형으로 클래스 인스턴스가 넘어오는 경우입니다. 두 경우 모두 r-value 참조가 적용됩니다. 만일 TestData 클래스가 int형 자료 하나를 매개변수로 갖는 생성자가 존재하고 testFunc() 함수의 원형이 testFunc(TastData param) 같은 형식이라면 testFunc(10) 호출이 testFunc(TestData(10))으로 처리될 수 있습니다. 이 경우 TestData(int) 생성자가 호출될 수 있는데 이를 묵시적 생성이라 합니다.그리고 생각하시는 것처럼 결국 모든 것은 컴파일러 최적화에 따라 객체가 생성되지 않고 사라질 수도 있습니다. 이는 전적으로 컴파일러 최적화 규칙에 따릅니다. 조금 복잡하긴 하지요. 안타깝게도 문법을 이해하는 것 외에 다른 대안이 없습니다. 참고하시기 바랍니다.
- 0
- 2
- 7
질문&답변
2진수 뺄셈에서 carry-out
AI 답변을 참고하시면 될 것 같습니다. 거기에 하나 더 추가하자면...단순한 규칙의 차이로 생각하시라는 말씀을 드려봅니다. 😄
- 0
- 2
- 12
질문&답변
전가산기에 대한 질문이 있습니다!
두 비트의 값을 더할 때 결국 세 비트가 필요합니다. 2진수 한 자리 숫자 1과 1을 더하면 2진수 10이 됩니다. 이 때 자릿수가 올라간 1은 그 다음 덧셈에도 사용되어 야 합니다. 예를 들어 10진수 25와 15를 더하는 경우 5 + 5는 10이 되며 이어지는 10자리 덧셈 2 + 1에 자리올림 1을 추가해 더하는 것처럼 한 자릿수에 대해 3가지 숫자를 더해야 합니다. 아무튼 이렇게 한 자리 숫자들을 더할 때는 세 가지 입력을 처리 할 수 있어야 합니다. 2진수는 보통 한 자리 숫자를 bit로 다룹니다. 8비트 숫자의 경우 2진수로 보변 8자리 숫자가 됩니다. 따라서 8자리 각각의 비트를 더하려면 1비트 전가산기가 필요하며 이를 병렬로 연결해 8개를 이어주면 8비트 가산기가 완성됩니다. 혹시 설명이 아직 부족하다 판단되면 다시 댓글로 알려주세요. 유튜브에서 영상으로 다시 설명해드리겠습니다. 😄
- 0
- 2
- 7
질문&답변
union 식별자는 실무에서 보통 어디에서 사용하나요?
인프런 AI 답변을 참고하시면 되겠습니다. 거기에 개인적인 경험을 하나 더 추가하자면...저는 거의 사용한 경험이 없습니다. 사용하는 라이브러리에서 공용체가 등장하기 때문에 사용한 경우는 있었으나 내가 작성하는 프로그램에서 공용체가 필요했던 일은 없었습니다. 이는 제가 하드웨어를 직접 제어하는 소프트웨어를 개발하지는 않았기 때문일 것입니다. 더불어 생각해보시면 좋겠습니다. 😄
- 0
- 2
- 15
질문&답변
자료구조 공부 언어
굳이 C언어를 고집할 이유는 없습니다. 자료구조는 언어에 특수화 되는 이론이 아니기 때문입니다. 다만 자바 스크립트로는 한계가 있을 수 있는 부분이 일부 있을 수 있습니다. 그러나 이 부분마저도 AI를 활용한다면 충분히 극복할 수 있을 문제가 아닐까 싶습니다.C언어를 공부해두면 컴퓨터 구조에 대한 이해가 깊어질 수 밖에 없습니다. 요즘 같은 시대에 C언어는 구세대의 언어이자 CS전공자를 위한 언어일 수 있습니다. 그러나 JVM이나 V8 엔진은 여전히 C/C++로 개발되고 있다는 사실은 다시 한 번 생각해야 할 문제입니다.결과적으로 꼭 C언어에 대한 이해가 필요하다고 스스로 판단이 서기 전까지 굳이 C언어를 할 필요는 없으나 경력자로써 CS이론에 대한 폭넓은 이해를 갖춰야 한다는 생각이 들면 그 때 공부하시기 바랍니다. 😄
- 0
- 1
- 9
질문&답변
Drive by download 공격에 대해 찾아보았는데, 맞게 이해했는지 궁금합니다!
네, 그 정도로 이해하고 계시면 충분할 것 같습니다. 여기에 한 가지를 더해보자면...이런 문제를 해결하기 위한 수단으로 CORS가 존재한다는 사실을 이해하는 것입니다. 왜 CORS가 꼭 필요한 것인지 기술적으로 정확히 이해하고 있다는 것을 면접관에게 알리는 것은 의미가 있다고 생각합니다. 참고하시기 바랍니다. 😄
- 0
- 2
- 11
질문&답변
JVM 메모리와 CPU 1,2차 캐시
JVM은 그 존재 자체가 하드웨어에 대한 의존성을 제거하는 계층인 것입니다. 그러니 하드웨어 수준의 CPU 문제에 대해서는 고려할 이유가 없습니다. 그것은 JVM 자체를 개발하는 개발사가 고민해야 할 문제 입니다. 그리고 어떤 강사님께서 CPU 캐시를 근거로 설명하셨는지는 알 것 같습니다. 안타깝지만 그 설명은 잘못된 설명입니다. 참고하시기 바랍니다. 😄
- 0
- 2
- 9
질문&답변
단편화 관련 질문
AI 답변을 참고하시면 되겠습니다. 😄
- 0
- 2
- 14