본문 바로가기

항해99_10기/105일의 TIL & WIL

[기술면접 스터디] [230228] WS & WAS, 자료구조 (stack, queue, array, linked list)

Q1. 웹서버와 WAS의 차이에 대해 말씀해주세요.
웹서버는 HTTP 기반에서 클라이언트의 요청을 서비스하는 기능을 담당합니다. 주로 정적인 컨텐츠의 경우 WAS를 거치지 않고 바로 자원을 제공하기도 하고, 동적인 컨텐츠 제공을 위해 WAS에 요청을 전달하는 역할을 담당하기도 합니다.
WAS 앞에 WS로 reverse proxy를 하는 이유는 크게 세가지로 분류할 수 있습니다. 첫째, WAS의 포트나 민감 정보를 감추거나 특정 사용자의 요청에만 응답하고, SSL 인증서를 적용하여 보안을 강화 할 수 있습니다. 둘째, 캐시 서버로 사용이 가능하여, 정적 리소스를 요청하는 경우, WAS를 거치지 않고 바로 응답을 할 수 있습니다. 마지막으로 여러대의 WAS 앞에 두고 로드 밸런싱이 가능합니다. 무중단 배포시에 매우 유리합니다. 

 

Q2. stack, queue, array, linked list 자료구조에 대해 말씀해주시고 차이점에 대해 설명해주세요.
Stack과 Queue는 특정 제약조건을 갖는 원소들의 리스트입니다.
먼저 Stack은 LIFO의 구조를 가지며, 데이터는 스택의 끝에만 삽입할 수 있고 끝에서만 삭제할 수 있으며, 마지막 원소만 읽을 수 있습니다. 예를 들면, 뷔페 식당에서 쌓여있는 접시더미와 같습니다. 접시를 위로 쌓을 수 밖에 없고, 맨 윗장부터 꺼낼 수 있으며, 접시의 윗면을 맨 윗장만 볼 수 있습니다. 
stack의 이점으로는, push와 pop으로 빠른 읽기, 쓰기, 삭제가 가능합니다.

다음으로 Queue는 FIFO의 구조를 가집니다. 가장 먼저 들어간 자료가 가장 먼저 나오는 성질의 자료구조입니다. 삽입 및 삭제에 O(1), 탐색에 O(n)이 걸립니다. CPU 작업을 기다리는 프로세스, 스레드 행렬 또는 네트워크 접속을 기다리는 행렬, 너비 우선 탐색, 캐시 등에 쓰입니다.

Liked list는 데이터를 감싼 노드를 포인터로 연결해서 공간적인 효율성을 극대화시킨 자료구조입니다. 삽입과 삭제시 시간 복잡도는 O(1), 탐색에는 O(n)이 걸립니다.
싱글 링크드 리스트(next 포인터만 가짐), 이중 링크드 리스트(next와 prev 포인터를 가짐), 원형 이중 링크드 리스트(next와 prev 포인터로 연결되고, tail노드가 head 노드를 가리켜 원형 관계를 구성)가 있습니다.

자료구조에서 Array는 같은 타입의 변수로 이루어져 있고, 크기가 정해져 있으며, 인접한 메모리 위치에 있는 데이터를 모아 놓은 집합입니다. 또한, 중복을 허용하고 순서가 있습니다. 정적 배열을 기준으로, 탐색에는 O(1)으로 랜덤 접근(직접 접근)이 가능합니다. 반면, 삽입과 삭제에는 O(n)이 걸립니다.