JUINTINATION
Amazon EC2 시작하기 본문
드디어 미루고 미루던.. 배포에 도전해보려고 한다. 지금까지 로컬로 많은 프로젝트를 돌려봤지만 실제로 배포를 해본 경험은 없기도 했고, 관련 지식도 아예 없다시피하니 계속 나중으로 미뤄왔는데 방학동안 어떻게든 해보려고 도서관에서 관련 책을 빌려 공부를 시작하게 되었다. 지금 참고중인 책은 클라우드 서비스 개발자를 위한 AWS로 구현하는 CI/CD 배포 입문이다.
EC2 서버 임대
먼저 AWS 계정이 필요하다. 회원가입을 완료하면 AWS 홈페이지에서 EC2를 검색하고 들어가면 다음과 같은 화면이 뜬다.
이 화면에서 인스턴트 시작 버튼을 누르면 아래와 같이 관련 설정을 할 수 있는 창이 뜬다.
아래 과정을 시작하기 전에 우측 상단의 리전을 버지니아 북부에서 서울로 바꾸는 작업이 필요하다. 나는 바꾸려고 했는데 처음에 체크가 안 되는 오류가 있어서 일단 넘어가고 진행했다. 나중에 리전을 재설정해도 아래에서 설정할 키 페어 관련해서 문제가 발생할 수 있기 때문에 가능하다면 초반에 체크하고 넘어가자.
나는 책이랑 최대한 똑같이 하려고 이름을 aws-v1으로 설정하고 서버도 ubuntu 20.04 버전을 사용하려고 했다. 그런데 계속 오류가 발생했고, 다시 확인해보니 해당 버전은 이제 프리 티어 사용이 불가능했던 것이다. 그래서 22.04 버전으로 진행했다.
마찬가지로 책이랑 똑같이 인스턴스 유형은 t2.micro로 설정했고, 키 페어 이름 또한 metacoding-aws-key로 설정했다.
처음 키 페어를 생성할 때 위와 같이 유형을 RSA로 설정하고 키 파일 형식은 .pem으로 설정했다.
네트워크 설정은 위와 같이 딱히 건드린 것이 없다.
스토리지 구성은 30GB로 할당되도록 수정했다.
이후 인스턴스 시작 버튼을 누르면 위와 같은 화면이 뜨는데 결제 및 프리 티어 사용 알림 생성이라는 부분이 눈에 띄었다.
나는 어떤 프로젝트를 정식으로 서비스하는 것이 아닌 학습용이었기 때문에 1원의 지출도 아깝다는 생각에 바로 결제 알림 생성 탭으로 들어갔다.
위와 같이 청구서가 발생하면 메일로 바로 보내주도록 활성화 시키고, 처음 들어본 CloudWatch를 검색해서 다른 사람의 블로그를 참고하여 설정을 진행하였다.
위와 같이 어떤 조건을 만족하면 경보를 울린다는 것 같아서 경보 생성을 눌러보았다.
위의 화면에서 예상 요금 합계를 누른 뒤에
임계값 유형은 정적으로, 0 USD보다 크다면 경보를 울리도록 설정했다.
그리고 위와 같이 특별한 내용 없이 그냥 간단하게 경보만 발생하도록 하여 CloudWatch 설정을 마쳤다.
EC2 서버에 접속하기
위의 과정을 모두 끝냈다면 인스턴스 탭에서 방금 만든 인스턴스 정보를 확인할 수 있다.
화면상에서 맨 오른쪽에 보이는 퍼블릭 IPv4가 생성한 인스턴스의 주소이다.
나는 처음에 공부를 시작할 때 Mac 환경에서 진행했는데, 윈도우 환경에서 진행하려면 mobaXterm이 필요하다. 윈도우 데스크탑에도 깔려있고, 올해 초에 에트리에서 근무할 때도 사용해본 적이 있기 때문에 일단 넘어가고 Mac으로만 진행했다.
먼저 아까 키 페어를 생성할 때 받은 키가 있는 경로로 이동한다. 해당 키를 aws-key라고 할 때 이 파일에 $ chmod 700 metacoding-aws-key.pem
명령어로 실행 권한을 부여해야 한다. 이후 $ ls -al
명령어를 활용하여 확인해보면 권한이 변경된 것을 확인할 수 있다.
이후에 $ ssh -i metacoding-aws-key.pem ubuntu@생성한 인스턴스의 ip 주소
명령어로 서버 주소에 접속한다. (원인은 모르겠지만 현재 주소가 바뀌었는데 아마 탄력적 ip 설정을 했다가 삭제하는 과정에서 바뀌지 않았나 추측되고 있으며, 계속 바뀌는지 지속적인 확인이 필요할 것 같다.)
이후에 따로 화면 캡쳐를 하지는 않았지만 $ sudo apt update
명령어를 실행하여 apt 목록 메뉴판을 갱신해준 뒤 $ apt list | grep tomcat
명령어로 tomcat을 찾은 뒤 $ sudo apt install -y tomcat9
명령어로 설치를 완료했다.
이후에 설치가 잘 되었는지 확인하기 위해 $ sudo apt install net-tools
명령어로 netstat 명령어 꾸러미를 설치하고 $ sudo netstat -ntlp
명령어로 아래와 같이 8080번 포트가 잘 사용중인지 확인했다.
모든 설치를 완료한 후에 {인스턴스의 IPv4 주소}:8080으로 접속해보면 오류가 발생하는 것을 알 수 있는데, 8080 포트가 EC2 서버의 방화벽에 막혀있기 때문이다.
이를 해결하기 위해 위와 같이 다시 aws 홈페이지의 인스턴스로 돌아와 인바운드 규칙을 설정하기 위해 보안 탭을 클릭하고, 인스턴스의 보안 그룹을 클릭한다.
위와 같은 화면이 나왔다면 인바운드 규칙 편집 버튼을 누른다.
이후에 위와 같이 유형은 사용자 지정 TCP, 포트 범위는 8080, 소스는 Anywhere-IPv4로 지정하고 규칙 저장 버튼을 누른다.
이후에 다시 {인스턴스의 IPv4 주소}:8080로 접속해보면 위와 같이 It works ! 라는 글자와 함께 성공적으로 접속이 된 것을 확인할 수 있다.
프로젝트 다운받고 실행해보기
나는 테스트를 위해 책에서 사용한 스프링부트로 만든 배포용 프로젝트를 그대로 사용했다.
해당 프로젝트도 8080번 포트를 사용하기 때문에 이전에 tomcat을 설치할 때 사용하던 8080 포트의 pid를 찾아서 kill하는 과정을 실행해야 한다.
먼저 $ git --version
명령어로 git이 이미 설치되어 있었기 때문에 그대로 진행했으며, $ pwd
명령어로 확인한 현재 디렉터리인 /home/ubuntu에 $ git clone https://github.com/codingspecialist/aws-v1.git
명령어로 클론하였다.
이후 해당 디렉터리로 이동하여 $ chmod u+x gradlew
명령어로 gradlew에 실행 권한을 부여했다.
그리고 자바가 이미 11.0.23 버전으로 깔려있어서 다운받은 프로젝트 실행 조건이 갖춰져 있기 때문에 따로 자바를 설치하지 않고 진행하였으며, 이후에 $ ./gradlew build
명령어로 aws-v1에 있는 실행 파일로 빌드했다.
빌드가 모두 끝나면 build 폴더가 생성되는데 $ cd build/libs
명령어로 build 폴더 내부로 가보면 v1-0.0.1-SNAPSHOT.jar
이라는 실행 파일이 만들어져 있는 것을 볼 수 있다. 마지막으로 폴더 내부에 jar 파일이 하나밖에 없기 때문에 간단하게 $ java -jar *.jar
명령어로 파일을 실행한다.
이후에 {인스턴스의 IPv4 주소}:8080/aws/v1으로 들어가보면 위와 같은 화면을 볼 수 있다.
내용 추가
책에서 계속 고정 ip의 중요성에 대해 언급하고 있다. AWS는 프리 티어 서버를 사용할 때 기본적으로 유동 ip를 부여해 주는데 고정 ip로 변경해주기 위해 탄력적 ip를 설정해야 한다고 한다. 고정 ip를 생성한 뒤 EC2에 연결하지 않은 상태라면 유료지만 연결만 하면 무료라고 하는데 찾아보니 현재는 아니다. 정확히는 2024년 2월 1일부터 연결을 하더라도 유료이다.
자세한 내용은 https://aws.amazon.com/ko/blogs/korea/new-aws-public-ipv4-address-charge-public-ip-insights/
그래서 나는 앞으로 공부할 모든 EC2 관련 프로젝트에 대해서 고정 ip를 사용하지 않을 계획이다.
결론
아직 초반부라 CI/CD는 고사하고 스크립트, cron같은 내용들도 없는데 지금까지 미루기만 했던 일을 시작이라도 했다는 사실에 뿌듯하기만 한 것 같다. 앞으로 차근차근 내용을 기록해가며 공부를 계속해야겠다는 생각이 들었고, 읽고 있는 책 기준으로 Chapter 03까지 마무리하면 이번 학습을 위해 만들었던 인스턴스는 삭제하고 다시 처음부터 다시 진행하지 않을까 싶다. 열심히 달려보자!
'Amazon Web Services' 카테고리의 다른 글
EC2 배포 파일 압축 및 파일 전송하기 (0) | 2024.07.11 |
---|---|
EC2 재배포 프로세스와 배포 자동화 스크립트 (0) | 2024.07.11 |
EC2 프로젝트 cron 주기적 실행 (0) | 2024.07.10 |
EC2 프로젝트 nohup으로 백그라운드로 실행해보기 (0) | 2024.07.10 |
EC2 서버 타임존 변경 및 종료 스크립트 작성 (0) | 2024.07.09 |