1. 서버란?
서버는 컴퓨터로, 특정 프로그램을 실행하여 네트워크를 통해 접근 가능한 리소스를 응답해주는 역할을 합니다. 서버 컴퓨터는 물리적인 실체이며 CPU, GPU, RAM, Memory 등의 사양을 가지고 있습니다.
서버의 안정적인 운영을 위해 다음과 같은 접근 방법을 고려할 수 있습니다:
- 하드웨어 관리: 서버 컴퓨터의 하드웨어를 철저히 관리해야 합니다. 이는 주기적인 유지보수, 업그레이드, 고장 시 신속한 대응 등을 포함합니다.
- 소프트웨어 업데이트: 서버에 설치된 운영 체제, 프로그램, 보안 패치 등을 최신 상태로 유지하는 것이 중요합니다. 이를 통해 보안 취약점을 해결하고 안정성을 향상시킬 수 있습니다.
- 모니터링: 서버의 상태를 지속적으로 모니터링하고 성능 이슈나 잠재적인 문제를 식별해야 합니다. 이를 위해 로그 분석, 리소스 사용량 모니터링, 오류 및 경고 알림 설정 등을 활용할 수 있습니다.
- 스케일 업 및 로드 밸런싱: 서버에 트래픽이 몰릴 경우 성능 저하가 발생할 수 있습니다. 이를 방지하기 위해 서버의 성능을 높이거나, 여러 대의 서버를 사용하여 트래픽을 분산시키는 로드 밸런싱을 고려할 수 있습니다.
- 백업과 복구: 서버의 데이터를 정기적으로 백업하고, 장애나 데이터 손실 시에도 신속하게 복구할 수 있는 방법을 마련해야 합니다. 이를 위해 백업 전략과 복구 절차를 계획하고 테스트해야 합니다.
- 보안 강화: 서버에는 중요한 데이터나 시스템이 저장되어 있으므로 보안 강화가 필요합니다. 방화벽 설정, 암호화, 접근 제어 등의 보안 조치를 적용하여 외부 공격이나 데이터 유출을 방지해야 합니다.
이러한 방법들을 고려하여 서버를 안정적으로 운영함으로써 사용자에게 신뢰성과 원활한 서비스 제공을 할 수 있습니다
2. 서버를 운영하는 두가지 방법
2-1. 온 프레미스(On-Premise)
- 물리적인 공간 구축: 서버를 운영하기 위해 별도의 물리적인 공간이 필요합니다. 이는 서버실이나 데이터센터 등으로 구성될 수 있습니다.
- 하드웨어 구매 및 관리: 필요한 서버 하드웨어를 직접 구매하고 관리해야 합니다. 이는 서버 컴퓨터, 스토리지, 네트워크 장비 등을 포함합니다.
- 전문 인력 필요: 하드웨어 구매, 서버실 구축, 네트워크 설정 등을 위해 전문 인력이 필요합니다. 이들은 서버 관리, 유지보수, 보안 등의 업무를 담당합니다.
- 보안 및 제어: 온 프레미스 방식은 물리적인 서버 제어가 가능하므로 보안 측면에서 일부 기업에게 유리합니다. 데이터와 시스템에 대한 직접적인 통제가 가능합니다.
- 하드웨어 업그레이드의 어려움: 서버 확장이나 하드웨어 업그레이드 시에는 새로운 하드웨어를 구매하고 기존 시스템과 통합해야 합니다. 이에 따른 비용과 복잡성이 발생할 수 있습니다.
- 유지보수와 장애 복구: 온 프레미스 방식에서는 하드웨어의 유지보수와 장애 복구를 직접 처리해야 합니다. 이를 위해 백업, 복구, 시스템 모니터링 등의 작업이 필요합니다.
- 클라우드와의 비교: 클라우드 컴퓨팅과 비교했을 때, 온 프레미스 방식은 초기 투자 비용이 높고 유연성이 낮을 수 있습니다. 그러나 보안과 컨트롤 측면에서 일부 기업에게는 여전히 선호되는 방식일 수 있습니다.
온 프레미스 방식은 서버 운영에 대한 직접적인 통제와 보안이 중요한 환경에서 선택될 수 있으나, 클라우드 컴퓨팅의 발전으로 인해 많은 기업이 클라우드 기반의 서비스를 활용하는 방향으로 전환하고 있습니다.
2-2. 클라우드 컴퓨팅(Cloud Computing)
- 자원 대여: 클라우드 서비스 프로바이더를 통해 필요한 컴퓨터 자원(서버, 스토리지 등)을 필요한 만큼 대여하여 사용할 수 있습니다.
- 물리적인 서버 관리 필요 없음: 사용자는 물리적인 서버를 구매하고 관리할 필요가 없으며, 클라우드 서비스 프로바이더가 이를 처리합니다.
- 가상화 기술 활용: 클라우드 서비스 프로바이더는 가상화 기술을 사용하여 물리적인 서버를 가상으로 분리하여 서비스를 제공합니다.
- 안정적인 환경 제공: 클라우드 서비스 프로바이더는 전세계에 걸친 인프라를 구축하여 안정적인 환경을 제공합니다.
- 관리상의 이점: 사용자는 물리적인 서버 관리에 대한 부담을 덜 수 있으며, 클라우드 서비스 프로바이더가 유지보수와 장애 복구를 처리합니다.
- 유연한 자원 조정: 필요에 따라 클라우드에서 제공하는 컴퓨터 자원의 사양이나 갯수를 쉽게 조정할 수 있어서 확장이나 축소가 유연하게 이루어집니다.
- 비용 효율성: 필요한 자원만 사용하고 대여 기간에 따라 비용을 지불하므로 비용 측면에서 효율적입니다.
- 확장성: 클라우드 컴퓨팅은 서비스 확장이 용이하며, 클릭 몇 번으로 자원을 늘리거나 축소할 수 있습니다.
클라우드 컴퓨팅은 물리적인 서버 관리와 비용 측면에서 효율성과 유연성을 제공하므로 많은 기업과 개인이 선택하고 있는 방식입니다.
3. 클라우드 컴퓨팅의 구분
3-1. IaaS(Infrastructure as a Service)
- 인프라 대여: 사용자는 필요한 컴퓨터 자원(서버, 스토리지, 네트워크 등)을 대여하여 인프라를 구축합니다.
- 제어권: 사용자는 대부분의 리소스에 접근하여 서비스를 구성하고 관리할 수 있으며, 필요한 설정과 구성을 직접 수행할 수 있습니다.
- 확장성: 필요에 따라 컴퓨터 자원을 쉽게 늘리거나 축소할 수 있어서 서비스의 확장과 대응이 용이합니다.
- 자유도: 사용자는 운영 체제, 미들웨어, 애플리케이션 등을 선택하고 설치할 수 있어서 자유롭게 원하는 환경을 구성할 수 있습니다.
- 유연한 관리: 사용자는 자원의 모니터링, 스케일링, 백업 등을 직접 수행할 수 있어서 유연한 관리가 가능합니다.
- 자동화 기능: API와 자동화 도구를 통해 자원 프로비저닝, 구성 관리, 스케일링 등을 자동화할 수 있습니다.
- 비용 효율성: 필요한 자원만 대여하고 사용한 만큼 비용을 지불하므로 비용 관리가 용이하고 효율적입니다.
- 전체적인 관리 책임은 프로바이더에게 있으며, 하드웨어의 유지보수와 업그레이드 등은 프로바이더가 처리합니다.
IaaS는 유연성과 제어권을 가진 클라우드 컴퓨팅의 기본 형태로, 사용자가 자원을 대여하고 필요한 인프라를 직접 관리할 수 있는 장점을 제공합니다.
예시) AWS EC2
- 개발 및 운영 플랫폼: 소프트웨어 개발 및 운영을 위해 필요한 구성요소들을 플랫폼화하여 제공합니다.
- 운영 관리 위임: PaaS를 사용하면 소프트웨어의 운영에 대한 관리를 PaaS에 위임할 수 있어 개발자들은 효율적인 개발에 집중할 수 있습니다.
- 종속성: PaaS는 특정 플랫폼에 종속적이므로 해당 플랫폼에 의존해야 합니다.
- 제한된 제어권: PaaS는 플랫폼 형태로 제공되기 때문에 플랫폼이 제공하는 기능 및 설정 외에는 제어할 수 없습니다.
- 비용: IaaS에 비해 PaaS는 더 높은 비용을 지불해야 할 수 있습니다.
- 편의성: PaaS는 개발을 위한 다양한 도구, 라이브러리, 런타임 등을 제공하여 개발 프로세스를 간소화하고 가속화합니다.
- 확장성: PaaS는 필요에 따라 애플리케이션을 확장하거나 축소할 수 있는 유연성을 제공합니다.
- 관리 책임: PaaS 제공업체가 플랫폼의 관리, 유지보수, 보안 패치 등을 처리하므로 개발자는 이러한 측면을 신경쓰지 않아도 됩니다.
PaaS는 개발자들에게 개발 및 운영을 간편화하고 효율화하는 장점을 제공하지만, 특정 플랫폼 종속성과 제한된 제어권, 비용 측면에서의 단점도 고려해야 합니다.
예시) AWS Elastic BeanStalk, Heroku, Github Pages
3-3. SaaS(Software as a Service)
- 클라우드 기반 서비스: SaaS는 클라우드를 통해 제공되는 서비스 형태로 소프트웨어를 이용할 수 있습니다.
- 소프트웨어 제공: SaaS는 고객에게 사용 가능한 소프트웨어를 함께 제공합니다.
- 설치 필요 없음: 명시적으로 소프트웨어를 개별 PC에 설치할 필요가 없으며, 인터넷을 통해 웹 브라우저 등을 통해 소프트웨어를 접근하고 사용할 수 있습니다.
- 다양한 기능 제공: SaaS는 다양한 기능과 서비스를 제공하여 고객이 필요한 기능을 편리하게 활용할 수 있습니다.
- 유지보수 담당: SaaS 제공업체가 소프트웨어의 유지보수, 업데이트, 보안 패치 등을 담당하므로 고객은 이를 걱정할 필요가 없습니다.
- 유연한 이용 모델: SaaS는 월별 구독 형태로 이용할 수 있으며, 필요에 따라 서비스의 확장 또는 축소가 가능합니다.
- 플랫폼 독립성: SaaS는 특정 플랫폼에 종속되지 않으므로 다양한 운영체제나 기기에서 접근 가능합니다.
- 높은 접근성: 인터넷 연결이 가능한 어디서든 소프트웨어에 접근할 수 있어 편리한 이용이 가능합니다.
SaaS는 클라우드 기반의 서비스 형태로 소프트웨어를 제공하여 설치와 유지보수에 대한 부담을 줄여주고, 다양한 기능과 유연한 이용 모델을 제공하여 사용자에게 편의성과 접근성을 제공합니다.
예시) DropBox, iCloud, Netflix, Google Apps, Slack
AWS란?
- 클라우드 컴퓨팅 서비스: AWS는 클라우드 컴퓨팅 서비스를 제공하여 사용자가 필요한 컴퓨팅 리소스를 유연하게 확보하고 사용할 수 있도록 합니다.
- 다양한 서비스 제공: AWS는 컴퓨팅, 스토리지, 데이터베이스, 네트워킹, 인공지능, 보안 등 다양한 서비스를 제공하여 다양한 비즈니스 요구를 충족시킬 수 있습니다.
- 확장성과 유연성: AWS는 필요에 따라 컴퓨팅 리소스를 신속하게 확장하거나 축소할 수 있는 확장성과 유연성을 제공하여 비용 효율적인 운영이 가능합니다.
- 안정성과 가용성: AWS는 전 세계적으로 분산된 데이터 센터를 보유하고 있어 높은 가용성과 안정성을 제공합니다.
- 보안: AWS는 강력한 보안 기능을 제공하여 데이터의 기밀성, 무결성, 가용성을 보장합니다.
- 서버리스 컴퓨팅: AWS는 서버리스 서비스인 AWS Lambda를 포함하여 서버 관리 없이 코드 실행 환경을 제공하여 개발자들이 애플리케이션을 더욱 간편하게 구축할 수 있도록 합니다.
- 개방성과 통합성: AWS는 다른 서비스와의 통합을 용이하게 하기 위해 API 및 도구를 제공하고, 다양한 기술 스택과 호환성을 가지고 있습니다.
AWS는 클라우드 컴퓨팅 서비스를 제공함으로써 기업들에게 확장성, 유연성, 안정성, 보안성을 제공하고 비즈니스의 디지털 변화를 지원합니다.
AWS S3
-
파일 저장 및 접근: S3는 파일을 안정적으로 저장하고 인터넷을 통해 접근할 수 있는 서비스입니다. 주로 이미지, 동영상, 문서 등의 파일을 저장하는 데 사용됩니다.
-
정적 웹사이트 호스팅: S3를 사용하여 정적인 파일들을 안정적으로 제공함으로써 정적 웹사이트 호스팅에도 활용할 수 있습니다. 예를 들어, Create React App과 같은 도구로 생성된 정적인 웹사이트 파일을 S3에 업로드하고, 해당 파일들을 브라우저에서 접근하여 실행할 수 있습니다.
-
클라이언트 사이드 렌더링: S3를 통해 배포된 정적 파일은 클라이언트 사이드 렌더링 방식으로 동작합니다. 따라서 브라우저에서 파일을 다운로드한 후에 클라이언트의 웹 브라우저에서 실행되며, 동적인 컨텐츠를 제공하기 위해서는 추가적인 서버 사이드 로직이 필요합니다.
AWS의 S3 서비스는 파일 저장과 접근에 용이하며, 정적인 파일의 제공과 클라이언트 사이드 렌더링을 통한 배포에 특히 유용합니다. 이를 활용하여 리액트 프로젝트와 같은 정적인 웹사이트를 호스팅하고 배포할 수 있습니다.
CRA 배포용 S3 Bucket Policy
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "PublicReadGetObject",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::<bucket-name>/*"
}
]
}
참고자료
![](https://velog.velcdn.com/images/hanseungjune/post/f244402b-10f4-426b-a86d-a01afaa0a798/image.png)