본문 바로가기

일기

2023-02-26

면접 스터디를 시작하고 매주 받는 과제들로부터 조사한 내용들의 정리

 

 

 

 

웹 서버와 WAS의 차이는?

둘 모두 웹 어플리케이션을 실행하기 위한 소프트웨어 입니다.

단, 데이터 처리 방식과 기능에 있어서 차이가 존재합니다. 가장 대표적으로 WS 는 정적인 컨텐츠를 처리하지만 WAS 는 동적인 컨텐츠를 처리하는 차이가 있습니다.

 

Web Server

HTTP 프로토콜을 기반으로 클라이언트의 요청에 따라 정적 컨텐츠를 제공하는 서버입니다.
여기서 말하는 정적 컨텐츠란 HTML 문서, CSS, 이미지, 파일 등이 있습니다.
만약, 웹 서버가 동적 컨텐츠를 요청하면 WAS 에게 해당 요청을 넘겨주고 WAS 에서 처리한 결과를 클라이언트에게 전달해주는 역할도 가능합니다.

ex) Apache, NginX

 

Web Application Server

DB 조회 혹은 다양한 로직 처리를 요구하는 동적 컨텐츠를 제공하기 위해 만들어진 Application Server 를 말합니다.(정적 컨텐츠로 처리는 가능합니다)
이 또한 HTTP 프로토콜을 기반으로 사용자 컴퓨터나 장치에 어플리케이션을 수행해주는 미들웨어로서, 주로 데이터베이스 서버와 함께 수행합니다.
WAS 는 JSP, Servlet 구동 환경을 제공해주기 때문에 서블릿 컨테이너 혹은 웹 컨테이너 라고도 합니다.

ex) Tomcat, Jetty, WebLogic, Jeus …

 

WAS 만 써도 되지 않나 ?

위의 내용을 읽어보면 WAS 만으로 다 해결이 가능한데 둘을 같이 사용하는 이유가 있습니다.

일단 서버 부하를 방지할 수 있습니다.

웹 서버와 WAS 를 분리해서 서버의 부하를 방지할 수 있습니다.

 

WAS 로는 DB 조회니 다양한 로직만을 처리하고, 단순한 정적 컨텐츠의 경우에는 웹서버에서 처리해주면 Application Server 까지 가지 않고 앞단에서 더 빠르게 처리가 가능합니다.

 

즉, 필요한 경우에만 WAS 를 거치게 함으로 인해서 다양한 로직을 거쳐 처리하는 과정을 적절하게 사용해 컨텐츠 처리시간이 지연되는 경우를 최대한 예방할 수 있습니다.

 

이 외에도 WAS 만이 가지는 장점이 있습니다.

  • 보안 기능 제공
    SSL/TSL을 이용해서 데이터 암호화, 인증 및 권한 관리 등의 기능을 사용할 수 있습니다.
    이를 통해, 웹 브라우저와 WAS 간의 통신에서 데이터가 암호화 되어 전송되며 중간에 데이터를 탈취당해도 해당 데이터를 이용하기 힘듭니다.
    인증/인가 기능을 통해 사용자 인증 및 권한 부여 기능을 지원합니다.
    사용자가 누구인지 확인하고 해당 사용자가 할수있는 작업의 범위를 결정할 수 있습니다.
    이 외에도 방화벽, DDos 대응 등 다양한 보안 기능을 제공합니다.
  • 트랜잭션 관리 지원
    이를 통해서 복수의 데이터베이스의 작업을 하나의 트랜잭션으로 묶어서 처리가 가능하며, 트랜잭션 처리 과정에서 발생할 수 있는 문제를 방지할 수 있습니다.
  • 복수의 WAS 연결
    로드 밸런싱을 위해 웹 서버를 이용할 수 있습니다.
    복수의 서버를 사용하는 대용량 웹 어플리케이션의 경우 웹 서버와 WAS 를 분리하여 무중단운영을 위한 장애 극복에 쉽게 대응할 수 있습니다.
    예로, 웹 서버에서 오류가 발생하면 WAS를 이용하지 못하도록 한 후 WAS를 재시작함으로써 사용자는 오류를 느끼지 못하고 이용이 가능하다.
    • 로드 밸런싱
      그래서 기업들은 서버를 늘려 여러대의 서버에 동일한 데이터를 저장해 트래픽을 효과적으로 분산시켜 처리하고 있습니다.
      하지만 동시에 모든 클라이언트의 요청에 일관성 있게 응답이 가야합니다.요약하자면, 서버가 처리해야 할 작업을 여러 대의 서버로 나누어 처리(Balancing) 하는것을 의미 합니다.
      하지만 만약, 한곳의 서버에서 모든 트래픽이 몰리는 상황이 발생한다면 이 때 어떻게 처리하느냐가 문제인데 이럴 때 필요한 것이 Load Balancing 기술 입니다.
      인터넷의 발달로 인해 나날이 늘어가는 사용량으로 인해 서버가 감당해야할 트래픽이 계속해서 늘어가고 있습니다.

 

Stack과 Queue 그리고 Array와 Linked List 자료구조에 대해서 말씀해주시고 차이점에 대해 설명해주세요.

STACK

Stack 은 "쌓다" 라는 의미로, 데이터를 차곡차곡 쌓아 올린 형태의 자료구조를 말합니다.

가장 마지막에 삽입된 자료가 가장 먼저 삭제되는 특이한 구조를 가지고 있습니다.

정해진 방향으로만 쌓을 수 있으며, top 으로 정한 곳을 통해서만 접근이 가능합니다.

즉, 새로 삽입되는 자료도 top 이 가리키는 가장 맨 위에 쌓이고 삭제시에도 top 을 통해서만 삭제가 가능합니다.

스택에서는 삽입 연산을 push, 삭제 연산을 pop 라고 합니다. 이러한 구조를 "후입선출" 구조라고 하며 영어로 LIFO(Last In First Out) 이라고 부릅니다.

주 사용 사례

  • 웹 브라우저의 방문기록(뒤로가기)
  • 실행 취소(undo)

Queue

큐는 스택과 다르게 먼저 들어온 것이 먼저 나가는 "선입선출" 로, FIFO(First In First Out) 의 구조를 가지고 습니다.

삭제 연산이 수행되는 곳을 프론트, 삽입 연산이 이루어지는 곳은 rear 로, FIFO 구조를 위해서 스택과 다르게 큐의 한쪽 끝에는 삽입 작업이, 다른 한쪽 끝에서는 삭제 작업이 나뉘어서 이루어집니다.

큐는 리어(rear)에서 이루어지는 삽입 연산을 인큐(Enqueue) 라고 하며, 프론트(front)에서 이루어지는 삭제 연산을 디큐(Dequque) 라고 합니다.

 

주 사용 사례

  • 은행 업무
  • 서비스 센터의 대기시간
  • 대기열 순서와 같은 우선순위의 작업 예약

 

 

 

둘 다 자바 컬렉션 프레임워크에서 제공하는 자료구조이다.

  • ArrayList
    단방향 포인터 구조로 데이터 조회 속도가 빠르다.
    배열을 기반으로 데이터를 저장한다. 조회 속도는 빠르지만 삽입, 삭제가 느리다.
  • LinkedList
    양방향 포인터 구조로 데이터 삽입, 삭제가 빠르다.
    ArrayList 에 비해 조회 속도는 느리다.

ArrayList

기본적으로 배열의 형태를 지니고 있습니다. 하지만, 일반적인 배열과 다르게 크기를 지정하지 않아도 가능해서 동적으로 값을 삽입 및 삭제가 가능합니다.

각 데이터들 마다 index 를 가지고 있고 무작위 접근이 가능해서 조회 시 속도가 뛰어납니다.

데이터 삽입/삭제 시에는 해당 데이터 뿐만이 아니라 다른 데이터들의 위치까지 이동해야 하기 때문에 삽입/삭제시 속도는 느립니다.

그래서 삽입/삭제 가 많은 경우에는 비효율적입니다.

Linked-List

내부적으로 양방향의 연결 리스트로 구성되어 있어 참조하려는 원소에 따라 처음부터 정방향 또는 역방향으로 순회 가능합니다. Linked-List 역시 동적으로 사용 가능합니다.

순차적으로 접근해서 조회하기 때문 조회 시 속도가 느립니다.

데이터 삽입/삭제시 해당 데이터를 가리키는 주소값만 변경해주면 되기 때문에 빠릅니다. (삽입/삭제시 이전 노드와 다음 노드를 참조하는 값을 변경하면 끝)

 

정리

Stack 은 "쌓다" 라는 의미로 마지막에 들어온 것이 먼저 나가는 "후입선출” 의 자료 구조로 LIFO(Last In First Out) 라고도 합니다.
Queue 는 먼저 들어온 것이 먼저 나가는 "선입선출"의 자료 구조로 FIFO(First In First Out) 라고도 합니다.

+ 아래의 예시에서 말한 shift 가 무엇인지 찾아보니 JS 에서의 디큐를 의미한다고 한다.

 

ArrayList 와 LinkedList 둘 다 자바의 컬렉션 프레임워크에서 지원하는 자료 구조입니다.

ArrayList 는 단방향 포인터 구조로 인덱스를 활용해 데이터 조회 속도가 빠르지만, 삽입 및 삭제 시에는 LinkedList 보다 처리속도가 느립니다.

LinkedList 는 양방향 포인터 구조로 노드를 활용해 데이터 조회 속도는 느리지만, 삽입 및 삭제시 ArrayList 보다 처리속도가 빠릅니다.

 

자바 컬렉션 프레임워크
이는 다수의 요소를 하나의 그룹으로 묶어 효율적으로 저장하고 관리할 수 있는 기능을 제공하는 일종의 컨테이너 입니다.

우리가 많이 사용하는 배열은 크기가 고정되어 있지만 컬렉션 프레임워크는 가변적인 크기를 가질 수 있습니다. (Resizable)

또한, 데이터 삽입, 조회, 정렬 등 편리한 API 를 다양하게 제공합니다. JDK 1.2 부터 java.util 패키지를 통해 지원하기 시작했습니다.

  • List, Queue, Set, Map 등의 인터페이스를 제공 및 이를 구현하는 클래스를 제공해 일관된 API 를 사용할 수 있습니다.
  • 가변적인 저장공간을 지원하기에 배열보다 이용하기 편리합니다.
  • 자료구조, 알고리즘의 구현을 위한 코드 작성이 필요 없습니다. 즉, 이미 구현된 컬렉션 클래스가 있기에 목적에 맞게 선택해서 사용하면 됩니다.
  • 이미 검증된 코드이며, 고도로 최적화 되어 있습니다.

 

 

 

 

 

[Web] Web Server와 WAS의 차이와 웹 서비스 구조 - Heee's Development Blog

Step by step goes a long way.

gmlwjd9405.github.io

 

'일기' 카테고리의 다른 글

2023-02-28  (0) 2023.02.28
2023-02-27  (0) 2023.02.27
2023-02-25  (0) 2023.02.25
2023-02-24  (0) 2023.02.25
2023-02-23  (0) 2023.02.23