olrlobt
[INFRA] EC2 서버 기본 설정과, SWAP메모리 할당하기 본문
이번 프로젝트에서 인프라를 담당하면서 위와 같은 구조로 시스템 아키텍처를 구성해 보았다.
위와 같이 인프라를 구성하면서, 진행했던 과정을 기록하고 문제가 됐던 부분을 다시 정리해 보려고 한다.
인프라를 처음 해 보았기에 구성에서 미숙한 부분이나, 잘못된 부분은 댓글로 알려주시면 감사하겠습니다!
EC2
Amazon EC2(Elastic Compute Cloud)는 Amazon Web Services(AWS)가 제공하는 클라우드 기반의 가상 서버 호스팅 서비스이다.
EC2는 사용자가 필요에 따라 컴퓨팅 파워를 쉽게 확장하거나 축소할 수 있는 유연성을 제공하여, 다양한 컴퓨팅 작업을 클라우드에서 실행할 수 있도록 한다.
1. EC2 서버 생성하기
AWS에 접근하여 계정을 생성한 후, EC2 서버를 만든다.
나는 SSAFY에서 제공되는 EC2 서버를 사용하였기 때문에 이 과정은 생략하고 진행한다.
생성 방법은 아래 포스팅을 참고하자.
2024.03.25 - [Infra] - [INFRA] AWS EC2 프리티어 인스턴스 생성하기
2. EC2 서버 접근
$ ssh -i <pem키 경로> ubuntu@<도메인>
$ ssh -i /path/to/your-key.pem ubuntu@example.com
3. 패키지 업데이트, 업그레이드
$ sudo apt update
$ sudo apt upgrade
sudo apt update:
apt (Advanced Package Tool)의 로컬 시스템의 패키지 인덱스를 최신 상태로 업데이트한다. 실제 업데이트가 아닌, 업데이트 가능한지 정보를 가져오는 것이다.
sudo apt upgrade:
update로 업데이트된 패키지 인덱스를 바탕으로, 설치된 소프트웨어를 업그레이드한다.
4. EC2 서버 시간 변경
$ sudo timedatectl set-timezone Asia/Seoul
EC2를 생성하고 서버 시간을 맞춰준다. 이렇게 설정을 해 주어야 서버와 관련된 로그파일, 스케쥴링 작업, 그리고 애플리케이션에서 사용하는 시간 정보들이 모두 한국 시간으로 기록되고 처리된다.
시간이 잘 설정되었는지는 아래 명령어로 확인한다.
$ date
5. EC2 미러서버 변경
처음 우분투 운영체제에서 패키지를 받으면, 패키지를 다운로드하는 서버가 "http://kr.archive.ubuntu.com/ubuntu/"로 기본 설정이 되어 있다. 이 서버를 사용해도 문제가 없지만, 국내에는 카카오, 카이스트 등 속도가 빠른 미러 서버들이 있기 때문에, 미리 변경하는 것을 추천한다.
위 링크에서 korea를 검색하면 사용 가능한 미러 서버들의 리스트가 보이는데,
나는 가장 빠른 kakao 미러 서버로 변경하려 한다.
먼저 아래 명령어로 sources.list 시스템 파일을 vim 텍스트 에디터로 실행한다.
$ sudo vim /etc/apt/sources.list
그리고 아래 명령어를 통해 문자열을 일괄 교체한다.
:%s/ap-northeast-2.ec2.archive.ubuntu.com/mirror.kakao.com/
:%s
파일 전체에서 검색 및 교체를 수행하라는 명령어로, 기존에 설정된 ap-northeast-2.ec2.archive.ubuntu.com 서버를
mirror.kakko.com으로 교체하라는 명령어이다.
만약, 다른 미러 서버를 사용한다면 해당 부분을 교체해 주면 된다.
Windows 환경의 powerShell에서는 글씨가 잘 보이지 않지만, 빨간 글씨 부분이 변경된 것을 볼 수 있다.
:wq // 저장하고 나가기
:q! // 강제로 저장 안 하고 나가기
수정이 끝났다면, 위 명령어를 통해 vim 편집기에서 저장하고 나가자.
6. SWAP 메모리 할당
EC2 무료 인스턴스를 사용한다면, 1GB 남짓의 적은 메모리를 사용하여 느려지거나 먹통이 되는 현상이 발생할 수 있다.
유료로 전환할 생각이 없는 서버라면, SWAP 메모리를 활용하여 메모리 부족 현상을 어느 정도 해결할 수 있다.
SWAP 메모리는 리눅스에서 RAM이 부족할 경우, 디스크의 일정 공간을 마치 RAM처럼 사용할 수 있게 해 준다.
먼저 아래의 명령어를 통해 현재 메모리 용량을 확인한다.
$ free -h
AWS 지식센터에서는 권장 스왑 공간을 아래와 같이 권장하고 있으니 참고해서 설정하도록 하자.
RAM | 권장 스왑 공간 |
~ 2GB | RAM의 2배 ( 32MB보다 작으면 안 됨) |
2GB ~ 64GB | RAM의 0.5배 |
64GB ~ | 워크로드 또는 사용 사례에 따라 다름 |
자신의 메모리 용량에 맞게 Swap파일을 생성한다.
$ sudo dd if=/dev/zero of=/swapfile bs=128M count=16
dd:
data duplicator의 약자로, 파일이나 파일 시스템의 변환 및 복사에 사용된다.
if=/dev/zero:
입력 파일로 /dev/zero를 사용한다. /dev/zero는 무한히 0으로 채워진 데이터 스트림을 제공하는 특수 디바이스 파일이다.
of=/swapfile:
출력 파일로 /swapfile을 사용한다. 이는 생성될 swap 파일의 경로와 이름이다.
bs=128M:
블록 사이즈를 128MB로 설정한다. dd 명령어가 한 번에 읽고 쓰는 데이터 양을 의미한다.
count=16:
bs 명령어에서 지정한 블록 사이즈의 데이터를 16번 쓰라는 의미이다. 128x16=2048 이므로 2GB의 Swap 파일이 생성된다.
예를 들어, 16GB의 Swap 메모리를 할당할 때는 아래와 같이 작성할 수 있다.
$ sudo dd if=/dev/zero of=/swapfile bs=128M count=128
이때, bs 블록 사이즈의 크기는 한 번에 읽고/쓰는 데이터의 양을 결정한다. 이 값이 크거나 작다고 무조건 좋은 것이 아니며, bs가 작을수록 작업당 오버헤드가 높아질 수 있고, bs가 클수록 시스템 자원 사용에 영향을 미치기 때문에, 실험을 통해 적절한 값을 선택하는 것이 좋다.
스왑 파일의 권한 설정
$ sudo chmod 600 /swapfile
스왑 파일을 루트 사용자만이 읽고 쓸 수 있도록 변경한다.
스왑 영역을 설정한다.
$ sudo mkswap /swapfile
스왑 영역을 활성화한다.
$ sudo swapon /swapfile
스왑 파일이 잘 생성되었다면, 아래와 같이 확인 가능하다.
$ sudo swapon -s
/etc/fstab 파일을 편집하여 부팅 시 스왑 파일을 활성화한다.
$ sudo vi /etc/fstab
아래의 한 줄을 맨 아랫칸에 추가한다.
/swapfile swap swap defaults 0 0
UFW (Uncomplicated Firewall )
Uncomplicated Firewall은 Ubuntu 및 기타 Linux 배포판에서 사용하는 쉬운 방화벽 관리 도구이다. iptables의 복잡성을 추상화하여 사용자가 더 간단한 명령어를 통해 방화벽 규칙을 설정하고 관리할 수 있게 해 준다.
UFW 상태 확인하기:
$ sudo ufw status
방화벽 상태를 확인하면 UFW가 지금 활성화가 되어 있는지, 허용된 포트는 어느 포트인지 확인할 수 있다.
UFW 활성화하기:
$ sudo ufw enable
특정 포트 허용하기
$ sudo ufw allow 80
특정 포트 차단하기
$ sudo ufw deny 80
포트 | 설명 |
22 | SSH |
80 | Http |
443 | Https |
UFW를 사용할 때는 실수로 자신을 잠그는 상황(예: SSH 접속 차단)을 피하기 위해 주의해야 한다.
여기까지 마치게 되면, 기본적인 EC2 설정은 마쳤다.
다음에는 Amazon EC2 인스턴스에 Nginx를 설치하고 기본 설정을 마친 후, HTTPS를 사용하기 위해 SSL/TLS 인증서를 발급받고 구성하는 과정을 진행할 예정이다.
'Infra' 카테고리의 다른 글
[INFRA] Jenkins 설치하기 (0) | 2024.03.30 |
---|---|
[INFRA] AWS EC2 프리티어 인스턴스 생성하기 (2) | 2024.03.25 |
[INFRA] Docker에서 Nginx 컨테이너 실행과 https 설정하기 (1) | 2024.03.20 |
[INFRA] Docker와 Dockerfile, Docker-compose 구성하기 (1) | 2024.02.21 |
[INFRA] Nginx를 사용하여 HTTPS 요청 처리하기 (3) | 2024.02.20 |