지난 시간에는 HTML, CSS, JavaScrip에 대해 배웠습니다.

그리고 이들의 기능을 구현하려면 컴퓨터가 두 대 필요하다고도 설명했습니다.

[Ep. 2]에서 배웠던 Client, 그리고 Web Server입니다.

 

 

 

작은 빵집으로 비유를 들어봅시다.

 

고객(Client) : 빵 하나 주세요.

점원(Web Server) : 여기 있습니다.

 

고객 = Client는 빵 하나를 요청했고, 점원 = Web Server는 그대로 빵 한 봉지를 집어서 Client에게 가져다 줍니다.

 

 

 

이렇게 교환되는 정보를 '정적 데이터'라고 부릅니다. 가공이 필요 없이 Web Server에 담긴 그대로 Client에게 전달하는 데이터 입니다.

www.google.com 을 예로 들 수 있습니다.

웹페이지를 새로고침한다고 검색창 위치가 달라지지 않듯이, 정적 데이터는 언제 요청해도 동일한 값을 보여줍니다.

 

새로고침을 여러 번 해도, 구글 검색창의 위치와 모양은 달라지지 않습니다.

 

그러나 구현해야 하는 기능들이 점점 복잡해짐에 따라서, 컴퓨터가 최소 두 대 더 필요하게 되었습니다.

 

 

 

아까의 빵집이 프랜차이즈 사업을 시작해서 커피를 같이 팔게 되었다고 생각해 봅시다.

 

 

 

1. 고객(Client) : 아메리카노 차갑게 산미 있는 원두로 한 잔 주세요.

2. 점원(Web Server) : 아이스 아메리카노 산미 있는 맛 맞으시죠? 번호표 받으시고 잠시만 기다려주세요.

3. 점원(Web Server) : 아메리카노 아이스, 산미 하나요!

4. 바리스타(WAS) : 잠시만요, 저희 창고에 얼음이랑 칠레산 원두 있는지 확인할게요!

5. 창고 관리자(DB) : 칠레산 원두랑 얼음 여기 있습니다.

6. 바리스타(WAS) : (칠레산 원두를 가지고 커피를 내리고, 얼음을 추가한다)

7. 바리스타(WAS) : 23번 아아메 나왔습니다!

8. 점원(Web Server) : 23번 고객님, 아이스 아메리카노 한 잔 나왔습니다!

 

 

 

아까 빵을 팔던 경우하고 어떤 게 달라졌을까요? 우선 직원이 많아졌습니다.

바리스타(WAS)와 창고 관리자(DB)를 새로 고용했습니다.

그리고 빵을 교환할 때보다 아아메를 교환할 때의 과정이 훨씬 복잡합니다.

고객이 점원에게, 점원이 바리스타에게, 바리스타가 창고 관리자에게, 창고 관리자가 바리스타에게, 바리스타가 점원에게, 점원이 고객에게 무엇인가를 요청하거나 전달받습니다.

 

 

 

여기서 중요하게 봐야 할 역할은 바리스타입니다.

바리스타는 아아메를 만들기 위해 창고 관리자에게 재료를 요청해야 합니다.

이 때 바리스타가 주문받은 그대로 '산미가 도는 아아메' 주세요, 라고 말한다면 창고 관리자는 할 수 있는 게 없습니다.

창고에는 아이스 아메리카노가 없기 때문입니다.

 

 

 

때문에 바리스타는 아메리카노가 '아이스'와 '산미'를 갖추려면, '얼음'과 '칠레산 원두'가 필요하다고 해석해야 합니다.

그리고 창고 관리자에게 '얼음'과 '칠레산 원두'를 달라고 요청합니다.

 

 

 

창고 관리자가 요청한 '얼음'과 '칠레산 원두'를 가져다 주었다고 그걸 그대로 점원에게 내 주면 안 됩니다.

점원에게 가져다 주어야 할 것은 '산미 아아메'이기 때문입니다.

따라서 바리스타는 레시피에 따라 '얼음'과 '칠레산 원두'를 합쳐 '산미가 도는 아아메'를 내립니다.

 

 

 

바리스타처럼 중간에서 요청받은 값을 해석(가공)하는 서버를 WAS(Web Application Server)라고 부릅니다.

그리고 WAS가 수행하는 일련의 작업과 레시피를 '로직'이라고 부릅니다.

 

 

 

그리고 WAS의 로직을 거쳐 가공이 필요한 데이터가 바로 동적 데이터 입니다.

 

 

 

또 다른 예를 들어서 생각해봅시다. 이번에는 프랜차이즈 빵집이 아니라 여러분의 컴퓨터에서 일어나는 일입니다.

 

 

 

여러분은 컴퓨터로 어떤 서비스에 로그인하려고 합니다.

이 때 여러분의 컴퓨터, Client는 서버에게 로그인 요청을 합니다.

이때 서버는 여러분이 누구이든지 똑같은 페이지를 띄울 수 있을까요? 그럴 수 없습니다.

여러분이 서비스의 회원이 맞는지, 아이디와 비밀번호는 제대로 입력했는지, 회원이었지만 휴면계정으로 전환되었는지, 아니면 만 14세 미만 회원인지 등등을 확인해봐야 합니다.

Client의 입력값에 따라서 출력해야 하는 정보가 달라지는 것입니다.

 

 

 

이 때 Client의 입력값을 우리 서비스의 회원목록과 대조시켜보고,

회원이 맞는지 확인하고,

회원으로 확인된 사람에게는 로그인 이후 페이지를,

회원이 아닌 사람에게는 [회원 정보가 없습니다] 페이지를 보여주는 일련의 과정.

이 과정이 동적 데이터가 거치는 과정입니다.

 

 


 

 

보시다시피, 동적 데이터를 가져오기 위해서는 정적 데이터를 가져올 때보다 과정이 더 복잡하고 해야 할 일이 많습니다.

그래서 오늘날 대부분의 서비스들은 서버를 두 개로 나눠 놓았습니다.

정적인 데이터를 맡은 Web Server, 동적인 데이터를 처리하는 WAS.

 

 

 

서버를 나누어 놓은 이유는 두 가지 입니다.

1. 속도 : 한 서버에서 두 종류의 데이터를 같이 처리할 수도 있습니다.

프랜차이즈 빵집에서 점원이 빵도 팔고 커피 주문도 받으며 커피도 직접 내리는 경우처럼요.

가능은 합니다만, 웹페이지의 정보를 가져오는 속도가 굉장히 느려집니다. 쉽게 말해 로딩 시간이 너무 길어집니다.

 

 

 

2. 보안 : 웹서비스에서 보관하는 몇몇 정보는 개인정보, 카드일련번호 등 보안 문제가 걸려 있습니다.

이 때 같은 정보를 한 서버(점원 한 명)에게 다 알려주는 것보다는, 여러 서버(바리스타, 창고 관리자)에게 쪼개어 알려주고 정보를 창고(DB)에 저장하는 것이 더 안전할 것입니다.