저희 회사에 제가 소속되어 있는 프론트엔드 팀 같은 경우는 매주 팀원들끼리 돌아가면서 세미나를 진행하고 있습니다
각자 자율주제로 세미나를 하게 되는데 이번에 제가 AWS EC2와 nginx에 관련된 내용을 발표했었는데
해당 내용이 프론트엔드 개발자한테도 중요하다고 생각하여 블로그에도 한번 작성해 보도록 하겠습니다
AWS EC2(Elastic Compute Cloud)란?
EC2는 AWS에서 제공하는 클라우드 컴퓨팅 서비스입니다
EC2를 사용하면 아마존이 전 세계에 구축한 데이터 센터의 서버용 컴퓨터들의 자원을 원격으로 사용할 수 있습니다 즉 아마존으로부터 한대의 서버용 컴퓨터를 임대하는 것입니다, AWS 가 제공하는 URL(Public DNS)를 통해 해당 컴퓨터의 원격으로 접근할 수 있습니다
EC2의 장점
- 서버의 용량을 늘리거나 줄일 수 있습니다(탄력성)
- 사용한 만큼 지불하므로 상대적으로 저렴하다
- 사용자가 인스턴스를 완전히 제어할 수 있다
- 보안 및 네트워크 구성, 스토리지 관리에 효과적이다
AWS EC2 인스턴스 유형
게임에서 다양한 역할을 맡는 탱커, 딜러, 서포터처럼, AWS EC2 인스턴스도 각기 다른 사용 목적에 최적화된 유형을 제공합니다. 예를 들어, 연산 중심의 작업을 위해 CPU 성능이 강화된 인스턴스가 있고, 데이터 저장과 처리를 위해 메모리 용량이 큰 인스턴스도 있습니다. 게임이나 그래픽 집약적 애플리케이션을 위해 고성능 그래픽 카드를 탑재한 인스턴스도 선택할 수 있습니다.
AWS는 이러한 인스턴스를 목적에 맞게 분류하여, 각각의 서버 유형(예: 일반 사용 서버용 't' 타입, 메모리 최적화 서버용 'm' 타입 등)을 명확히 구분합니다. 이런 식으로 EC2 인스턴스 타입을 선택하면 각 애플리케이션의 요구 사항에 맞춰 최적의 성능을 발휘할 수 있습니다.
- 범용 : vCPU, 메모리, 네트워크, 저장 공간 등이 평균적인 사양으로 제공됩니다
- 컴퓨팅 최적화 : 다른 인스턴스 패밀리에 비해 메모리 대비 vCPU 비율이 높다
- 메모리 최적화 : 다른 인스턴스 패밀리에 비해 메모리 용량이 훨씬 큽니다
- 스토리지 최적화 : 다른 인스턴스 패밀리보다 스토리지 용량이 훨씬 크거나 초고속 I/O가 제공됩니다
- GPU 인스턴스 : 고성능의 NVIDIA GPU 가 장착되어 있으며 주로 CUDA, OpenCL 등을 실행할 때 사용됩니다
- 마이크로 인스턴스 : 가격이 가장 싼 인스턴스이며 낮은 vCPU 성능과 적은 메모리가 제공됩니다 프리티어에서는 이 인스턴스 유형을 무료로 사용할 수 있습니다
- vCPU : EC2는 가상의 서버이므로 EC2서버는 가상 소프트웨어를 통해 실행되는데 이때 가상화 소프트웨어를 통해 제공되는 CPU를 vCPU라고 합니다
- CUDA, openCL : 병렬 컴퓨팅을 지원하며 특히 GPU을 활용한 고성능 컴퓨팅 작업에 많이 사용되는 소프트웨어입니다
인스턴스 타입 읽는 법
m은 인스턴스 타입(패밀리)을 의미하며 5는 5세대를 의미합니다
a는 amd 기반의 CPU프로세스를 사용한다는 의미이며, xlarge는 큰 사이즈를 의미한다고 보시면 됩니다
EC2 OS(운영체제)
EC2는 가상의 컴퓨터이기 때문에 컴퓨터에 탑재되는 운영체제(OS)가 필요합니다 AWS에서는 다양한 OS 종류를 고를 수 있습니다
리눅스, 우분투 기반에 OS 와,윈도우,맥OS 등등 AWS에서 지원하는 다양한 OS를 사용할 수 있습니다
인스턴스 수명 주기(Instance Life Cycle)
AWS EC2 인스턴스는 시작한 순간부터 종료될 때까지 다양한 상태로 전환됩니다
아래 그림은 인스턴스 상태 간 전환을 나타냅니다
1. Pending state
제일 처음 AMI 가 실행 되면 준비 상태를 의미합니다
EC2를 가동하기 위해서 가상머신, ENI, EBS 등이 준비되는 과정입니다
ENI : AWS Elastic Network Interface / AWS에서 제공하는 가상 네트워크 인터페이스
EBS : AWS Elastic Block Store / AWS에서 제공하는 블록 스토리지 서비스, EC2인스턴스에 연결하여 데이터 저장소로 사용
2. Running State
실제로 EC2를 사용할 수 있는 상태를 의미합니다
running 상태에서 할수 있는 것은 아래 3가지가 있습니다
- 중지
- 인스턴스를 잠깐 멈춰두는 것입니다
- 중지 중에는 인스턴스 요금이 미청구됩니다
- 중지 후 재시작할 때 퍼블릭 IP가 변경됩니다(프라이빗 IP는 변경이 되지 않습니다, 퍼블릭 IP가 변경되려면 탄력적 IP를 사용해야 합니다)
- 재부팅
- 인스턴스를 다시 시작하는 것입니다
- 중지하고 다시 시작 과는 달리, 재부팅 시 퍼블릭 IP는 변경되지 않습니다
- 최대 절전 모드
- 메모리 내용을 보존해서 재 시작 시 중단지점에서 시작할 수 있는 정지 모드입니다
- 어떤 프로그램을 실행시켰을 때 데이터를 하드디스크에서만 가져오는 것이 아니라 메모리에 올려놓은 것입니다
- 컴퓨터/노트북의 최대 절전 모드와 같은 원리이며 만약 프로그램을 이용하다 프로그램은 킨 상태를 유지하면서 잠시 컴퓨터를 꺼야 한다면 최대 절전모드를 하게 되고 그리고 다시 컴퓨터를 켰을때 OS 자체가 재부팅되는 게 아닌 프로그램이 이어서 돌아가게 됩니다
3. shutting-down state
인스턴스 종료 중인 상태이며 설정에 따라 EBS도 같이 종료시킬 수 있고 EBS는 남기고 인스턴스만 종료할 수 있다
4. terminated state
완전히 종료가 된 상태이며 인스턴스가 영구적으로 삭제됩니다 인스턴스 미사용 시 중지시켜두기만 해도 많은 비용 절감을 할 수 있습니다
EC2를 생성하기만 하면 바로 우리가 만든 소프트웨어를 바로 서비스할 수는 없습니다 EC2는 단순한 가상 컴퓨터이기 때문에 추가적인 세팅을 해야 됩니다
즉 저희가 윈도우 데스크톱을 구매하면 node 설치하고, git 설치하고 하듯이 하는 세팅을 EC2에서도 동일하게 해줘야 합니다
그중에서도 개발자들이 만든 서비스와 외부 접근을 연결하게 해주는 웹서버(Web Server)에 대해 알아보도록 하겠습니다
Web Server란?
웹 서버는 클라이언트가 브라우저 주소창에 url을 입력하여 어떤 페이지를 요청하게 되면 http 요청을 받아들여 HTML 문서와 같은 정적인 콘텐츠를 사용자에게 전달해 주는 역할을 수행합니다
- 단순히 저장된 웹 리소스들을 클라이언트로 전달하고, 클라이언트로부터 콘텐츠를 전달받아 저장하거나 처리합니다
- 사용자로부터 동적인 요청이 들어왔을 때 해당 요청을 웹서버 자체적으로 처리하기 어렵기 때문에 WAS(Web Application Server)에게 요청합니다
대표적인 웹서버로는 Apache, Nginx, IIS(windows 전용 웹서버)가 있습니다
nginx란?
nginx는 경량 웹 서버입니다
클라이언트로부터 요청을 받으면 Nginx는 HTTP 웹 서버로서 작동하여 해당 요청에 맞는 정적 파일을 응답해 줍니다. 또한, 리버스 프록시 서버로도 활용되어 웹 애플리케이션 서버(WAS)의 부하를 줄이는 로드 밸런서 역할을 수행합니다.
Nginx는 하나의 마스터 프로세스와 여러 워커 프로세스로 구성되어 운영됩니다. 마스터 프로세스는 설정 파일을 읽고 유효성을 검사하는 동시에 워커 프로세스들을 관리합니다. 실제 요청 처리는 모든 워커 프로세스에서 이루어지며, Nginx는 이벤트 기반 모델을 사용해 효율적으로 작업을 처리합니다. 워커 프로세스들 사이에서 요청을 효과적으로 분배하기 위해, 운영 체제 특유의 메커니즘을 활용합니다.
워커 프로세스의 수는 설정 파일을 통해 지정할 수 있으며, 이는 사용 가능한 CPU 코어 수에 따라 자동으로 조정됩니다.
서버에 nginx가 구동되고 있으면 아래 같이 프로세스 리스트에 nginx 가 동작하고 있는 걸 확인할 수 있습니다
ps -ef | grep nginx
nginx 설정 파일
nginx에 기본 설정을 할 수 있는 conf 파일입니다 아래와 같이 네 가지 영역으로 구성되어 있습니다
Core 모듈 코어 모듈은 대부분 환경 설정 파일의 최상단에 위치하며 한 번만 사용할 수 있으며. nginx의 기본적인 동작 방식을 정의합니다
http 블록 웹서버에 대한 동작을 설정하는 영역으로, server 블록과 location 블록의 루트 블록입니다
server 블록 하나의 웹사이트를 선언하는 데 사용되며. 가상 호스팅(Virtual Host)의 개념입니다
location 블록 server 블록 내에서 특정 URL을 처리하는 방법을 정의합니다
웹서버 API 리소스 최적화를 할 때 사용되는 gzip 도 nginx 기본 설정에서 설정할 수 있습니다
nginx와 실제 웹 사이트 연결
nginx 와 개발한 웹사이트를 연결하려면 server 블록을 활용해야 합니다
server 블록에서 프로토콜 및 웹사이트가 적용된 위치(index.html 위치) 그리고 도메인을 지정하게 되면 해당 도메인을 통해 개발한 웹사이트로 사용자들이 접속할 수 있습니다
SSL 인증서 적용 또한 server 블록에서 진행합니다
마치며
사실 EC2와 Nginx는 이 내용들보다 더욱더 많은 내용들이 있습니다 물론 프론트엔드 개발자가 전부다 알필요는 없지만 서비스는 만들어가 가는 입장에서 서비스가 어떤 식으로 동작하는지는 프론트,백엔드 상관없이 개발자라면 다 알아야 된다고 생각합니다!
다음에 기회가 된다면 Docker와 AWS ECS에 대해 다뤄보도록 하겠습니다
'기타' 카테고리의 다른 글
JWT + HttpOnly 쿠키 기반 인증 플로우 정리 (0) | 2025.02.01 |
---|---|
효율적인 소프트웨어 설계를 위한 State Machine 알아보기 (0) | 2024.03.19 |
일렉트론 이대로 괜찮은가?(w.Tauri) (1) | 2024.02.25 |
PlantUML 을 이용하여 시퀀스 다이어그램 그려보기 (0) | 2023.09.24 |