본문 바로가기

Server

서버 vs 일반 컴퓨터

"서버" 컴퓨터란 물리적인 컴퓨터 장비를 의미합니다. 일반 컴퓨터와 마찬가지로 여러 개의 CPU, 메모리, 디스크 등으로 구성되어 있습니다. 보통 데이터센터라는 큰 공간에 위치하여, 어두운 곳에서 여러 대의 큰 컴퓨터가 24시간 계속해서 돌아가는 모습을 상상할 수 있습니다.

서버 컴퓨터

"서버"는 대규모의 데이터 처리나 웹 호스팅, 데이터 베이스 관리를 합니다. 개인용 컴퓨터와는 다르게 항상 켜져 있어야 하고, 냉각과 보안이 중요한 데이터 센터와 같은 환경에서 운영됩니다.

cf ) 클라이언트-서버 모델에서의 서버

클라이언트 - 서버 모델에서의 "서버"는 물리적인 장비가 아닌 역할을 의미합니다. 클라이언트는 요청을 하고 서버는 클라이언트의 요청에 응답하여 서비스나 데이터를 제공합니다. 예를 들어 집에서 개인용 PC에 서버 소프트웨어를 실행하면 그 PC는 클라이언트 - 서버 관계에서 "서버" 역할을 수행한다 라고 할 수 있습니다.

개발 환경에서 서버 배포까지

큰 회사의 물리적 서버는 24시간 작동하지만, 개발자들은 개인용 PC로 작업을 합니다. 어떻게 개인용 PC에서 서버 작업을 할 수 있는지 설명드리겠습니다.

 

1. 로컬 환경에서의 작업

개발자들은 자신의 개인용 PC에서 서버 어플리케이션을 개발하기 위해 직접 로컬 개발 환경을 설정합니다. 예를 들어 백엔드 개발자가 서버 소프트웨어와 데이터 베이스를 개인용 PC에 설치하고, 개발 도구를 사용해 로컬에서 서버 프로그램을 실행할 수 있습니다.

 

2. 원격 서버 접속 (SSH)

개발자들은 서버에 원격 접속하여 작업할 수도 있습니다. 보통 SSH 같은 원격 접속 도구를 사용하여 개인용 PC에서 서버에 안전하게 접속할 수 있습니다.

 

하지만 보통 로컬 환경에서 작업하고 원격 서버에 접속하여 배포나 성능 테스트와 같은 작업을 수행합니다.

 

3. 코드 저장소와 배포 자동화 (CI/CD)

보통 회사의 개발자들은 코드 저장소(Github 등)를 이용하여 협업합니다. 개인용 PC로 작업한 후 코드 저장소에 푸시하여 변경 사항을 저장하고 다른 개발자들과 공유할 수 있습니다.

 

👍 CI/CD 파이프라인을 이용해 Github의 코드 변경을 감지하여 자동으로 서버에 새로운 코드를 배포하고 실행할 수도 있습니다. => Github Actions는 코드 변경을 감지하여 워크플로우(빌드, 테스트, 배포 등)을 수행하는 데, 이 때 원 서버에 배포하기 위하여 보통 SSH 원격 접속을 수행하는 코드를 작성해야 합니다.

 

4. 가상화 컨테이너 기술 (Docker)

Docker를 사용하면 직접 로컬 개발 환경을 설치할 필요없이 docker compose up 명령어 하나로 실제 서버와 동일한 환경을 쉽게 로컬에서 실행할 수 있습니다. 실제 서버와 동일한 환경을 유지할 수 있어 오류 발생을 최소화할 수 있습니다.

 

👍 예를 들어 프론트엔드 개발자가 로컬에서 API 작업을 진행할 때 백엔드 개발자가 설정해 준 Docker 컨테이너를 실행하기만 하면 별도로 백엔드의 서버 툴을 설치할 필요 없이 작업할 수 있습니다.

정리

- "서버"란 물리적인 컴퓨터의 의미이기도 하면서 클라이언트의 반대 개념이기도 하다.

- 개발자들은 "서버"의 역할을 개인용 PC로 가져오기 위하여 코드 저장소(Github)를 활용한다. 이후 실제 서버에 배포하기 위하여 Github Actions를 활용하여 워크 플로우(빌드, 테스트, 배포 등)을 수행한다.

- 워크 프로우에는 주로 원격 접속 과정(SSH)이 포함되어 있다.