보통 면접을 보게 되면 동료들하고 역할을 나누기 때문에 (기본 알고리즘, 설계, 전반적인 스킬), 아무거나 물어봐도 괜찮은 상황일 때 가끔 내는 문제입니다:


"웹 브라우저의 주소창에 google.com을 쳐서 웹 페이지가 컴퓨터 화면에 렌더링되었을 때, 어떤 과정을 거치는지 아는대로 설명해 보세요."


이 문제는 open question이라, 면접자가 원하는대로 자신의 지식을 자랑하고 싶은 부분에 집중할 수 있다는게 장점입니다. 언뜻 보면 웹 클라이언트/서버 구조에 대한 질문인 것 같지만, 인터넷이 전반적으로 어떻게 작동하는지에 대한 상식도 이끌어낼 수 있습니다. 제가 생각하는 모범 답변은 보통 이런겁니다:


"주소가 입력되면 웹 브라우저는 dns lookup을 해서 google.com의 ip 주소를 알아내겠죠. 그런 다음 해당 ip 주소로 http 요청을 보낼 겁니다. 보통 이 경우 ip 주소는 로드 밸런서 내지는 리버스 프록시의 주소일 거고요. 로드 밸런서를 거쳐서 실제 http 요청을 처리하는 서버로 요청이 들어가면, 서버는 웹 페이지의 렌더링 결과가 캐시되어 있는지를 확인할 거고요, 캐시 내용이 있으면 그걸 반환하고, 아니면 웹 서버에서 정적 페이지를 로드하고 캐시를 갱신한 다음 페이지를 반환하겠죠..."


하지만 임자를 만나면 내용이 산으로 가기 시작합니다. 여태까지 제가 봤던 인상적인 답들은 이런 것이었습니다:


"키보드에서 g, 를 입력하면 키보드 스위치의 접점이 눌리면서 도선에 전력이 흐르기 시작합니다. 그러면 칩셋이 이 신호를 인식하고 키보드 드라이버는 메모리의 특정 영역에서 이 키값을 읽어들이죠. 이 브라우저의 OS는 뭐죠? 윈도우라고 가정하죠. 윈도우의 키보드 드라이버는 이렇게 읽어들인 키값을 커널 모드에서 유저 모드의 메시지 루프에 전달하는 역할을 합니다..."

"웹 브라우저가 뭐에요? 크롬인가요? 웹킷 기반의 렌더링 엔진에서는..."

"dns lookup 단계에서부터 지역에 따라 다른 ip 주소를 반환하게 구성하거나, 글로벌 로드 밸런서를 통해 세계 각지의 프록시와 서버를 연결하도록 구성하여 레이턴시를 최소화할 수 있습니다."


별 얘기가 다 나와요. internationalization 경험이 있는 사람은 브라우저의 언어를 인식하고 그에 맞는 resource를 효율적으로 뿌려주는 기법에 대해 이야기할 수도 있습니다. 지원자가 프론트엔드 / 백엔드 중 어느쪽에 가까운지도 쉽게 가려낼 수 있고요.


웹 개발을 하고 있다면, 스스로 이걸 제한된 시간 안에 어떻게 / 얼마나 설명할 수 있을지 한 번 생각해보세요. 재미있을 겁니다 :)