- 웹 서버와 WAS의 차이는?
웹 서버(Web Server)란 정적인 콘텐츠(HTML, 이미지, CSS 등)를 제공하는 서버를 말합니다. 예를 들어, 클라이언트가 웹 브라우저를 통해 서버에 요청을 보내면, 웹 서버는 해당 요청에 맞는 정적인 파일을 응답으로 전송합니다. 대표적인 웹 서버로는 Apache, Nginx, IIS 등이 있습니다.
WAS(Web Application Server)는 동적인 콘텐츠를 처리하는 서버입니다. 즉, 웹 애플리케이션의 실행 환경을 제공하고, 클라이언트의 요청에 따라 동적인 콘텐츠를 생성하여 응답으로 전송합니다. WAS는 Servlet, JSP, PHP 등의 동적인 웹 프로그래밍 언어를 지원하며, 데이터베이스 연동, 보안, 트랜잭션 처리 등의 기능을 제공합니다. 대표적인 WAS로는 Tomcat, JBoss, WebLogic, WebSphere 등이 있습니다.
차이점으로는, 웹 서버는 정적인 콘텐츠를 처리하는 반면, WAS는 동적인 콘텐츠를 처리하고, 웹 애플리케이션의 실행 환경을 제공합니다.
따라서, WAS는 웹 서버의 역할도 수행할 수 있지만, 웹 서버는 WAS의 역할을 수행할 수 없습니다. 또한, 웹 서버는 단순히 HTTP 프로토콜을 처리하지만, WAS는 다양한 프로토콜을 처리할 수 있습니다.
마지막으로, 웹 서버는 대개 정적인 파일을 처리하므로, 적은 자원으로 빠르게 처리할 수 있지만, WAS는 동적인 콘텐츠를 처리하므로, 처리 속도가 상대적으로 느릴 수 있습니다
nginx와 Apache는 둘 다 웹 서버 소프트웨어로, 클라이언트로부터 HTTP 요청을 받아들이고 적절한 응답을 보내는 역할을 합니다.
Apache는 가장 오래된 웹 서버 소프트웨어 중 하나이며, 오픈소스이며 모듈화된 아키텍처를 가지고 있습니다. Apache는 여러 운영 체제에서 사용할 수 있으며, 다양한 모듈을 사용하여 다양한 웹 서버 기능을 추가할 수 있습니다.
nginx는 Apache와 마찬가지로 오픈소스이지만, 성능에 더 초점을 맞춘 소프트웨어입니다. 높은 동시 접속자 처리 능력과 낮은 메모리 사용량, 단일 스레드 구조와 비동기 이벤트 기반의 아키텍처를 가지고 있습니다. 이러한 특징들은 nginx가 더 가볍고 빠르며 확장성이 높은 웹 서버로 인기를 끌게 된 요인입니다.
Apache와 nginx의 주요 차이점은 아키텍처입니다. Apache는 프로세스 기반의 멀티 스레드 아키텍처를 가지고 있으며, 요청마다 새로운 프로세스 또는 스레드를 생성합니다. 반면 nginx는 단일 스레드와 비동기 이벤트 기반 아키텍처를 가지고 있으며, 요청을 비동기적으로 처리하여 처리량을 높입니다.
이러한 아키텍처 차이로 인해 nginx는 Apache보다 처리량이 높으며 더 빠릅니다.
그러나 Apache는 더 많은 모듈과 기능을 지원하며, 보안과 안정성 면에서도 뛰어나다는 평가를 받습니다. 따라서 선택은 프로젝트의 요구사항에 따라 달라질 수 있습니다.
- Stack과 Queue 그리고 Array와 Linked List 자료구조에 대해 말씀해주시고 차이점에 대해 설명해주세요.
스택(Stack)과 큐(Queue)는 자료구조의 일종으로, 데이터를 저장하고 꺼내는 방식에 따라 구분됩니다.
스택은 LIFO(Last-In-First-Out) 구조로, 마지막으로 들어온 데이터가 먼저 꺼내지는 구조입니다. 스택은 push(데이터 삽입)와 pop(데이터 삭제) 연산을 지원합니다. 스택은 함수 호출 스택, 브라우저 방문 기록 등에서 사용됩니다.
큐는 FIFO(First-In-First-Out) 구조로, 처음 들어온 데이터가 먼저 꺼내지는 구조입니다. 큐는 enqueue(데이터 삽입)와 dequeue(데이터 삭제) 연산을 지원합니다. 큐는 대기열, 작업 처리 등에서 사용됩니다.
배열(Array)과 연결 리스트(Linked List)는 데이터를 저장하는 방식에 따라 구분됩니다.
배열은 연속된 메모리 공간에 데이터를 저장하며, 인덱스를 이용하여 데이터에 접근합니다. 배열은 임의의 인덱스에 대한 접근이 빠르고, 순차적으로 데이터에 접근하는 경우에도 빠릅니다. 그러나 데이터의 삽입, 삭제가 불편하며, 고정된 크기를 가지므로 크기를 변경하려면 새로운 배열을 할당하고 기존 데이터를 복사해야 합니다.
연결 리스트는 노드(Node)들이 연결된 구조로, 각 노드는 데이터와 다음 노드를 가리키는 포인터(Pointer)를 가지고 있습니다. 데이터의 삽입, 삭제가 쉽고, 크기 변경이 자유롭습니다. 그러나 임의의 인덱스에 대한 접근이 느리고, 순차적으로 데이터에 접근하는 경우에도 느립니다.
따라서, 스택과 큐는 데이터의 저장 방식에 따라 구분되며, 배열과 연결 리스트는 데이터를 저장하는 방식에 따라 구분됩니다.
스택과 큐는 각각 특정한 용도로 사용되며, 배열과 연결 리스트는 데이터의 삽입, 삭제, 접근 속도 등을 고려하여 선택해야 합니다.
'발표' 카테고리의 다른 글
면접 스터디(오버로딩, 오버라이딩, RDB, NoSQL) (0) | 2023.03.02 |
---|---|
면접 스터디(절차지향, 객체지향, 함수형, 시간복잡도, 공간 복잡도) (1) | 2023.03.01 |
면접 스터디(트랜잭션, TCP와 UDP) (0) | 2023.02.27 |
면접 스터디(Parameter, Argument, 프로세스, 스레드) (0) | 2023.02.24 |
면접 스터디(MSA, 제네릭, List, Set, Map, HashMap) (0) | 2023.02.23 |