본문 바로가기
AWS

[5편] AWS로 나만의 고가용성 보안 NAS 구축기 (자동 설치 및 최종 테스트)

by ImirAin 2025. 10. 29.

안녕하세요! 길었던 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로 번갈아 나타나면 성공입니다!

새로고침을 누를 때 마다 인스턴스 두 대의 서버 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!"가 보인다면, 두 서버가 완벽하게 동일한 스토리지를 공유하고 있다는 증거입니다.

EFS 파일 생성
EFS 파일 생성을 다른 터미널에서 확인

 


3단계: 고가용성 테스트 (직접 장애 상황 만들기)

설계의 백미, 시스템이 정말로 장애를 스스로 복구하는지 직접 확인하는 가장 흥미로운 단계입니다.

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

새로고침을 하였을 때, 작동중인 한대의 서버의 IP만 출력

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

삭제된 인스턴스와 새로 인스턴스 생성


마무리하며

이것으로 모든 구축과 테스트가 끝났습니다! 우리는 단순히 파일 서버를 만드는 것을 넘어, 보안(네트워크 분리, 보안 그룹), 고가용성(Multi-AZ, ALB, ASG), 자동화(User Data)라는 클라우드의 핵심 가치를 담아낸 견고한 NAS 인프라를 성공적으로 완성했습니다.

이 프로젝트를 진행하며 예상치 못한 오류들을 만나고 해결하는 과정에서 정말 많은 것을 배울 수 있었습니다. (자세한 삽질기는 별도의 포스팅으로 정리해 두었습니다.)

AWS의 다양한 서비스를 직접 만져보고 조합하며 클라우드 인프라에 대한 이해를 깊게 할 수 있었던 값진 경험이었습니다.