이번에 면접을 갔다가 면접관이 CS 쪽으로 질문을 많이 받았다. 나는 대답을 잘 못했다;;
1분 자기소개에서 탄탄한 베이스를 가지고 있다고 했는데 밑천 다 들어났다;;;
그래서 공부하고 정리해 볼 거임. 일단 면접 때 받은 질문들을 기반으로 정리해보겠음.
프로젝트에서 웹소켓으로 채팅 구현하셨었네요 웹소켓의 작동원리 설명해주세요
웹소켓은 HTML5의 표준 기술로 사용자의 브라우저와 서버 사이의 동적인 양방향 연결 채널을 구성합니다.
웹소켓의 작동원리는 크게 두 단계로 나뉩니다.
- 핸드셰이크
- 데이터 전송
핸드셰이크
웹소켓은 최초에는 HTTP 요청을 통해 연결을 시도합니다.
클라이언트는 서버에 HTTP 요청을 보낼 때 헤더에 웹소켓을 사용하겠다는 신호를 담아서 보냅니다.
서버는 이 요청을 수락하게 되면 HTTP 연결은 끊어지지 않고 TCP 기반의 웹소켓 연결로 전환됩니다.
양방향 통신
연결이 된 이후부터는 HTTP와 달리 가벼운 프레임 단위로 데이터를 주고받습니다.
클라이언트와 서버가 서로 원할 때 언제든지 데이터를 보낼 수 있습니다.
연결이 끊어질 때까지 데이터를 보낼 수 있습니다.
브라우저에서 url을 클릭하게 되면 브라우저와 서버 간에 무슨 일이 일어나는 지 말해보세요
- IP 주소 찾기
- 서버와 연결 수립
- HTTP 요청 전송
- 서버의 처리
- 응답 및 랜더링
IP 주소 찾기
DNS로 통해 바뀐 도메인의 IP 주소를 찾습니다.
서버와 연결 수립
알아낸 IP 주소로 서버의 포트에 연결을 3웨이 핸드셰이크 과정으로 연결을 요청합니다.
HTTP 요청 전송
연결이 되면 브라우저는 요청 메시지를 만들어 서버로 보냅니다.
서버의 처리
웹 서버인 경우: 정적 파일이면 바로 응답하고, 동적 요청이면 was로 넘깁니다.
was인 경우: 스프링이 요청을 받아 비즈니스 로직을 수행하고 DB에서 데이터를 가져옵니다.
응답 및 랜더링
서버에서는 HTML, CSS, JS 등이 담긴 HTTP 응답을 브라우저에 보냅니다.
만약 그 url이 다른 페이지를 제공하지 않으면 어떻게 되나요
데이터만 반환하는 경우(REST API): JS가 바디의 JSON 데이터를 받아 페이지의 특정 부분만 동적으로 업데이트합니다.(SPA 방식)
상태 코드만 반환하는 경우: 서버가 204 코드같이 코드를 보내면 브라우저는 요청은 성공했지만 보여줄 내용은 없다고 판단해 화면을 유지합니다.
스프링의 service 단은 네트워크의 어느 단계에서 작동하나요

7계층인 애플리케이션 계층에서 작동합니다.
스프링 프레임워크는 네트워크 스택이 아닌, 7계층을 통해 전달받은 데이터를 처리하는 유저 공간의 SW입니다.
was와 웹서버의 차이에 대해서 말해보세요
웹서버: HTML, CSS, JS, 이미지 등과 같은 별도의 연산이 필요하지 않은 정적인 콘텐츠 제공
was: DB 조회, 비즈니스 로직 연상 등 동적인 콘텐츠 제공
was는 정적 콘텐츠는 아예 다루지 않는 건가요
아니요 다룰 수 있습니다.
아파치사의 톰캣같은 was도 기본 웹 서버 기능을 포함하고 있어서 정적 파일을 직접 제공이 가능합니다. 스프링의 HTML 파일을 제공이 가능한 것이 그 예시입니다.
이처럼 was도 정적 리소스를 처리할 수 있지만 실무에서는 부하 분상, 보안을 위해 Nginx같은 웹 서버를 앞단에 두고 뒨단에 was를 배치하는 리버스 프록시 구조를 주로 사용합니다.
이로 was의 부담을 웹 서버가 덜어줄 수 있습니다.
일단은 생각나는대로 적어보았다.
다음 면접을 위해 꾸준히 정리해 보겠다.