기술 면접 스터디 8일차. 오전에는 AWSOMDAY라고 AWS 온라인 컨퍼런스에 참가했다. 생각보다 aws 클라우드 서비스가 위성부터 블록체인까지 광범위해서 좀 놀랐다. 아직은 그런 기술을 다룰 정도의 실력이 아니지만 나중엔 한번쯤 다뤄보고 싶다.
웹서버와 WAS는 둘 다 웹 애플리케이션을 실행하기 위한 서버 소프트웨어입니다. 하지만 목적과 기능에서 차이가 있습니다.
웹서버는 주로 정적인 컨텐츠를 제공하는 데 사용됩니다. HTML파일, CSS, 이미지와 같은 정적인 파일을 클라이언트에게 제공합니다. Nginx가 대표적입니다.
WAS는 동적인 웹 애플리케이션 실행환경을 제공합니다. 세션과 트랜잭션 관리, DB 조회와 같은 다양한 로직을 수행해 동적인 컨텐츠를 제공할 수 있습니다. Tomcat이 대표적입니다.
WAS가 웹서버의 역할도 수행할 수 있기 때문에 일반적으로는 WAS 하나만으로 구성합니다. 하지만 부하분산이나 보안 설정과 같은 특정한 요구사항에 따라 WAS 앞에 웹서버를 둠으로써 정적 컨텐츠를 처리하는 방법도 있습니다.
Stack은 LIFO, 후입선출 방식으로 동작합니다. push로 데이터를 삽입하면, pop으로 가장 최근에 저장한 데이터를 반환하면서 삭제할 수 있습니다. 브라우저의 뒤로가기 버튼, 실행취소 같은 기능에서 활용됩니다.
반면 Queue는 FIFO, 선입선출로 동작합니다. enqueue로 데이터를 삽입하면 dequeue로 가장 오래된 데이터를 반환하면서 삭제할 수 있습니다. 대기열 같은 기능에서 활용됩니다.
ArrayList는 List의 구현체로 배열 기반이지만 크기의 조정이 가능합니다. 따라서 배열처럼 Index의 활용이 가능해 인덱스를 통한 접근을 할 때 O(1)의 빠른 접근이 가능합니다.
LinkedList도 List의 구현체로 노드와 포인터로 구성되어있습니다. 노드가 데이터를 저장하고 포인터가 다음/이전 노드의 메모리주소를 가지게 됩니다. 포인터로 계속 연결되어있는 구조입니다. 따라서 데이터를 삽입, 삭제할 때 앞/뒤 포인터의 주소값만 바꾸면되기 때문에 유리하다는 장점이 있습니다. 하지만 탐색시에 포인터를 따라가야하므로 상대적으로 접근속도가 느립니다.