기존 블로그에 작성했던 포스트를 이전한 글입니다.
해당 포스트는
서버 기초
를 복습한 것을 정리한 내용입니다.
🌈 웹 개발을 위한 서버
💻 서버와 클라이언트의 개념
IT 제품을 개발하고 관리하기 위해서는 ‘서버’ 라는 개념에 대해서 알아야 한다.
우선 우리 삶 속에서 최근 자주 접할 수 있는 ‘서버’를 살펴 보자.
모바일 플랫폼 시대가 열림에 따라 우리의 삶에 IT 기술이 더 깊게 관여하고 있기 때문에 ‘서버’라는 단어는 더 쉽게 접할 수 있다.
모바일 게임에서 등장하는 ‘서버’가 대표적이다.
게임에 접속하기 위해 유저들은 여러개로 분산된 서버를 선택하고 선택한 서버에서 게임을 즐길 수 있다.
게임을 하나의 가상 세계라고 가정한다면 국가와 같은 특정 물리공간으로 이해할 수 있다.
서버는 ‘제공하는 주체’라고 이해할 수 있다.
스포츠 경기의 경우 ‘서브’란 한 점을 내기 위해 이번 경기를 시작하는 행위다. 경기의 시작을 제공하는 관점이다.
게임에서 ‘서버’란 무엇일까?
게임을 즐길 수 있도록 게임의 물리적인 공간을 ‘제공’하는 주체다.
즉, 서버란 네트워크에서 다른 컴퓨터나 소프트웨어와 같은 클라이언트에게 서비스를 제공하는 컴퓨터라고 할 수 있습.
그렇다면 클라이언트는 무슨 의미일까? ‘서버’의 반대 개념으로 이해할 수 있다.
서버가 제공자의 관점이라면 클라이언트는 ‘제공 받는 대상’이다.
게임의 경우는 게임을 즐기는 유저가 되고 스포츠 경기의 경우는 서브를 받는 상대편 선수가 된다.
이제 IT 개발자의 관점에서 서버를 살펴보자.
‘유튜브’는 나와 같은 일반인에게 동영상 서비스를 제공하는 관점에서 ‘유튜브’는 서버가 될 수 있다.
일반인은 동영상 서비스를 제공 받을 수 있으므로 클라이언트가 될 수 있다.
한가지 의문점이 생길 수 있는데 ‘동영상 서비스’를 어떤 수단과 방법으로 제공하고 제공 받을 수 있는가? 다.
서버인 코드스테이츠는 ‘Youtube
’라고 하는 웹 사이트와 어플리케이션을 통해 제공하고 클라이언트인 우리들은 PC에 설치된 브라우저(크롬, 엣지 등) 또는 Mobile 앱를 통해 제공 받을 수 있다.
이렇듯 서버와 클라이언트는 물리적인 ‘컴퓨터’와 ‘소프트웨어’를 모두 의미한다.
웹 서버와 웹 애플리케이션 서버 외에 대부분의 IT 분야에서 사용되는 대표적인 서버는 무엇이 있을까?
[그림 2]에 안내되고 있는 서버들이 있다.
그림의 6개 서버는 대표적인 서버이며 이 외에 서비스의 내용에 따라 수많은 종류의 서버가 정의될 수 있다.
각 서버에 대한 설명은 다음과 같다.
웹 서버
웹 서비스를 제공하기 위한 서버 컴퓨터
Apache, IIS, NginX와 같은 웹 서버 소프트웨어를 사용하여 웹 서비스 할 수 있다.
웹 애플리케이션 서버
웹 애플리케이션을 제공하기 위한 서버 컴퓨터
Tomcat, WebLogic, WebSphere와 같은 웹 애플리케이션 서버 소프트웨어를 사용하여 웹 애플리케이션 서비스를 제공할 수 있다.
데이터베이스 서버
데이터베이스를 제공하기 위한 서버 컴퓨터
Oracle, MS-SQL, MySQL과 같은 데이터베이스 소프트웨어를 사용하여 서비스 할 수 있다.
파일 전송 서버
대용량의 파일을 빠르게 주고 받기 위한 서버 컴퓨터
VS-FTPD, IIS와 같은 소프트웨어를 사용하여 서비스 할 수 있다.
메일 서버
메일 서비스를 위한 서버 컴퓨터
Send-mail, Microsoft Exchange Server와 같은 소프트웨어를 사용하여 서비스 할 수 있다.
인쇄 서버
공간의 제약을 극복하고 인쇄를 할 수 있도록 하는 서버 컴퓨터
인쇄기 제품과 구성에 따라 해당 서비스를 지원하는 다양한 소프트웨어를 사용하여 서비스 할 수 있다.
나의 경우 프론트엔드 개발자 과정을 학습하고 있으므로 많은 서버들 중에서 웹 서버와 웹 애플리케이션 서버를 주목할 필요가 있다.
실제 개발을 하면 서버의 사용 목적에 따라 운영 서버와 개발 서버로 분리하여 사용하는 것을 쉽게 볼 수 있다.
[그림 3] 처럼 개발자는 특정 개발 단계가 완료되면 개발 내용을 서비스의 종류에 맞는 ‘개발 서버’에 적용한다.
프론트 개발자는 개발 웹 서버에 개발 내용을 적용하고 백엔드 개발자는 개발 웹 애플리케이션 서버에 개발 내용을 적용할 수 있다.
데이터베이스와 관련한 내용은 개발 데이터베이스 서버에 반영한다.
이와 같이 하나의 제품에 여러 개발 서버를 나누는 이유는 개발 영역을 명확히 하여 관리와 개발을 쉽게 하기 위함이다.
더 나아가서는 서버가 감당해야 할 트래픽의 분산을 위함이고 서버의 장애에 대응할 수 있을 것이다.
개발 서버에 적용된 내용이 확정되고 서비스 가능한 수준으로 의사 결정 단계를 거치면 각각의 운영 서버에 해당 내용이 반영되어 클라이언트는 업데이트 된 최신 서비스를 제공 받을 수 있다.
💻 서버와 클라이언트의 통신
서버는 서비스를 제공하고 클라이언트는 서비스를 제공 받는다고 했다.
그렇다면 어떻게 서비스를 제공 하고 제공 받는지 알아야 한다.
이 관계를 이해하는 것은 서버와 클라이언트가 통신하는 관점이다.
서버와 클라이언트의 통신 개념을 이해하기 위해서 명확한 기준이 몇가지 필요하다.
서버 클라이언트 서비스 제공 한다 제공 받는다 통신(행위) 요청 요청 받는다 요청 한다 통신(행위) 응답 응답 한다 응답 받는다
가장 먼저 생각해 볼 부분은 서비스 관점에서 서버와 클라이언트의 통신이다.
서버는 제공하는 입장이므로 서비스 기준에서 서버는 ‘서비스를 제공한다.’ 고 할 수 있다.
클라이언트는 당연히 ‘서비스를 제공 받는다.’ 고 할 수 있다.
이와는 조금 다른 관점에서 서버와 클라이언트의 통신(행위)의 기준에서도 해석될 수 있다.
통신은 요청과 응답으로 다시 구분할 수 있다.
따라서 통신을 요청하는 기준에서 서버는 요청을 받게 되고 클라이언트는 요청을 한다고 할 수 있다.
요청과 응답은 반대의 개념이므로 통신에 응답하는 기준에서 서버는 응답을 하고 클라이언트는 응답을 받는다.
클라이언트는 서버에게 요청을 하는 것이고 서버는 클라이언트의 요청을 받는 것이다.
통신의 응답 기준에서는 서버가 응답을 하는 것이며 클라이언트는 응답을 받는 것으로 이해할 수 있다.
이때 사용되는 요청과 응답을 각각 Request, Response라고 표현한다.
즉, Request는 요청으로써 클라이언트 중심이고 Response는 응답으로써 서버 중심이다.
실제 개발을 하다보면 요청과 응답에 대한 논의를 끊임없이 하게 된다고 한다.
프론트 개발자는 백엔드 개발자의 API를 요청 통신하여 데이터의 처리를 질의하고 백엔드 개발자는 프론트 개발자의 요청을 받아 처리 결과를 응답한다.
💻 서버 구성과 서버 환경 설정
개발된 제품(서비스)을 사용자에게 서비스 하려면 서버를 구성하고 목적에 맞는 서버 환경 설정을 마쳐야 한다.
이와 같은 작업이 처리되었을 때 개발자는 셋팅된 서버에 개발 내용을 적용할 수 있다.
개발된 서비스가 적용되는 것을 개발자의 입장에서 배포한다고 한다.
결국 개발자가 배포하기 위해서는 서버의 구성과 서버의 환경 설정이 선행되어야 한다.
서버 구성과 서버 환경 설정은 다음과 같은 의미로 구분할 수 있다.
서버 구성
서버 컴퓨터를 구성하는 관점
서버 컴퓨터의 종류, 서버 컴퓨터의 대수, 네트워크 정책, 서버 수용 인원 예측 등을 구성
서버 환경 설정
구성된 특정 컴퓨터 서버가 서비스를 제공할 수 있도록 환경을 구성하는 과정
웹 서버는 Apache, IIS, NginX 와 같은 웹 서버 소프트웨어를 이용하여 웹 서비스를 가능케 하는 서버 환경 설정을 의미
웹 애플리케이션 서버는 Tomcat, WebLogic 과 같은 웹 애플리케이션 서버 소프트웨어를 이용하여 웹 애플리케이션을 구동하여 서비스 가능케 하는 서버 환경 설정을 의미
데이터베이스 서버는 Oracle, MS-SQL 과 같은 데이터베이스 솔루션 소프트웨어를 이용하여 데이터베이스를 관리할 수 있는 서비스를 제공할 수 있는 서버 환경 설정을 의미
따라서 서버 구성 작업을 진행 한 후 서버가 구성되면 각 컴퓨터 서버(물리 서버)에 서버가 서비스할 목적에 맞는 서버 환경 설정을 진행해야 한다.
서버 구성 + 서버 환경 설정 작업에 해당하는 서버 셋팅 작업이 완료되면 개발자는 개발한 제품을 연관된 개발, 운영 서버에 ‘배포’하여 웹 서비스 준비를 할 수 있다.
이후 클라이언트(고객)는 우리 제품(제공 관점에서 서버)을 이용(요청과 응답)할 수 있다.