프로그램 건축

2020. 8. 26. 13:55웹서비스

음식점을 하나 만든다고 생각해보자. 어떤 음식점인지는 상관 없다. 떼돈을 벌 수 있다는 희망찬 생각으로 매장을 만들어보자. 작게 시작한 매장에는 굳이 홀 인원이 필요 없을 것 같다. 주방과 홀을 같이 병행해서 해도 큰 문제는 없다. 홍보도 전단지를 직접 나누어 줘도 큰 무리는 없다.

 

고객이 많아 지면 홀 인원을 따로 두어야 원활하게 돌아간다. 주문이 많은데 음식을 하고 홀서빙까지 병행하면 시간도 늦어지고, 주문도 꼬이게 된다. 많이 팔리는 음식은 미리 만들어두는 것도 좋은 방법이다. 만두 같은 경우, 주문이 들어오고 나서 반죽을 하고 피를 만들고 속을 만들기 시작하면 너무 많은 시간이 소요된다. 미리 만들어 놓고 주문시에 찌거나, 데워주면 된다. 홍보 또한 전단지를 직접 나누어 주기는 매장을 비울 수 없기에 아르바이트를 고용해서 해야한다. 

 


음식점이 맛있다고 입소문이 났다. 입소문을 듣고 손님들이 물밀듯이 몰려온다. 대기줄이 생겼다. 행복한 광경이지만, 대기줄로 인해 기존 단골 고객의 불만이 생겼다. 더불어 주변 상가에서 민원이 들어오고 지나가는 행인들이 불편을 겪는다. 매장을 넓히던지, 2호점을 만들어야 하는 상황이다. 

 

매장을 넓힐려면 잠시동안 운영을 중단해야 한다. 벽을 부수고, 자욱한 먼지가 나는 곳에서 음식을 먹는 사람은 아무도 없기 때문이다. 운영은 중단할 수 없으니 2호점을 내기로 한다. 2호점이 완성되면 고객을 2호점으로 보내야 한다. 대기줄이 생기지 않게 홀이 차면 고객을 2호점으로 보낸다. 

 

영업이 잘되 점점 분점이 생겼다. 이제는 본점에서 다 관리하기에는 벅참을 느낌다. 프랜차이즈로 확장해야할 듯 하다. 프랜차이즈 회사를 설립해서 지점을 관리하기 시작한다. 지점들은 음식의 질과 고객 서비스에 집중하고 홍보는 프랜차이즈에서 진행하면서 사업 성공에 가도를 달리고 있다.

 


 

앞서 얘기한 음식점 서비스를 웹 서비스로 바꾸어서 생각해보자. 초기 작게 시작하는 음식점 매장 서비스는 서버 1대만 있어서 가능하다. 웹을 서비스하기 때문에 이것을 웹 서버(Web Server)로 부른다. 웹 서버 1대에서 홍보에 해당하는 이미지들을 보여주고, 고객이 원하는 데이터(주문)을 데이터베이스에서 찾아서 보여준다. 고객이 많지 않을때에는 서버 1대만 있어서 큰 무리는 없다.

 

고객이 많아지면 서버 1대만으로는 힘들어진다. 서버 1대의 스펙(spec)이 제한되어 있기 때문에 서비스가 느려질 수 있다. 음식점과 똑같이 서버 용량을 늘릴지 한대를 더 설치할지 생각해야 한다. 용량을 늘리기 위해서는 기존에는 서비스를 일단 중지하고 메모리, 하드, CPU등을 높였다. -요즘에는 클라우드(cloud) 서비스로 하기에 굳이 서비스를 중지시키지 않아도 용량을 유동적으로 조절할 수 있다.- 서비스가 중지되기 때문에 중지하지 않고 한대를 더 개설하기로 한다. 


웹서버(Web server) 2대가 생겼다. 고객이 들어올때 대기열이 없도록 조절해 줘야한다. 서버를 2대로 증설했는데 예전과 같이 한대에만 들어온다면 2대를 증설한 의미가 없다. 서버(매장)의 상황에 따라 본점으로 분점으로 원할하게 고객을 안내해야한다. 이런 안내를 해주는 장치를 L4(layer 4)라고 한다. 

 

Layer 4는 통신 계층의 한 부분을 말한다. 통신 계층은 개인이나 서버에 누군가가 접속하여 들어올때 거치는 관문이라고 생각하면 된다. 이런 관문은 총 7개로  Layer 1은 물리 계층(Physical Layer), Layer 2는 데이터 링크 계층(Data Link Layer), Layer 3는 네트워크 계층(Network Layer), Layer 4는 전송 계층(Transport Layer), Layer 5는 세션 계층(Session Layer), Layer 6는 표현 계층(Presentation Layer), Layer 7는 응용 계층(Application Layer)로 구성되어 있다. 각 층마다 설명하기에는 어렵고 이해하기도 힘들기 때문에 일단 Layer 4에 대해서만 간단히 보겠다.

 

Layer 4는 데이터 전송을 조율하는 레이어다. 보내고자 하는 데이터의 용량, 속도, 에러 등을 고려하여 목적지(노드)에 전달하거나 에러를 리턴하는 레이어다. 데이터가 에러인지 유효한 데이터인지를 판단하기 위해서는 판단기준이 되는 규약이 필요하다. 통신에는 여러가지 규약이 있지만, Layer 4에 다루는 규약은 전송 제어 규약(Transmission Control Protocol - TCP) 사용자 데이터그램 규약(User Datagram Protocol - UDP)이다. 여기에서 데이터그램(datagram)을 설명하기 위해서는 데이터의 기본 단위인 패킷(Packet)을 설명해야하지만, 너무 깊게 들어가면 더 혼동 되기 때문에 그냥 데어터의 기존 단위라고만 생각하자.

 

TCP, UDP는 간단히 말해 전화와 TV 또는 라디오다. TCP는 전화이고 UDP는 TV, 라디오 비슷한 개념을 가지고 있다. 전화는 전화를 거는 사람과 받는 사람이 있어야 하며 전화 통신으로 서로 연결되어 있어야 한다. 하지만 TV, 라디오는 일반적인 수신이다. 송신되는 화면과 소리를 그냥 듣고 봐야 한다. 더 설명하게 되면 카오스 수렁으로 빠지기 때문에 이정도로 정리하겠다. 정리하면 L4는 데이터를 서버1로 보낼지 서버2로 보낼지 조율하는 장치이다.  

 


 

본점과 분점으로 대기열은 없지만, 주문이 오래걸린다는 크레임이 들어왔다. 홀에 고객이 많다 보니 주문이 밀리는 현상이 생기는 것이다. 앞서 음식점의 만두를 말했듯이 미리 만들어 놓을 수 있는 음식은 미리 만들어 놓고 주문과 동시에 조리를 해야하는 음식을 분리해야할 듯 하다. 웹 서비스에도 이와 같은 개념이 존재한다.

 

고객이 데이터를 요청하게 되면 서버에서 고객이 요청한 데이터에 맞는 프로그램이 돌아서  데이터베이스에서 자료를 찾아 고객이 볼 수 있도록 데이터를 가공하여  보여주는 방식은 주문과 동시에 조리를 하는 방식과 같다. 데이터베이스에서 자료를 찾아서 보여주지 않아도 되는 것들은 굳이 서버의 프로그램을 이용하지 않고, 미리 만들어 놓은 페이지를 보여주면 더 원활한 속도로 서비스를 제공할 수 있을 것 같다. 안내, 소개, 이벤트에 해당하는.. 굳이 데이터베이스가 없어도 되는 페이지들이다. 이런 페이지를 정적인 페이지(Static Page)라고 부른다.

 

정적인 페이지와 프로그램 동작을 통해 데이터베이스를 활용해야하는 페이지를 나누어서 서비스하면 좀 더 원활하게 서비스할 수 있을 것 같다. 정적인 페이지는 기존의 웹 서버(Web Server) 그대로 이용하면 된다. 프로그램 동작이 필요한 페이지는 웹 어플리케이션 서버(Web Application Server - WAS)로 분리한다. 정리하면 웹 서버는 홀에 진열된 음식이고, WAS는 주방이다.

 


 

지금까지 서비스 형태를 보면, L4에서 고객을 분할하고, 웹서버라는 홀에서 미리 만들어 놓은 음식을 제공하며, WAS 주방에서 음식을 만들어 제공하였다. 이정도 이면 괜찮은 서비스를 하고 있다고 봐도 될듯 하다. 그런데 한가지가 빠진 듯 하다. 바로 홍보다.

 

홍보는 초기에는 전단지를 직접 나누어 주는 방식으로 진행했다. 하지만, 고객이 많아지면서 직접 전단지를 나누어 주기에는 무리가 있다. 전단지는 스쳐지나가도 바로바로 눈에 들어와야한다. 그리고 대부분 그림으로 되어 있다. 매장의 인테리어도 마찬가지다. 매장에 들어서자 마자 바로 눈에 들어와야 한다.

 

극단적으로 전단지를 눈으로 보는 시점에서 그림을 그려 보는 사람 눈에 상이 맺히게 하고 인식되게 하는 절차가 길면 안된다. 또는 매장을 들어갔는데 그때부터 인테리어를 시작하고 고객이 인테리어를 인식하는 시점이 굉장히 길면 안된다. 전단지의 이미지나 인테리어는 눈이 가는 시점에서 바로 인식되어야 한다. 당연히 그래야 하지만, 그 당연한게 웹에서는 그렇지가 않다.


사이트에 접속하는 순간 L4를 통해 Web을 거쳐 WAS에서 프로그램이 돌아 데이터베이스에서 이미지를 찾아서 보여주게 되면 그 시간이 생각만해도 오래 걸린다. 이런 체험은 많이 경험했을 것이다. 사이트를 들어갔는데 계속 로딩중이거나, 빈페이지만 계속 나오는 경우이거나, 이미지가 로딩되는게 거북이 걸어가는 것처럼 보이는 현상이다.

 

이런 이미지나 디자인은 바로 보여야 고객이 지루해하지 않는다. 이런 이미지나 디자인등 사이트의 재료가 되는 것을 자원(resource)라고 부른다. 자원은 바로바로 로딩이 되야 사이트가 지체없이 서비스를 할 수 있다. 사이트에 접속하면 자원을 바로 전송해 주는 서비스를 플랫폼으로 제공한다. 이러한 플랫폼을 CDN(Contents Delivery Network) 이라고 부른다. 

 

CDN는 사이트의 리소스를 미리 로딩하여 메모리에 저장한다. 고객이 사이트에 접근하게 되면 자원을 서버에 요청하지 않고 메모리에 있는 자원을 건네준다. 하드에서 읽는 것보다 기억에서 빼는게 더 빠르기때문에 서버에 부담도 없고, 더 빠른 로딩이 가능하다.

 


 

최종적으로 고객이 서비스에 들어오는 순서를 정리해보자. 고객이 도메인을 입력하고 사이트에 접근하게 되면 처음 만나는 곳이 CDN이다. CDN에서 자원을 가져오고 L4로 들어가서 내가 가야할 서버를 할당 받는다. 할당 받은 웹 서버로 진입하면 정적인 페이지를 가져오고 데이터가 필요하면 WAS에 접근해서 프로그램이 동작하고 데이터베이스에서 자료를 찾아 가져오게 된다. CDN - L4 - Web Server - WAS - DB 순으로 서비스가 이루어진다. 

 

음식점을 빗대서 설명하면 전단지 또는 매장(CDN)을 보고 본점에 가서 본점인지 지점인지 안내(L4)를 받고 에피타이저로 간단히 먹을 수 있는 음식(Web server)를 먹고 주문한 식사를 주방(WAS)에서 만들어서 식사를 한다.

 

이런 일련의 절차와 구성을 아키텍쳐(architecture) - 건축 이라고 부른다.

 

 

'웹서비스' 카테고리의 다른 글

설계가 개발의 반이다.  (0) 2020.09.06
로그와 버그  (0) 2020.08.26
프로젝트 개발 관리  (0) 2020.08.05
품질을 높여주는 테스트  (0) 2020.07.28
쉽지만은 않은 사이트 기획  (0) 2020.07.22