-
신한 DS ICT 인프라 실기시험 실습클라우드 2025. 6. 7. 21:12
신한 DS ICT 인프라 직무 실기시험 내용 신한 DS 실기 Test는 다음과 같은 내용들을 평가한다고 합니다.
그래서 시험을 응시하기 전에 복습 겸 실습을 진행하려고 합니다.
EC2 VM 생성 및 구성
우선 지정된 메세지를 송출하면 된다고 했기 때문에, nginx를 설치하고 화면상에 원하는 글씨를 출력하는 것으로 생각하고 진행하였습니다.
우선 EC2를 생성합니다.
이름은 shinhan_ds, ubuntu로 설치하고 t2.micro, 키페어 설정, 미리 생성해둔 VPC의 public 서브넷에 퍼블릭IP를 할당하고 보안그룹은 ssh, http를 전부 열어주었습니다. 스토리지는 gp3 8GB로 두었습니다.
그러면 다음과 같이 인스턴스가 생성되는데
연결을 누르면
맨 아래에 접속하는 명령어가 나옵니다. 그걸 키 파일이 있는 위치에서 명령어를 차면 들어갈 수 있습니다.
저 같은 경우는 ~/Downloads 폴더에 키 파일이 있기 때문에 이 경로에서 입력하여 EC2 내부에 접속하였습니다.
ssh -i "shinhan_ds.pem" ubuntu@43.202.54.216
인스턴스는 삭제할거기때문에 IP를 따로 블러처리하지 않았습니다.
그리고 화면상에 글자를 띄울 것이기 때문에 nginx를 설치해줍니다.
sudo apt update && sudo apt install nginx -y
이러면 nginx가 설치되고 브라우저에 ec2의 퍼블릭 IP(43.202.54.216)를 입력하면
nginx 기본 페이지 다음과 같이 nginx 메인 화면이 나옵니다.
저는 이 화면이 아닌 제가 원하는 메세지를 출력하길 원하기 때문에 index.html 파일의 내용을 수정할 것입니다.
nginx를 설치하면 /etc/nginx/sites-available/default 다음 경로에 root 경로로 처음에 띄워줄 화면을 찾는 설정 파일이 있습니다.
cat /etc/nginx/sites-available/default
다음을 통해 확인해보면
## # You should look at the following URL's in order to grasp a solid understanding # of Nginx configuration files in order to fully unleash the power of Nginx. # <https://www.nginx.com/resources/wiki/start/> # <https://www.nginx.com/resources/wiki/start/topics/tutorials/config_pitfalls/> # <https://wiki.debian.org/Nginx/DirectoryStructure> # # In most cases, administrators will remove this file from sites-enabled/ and # leave it as reference inside of sites-available where it will continue to be # updated by the nginx packaging team. # # This file will automatically load configuration files provided by other # applications, such as Drupal or Wordpress. These applications will be made # available underneath a path with that package name, such as /drupal8. # # Please see /usr/share/doc/nginx-doc/examples/ for more detailed examples. ## # Default server configuration # server { listen 80 default_server; listen [::]:80 default_server; # SSL configuration # # listen 443 ssl default_server; # listen [::]:443 ssl default_server; # # Note: You should disable gzip for SSL traffic. # See: <https://bugs.debian.org/773332> # # Read up on ssl_ciphers to ensure a secure configuration. # See: <https://bugs.debian.org/765782> # # Self signed certs generated by the ssl-cert package # Don't use them in a production server! # # include snippets/snakeoil.conf; root /var/www/html; # Add index.php to the list if you are using PHP index index.html index.htm index.nginx-debian.html; server_name _; location / { # First attempt to serve request as file, then # as directory, then fall back to displaying a 404. try_files $uri $uri/ =404; } # pass PHP scripts to FastCGI server # #location ~ \\.php$ { # include snippets/fastcgi-php.conf; # # # With php-fpm (or other unix sockets): # fastcgi_pass unix:/run/php/php7.4-fpm.sock; # # With php-cgi (or other tcp sockets): # fastcgi_pass 127.0.0.1:9000; #} # deny access to .htaccess files, if Apache's document root # concurs with nginx's one # #location ~ /\\.ht { # deny all; #} } # Virtual Host configuration for example.com # # You can move that to a different file under sites-available/ and symlink that # to sites-enabled/ to enable it. # #server { # listen 80; # listen [::]:80; # # server_name example.com; # # root /var/www/example.com; # index index.html; # # location / { # try_files $uri $uri/ =404; # } #}
다음과 같이 나오는데 root 경로가 /var/www/html 이라고 합니다. 저 부분을 들어가서 확인해봅니다.
index.nginx-debian.html 파일이 나오는데요 확인해보면 다음과 같은 내용이 있습니다.
<!DOCTYPE html> <html> <head> <title>Welcome to nginx!</title> <style> html { color-scheme: light dark; } body { width: 35em; margin: 0 auto; font-family: Tahoma, Verdana, Arial, sans-serif; } </style> </head> <body> <h1>Welcome to nginx!</h1> <p>If you see this page, the nginx web server is successfully installed and working. Further configuration is required.</p> <p>For online documentation and support please refer to <a href="http://nginx.org/">nginx.org</a>.<br/> Commercial support is available at <a href="http://nginx.com/">nginx.com</a>.</p> <p><em>Thank you for using nginx.</em></p> </body> </html>
이런 기본 index.html 파일이 나올텐데 vi 명령어로 들어간 이후에 dG로 이것을 다 지우고 i를 눌러서 Hello Cloud!를 입력하고 wq로 저장하고 나옵니다.
sudo apt install vim sudo vi /var/www/html/index.nginx-debian.html
dG, i, Hello Cloud!, esc, :wq
그리고 nginx를 재시작해줍니다.
sudo systemctl restart nginx
그리고 다시 브라우저에 EC2 public ip를 입력해서 확인해보면
커스텀한 Nginx 기본 페이지 입력한 텍스트가 브라우저에 잘 나오는 것을 확인할 수 있습니다.
ACM 인증서 생성 및 검증 & Target Group 등록 & ALB 구성 및 CNAME 등록
ACM 인증서를 생성하기 위해서는 도메인이 필요합니다.
도메인의 종류는 2가지가 있는데요
Route53에서 구매한 도메인과 타 등록기관에서 구매한 도메인입니다.
두가지 경우를 대비해서 실습을 진행하겠습니다.
Route53에서 도메인 구매했을 경우
우선 Route53에서 구매한 도메인일 경우입니다.
도메인 구매에는 비용이 듭니다. 저는 프로젝트에서 구매한 Route53 도메인이 있어 그것으로 ACM인증서를 생성 하고 검증하겠습니다.
우선 Route53에서 구매한 도메인입니다.
이제 여기에 ACM 인증서를 달아보도록하겠습니다.
Certificate Manager에 들어가서
아까 생성했던 도메인을 입력하고 요청 버튼을 클릭합니다.
그러면 나오는 도메인의 CNAME을 Route53에 등록을 해줘야하는데
Route53에서 레코드 생성 버튼을 누르면 자동으로 CNAME이 생성됩니다.
그러면 시간이 지난후에 상태가 확인으로 바뀌게 됩니다.
타 기관에서 도메인 구매했을 경우
저는 가비아에서 도메인을 구매했기 때문에 가비아 기준으로 Route53 호스팅 영역에 등록하는 방법을 작성하겠습니다.
우선 Route53에 가비아에 구매해뒀던 도메인으로 호스팅 영역을 생성합니다.
그러면 NS와 SOA가 자동 생성되는데 NS에 있는 4가지 경로를 복사해서 가비아에 넣어줘야합니다.
가비아의 도메인 관리에 들어가서 네임서버에 Route53 호스팅 영역 생성하고 나온 것들을 넣어줍니다.
이렇게 하고 시간이 몇분정도 지나면 전파가 완료됩니다.
그리고 ACM에 들어가서 lb.mycertione.com으로 인증서를 요청합니다.
그리고 나오는 CNAME을 Route53에 자동으로 등록해주면 인증서가 검증 됩니다.
Target Group 등록 & ALB 구성
제 생각에 생성한 인증서를 alb에 달 것으로 예상하기 때문에 서브도메인을 lb를 붙여 A레코드를 생성하도록 하겠습니다.
근데 값이 있어야한다고 해서 우선 alb를 먼저 만들고 값을 넣어주도록 하겠습니다.
ec2- 로드밸런서 에서 생성합니다.
생성 중에 타겟그룹도 생성해야하기 때문에 대충 test-tg를 만들어주고 인스턴스가 아무것도 없는 상태로 alb만 만들어줍니다.
그리고 Route53 A레코드 생성에서
다음과 같이 설정해줍니다.
그러면 lb.new-sum.com 도메인이 생성됩니다.
이렇게 되면 https 로 lb에 접근할 수 있게 됩니다. 근데 target 그룹을 딱히 지정해준게 없어 뭐가 뜨진 앖습니다.
이제 타겟그룹을 연결해서 아까 EC2에서 출력했던 Hello Cloud!가 나올 수 있게 하겠습니다.
ALB의 타겟그룹에 nginx가 설치되어 있는 EC2를 연결해줍니다.
타겟그룹을 생성합니다.
EC2 - 대상그룹에서 대상그룹을 생성합니다.
대상유형은 인스턴스
프로토콜은 HTTP:80
VPC는 EC2를 생성했던 VPC
HTTP버전은 HTTP1로 해두고
상태검사는 / 디렉토리로 해줍니다. nginx는 루트로 들어가면 200 OK 응답이 오기 때문입니다.
SpringBoot 같은거로 하면 /actuator/health 같은걸로 상태검사를 설정해야합니다.
그리고 대상을 등록하는데 아까 생성했던 EC2 인스턴스로 설정합니다.
보류중인것으로 포함하고 대상 그룹 생성하면 됩니다.
그리고 ALB에서 리스너를 등록해줍니다.
EC2 - 로드밸런서에서
체계는 인터넷 경계,
IP주소 유형은 IPv4
네트워크 매핑은 사용할 VPC 선택하고 가용영역 및 서브넷을 EC2 인스턴스가 있는 서브넷의 az를 꼭 지정해주어야 합니다. 아니라면 503 에러가 뜨게 됩니다.
보안그룹도 ALB 용을 새로 만들어서 생성합니다. 저는 HTTPS 요청만 받게 보안그룹을 생성했습니다.
HTTP 보안그룹을 열어 주지 않고 브라우저에서 http://lb.new-sum.com 을 입력해도 자동으로 https로 리다이렉션 되어서 들어왔습니다. 아마 브라우저 정책 때문인 듯 합니다.
HSTS라고 HTTPS로 접속했던 기록이 있으면 HTTP 접속이 들어오더라도 브라우저가 기록하고 강제로 HTTPS로 접속하게 하는 정책이 있다고 합니다.
그리고 리스너를 443으로 들어오는 요청에 대해 아까 생성했던 대상그룹으로 라우팅 되게 설정 해주면 됩니다.
443으로 리스너를 설정하게 되면 기본 SSL/TLS 서버 인증서를 입력하라는 것이 나오는데, 이것을 ACM에서 생성했던 lb.mycertione.com 인증서를 넣어줍니다.
이정도만 설정하고 WAF같은 서비스는 설정하지 않고 ALB 설정을 마무리 합니다.
그러고 브라우저에 ALB의 주소를 입력하면
다음 내용이 잘 나오는 것을 확인해볼 수 있습니다.
아마 가장 에러가 많이 나는 부분이 보안그룹 설정일 텐데
EC2 보안그룹은 ALB SG로부터 오는 HTTP 요청을 허용해주는 인바운드 규칙이 있으면 되고
ALB 보안그룹은 0.0.0.0으로 부터 오는 HTTPS 요청을 허용해주는 인바운드 규칙이 있으면 됩니다.
'클라우드' 카테고리의 다른 글
CloudFront + S3 + ACM + Route53으로 프론트(Vite + React) 정적 파일 배포 하기 (1) 2025.06.14 Infisical CLI 설치하는 파이프라인 최적화 (1) 2025.06.07 도커 기본 개념 정리 (0) 2025.06.03 스프링부트 에러로그 디스코드 웹훅으로 알람 전송하는 방법 (1) 2025.06.02 Github 브랜치 별로 다른 리뷰어 할당 파이프라인 설정하는 법 (0) 2025.05.31