본인이 만든 서비스를 외부에서 접근하려면 24시간 작동하는 서버가 필요합니다. 일반적으로는 다음의 세가지가 있습니다.
일반적으로 호스팅 서비스나 집PC를 이용하는 것이 저렴하고, 만약 특정 시간대에 트래픽이 몰린다면 클라우드가 유동적으로 사양을 늘릴 수 있기때문에 더 유리합니다.
클라우드 서비스는 인터넷을 통해 서버, 스토리지, 데이터베이스, 네트워크, 소프트웨어, 모니터링 등의 서비스를 제공하는 것입니다.
이 책에서는 AWS를 사용하여 앞선 챕터에서 만든 서비스를 배포합니다.
AWS 공식사이트에서 회원가입을 진행합니다. 가입 시 영문주소와 Master 및 Visa 카드를 등록해야 합니다.
EC2는 AWS에서 제공하는 성능, 용량 등을 유동적으로 사용할 수 있는 서버입니다.
AWS에서 무료로 제공하는 프리티어 플랜에는 EC2 사용에 몇가지 제한사항이 있습니다.
먼저 로그인을 하고 상단 우측에서 리전을 서울로 변경해줍니다.
리전 변경 후 검색창에 ec2를 검색하여 EC2 서비스를 클릭합니다.
EC2 대시보드에서 [인스턴스 시작] 버튼을 클릭합니다. 인스턴스란 EC2 서비스에 생성된 가상 머신을 말합니다.
인스턴스의 이름을 입력합니다.
AMI를 선택합니다. 기본값으로 설정되어있는 Amazon Linux를 사용합니다.
제가 실습을 하는 날짜를 기준으로 Amazon Linux 2023 AMI가 기본값으로 되어있습니다. Amazon Linux 2023 AMI에는 MySQL이 포함되어있지 않아 7장에서 ec2에 MySQL 설치 시 오류가 생깁니다(관련링크). 다른 방법으로도 설치를 할 수 있으나 앞으로의 실습을 더 수월하게 하기위해 이 단계에서 꼭 사진과 같은 AMI를 선택하시길 추천드립니다.
인스턴스 유형으로 t2.micro를 선택합니다.
인스턴스로 접근하기 위해 키 페어를 생성해줍니다.
네트워크 설정을 위해 편집 버튼을 클릭합니다.
보안 그룹 규칙을 설정해줍니다.
유형 항목에서 ssh 이면서 포트번호가 22인 경우는 AWS EC2에 터미널로 접속할 때를 이야기합니다. 기본값인 위치무관(0.0.0.00/0) 으로 설정하는 경우 안전하지 않기 때문에 pem 키 관리와 지정된 IP에서만 ssh 접속이 가능하도록 구성하는 것이 안전합니다.
하단의 [보안 그룹 규칙 추가] 버튼을 클릭하여 8080 포트를 추가합니다. CIDR은 0.0.0.0/0 과 ::/0을 입력해줍니다.
스토리지는 프리티어의 최대치인 30GB로 변경합니다.
앞의 설정을 완료했으면 우측의 요약 탭 하단의 인스턴스 시작 버튼을 클릭합니다.
인스턴스 아이디를 클릭하여 인스턴스 정보를 확인합니다.
다음과 같이 IP 도메인이 할당된 것을 확인할 수 있습니다.
AWS의 고정 IP를 Elastic IP라고 합니다. 같은 인스턴스를 중지하고 다시 시작하면 새 IP가 할당되어 PC에서 접근하려면 매번 IP를 확인해야하는 번거로움이 생깁니다. 그렇기 때문에 고정 IP를 가지도록 EIP를 설정하겠습니다.
왼쪽 메뉴바에서 [탄력적 IP] -> [탄력적 IP 주소 할당] -> [할당] 을 차례대로 선택합니다.
생성한 IP주소를 EC2 주소와 연결합니다. [작업] -> [탄력적 IP 주소 연결] 메뉴를 선택합니다.
연결할 EC2와 IP를 선택하고 연결을 클릭합니다.
다시 인스턴스 메뉴로 돌아가 할당된 IP를 확인합니다.
탄력적 IP는 생성 후 EC2에 연결하지 않으면 비용이 발생하니 무조건 EC2에 바로 연결해야 합니다. 연결할 EC2가 없다면 탄력적 IP를 삭제해야 합니다.
putty 사이트에 접속하여 실행 파일을 다운로드하고 설치합니다.
설치 후 puttygen을 실행합니다.
상단 메뉴에서 [Conversions] -> [Import Key] -> [내려받은 pem키 선택] 순으로 진행합니다.
[Save Private Key] -> [예] 버튼을 클릭해 ppk파일을 생성합니다.
putty.exe를 실행하여 각 항목을 등록합니다.
각 항목을 등록하고 좌측 메뉴에서 [Connection] -> [SSH] -> [Auth] -> [Credentials] 를 차례로 클릭합니다.
Browse를 클릭해 puttygen으로 생성한 ppk 파일을 등록합니다.
등록을 마쳤다면 Session 탭으로 이동하여 Saved Sessions 에 현재 설정들을 저장할 이름을 등록하고 Save 버튼을 클릭합니다.
저장 후 [open] -> [accept] 를 클릭하면 SSH에 접속을 성공한 것을 확인할 수 있습니다.
EC2에서 다음 명령어들을 입력합니다.
sudo yum install java-11-amazon-corretto.x86_64
Is this ok [y/N] 이라는 문구가 나오면 y를 입력해 Java 11 설치를 진행합니다.
설치된 Java 버전을 확인합니다.
java -version
Java 버전을 선택합니다. 이전 단계에서 설치한 버전 그대로 나왔다면 넘어가셔도 됩니다.
sudo /usr/sbin/alternatives --config java
설치된 Java 버전을 확인하고 Selection 번호를 입력해 선택합니다.
EC2 서버의 기본 시간대는 UTC입니다. 이는 세계 표준 시간으로 한국의 시간과 9시간이 차이납니다. 그렇게 되면 Java 애플리케이션에서 생성되는 시간도 모두 차이가 나기 때문에 꼭 수정해야 합니다.
다음 명령어들을 차례대로 입력합니다.
sudo rm /etc/localtime
sudo ln -s /usr/share/zoneinfo/Asia/Seoul /etc/localtime
정상적으로 변경되었다면 date 명령어로 타임존이 KST로 변경된 것을 확인할 수 있습니다.
여러 서버를 관리 중일 경우 IP만으로 어떤 서비스의 서버인지 확인이 어렵기 때문에 각 서버가 어느 서비스인지 표현하기 위해 HOSTNAME을 변경하겠습니다.
hostname 명령어로 현재 hostname을 확인합니다.
다음 명령어로 hostname을 변경합니다.
sudo hostnamectl set-hostname 변경할 hostname
변경 후 sudo reboot로 서버를 재부팅하고 다시 접속하여 변경된 hostname을 확인합니다.
/etc/hosts에 변경한 hostname을 등록합니다.
sudo vim /etc/hosts
127.0.0.1 등록한 hostname
다음 명령어로 정상적으로 등록되었는지 확인합니다.
curl 등록한 호스트 이름
위와 같은 오류가 나온다면 등록이 완료된 것입니다. 이는 아직 80 포트로 실행된 서비스가 없어서 나오는 오류입니다.