안녕하세요! 길었던 NAS 구축 여정의 마지막 편입니다. 지난 4편에서는 ALB와 Auto Scaling Group을 설정하여 시스템이 스스로 장애를 감지하고 서버 수를 조절하는 자동화 시스템의 뼈대를 완성했습니다.
이번 5편에서는 드디어 이 똑똑한 인프라 위에 실제 NAS 환경을 자동으로 구축하고, 모든 것이 우리가 설계한 대로 완벽하게 작동하는지 최종적으로 검증하는 과정을 보여드리겠습니다.
1단계: 시작 템플릿 업데이트 (서버 자동 설치 스크립트 추가)
Auto Scaling Group이 새 서버를 만들 때마다 자동으로 웹 서버 설치, EFS 연결 등 필요한 모든 설정을 수행하도록 'User Data' 스크립트를 시작 템플릿에 추가합니다. 이것이 바로 'Infrastructure as Code'의 기초적인 형태죠!
- EC2 대시보드의 '시작 템플릿'에서 nas-server-template를 선택하고 '템플릿 수정(새 버전 생성)'을 진행합니다.

- '고급 세부 정보' 섹션의 '사용자 데이터(User Data)' 입력 상자에 아래 스크립트를 붙여넣습니다.
#!/bin/bash # 아파치 웹서버와 필요한 유틸리티(jq) 설치 yum install -y httpd php jq amazon-efs-utils # 웹서버 시작 및 활성화 (재부팅 시 자동 시작) systemctl start httpd systemctl enable httpd # 로드밸런서 테스트를 위한 정보 페이지 생성 (서버의 Private IP 주소 표시) echo "<?php echo '<h1>This server is at: ' . \$_SERVER['SERVER_ADDR'] . '</h1>'; ?>" > /var/www/html/index.php # 현재 리전(서울)의 EFS 파일 시스템 ID를 자동으로 찾기 (IAM 역할 권한 필요!) EFS_ID=$(aws efs describe-file-systems --region ap-northeast-2 | jq -r '.FileSystems[0].FileSystemId') # EFS 파일 시스템 마운트(연결) mkdir -p /var/www/html/nas_storage mount -t efs -o tls $EFS_ID:/ /var/www/html/nas_storage - 새 버전을 생성한 후, 이 버전을 '기본 버전'으로 설정하는 것을 잊지 마세요!
2단계: 서버 교체 및 기능 테스트
이제 업데이트된 설계도를 적용하기 위해 기존 서버들을 교체하고, 로드밸런싱과 공유 스토리지가 제대로 작동하는지 확인합니다.
- 기존 인스턴스 종료: EC2 인스턴스 목록에서 Auto Scaling Group이 관리하는 NAS 서버 두 대를 선택하고 '인스턴스 종료'를 실행합니다.

- ASG의 마법 확인: 잠시 후 Auto Scaling Group이 종료를 감지하고, 새로운 인스턴스 두 대를 자동으로 생성하는 것을 지켜봅니다. 이 새 서버들은 방금 업데이트한 User Data 스크립트를 가지고 부팅됩니다.
- 로드밸런싱 테스트: 로드밸런서(nas-alb)의 DNS 주소로 웹 브라우저에서 접속한 뒤, 새로고침(F5)을 여러 번 눌러보세요. 화면에 표시되는 서버 IP 주소가 두 개의 다른 Private IP로 번갈아 나타나면 성공입니다!

- 공유 스토리지(EFS) 테스트:
- Bastion Host 접속: 먼저, 내 PC의 터미널(PowerShell, CMD 등)에서 아래 명령어로 Bastion Host에 접속합니다.
(앞서 3편에서 만들었던 .pem 키 파일이 있는 경로에서 실행해야 합니다.)ssh -i "nas-keypair.pem" ec2-user@[Bastion-Host-퍼블릭-IP] - 첫 번째 NAS 서버 접속: Bastion Host 터미널 안에서, 첫 번째 NAS 서버의 프라이빗 IP로 다시 SSH 접속합니다.
(필요시 vi mykey.pem으로 키 파일을 Bastion Host에 복사하고 chmod 400 mykey.pem으로 권한을 변경해야 합니다.)ssh -i "mykey.pem" ec2-user@[첫-번째-NAS서버-프라이빗-IP] - 파일 생성: 첫 번째 서버에서 echo "Hello from Shared Storage!" | sudo tee /var/www/html/nas_storage/test.txt 명령어로 파일을 생성합니다.
- 두 번째 NAS 서버 접속: 새 터미널 창을 열어 위와 동일한 방법으로 Bastion Host를 거쳐 두 번째 NAS 서버에 접속합니다.
- 파일 확인: 두 번째 서버에서 cat /var/www/html/nas_storage/test.txt 명령어로 파일 내용이 보이는지 확인합니다. "Hello from Shared Storage!"가 보인다면, 두 서버가 완벽하게 동일한 스토리지를 공유하고 있다는 증거입니다.
- Bastion Host 접속: 먼저, 내 PC의 터미널(PowerShell, CMD 등)에서 아래 명령어로 Bastion Host에 접속합니다.


3단계: 고가용성 테스트 (직접 장애 상황 만들기)
설계의 백미, 시스템이 정말로 장애를 스스로 복구하는지 직접 확인하는 가장 흥미로운 단계입니다.
- EC2 인스턴스 목록에서 실행 중인 NAS 서버 한 대를 강제로 '종료'시킵니다.
- 서비스 연속성 확인: 웹 브라우저에서 ALB 주소를 계속 새로고침 해보세요. 서버 한 대가 사라졌음에도 불구하고, 서비스는 전혀 중단되지 않고 살아남은 나머지 한 대의 서버로만 계속 연결되는 것을 확인할 수 있습니다. 이것이 바로 로드밸런서의 Health Check와 자동 장애 조치 기능 덕분입니다.

- 자동 복구 확인: EC2 콘솔의 'Auto Scaling 그룹' 메뉴 → nas-asg 선택 → '활동(Activity)' 탭을 확인합니다. ASG가 인스턴스 종료를 감지하고, 새로운 인스턴스를 자동으로 시작하여 목표 용량인 2대를 맞추는 과정을 실시간으로 볼 수 있습니다.

마무리하며
이것으로 모든 구축과 테스트가 끝났습니다! 우리는 단순히 파일 서버를 만드는 것을 넘어, 보안(네트워크 분리, 보안 그룹), 고가용성(Multi-AZ, ALB, ASG), 자동화(User Data)라는 클라우드의 핵심 가치를 담아낸 견고한 NAS 인프라를 성공적으로 완성했습니다.
이 프로젝트를 진행하며 예상치 못한 오류들을 만나고 해결하는 과정에서 정말 많은 것을 배울 수 있었습니다. (자세한 삽질기는 별도의 포스팅으로 정리해 두었습니다.)
AWS의 다양한 서비스를 직접 만져보고 조합하며 클라우드 인프라에 대한 이해를 깊게 할 수 있었던 값진 경험이었습니다.
'AWS' 카테고리의 다른 글
| [번외편] AWS NAS 구축 삽질기 (0) | 2025.10.29 |
|---|---|
| [4편] AWS로 나만의 고가용성 보안 NAS 구축기 (ALB와 Auto Scaling) (0) | 2025.10.15 |
| [3편] AWS로 나만의 고가용성 보안 NAS 구축기 (EC2 서버 & 보안 그룹 설정) (0) | 2025.10.13 |
| [2편] AWS로 나만의 고가용성 보안 NAS 구축기 (VPC 네트워크 설계) (0) | 2025.10.13 |
| [1편] AWS로 나만의 고가용성 보안 NAS 구축기 (feat. 아키텍처 설계) (0) | 2025.10.03 |