=> 웹 서버는 http 요청을 받아들여 HTML 문서와 같은 정적인 콘텐츠를 사용자에게 전달해주는 역할을 한다.
웹 서버의 임무는 대표적으로 다음과 같다.
=> WAS 또한 웹서버와 동일하게 HTTP 기반으로 동작한다.
웹 서버가 할 수 있는 기능 대부분이 WAS에서도 처리가 가능하다.
비즈니스 로직을 처리할 수 있어 사용자에게 동적인 콘텐츠를 전달할 수 있다.
주로 DB와 같이 수행한다.
=> WAS는 DB 조회 및 비즈니스 로직을 처리하는 데 집중한다.
따라서 단순한 정적 콘텐츠는 웹 서버에게 맡기고, 기능을 분리해 서버 부하를 방지한다.
또한 WAS에 문제가 생겨 WAS를 재시작해야 하는 경우가 생기면 앞단의 웹 서버에서 WAS를 사용하지 못하도록 요청을 차단한다.
그러면 사용자들은 WAS에 문제가 발생한지 모르고 이용할 수 있다.
=> 스택이란 어떠한 자료를 쌓아서 올려놓은 형태의 자료구조다.
스택의 구조를 후입선출(LIFO)이다.
스택에서 자료의 삽입과 삭제는 한 곳 top에서만 이루어진다.
웹 브라우저 뒤로가기, 문서작업에서 ctrl+z, JVM Stack 등에서 사용한다.
ArrayList와 같은 배열 기반의 컬렉션으로 구현한다.
=> 큐는 데이터들을 일렬로 쌓아서 처리하는 자교루조다.
큐는 Rear 부분에서 자료의 삽입, Front 부분에서 자료의 삭제가 이루어지는 선입선출(FIFO) 구조다.
프린터 출력, 은행창구 번호표 대기 등에서 사용한다.
LinkedList 컬렉션으로 구현한다.
=> ArrayList는 내부적으로 데이터를 배열에서 관리하며 데이터의 추가, 삭제를 위해 아래와 같이 임시 배열을 생성해 데이터를 복사 하는 방법을 사용 하고 있다.
대량의 자료를 추가/삭제 하는 경우에는 그만큼 데이터의 복사가 많이 일어나게 되어 성능 저하를 일으킬 수 있다.
반면 각 데이터는 인덱스를 가지고 있기 때문에 한번에 참조가 가능해 데이터의 검색에는 유리한 구현체이다.
=> LinkedList는 데이터를 저장하는 각 노드가 이전 노드와 다음 노드의 상태만 알고 있다고 보면 된다.
ArrayList와 달리 데이터의 추가, 삭제시 불필요한 데이터의 복사가 없고 다음 노드에 대한 Link 값만 바꿔주면 돼서 데이터의 추가, 삭제시에 유리하다.
반면 데이터의 검색시에는 처음부터 노드를 순회해야 하기 때문에 성능상 불리하다.