본문 바로가기

공부/웹 프로그래밍

1. 웹 프로그래밍 기초 - #1. 웹 개발의 이해, FE/BE (4)

본 게시물의 내용은 edwith 부스트코스 - 웹 프로그래밍 강의를 수강한 내용을 바탕으로 한다. 들은 내용을 정리하고, 복습에 용이하도록 정리해놓은 게시물이다.

이번 차시의 강의는 다음과 같다. 배경색이 들어간 부분이 이번 게시글에서 다룰 내용이다. 

1. 웹 프로그래밍 기초 - #1. 웹 개발의 이해, FE/BE

1). 웹 프로그래밍을 위한 프로그램 언어들

2). 웹의 동작(HTTP 프로토콜 이해)

3). 웹 FE와 웹 BE

4). Browser의 동작

5). Browser에서의 웹 개발

6). 웹 서버

7). WAS(Web Application Server)

 

 

6). 웹서버

웹서버란?

앞서 게시글도 그렇고, '웹서버'라는 단어가 많이 나왔다. 필자도 아직 공부중인 단계라, 그 개념을 정확히는 알지 못한다. 그래서, 강의에 나온 내용을 토대로 웹서버에 대해서 생각해보고자 한다. 

웹서버란, 클라이언트에게 서비스를 제공하는 것으로, SW형태를 말하기도 하고, 클라이언트의 요청에 데이터를 보내주는 작업을 하는 PC를 말하기도 한다. 웹 서버가 수행하는 기능을 좀 더 자세히 설명하자면, 클라이언트(브라우저)가 보내는 HTML요청에 대한 HTML응답 또는 resource를 반환하는 것이다. 클라이언트가 요청하는 resource는 정적인 데이터(이미지, 텍스트 등 이미 형태가 정해진 데이터)일수도 있고, 동적인 데이터(요청이 온 순간 특정 프로그램을 수행시킨 결과 데이터)일수도 있다.  

웹서버가 클라이언트와 요청-응답을 할 때에는 프로토콜(HTTP)에 따른 형태로 통신을 한다. 이 프로토콜에 따라 웹서버가 클라이언트(브라우저)에 데이터를 보내주면, 브라우저는 렌더링을 통해 HTML, CSS, Javascript등의 코드를 종합한 페이지를 사용자에게 보여준다. 

 

웹서버의 종류

웹 서버의 종류는 아주 많지만, 강의의 방향을 고려하여 다음 2가지만 간단히 설명하겠다. 

  • Apache: 점유율이 가장 높은 웹 서버. 오픈 소스 소프트웨어이다.
  • Nginx: 적은 Resource로 많은 Data를 서비스할 때 유용한 웹 서버이다. 만들어진지 오래된 서버는 아니지만, 그 성장세가 크다고 한다. 

 

7). WAS(Web Application Server)

WAS를 설명하기 이전에, WAS가 나오게 된 배경에 대해 간단히 설명하겠다. 

미들웨어(Middleware)

WAS는 Client/Server 구조를 사용한다. 클라이언트와 서버가 계속 강의에 나오는 만큼, 아주 중요한 단어인 것 같다. 클라이언트는 서버에 값을 요청하는 것을 말하고, 서버는 클라이언트에게 서비스를 제공해주는 것이다. 

클라이언트/서버 구조, 출처: https://www.edwith.org/boostcourse-web/lecture/16666/#

DBMS(Database Management System)는 데이터베이스를 관리하는 시스템으로, 다수의 사용자가 DB내 데이터를 접근할 수 있게 해주는 시스템이다. 보통 DBMS는 서버의 형태로 제공된다. 

서버의 형태로 제공되는 DBMS, 출처: https://cphinf.pstatic.net/mooc/20180122_74/15166087526093WS9P_PNG/1_1_7_DBMS.PNG

그런데 여기서 문제가 생긴다. 웹을 사용하는 사람이 점점 많아지고, 요구하는 사항이 많아지면서 클라이언트 단에서 처리해야하는 로직이 많아졌다. 수가 많아지고 할 일이 늘어남에 따라, 보안 등의 클라이언트 관리 비용 또한 상승하게 되었다. 또한, 시스템에 수정할 사안이 생기면, 매번 새로운 클라이언트를 배포해야 하는 불편함이 생겼다.

이를 해결하기 위해 나온 것이 미들웨어(MiddleWare)라는 개념이다. 클라이언트가 원하는 비즈니스 로직을 이 미들웨어가 수행하고, 클라이언트 단에서는 입출력만 하는 것이다. 이로 인해서, 매번 새로운 클라이언트 버젼을 배포할 필요도 없어졌고, 클라이언트 단에서 처리해야 하는 부하를 줄여서 사용자의 편의성을 높일 수 있게 되었다.

Middleware, 출처: https://cphinf.pstatic.net/mooc/20180122_267/1516608805247GN2hK_PNG/1_1_7_.PNG

위 그림을 보면, Client가 Presentation Logic, MiddleWare가 Business Logic을 처리한다고 표시되어 있다. 이는 클라이언트 단에서는 입출력 기능만 수행하고, 더 복잡한 연산은 Middleware에서 수행함을 의미한다. 또한, 미들웨어는 DB server와 데이터를 송수신하여 데이터를 저장, 삭제, 수정 등의 기능을 하면서 DBMS 관련 요구사항을 처리할 수가 있다. 

 

WAS(Web Application Server)

WAS 또한 미들웨어의 한 종류이다. 웹 클라이언트의 요청 중에 웹 어플리케이션이 동작하도록 지원하는 것이 목적이다. 이러한 점에서 웹서버와 유사하다. 그러나, DBMS관련 요구사항이 점점 늘어나면서, DBMS와 Client 사이에서 작동하는 미들웨어의 필요성에 따라 WAS를 사용하게 되었다.

WAS의 기능

  • 프로그램 실행 환경과 DB 접속 기능을 제공한다
  • 여러 개의 transaction을 관리하고 처리한다. transaction이란 논리적인 작업 단위를 의미한다
  • 업무 처리 비즈니스 로직을 수행한다. 

웹서버 vs WAS

웹 서버는 주로 정적 Data를 브라우저에 전송한다. 이에 반해, WAS는 주로 동적 데이터를 브라우저에 전송한다. 성능상의 이유로 이렇게 구별하지만, WAS의 발전에 따라 그 성능이 발전하면서 이제는 웹서버와 성능이 크게 차이나지 않는다고 한다. 그리고, 웹서버는 WAS에 비해 좀 더 간단한 구조를 가지고 있다. 

그런데 위의 이유만으로는 굳이 두 가지를 구별하는 것이 납득이 잘 가지 않는다. WAS는 이미 웹 서버의 기능을 수행할 수 있도록 설계되어 있는데, 웹서버와 WAS를 구별하는 이유는 무엇일까? 

그 이유는 시스템의 규모가 커질수록 WAS와 웹 서버를 분리하여 사용하기 때문이다. 그 이유는 유지 보수의 편리성 등 여러 이유가 있는데, 강의에서는 장애 극복을 위해 이렇게 사용한다고 한다. 장애 극복이라 함은 시스템에서 오류가 발생했을 때, 시스템 전체를 끈 상태에서 이를 해결하는 것이 아니라 문제가 있는 부분만을 배제하고, 나머지 시스템 구성 요소는 원래대로 돌아가는 상태에서 문제 요소를 해결하기 위함이라 한다. 하나의 WAS가 오작동한다는 것을 알았을 때, 그 앞단의 웹서버에게 이를 알려주면 원래 수행하려던 요청을 다른 WAS에게 넘긴다는 것이다. 

웹서버와 WAS의 분리, 출처: http://mblogthumb2.phinf.naver.net/20141029_293/nkyle9361_1414542648786gURGI_JPEG/%B1%D7%B8%B22_%C0%A5%BC%AD%B9%F6%BF%CD_WAS%B7%CE_%B1%B8%BC%BA%B5%C8_%C8%AF%B0%E6.jpg?type=w2

 

이로써, 웹 프로그래밍 기초인 웹의 구조, FE/BE 등의 구성 요소및 기능등을 간단히 알아보았다. 강의의 내용을 내가 이해하기 쉽게 정리했는데, 다른 사람들이 보기엔 좀 어려울 수도 있을 것 같다. 사실 나도 잘 모르는 부분을 이제 공부하는 거라 틀린 부분이 있을 수 있다. 그런 부분에 대해선 댓글로 지적 바란다. 그럼 다음 게시물에서는 HTML에 대한 내용을 쓰도록 하겠다.