What is a Server

문상우·2023년 8월 16일
0

Infra

목록 보기
1/1
post-thumbnail

서버란 ?

❓우리는 서버를 생각할 때, 위처럼 서버 전용 컴퓨터를 생각하곤 합니다. 틀린말은 아니지만 서버는 그 어떤 컴퓨터도 될 수 있습니다. 만일 어떤 컴퓨터에서 요청을 받고 응답을 해준다면, 이는 서버 컴퓨터라고 할 수 있습니다.


❓ 서버의 사전적 의미는 “네트워크에서 다른 컴퓨터나 소프트웨어와 같은 클라이언트에게 서비스를 제공하는 컴퓨터”입니다.

전달하다의 Serve에서 사람의 뜻을 나타내는 er을 붙인 단어로서, 클라이언트에게 여러 서비를 제공하는 모든 컴퓨터를 우리는 서버라고 합니다.


예를 들어 네이버 사이트에 접속을 해야한다고 생각해봅시다. 먼저 우리는 네이버에 들어가기 위해 브라우저를 킬 것이고, 이후 크롬에서 네이버 도메인 주소에 대해 요청하면, 그에 해당하는 웹 페이지를 제공받을 것입니다. 여기서 이 웹페이지에 대한 정보를 가지고 넘겨주는 행위를 하는게 바로 서버입니다. 서버는 웹 페이지를 제공하는데 필요한 모든 데이터를 갖고 있고, 이 서버가 구동되기 위한 서버 소프트웨어가 동작되고 있을 것입니다.


클라이언트 / 서버 시스템

❓ 서버와 클라이언트의 관계는 “누가 요청”을 하고, “누가 응답”을 하냐로 설명할 수 있습니다. 서버에 대해 깊은 이해를 하기 위해서는 클라이언트 서버 시스템을 명확하게 이해해야 합니다.

클라이언트 서버 시스템은 요청과 응답으로 나뉠 수 있습니다. 어떤 관계에 있어 요청을 하는 대상은 클라이언트이고 이 요청에 대한 응답을 내려주는 대상을 서버라고 합니다.


여기서, 클라이언트는 요청하는 대상인 데스크탑, 노트북, 모바일 어떤 것도 될 수 있습니다. 서버를 향해 요청을 하고 필요한 값을 응답받는다면, 이는 모두 클라이언트인 것입니다.

이렇듯, 어떤 서비스를 위해 요청을 받고 응답을 내려주는 것을 서버라고 하며, 서버가 구동되는 컴퓨터 자체를 서버, 해당 컴퓨터 위에서 서버가 동작하기 위한 코드를 서버 소프트웨어라고 합니다.


로컬 서버 (Local Server)

❓ 로컬 서버란, 서버가 되는 컴퓨터가 현재 내가 사용하고 있는 컴퓨터인 것을 말합니다. 즉, 네트워크로 이루어진 외부의 컴퓨터에서 동작하는 서버가 아닌, 내가 지금 사용하고 있는 컴퓨터에서 서버가 동작하고 있는 것을 말합니다.

아마 대부분의 학생들은 로컬 서버를 이용해 개발 공부 및 개발 테스트를 진행할 것입니다. http://localhost 또는 http://127.0.0.1 로 접근하는게 바로 로컬 서버입니다. 즉, 현재 테스트를 진행하는 본인의 데스크탑 또는 노트북이 바로 로컬 서버입니다.

우리는 실제 운영되는 시스템을 개발한다고 해서 운영되는 서버에 직접적으로 관여하며 개발하지 않습니다. 보통은 코드를 다운받아 로컬환경에서 실행하며 코드를 생성, 수정, 삭제하고 변경사항이 모두 끝나면 이 때, 다시 외부의 운영서버로 업데이트 하는 방식을 사용합니다.


위 방식으로 개발을 하기 위해서는 각 개발자 PC 에서 개발 및 테스트 환경 셋업이 되어 있어야 합니다. 여기서 각 개발자 PC에서 동작할 수 있는 서버 환경을 Local 환경이라고 하고, 여기서 서버 소프트웨어를 구동하면 각 개발자 컴퓨터는 Local Server가 되는 것입니다.


Local Server에서 가장 중요시 해야 하는 점은 모든 개발자가 같은 개발 환경을 사용해야 한다는 것입니다. 다른 버전이나 OS를 사용하게 되면, 각 개발자의 Local Server에서는 문제가 생기지 않더라도, 어떤 외부의 컴퓨터 서버에 각 개발자의 코드를 병합할 때, 문제가 발생할 수 있기 때문입니다.


개발 서버 (Development Server)

❓ 개발자 전용 서버를 말합니다. 이는 개발자들의 개인 개발환경(로컬)이 아닌 하나의 통합된 환경으로 개발자들이 자유롭게 테스트할 수 있는 서버를 말한다. 개발자들이 마음대로 테이블 or 서비스를 추가, 수정, 삭제 하면서 서비스를 테스트할 수 있는 서버를 말합니다.

개발 서버는 실 사용자들이 사용할 수 없는 환경으로 개발자들만 접근 가능해야 합니다. 실 사용자들이 사용하지 않기 때문에 크기가 클 필요가 없어서, 한 두개의 서버로 기능만 구현하는 역할을 합니다.


대체적으로, 프로젝트에서 개발 서버는 스테이징 서버와 환경을 비슷하게 구성하여 테스트를 하는 경우가 많다.


스테이징 서버 (Staging Server)

❓ 스테이징 서버는 테스트 서버(Test Server), QA 서버(Quality Assurance)로도 불립니다. 운영 서버와 환경이 거의 100%로 비슷할 정도로 똑같이 운영되는 서버입니다.

스테이징 서버가 필요한 이유는 운영서버와 똑같은 환경으로 운영서버에서 사용 되는 데이터를 가지고 운영서버에 반영하기 전에 테스트를 거치기 위함입니다. 즉, 스테이징 서버에서 문제가 없다면, 운영 서버에 그대로 배포하기 위해 존재하는 최종 검수 테스트 서버입니다. 클라이언트에게 시연을 보여줘야 한다면 스테이징 서버를 통해 보여주기도 합니다. 최종 검수에서는 주로 비 기능적인 부분(Security, 성능, 장애 등)을 검증합니다.


운영 서버 (Productions Server)

❓ 운영 서버는 실 사용자들이 사용하는 서버입니다. 스테이징 서버에서 정상적으로 작동하는 기능들이 운영 서버에 반영되고, 이런 기능들은 실 사용자들에게 공개됩니다.


결론

대부분 스테이징 서버까지는 아니더라도 개발 서버는 별도로 운영하는게 일반적입니다. 상황에 따라, Integration, QA, Staging 환경은 요구 사항에 따라 합치거나 별도로 운영될 수 있으며, 환경이 많아질수록 다양한 형태의 검증과 각 stakeholder 별로 테스트가 쉽지만, 각 환경을 유지 하는데 필요한 서버와 운영 인력이 많이 소요된다는 단점이 존재합니다.

그렇다면 이렇게 많은 서버들을 어떻게 하나하나 배포하고 관리할 수 있을까요 ? 이는 다음 글에서 다뤄보겠습니다.

[참고]

[서버 가이드북] 1. 서버(Server) 란?
https://lipcoder.tistory.com/514
'서버'가 뭔지 세계 최고로 쉽게 설명해드림
https://codingapple.com/unit/nodejs-2-what-is-server/
개발 환경(dev,stage,qa,production)
https://bcho.tistory.com/759
[Server] 로컬서버, 개발서버, 스테이징서버, 운영서버 란?
https://velog.io/@ryucherry/Server-%EB%A1%9C%EC%BB%AC%EC%84%9C%EB%B2%84-%EA%B0%9C%EB%B0%9C%EC%84%9C%EB%B2%84-%EC%8A%A4%ED%85%8C%EC%9D%B4%EC%A7%95%EC%84%9C%EB%B2%84-%EC%9A%B4%EC%98%81%EC%84%9C%EB%B2%84-%EB%9E%80

profile
평범한 대학생의 코딩일기

0개의 댓글