"웹 브라우저 클라이언트로부터 HTTP 요청을 받아드리고 HTML 문서와 같은 웹 페이지를 반환하는 컴퓨터 프로그램"
정적 컨텐츠
웹 서버에서 요청에 알맞은 파일 반환, 항상 동일한 페이지 반환
단순 HTML 문서, CSS, javascript, 이미지, 파일 등 즉시 응답 가능한 컨텐츠
"인터넷 상에서 HTTP 프로토콜을 통해 사용자 컴퓨터나 장치에 애플리케이션을 수행해주는 미들웨어로서, 주로 동적 서버 컨텐츠를 수행하는 것으로 웹 서버와 구별 되며, 주로 데이터베이스 서버와 같이 수행"
동적 컨텐츠
데이터베이스, 서버 내 로직 등 활용해 만들어진 컨텐츠 반환
php, jsp, asp 등

"동적인 컨텐츠를 다룰 수 있는가?"

기능을 분리하여 서버 부하를 방지한다.
물리적으로 분리하여 보안을 강화시킨다.
여러대의 WAS를 연결해 로드 밸런싱 용도로 사용할 수 있다.
여러 언어의 웹 애플리케이션 서비스가 가능하다.
쌓아 올리는 자료구조이다.
같은 구조와 크기의 자료를 정해진 방향으로 쌓을 수 있고, 한 방향으로만 접근할 수 있다.
top을 통해서 push, pop을 하면서 삽입과 삭제가 일어난다. 즉, Last-In-First-Out(LIFO)인 선입 후출 구조이다.
List로 구현하면 객체를 제거하는 작업이 필요하다. 하지만 Array로 구현하면 삭제할 필요 없이 index를 줄이고 초기화만 하면 되므로, Array로 구현하는 것이 좋으며 DFS나 재귀에서 사용된다.
원소의 줄을 세우는 자료구조이다.
한쪽 끝에서 삽입 작업을 하고 다른 쪽 끝에서 삭제 작업을 진행한다. 즉, First-In-First-Out(FIFO)인 선입선출 구조이다.
주로 데이터가 입력된 시간 순서대로 처리되어야 하는 경우 사용한다.
Array로 구현하면 poll 연산 이후 객체를 앞당기는 작업이 필요하다. 하지만 List로 구현하면 객체 1개만 제거하면 되므로 삽입 및 삭제가 용이한 LinkedList로 구현하는 것이 좋으며 BFS나 캐시를 구현할 때 사용된다.
Random Access를 지원한다.
연관된 데이터를 연속적인 형태로 구성된 구조를 가진다.
배열에 포함된 원소는 순서대로 index가 붙는다.
Random Access(비순차 접근)
집합 내의 요소의 주소를 알고 있다면 요소의 개수와 무관하게 모든 요소에 대하여 쉽고 효율적으로 동일한 시간에 접근할 수 있는 방식이다.
특징
단점
추가와 삭제가 반복되는 로직이라면 배열을 권장하지 않는다. 배열은 탐색이 많은 경우 유리하다.
Sequential Access를 지원한다.
삽입, 삭제가 반복되는 로직에 비효율적인 배열의 문제점을 해결하기 위한 자료구조이다.
각 요소를 포인터로 연결하여 관리하는 선형 자료구조이다. 각 요소는 노드라고 부르며 데이터 영역과 포인터 영역으로 구성된다.
Sequential Access(순차 접근)
순서가 정해진 원소 그룹을 순차적으로 접근하는 방법이다. 데이터 구조는 한 가지 특정 순서로만 포함된 값을 방문할 수 있는 경우 가능하다.
특징
단점
탐색이 많은 로직이라면 LinkedList를 권장하지 않는다. LinkedList는 삽입, 삭제가 반복되는 로직에서 유리하다.
시간복잡도
프로그램의 성능을 정확히 파악하는 것은 불가능하기 때문에 대략적인 값을 비교하기 위한 상대적인 크기를 사용한다. 문제를 해결하는데 걸리는 시간과 입력의 함수 관계를 시간 복잡도라고 하며 일반적으로 빅오 표기법으로 나타낸다.