2025 ICT 인턴십을 통해서 운좋게 금천구 C사에 서류 합격을 했다.
부푼 기대와 걱정되는 마음을 가지고 금천구 C사에 면접을 보러 갔다.
회사에 들어갔는데.. 다들 이어폰을 낀 채로 너무 조용해서 회사에서 키보드와 마우스 소리밖에 들리지 않아서 너무 긴장했다. 잘 말할 수 있을까 했는데.. 망했다ㅠㅠ.
나는 면접 시간보다 10분 먼저 도착해서 뻘쭘하게 회사 내부에서 서 있었는데 친절하신 선배분께서 면접 장소로 안내를 해주셨다. (물도 주심..ㅠ)
면접은 스몰토크로 회사와 집의 거리와 출퇴근 시간을 이야기하면서 시작되었다.
혼자서 공부하는 것이 힘들어서 동아리를 들어가고 싶었는데.. 학교에 동아리가 없다는 것을 깨닫고 컴퓨터학부 사람들끼리 동아리를 만들었다고 했다. 나보다 선배가 있어서 회장을 맡지는 못했고 부회장을 했다고 했다.
STL은 Standard Template Library의 약자로 대표적으로 자주 사용되는 자료구조, 알고리즘, 함수들을 모아둔 C++ 라이브러리다. STL은 컨테이너, 반복자, 함수자, 알고리즘으로 구성되며 STL의 컨테이너 덕분에 자료구조를 일일히 구현할 필요가 없어서 편리하다.
라고 말하고 싶었지만... 처음 보는 면접에 뇌가 새하얘져서 이상한 대답만 하고 끝났다.
게임 데이터 중에서는 여러 씬을 넘나들면서 참조할 필요가 있는 데이터가 있다. 나는 이러한 데이터를 여러 씬에서 참조할 목적으로 싱글턴을 사용했다. 하지만 전역 데이터 접근을 위한 싱글턴을 사용하다 보니 결합도가 높아지는 문제가 생겼다.
static을 생각했지만, 이러면 전역 데이터 접근이라는 문제가 사라지지 않았다. 그래서 씬을 넘나들 때 데이터를 어떻게 참조할 수 있을까 생각하다 게임 시스템이 유지되는 동안에는 데이터가 사라지지 않는 SO를 선택했다.
또, 데이터의 세이브 로드를 위해서 사용할 수 있는 방법에는 여러가지가 있지만, 내가 만든 게임은 싱글플레이이기 때문에 가장 쉬운 방법이 로컬에 저장하는 방법이었다.
로컬에 저장하는 방법은 크게 Playerprefs를 이용하거나 Json을 이용하는 방식이 있는데 Playerprefs는 저장할 수 있는 자료형의 한계가 분명해서 Json을 선택했다.
라고 말하고 싶었지만.. 이것도 제대로 대답을 못하고 우물쭈물하다가 끝났다 ㅠ..
2D 탑다운뷰 게임을 개발하던 도중에 플레이어를 추적하는 몬스터를 구현할 필요가 있었다. 간단하게 Update()를 이용하여 플레이어를 추적하게 할 수도 있었지만, 이렇게 구현할 경우 몬스터가 지형지물에 가로막히는 등 지능적인 부분이 떨어진다는 느낌을 받았다.
그래서 지형지물을 피해다니면서 플레이어를 추적할 수 있는 방법을 생각하다가 출발지와 목적지를 알고 있을 때의 최단 경로를 구해주는 A* 알고리즘을 사용하게 되었다.
라고 말하고 싶었다... 바보 짓을 했다.
진심으로 당황했다. 머리 속이 새하얘졌다.
A* 알고리즘은 휴리스틱 코스트를 이용하여 다익스트라 알고리즘의 단점을 보완한 알고리즘이다.
휴리스틱 코스트 = 출발지로부터의 거리값 + 휴리스틱 측정값으로 계산을 한다.
이 때 출발지로부터의 거리값은 유클리드 거리로 공식을 사용하여 구할 수 있으며 이때 값은 부동소수점으로 나오게 된다.
부동소수점 연산이 정수 연산보다 비용이 크기 때문에 10을 곱하여 상하좌우 이동에는 10, 대각선 이동에는 14의 값을 부여한다.
휴리스틱 측정값은 맨허튼 거리로 공식을 사용하여 구할 수 있다.
그리고 이 휴리스틱 코스트가 최소가 되는 노드를 열린 집합에서 닫힌 집합으로 이동시키며 목적지에 도달하게 된다. 그리고 목적지까지 이동한 경로를 역으로 나열하면 이것이 최단경로가 된다.
라고 말하고 싶었다. 아예 대답도 못하고 안될 것 같습니다.. 라고 했다.
A* 알고리즘은 다익스트라 알고리즘이 시점에서 모든 정점까지의 최단 경로를 구하는 데에 비해 시점과 정점을 알고 있기 때문에 단 하나의 최단 경로를 구한다는 점에서 장점이 있다.
하지만 노드의 개수가 많아지거나 지형이 넓어질 경우 메모리 사용량이 늘어나며 CPU에 부하가 생긴다.
또한 휴리스틱 함수에 의존하는 알고리즘이라서 잘못된 휴리스틱 함수인 경우에는 잘못된 최단경로가 계산될 수 있다.
이렇게 말하고 싶었다. 장점은 말했지만 단점은 모바일에서는 발열 문제가 생길 수도 있다고 답했다.
아뇨. 학교에서 관련된 수업을 공부한 적은 없습니다. 단지, 제가 혼자서 멀티플레이 게임을 제작하고 싶은 생각에 Photon 엔진과 자체 서버를 고민했었습니다.
Photon이던 자체 서버던 공부해야 하는 것은 마찬가지고, 실무에서는 잘 쓰이지 않는 Photon을 공부하는 것보다 자체 서버를 공부하는 과정에서 얻는 네트워크 지식들이 더 유용하다고 생각하여 자체 서버 모듈 구현을 위하여 TCP/IP와 네트워크에 대해서 공부했습니다.
라고 말하지 못했다. 진짜 난 뭘까?
이 정도 질문했던 것 같다.
너무 떨려서 아무 것도 제대로 대답하지 못한 면접이었다. 애써 시간을 내주셔서 면접을 봐주신 선배님들께도 죄송하고.. 준비를 제대로 못한 것이 너무나도 느껴졌다.
나는 쓸데없이 자기소개, 지원 동기, 성격, 강점 등 이상한 부분들에 대해서만 준비를 했었는데, 기술 면접 위주여서 매우 당황했던 것 같다.
내 자신이 평가해도 나를 합격시키지 않을 만큼 처참한 면접이었지만.. 정말로 배운 점이 많았다.
아.. 면접은 이렇게 진행되는구나. 내가 부족한 점이 이것이구나. 를 정확하게 배웠다.
이를 피드백하여 내일도 있는 면접에 잘 대비해야겠다.ㅠㅠ 합격을 위하여.