인프런 커뮤니티 질문&답변
안녕하세요 선생님 전체적인 구조에 대해서 질문 드립니다.
작성
·
388
1
질문 1 : 클라이언트 세션에 대해서
수업 하신 내용이 클라이언트 1명이라고 가정 하셨을 때
내용인데 , 리스너에서 클라이언트 연결 신호가 오면
Accept를 해서 A라는 클라이언트에게 A 클라이언트 세션을
하나 주어서 , A 클라이언트는 A 세션을 통해서 서버와 패킷을
주고 받고 통신을 한다
만약 클라이언트가 1000명이라고 접속 했다고 했을 때
클라이언트 세션은 1000개가 만들어 지나요???
질문 2 : 클라이언트 세션이 정확히 하는 일이 무엇인가요?
이해가 잘안되서 제가 비유를 만들어서가 예를 들어 보겠습니다.
제가 게임에 접속해 채팅 패킷을 보냅니다. 이 패킷에는
뭐 채팅 타입 (전체냐, 일반이냐, 귓말이냐)랑 채팅 내용을
캡슐화를 시켜서 서버에게 보내고, 서버가 이 패킷을
파싱해서 일반이냐 전체냐 귓말이냐를 판단을 해서 패킷 처리
를 하고 채팅 타입에 맞는 채팅 범위에 있는 클라이언트에게 뿌
려주는 구조.
이때 클라 1000명이 게임에 입장을 하면
일단 해당 000 게임 서버 컴퓨터에 연결이 되어 있다는 소리이
고, 서버 컴퓨터 내부에는 "각각" 클라 1000명에 대한 세션이
마련되어 있고, 클라가 1000명이 채팅을 패킷을 쏘면
서버 컴퓨터 내부의 "각각의" 클라 세션에 패킷이 전달이되고
TCP 구조니까 순서보장 즉, 먼저 온 패킷부터 서버 컴퓨터가
1000개의 클라 세션에서 받아서 패킷 처리를 한다.
--> 제가 이해한 부분이 맞습니까 선생님? 너무 헷갈립니다.
처음에 다 그런거 겠죠?? ㅠ.ㅠ
추가적인 질문 선생님 따로 이메일 이나 그런게 없어서
여기다 질문 드립니다.
선생님꼐서 현업 개발자 이면서 가르치시는 선생님으로
알고 있는데요
저번에 질문 주실때 코딩테스트 난이도는 삼성이나 카카오
정도로 어렵지 않다라고 하셨는데
제가 넥X, 을 목표로 준비를 하고 있습니다.
영어 지문이라고 하는데, 프로그래머스 LV2,LV3 정도 문제
풀이를 하나하나 하고있는데, 이럴거면 해커랭크를 가지고
이용해야하는지
그리고 어떤 분은 온라인 코딩테스트가 어렵다고 하고
어떤 분은 쉽다고 그러고, 선생님께서 저번에 말씀해주신
왠만한 학교에서 배우는 자료구조 손코딩 이며, 설명 가능하
고 문자열 뒤집기등 문자열과 관련된 함수 같은거 10개정도
회문, 뭐 기타 구글에서 검색해서 나올수 있는 손코딩은
전부다 모아서 외우고 설명 준비를 했는데
수업시간에 선생님께서 넥X ,엔X 면접도 보셨다고 하셨는데
그때 당시 온라인 코테 난이도가 어느정도였으며
그떄 당시 선생님꼐서는 코테 어떻게 준비 하셨나요?
뭐 알고리즘 책 저번에 추천해주신거 그때 당시 선생님꼐서
는 깊게 공부하시지 않으셨던것 같은데
질문이 길어져서 죄송합니다.
답변 1
4
1)
만약 클라이언트가 1000명이라고 접속 했다고 했을 때
클라이언트 세션은 1000개가 만들어 지나요???
-> 그렇습니다!
2)
클라이언트 세션이 정확히 하는 일이 무엇인가요?
-> 대부분 맞게 설명을 해주셨는데요.
세션의 역할은 서버 쪽에서 연결된 1개의 클라에 대한 모든 정보를 기록하는 곳입니다.
식당으로 치면은 손님(Client)의 입장을 도와주는 안내원(Listener)이 있고,
안내원이 어떤 테이블(Session)로 자리 안내를 도와줄테고
손님은 다시 본인의 외투나 가방 등을 테이블 (혹은 테이블 좌석)에 놓겠죠.
그리고 앞으로 해당 손님이랑 대화할 일이 필요하면
직원이 해당 테이블로 찾아오겠죠?
이게 딱 세션의 역할입니다.
실제로 세션은 클라에 대한 모든 정보를 갖고 있는데
특히나 Listener의 Accept 단계에서 만들어지는 Socket을 갖고 있어서
혹시라도 해당 클라와 네트워크 통신이 필요하면
해당 Session에 있는 Socket을 이용해서 Send를 해주게 됩니다.
그 외에 컨텐츠 관련 정보 (Account, User, 소속된 GameRoom 등) 도
Session에 들고 있으면 됩니다.
3)
게임회사는 카카오나 네이버, 삼성만큼 알고리즘 시험이 빡세진 않고,
정말 기본 손코딩 문제만 나오는 경우가 대부분입니다.
그러나 이건 회사에서 준비하는게 아니라
각 면접관이 '알아서' 준비하는 것이기 때문에
면접 운에 따라 매우 다를 수밖에 없습니다.
그러니까 뭐가 나와요? 같은 질문은 의미가 없는게,
면접관이 어려운 문제를 준비할 수도 있고, 그렇지 않을 수도 있습니다.
넥슨은 (아마도) 게임 회사중에선
유일하게 코딩 시험을 회사에서 체계적으로 치루게 되는데요.
요즘은 어떤지 모르겠지만 제가 지원했을 때는
지원한 팀 면접을 보기도 전에 온라인/오프라인 코딩이 있었는데,
회사에서 준비한 문제 풀에서 나왔었습니다.
온라인 과제는 4일 주고 4문제를 푸는 것이었는데
종만북 기준으로 난이도 [하]의 문제라서 딱히 어려운 수준은 아니지만,
평소에 알고리즘 공부를 전혀 안 했다면 손도 못대는 수준입니다.
구체적인 내용은 말씀드릴 수 없지만
대략적으로 수학, 그리디, DFS, DP와 같이 전형적인 알고리즘 주제가 출제 되었습니다.
반면 오프라인 코딩은 1시간이고
단순한 문제가 출제되지만 독방에 갇혀서 보기 때문에 환경적으로 어렵습니다 -_-
(제가 봤을 때와 현재는 또 달라졌을 수 있으니 너무 믿진 마세요.)
그리고 넥슨은 요즘 팀이 워낙 많아 터져서 내부 이동을 대기중인 사원이 아주 많습니다.
따라서 프로그래머라면 내부 대기 TO를 제치고 뽑을만큼
엄청난 스펙이나 실력이 아니라면
시기상 매우 어렵다는 것을 참고하시기 바랍니다.
마지막으로 제가 추천드린 책은 제가 본 수많은 책들중
실질적인 도움이 된 책을 추천드리고 있는 것입니다.
특히나 종만북은 정말 오랫동안 몇번에 걸쳐서 반복 학습 했고
저자의 내공과 쉬운 설명에 감탄을 하는 몇 안 되는 책입니다.
어차피 다른 공부와 다르게 알고리즘은 하루 이틀에 준비할 수 있는 내용은 아니니
그냥 마음 편히 이리 저리 막 지원을 하시면 됩니다.





