서버는 백엔드 개발자만 알아야하는 지식일까요? 프론트엔드 개발자는 기획, 백엔드 등 다양한 직무의 사람들과 협업해야 하며 의사소통해야 합니다. 따라서 프론트엔드도 알아야 할 서버의 운영 방식과 클라우드 컴퓨팅에 대해서 알아봅시다!
# 1. 서버란?
보통 우리는 인터넷을 통해 특정 웹사이트나 리소스에 접속하게 됩니다. 하지만 정확히 말하면, 우리가 접속하는 것은 해당 웹사이트나 리소스를 제공하는 컴퓨터에 접근하는 것입니다.
서비스를 제공하기 위해서는 일반적으로 컴퓨터를 작동시키고, 특정 프로그램을 실행시켜 네트워크를 통해 컴퓨터에 접속하면 원하는 리소스를 얻을 수 있습니다. 이 컴퓨터는 외부에서 접근 가능하도록 인터넷에 연결되어 있으며, 이러한 컴퓨터를 우리는 보통 "서버"라고 부릅니다.
서버는 물리적인 컴퓨터로 구성되어 있으며, CPU, GPU, RAM, 메모리 등의 사양을 가지고 있습니다. "서버가 터졌다"는 표현은 보통, 서버 컴퓨터의 사양을 넘어서는 계산이 필요해져서 제대로 처리하지 못하는 상황이나, 실행 중인 프로그램이 예기치 않게 종료되어 운영이 불가능한 상황, 또는 외부에서 서버 컴퓨터에 접속할 수 없는 상황 등을 의미합니다. 그렇다면 이러한 서버 컴퓨터를 안정적으로 운영하기 위해서는 어떻게 해야할까요?
# 2. 서버를 운영하는 두가지 방법
서버 컴퓨터를 운영하는 방법은 크게 두가지로 나뉩니다. 첫번째는 기존의 전통적인 서버 운영 방식인 온 프레미스방식이며 두번째는 현재 개발 업계에서 주류를 차지한 클라우드 컴퓨팅방식입니다. 지금부터 이 두가지 방식이 어떤것이고 무슨 차이를 가지고 있는지 알아보겠습니다.
## 2-1. 온 프레미스(On-Premise)

온 프레미스는 서버를 운영하는 측에서 직접 서버에 필요한 물리적인 공간, 컴퓨터, 제반 시설 등을 구축하여 활용하는 방식입니다. 이 방식은 서버를 운영하는 가장 기본적인 방식이지만, 하드웨어 사양 변경 시 하드웨어를 다시 판매하고 구축해야 하는 등 유지보수가 어려워서 현재 많은 기업들이 클라우드 컴퓨팅 환경으로 변경하고 있습니다. 하지만 보안이 중요한 환경에서는 여전히 온 프레미스 방식을 활용합니다. 이 방식은 컴퓨터를 포함한 서버에 필요한 물리적인 제반 시설을 갖추고 모니터링해야 한다는 단점이 있지만, 서버를 온전히 통제할 수 있다는 장점이 있습니다
정리
- 온프레미스 방식 => 컴퓨터를 직접 사서 연결한 컴퓨터(여러 컴퓨터를 합쳐서 '렉(Rack)'이라고 함)
- 물리적인 데이터 센터에 직접적으로 컴퓨터를 놓고 물리적인 환경을 구축해서 연결시키는 것
- 시스템을 관리할 수 있는 전문적으로 관리할 수 있는 전문가가 필요함
- 제반 시설: 비상전력 시스템이나, 보안 시설, 인력 등이 필요함. 쿨링을 해야하기 때문에 에어컨 필수,,ㅎ
## 2-2. 클라우드 컴퓨팅(Cloud Computing)
클라우드 컴퓨팅은 인터넷을 통해 제공되는 컴퓨터 서비스를 사용하는 것을 뜻합니다. 클라우드 컴퓨팅은 서버를 구입하고 관리할 필요 없이, 클라우드 서비스 제공업체에서 필요한 사양과 시간만큼 대여하여 사용할 수 있습니다.
클라우드 서비스 제공업체는 전 세계에 인프라를 구축하고, 물리적인 컴퓨터를 관리하며, 가상화 기술을 사용하여 필요한 만큼 분리하여 서비스를 제공합니다. 클라우드 컴퓨팅을 사용하는 사용자는 물리적인 관리가 필요 없으므로, 기업에서 운영하는 것보다 더 안정적인 환경을 제공받을 수 있습니다. 또한 필요한 사양과 시간만큼 대여하여 사용하므로, 비용 측면에서 효율적이며, 클릭 몇 번으로 컴퓨터의 사양이나 갯수를 늘릴 수 있어 서비스의 확장 측면에서도 이점이 있습니다.
즉, 클라우드 컴퓨팅을 제공하는 aws같은 기업에서는 온프레미스로 서버를 운영하고 우리는 aws로 부터 서버를 빌려서 쓰기 때운에 클라우드 컴퓨팅을 사용하는 것임!
# 3. 클라우드 컴퓨팅의 구분
클라우드 컴퓨팅은 제공하는 서비스의 수준에 따라서 3개의 계층으로 구분지을 수 있습니다.
## 3-1. IaaS(Infrastructure as a Service)
IaaS는 클라우드 컴퓨팅의 가장 기본적인 형태로서, 인프라를 구축하기 위해 필요한 컴퓨터를 대여해주는 것을 의미합니다. IaaS는 대여받은 컴퓨터의 대부분의 리소스에 접근해서 서비스를 구성하고 관리할 수 있으므로 가장 많은 제어권을 가지고 있지만 반대로 가장 많은 부분을 사용자가 일일이 구성하고 관리해줘야 한다는 단점이 있습니다.
e.g., AWS EC2
- EC(eleastic cloud computing) 탄력적으로 빌려쓸 수 있는 컴퓨터
- 컴퓨터 빌려 쓰기
- 가장 많은 제어권을 가짐
- 윈도우 등 어떤 os를 쓸건지 내가 다 일일이 정해야한다.
## 3-2. PaaS(Platform as a Service)
PaaS는 IaaS에 더불어 소프트웨어를 개발하고 운영하기 위해 필요한 구성요소들을 플랫폼화해서 제공해주는 서비스입니다. PaaS를 사용하면 개발자들은 소프트웨어의 운영에 대한 관리를 PaaS에 위임할 수 있기 때문에 효율적인 개발이 가능합니다. 다만, 플랫폼의 형태로 제공된다는 점으로 인해 특정 플랫폼에 종속적이 될 수 있다는 점, 해당 플랫폼에서 접근을 허용하지 않는 부분은 제어할 수 없다는 점, IaaS에 비해 더 높은 비용을 지불해야 할 수도 있다는 점 단점들도 있습니다.
e.g., AWS Elastic BeanStalk, Heroku, Github Pages(배포 플랫폼 서비스)
- 개발자야 웹서비스 운영할거야? 웹서비스 운영하기 편하게 플랫폼화 시켜서 너희들에게 제공해줄게
- 약간 프레임워크같은 너낌? 플랫폼에서 제공하는 것들만 사용할 수 있다는 단점을 가짐
## 3-3. SaaS(Software as a Service)
SaaS는 클라우드 서비스에 더불어, 고객이 이를 사용할 수 있는 소프트웨어가 함께 제공되는 형태를 의미합니다. 클라우드 서비스를 통해서 제공받기에 명시적으로 애플리케이션을 PC에 설치할 필요가 없으며, 서비스를 활용하기 위해 만들어진 소프트웨어가 제공되기에 이를 통해 편리하게 여러 기능등을 제공받고 활용할 수 있는 형태입니다.
e.g., DropBox, iCloud, Netflix, Google Apps, Slack
# 4. AWS란?
AWS(Amazon Web Service)는 클라우드 컴퓨팅 서비스를 제공하는 프로바이더 중 하나로서, 현재 전 세계에서 가장 많이 사용되고 있는 클라우드 컴퓨팅 서비스입니다. AWS는 단순 컴퓨팅 자원을 제공해주는 것 뿐만 아니라 이를 편리하게 관리할 수 있는 서비스, 서버리스 서비스 등 수많은 서비스를 확장성, 안정성, 높은 보안수준과 함께 제공해줍니다.
# 5. AWS S3
AWS의 S3서비스는 Simple Storage Service의 약자입니다. Storage라는 표현 그대로 특정한 파일을 저장하고 인터넷상으로 접근할 수 있게 해주는 서비스입니다. 보통 서비스에 필요한 이미지나 파일등을 저장해두는 용도로 사용하지만 정적인 파일들을 안정적으로 제공할 수 있다는 점을 이용해서 정적 웹사이트 호스팅에도 사용할 수 있습니다.
Create React App을 이용해서 만든 리액트 프로젝트의 경우 build 명령어를 실행하면 정적인 build 파일들이 생성되고 이를 브라우저에서 접근해서 실행하면 Client Side Rendering을 통해서 동작하는 특징을 이용해서 S3서비스를 통해서 배포를 할 수 있습니다.
CRA는 파일 내용이 절대 변하지 않는 정적 파일임 => S3로 호스팅 할 수 있음
Next.js는 동적임 => S3 호스팅할 수 없음
# 6. 참고자료
https://docs.aws.amazon.com/ko_kr/AmazonS3/latest/userguide/WebsiteHosting.html
'프로그래밍에 대한 얕고 넓은 지식 쌓기' 카테고리의 다른 글
관심사의 분리와 SRP, Custom Hook (0) | 2023.05.06 |
---|
서버는 백엔드 개발자만 알아야하는 지식일까요? 프론트엔드 개발자는 기획, 백엔드 등 다양한 직무의 사람들과 협업해야 하며 의사소통해야 합니다. 따라서 프론트엔드도 알아야 할 서버의 운영 방식과 클라우드 컴퓨팅에 대해서 알아봅시다!
# 1. 서버란?
보통 우리는 인터넷을 통해 특정 웹사이트나 리소스에 접속하게 됩니다. 하지만 정확히 말하면, 우리가 접속하는 것은 해당 웹사이트나 리소스를 제공하는 컴퓨터에 접근하는 것입니다.
서비스를 제공하기 위해서는 일반적으로 컴퓨터를 작동시키고, 특정 프로그램을 실행시켜 네트워크를 통해 컴퓨터에 접속하면 원하는 리소스를 얻을 수 있습니다. 이 컴퓨터는 외부에서 접근 가능하도록 인터넷에 연결되어 있으며, 이러한 컴퓨터를 우리는 보통 "서버"라고 부릅니다.
서버는 물리적인 컴퓨터로 구성되어 있으며, CPU, GPU, RAM, 메모리 등의 사양을 가지고 있습니다. "서버가 터졌다"는 표현은 보통, 서버 컴퓨터의 사양을 넘어서는 계산이 필요해져서 제대로 처리하지 못하는 상황이나, 실행 중인 프로그램이 예기치 않게 종료되어 운영이 불가능한 상황, 또는 외부에서 서버 컴퓨터에 접속할 수 없는 상황 등을 의미합니다. 그렇다면 이러한 서버 컴퓨터를 안정적으로 운영하기 위해서는 어떻게 해야할까요?
# 2. 서버를 운영하는 두가지 방법
서버 컴퓨터를 운영하는 방법은 크게 두가지로 나뉩니다. 첫번째는 기존의 전통적인 서버 운영 방식인 온 프레미스방식이며 두번째는 현재 개발 업계에서 주류를 차지한 클라우드 컴퓨팅방식입니다. 지금부터 이 두가지 방식이 어떤것이고 무슨 차이를 가지고 있는지 알아보겠습니다.
## 2-1. 온 프레미스(On-Premise)

온 프레미스는 서버를 운영하는 측에서 직접 서버에 필요한 물리적인 공간, 컴퓨터, 제반 시설 등을 구축하여 활용하는 방식입니다. 이 방식은 서버를 운영하는 가장 기본적인 방식이지만, 하드웨어 사양 변경 시 하드웨어를 다시 판매하고 구축해야 하는 등 유지보수가 어려워서 현재 많은 기업들이 클라우드 컴퓨팅 환경으로 변경하고 있습니다. 하지만 보안이 중요한 환경에서는 여전히 온 프레미스 방식을 활용합니다. 이 방식은 컴퓨터를 포함한 서버에 필요한 물리적인 제반 시설을 갖추고 모니터링해야 한다는 단점이 있지만, 서버를 온전히 통제할 수 있다는 장점이 있습니다
정리
- 온프레미스 방식 => 컴퓨터를 직접 사서 연결한 컴퓨터(여러 컴퓨터를 합쳐서 '렉(Rack)'이라고 함)
- 물리적인 데이터 센터에 직접적으로 컴퓨터를 놓고 물리적인 환경을 구축해서 연결시키는 것
- 시스템을 관리할 수 있는 전문적으로 관리할 수 있는 전문가가 필요함
- 제반 시설: 비상전력 시스템이나, 보안 시설, 인력 등이 필요함. 쿨링을 해야하기 때문에 에어컨 필수,,ㅎ
## 2-2. 클라우드 컴퓨팅(Cloud Computing)
클라우드 컴퓨팅은 인터넷을 통해 제공되는 컴퓨터 서비스를 사용하는 것을 뜻합니다. 클라우드 컴퓨팅은 서버를 구입하고 관리할 필요 없이, 클라우드 서비스 제공업체에서 필요한 사양과 시간만큼 대여하여 사용할 수 있습니다.
클라우드 서비스 제공업체는 전 세계에 인프라를 구축하고, 물리적인 컴퓨터를 관리하며, 가상화 기술을 사용하여 필요한 만큼 분리하여 서비스를 제공합니다. 클라우드 컴퓨팅을 사용하는 사용자는 물리적인 관리가 필요 없으므로, 기업에서 운영하는 것보다 더 안정적인 환경을 제공받을 수 있습니다. 또한 필요한 사양과 시간만큼 대여하여 사용하므로, 비용 측면에서 효율적이며, 클릭 몇 번으로 컴퓨터의 사양이나 갯수를 늘릴 수 있어 서비스의 확장 측면에서도 이점이 있습니다.
즉, 클라우드 컴퓨팅을 제공하는 aws같은 기업에서는 온프레미스로 서버를 운영하고 우리는 aws로 부터 서버를 빌려서 쓰기 때운에 클라우드 컴퓨팅을 사용하는 것임!
# 3. 클라우드 컴퓨팅의 구분
클라우드 컴퓨팅은 제공하는 서비스의 수준에 따라서 3개의 계층으로 구분지을 수 있습니다.
## 3-1. IaaS(Infrastructure as a Service)
IaaS는 클라우드 컴퓨팅의 가장 기본적인 형태로서, 인프라를 구축하기 위해 필요한 컴퓨터를 대여해주는 것을 의미합니다. IaaS는 대여받은 컴퓨터의 대부분의 리소스에 접근해서 서비스를 구성하고 관리할 수 있으므로 가장 많은 제어권을 가지고 있지만 반대로 가장 많은 부분을 사용자가 일일이 구성하고 관리해줘야 한다는 단점이 있습니다.
e.g., AWS EC2
- EC(eleastic cloud computing) 탄력적으로 빌려쓸 수 있는 컴퓨터
- 컴퓨터 빌려 쓰기
- 가장 많은 제어권을 가짐
- 윈도우 등 어떤 os를 쓸건지 내가 다 일일이 정해야한다.
## 3-2. PaaS(Platform as a Service)
PaaS는 IaaS에 더불어 소프트웨어를 개발하고 운영하기 위해 필요한 구성요소들을 플랫폼화해서 제공해주는 서비스입니다. PaaS를 사용하면 개발자들은 소프트웨어의 운영에 대한 관리를 PaaS에 위임할 수 있기 때문에 효율적인 개발이 가능합니다. 다만, 플랫폼의 형태로 제공된다는 점으로 인해 특정 플랫폼에 종속적이 될 수 있다는 점, 해당 플랫폼에서 접근을 허용하지 않는 부분은 제어할 수 없다는 점, IaaS에 비해 더 높은 비용을 지불해야 할 수도 있다는 점 단점들도 있습니다.
e.g., AWS Elastic BeanStalk, Heroku, Github Pages(배포 플랫폼 서비스)
- 개발자야 웹서비스 운영할거야? 웹서비스 운영하기 편하게 플랫폼화 시켜서 너희들에게 제공해줄게
- 약간 프레임워크같은 너낌? 플랫폼에서 제공하는 것들만 사용할 수 있다는 단점을 가짐
## 3-3. SaaS(Software as a Service)
SaaS는 클라우드 서비스에 더불어, 고객이 이를 사용할 수 있는 소프트웨어가 함께 제공되는 형태를 의미합니다. 클라우드 서비스를 통해서 제공받기에 명시적으로 애플리케이션을 PC에 설치할 필요가 없으며, 서비스를 활용하기 위해 만들어진 소프트웨어가 제공되기에 이를 통해 편리하게 여러 기능등을 제공받고 활용할 수 있는 형태입니다.
e.g., DropBox, iCloud, Netflix, Google Apps, Slack
# 4. AWS란?
AWS(Amazon Web Service)는 클라우드 컴퓨팅 서비스를 제공하는 프로바이더 중 하나로서, 현재 전 세계에서 가장 많이 사용되고 있는 클라우드 컴퓨팅 서비스입니다. AWS는 단순 컴퓨팅 자원을 제공해주는 것 뿐만 아니라 이를 편리하게 관리할 수 있는 서비스, 서버리스 서비스 등 수많은 서비스를 확장성, 안정성, 높은 보안수준과 함께 제공해줍니다.
# 5. AWS S3
AWS의 S3서비스는 Simple Storage Service의 약자입니다. Storage라는 표현 그대로 특정한 파일을 저장하고 인터넷상으로 접근할 수 있게 해주는 서비스입니다. 보통 서비스에 필요한 이미지나 파일등을 저장해두는 용도로 사용하지만 정적인 파일들을 안정적으로 제공할 수 있다는 점을 이용해서 정적 웹사이트 호스팅에도 사용할 수 있습니다.
Create React App을 이용해서 만든 리액트 프로젝트의 경우 build 명령어를 실행하면 정적인 build 파일들이 생성되고 이를 브라우저에서 접근해서 실행하면 Client Side Rendering을 통해서 동작하는 특징을 이용해서 S3서비스를 통해서 배포를 할 수 있습니다.
CRA는 파일 내용이 절대 변하지 않는 정적 파일임 => S3로 호스팅 할 수 있음
Next.js는 동적임 => S3 호스팅할 수 없음
# 6. 참고자료
https://docs.aws.amazon.com/ko_kr/AmazonS3/latest/userguide/WebsiteHosting.html
'프로그래밍에 대한 얕고 넓은 지식 쌓기' 카테고리의 다른 글
관심사의 분리와 SRP, Custom Hook (0) | 2023.05.06 |
---|