외부에서 본인이 만든 서비스에 접근하려면 24시간 작동하는 서버가 필요함
- 집에 PC를 24시간 구동한다.
- 호스팅 서비스를 이용한다.
- 클라우드 서비스를 이용한다.
일반적으로 호스팅 서비스나 집PC를 이용하는 것이 저렴
만약 특정 시간대에 트래픽이 몰린다면 클라우드가 유동적으로 사양을 늘릴 수 있기때문에 더 유리
💚 클라우드 서비스
- 인터넷(클라우드)를 통해 서버, 스토리지, 데이터 베이스, 네트워크, 소프트웨어, 모니터링 등의 컴퓨팅 서비스를 제공하는 것
클라우드 형태
📌 Infrastructure as a Service(IaaS)
- 기존 물리 장비를 미들웨어와 함께 묶어둔 추상화 서비스입니다.
- 가상머신, 스토리지, 네트워크, 운영체제 등의 IT 인프라를 대여해 주는 서비스라고 보시면 됩니다.
- AWS EC2, S3등
📌 Platform as a Service(PaaS)
- IaaS에섯 한 번 더 추상화한 서비스이며 그렇기 때문에 더 많은 기능이 자동화되어 있습니다.
- AWS의 Beanstalk, Heroku 등
📌 Software as a Service(SaaS)
- 소프트웨어 서비스를 이야기합니다.
- 구글 드라이브, 드롭박스, 와탭 등
많은 기업이 AWS를 사용하고 있기 때문에 AWS를 통해 서버 배포를 해보도록 하겠다!
1️⃣ AWS 회원 가입
2️⃣ EC2 인스턴스 생성하기
EC2는 AWS에서 제공하는 성능, 용량 등을 유동적으로 사용할 수 있는 서버입니다.
AWS에서 무료로 제공하는 프리티어 플랜에는 EC2 사용에 몇가지 제한사항이 있습니다.
- 사양이 t2.micro만 가능합니다.
- vCPU(가상 CPU) 1 Core, 메모리 1GB 사양.
- 보동 vCPU는 물리 CPU 사양의 절반 정도의 성능을 가집니다.
- 월 750 시간의 제한이 있고, 초과하면 요금이 부과됩니다.
- 즉, 1대의 t2.micro만 사용한다면 24시간 사용할 수 있습니다.
먼저 로그인을 하고 상단 우측에서 리전을 서울로 변경해줍니다.
- 리전이란 AWS 서비스가 구동될 지역을 이야기합니다. AWS는 도시별로 클라우드 센터를 지어 해당 센터에서 구축된 가상머신들을 사용할 수 있습니다. 이걸 리전이라고 합니다.
리전 변경 후 검색창에 ec2를 검색하여 EC2 서비스를 클릭합니다.
💚 인스턴스 시작
EC2 대시보드에서 [인스턴스 시작] 버튼을 클릭합니다.
인스턴스란 EC2 서비스에 생성된 가상 머신을 말합니다.
인스턴스의 이름을 입력합니다.
AMI는 기본값으로 설정되어 있는 Amazon Linux를 선택합니다.
- AMI란, EC2 인스턴스를 시작하는 데 필요한 정보를 이미지로 만들어 둔 것을 말합니다.
인스턴스 유형으로 t2.micro를 선택합니다.
인스턴스로 접근하기 위해 키 페어를 생성해줍니다.
- 인스턴스는 지정된 pem 키(비밀키)와 매칭되는 공개키를 사지고 있어, 해당 pem 키 외에는 접근을 허용하지 않습니다.
- EC2 서버로 접속할 때 필수 파일이니 본인이 잘 찾을 수 있는 폴더에 저장합니다.
네트워크 설정을 위해 편집 버튼을 클릭합니다.
보안 그룹 규칙을 설정해줍니다.
- 보안그룹은 방화벽을 이야기합니다. '서버로 80 포트 외에는 허용하지 않는다'는 역할을 하는 방화벽이 AWS에서는 보안 그룹으로 사용됩니다.
내 IP 설정이유
유형 항목에서 ssh 이면서 포트번호가 22인 경우는 AWS EC2에 터미널로 접속할 때를 이야기합니다. 기본값인 위치무관(0.0.0.00/0) 으로 설정하는 경우 안전하지 않기 때문에 pem 키 관리와 지정된 IP에서만 ssh 접속이 가능하도록 구성하는 것이 안전합니다.
하단의 [보안 그룹 규칙 추가] 버튼을 클릭하여 8080 포트를 추가합니다. CIDR은 0.0.0.0/0 과 ::/0을 입력해줍니다.
스토리지는 프리티어의 최대치인 30GB로 변경합니다.
- 스토리지는 흔히 하드디스크라 부르는 서버의 디스크를 이야기하며 서버의 용량을 얼마나 정할지 선택하는 단계 입니다.
앞의 설정을 완료했으면 우측의 요약 탭 하단의 인스턴스 시작 버튼을 클릭합니다.
인스턴스 아이디를 클릭하여 인스턴스 정보를 확인합니다.
다음과 같이 IP 도메인이 할당된 것을 확인할 수 있습니다.
💚 EIP 할당
AWS의 고정 IP를 Elastic IP라고 합니다. 같은 인스턴스를 중지하고 다시 시작하면 새 IP가 할당되어 PC에서 접근하려면 매번 IP를 확인해야하는 번거로움이 생깁니다. 그렇기 때문에 고정 IP를 가지도록 EIP를 설정하겠습니다.
왼쪽 메뉴바에서 [탄력적 IP] -> [탄력적 IP 주소 할당] -> [할당] 을 차례대로 선택합니다.
생성한 IP주소를 EC2 주소와 연결합니다. [작업] -> [탄력적 IP 주소 연결] 메뉴를 선택합니다.
연결할 EC2와 IP를 선택하고 연결을 클릭합니다.
탄력적 IP는 생성 후 EC2에 연결하지 않으면 비용이 발생하니 무조건 EC2에 바로 연결해야 합니다.
연결할 EC2가 없다면 탄력적 IP를 삭제해야 합니다.
3️⃣ EC2 서버에 접속하기 [Windows]
💚 putty 설치
putty 사이트에 접속하여 실행 파일을 다운로드하고 설치합니다.
설치 후 puttygen을 실행합니다.
- putty는 pem 키로 사용이 안되기때문에 pem 키를 ppk 파일로 변환해야만 합니다. puttygen은 이 과정을 진행해 주는 클라이언트 입니다.
상단 메뉴에서 [Conversions] -> [Import Key] -> [내려받은 pem키 선택] 순으로 진행합니다.
[Save Private Key] -> [예] 버튼을 클릭해 ppk파일을 생성합니다.
putty.exe를 실행하여 각 항목을 등록합니다.
- HostName : username@public_Ip 를 등록합니다.
- Port : ssh 접속 포트인 22를 등록합니다.
- Connection type : SSH를 선택합니다.
각 항목을 등록하고 좌측 메뉴에서 [Connection] -> [SSH] -> [Auth] -> [Credentials] 를 차례로 클릭합니다.
Browse를 클릭해 puttygen으로 생성한 ppk 파일을 등록합니다.
등록을 마쳤다면 Session 탭으로 이동하여 Saved Sessions 에 현재 설정들을 저장할 이름을 등록하고 Save 버튼을 클릭합니다.
저장 후 [open] -> [accept] 를 클릭하면 SSH에 접속을 성공한 것을 확인할 수 있습니다.
4️⃣ 기타 설정
💚 Java 11 설치
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로 변경된 것을 확인할 수 있습니다.
💚 Hostname 변경
여러 서버를 관리 중일 경우 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 포트로 실행된 서비스가 없어서 나오는 오류입니다.
💻 Reference
'Server > Spring Boot' 카테고리의 다른 글
[Spring Boot] Toy Project 게시판 만들기 (3) - 조회, 삭제 (1) | 2023.12.18 |
---|---|
[Spring Boot] Toy Project 게시판 만들기 (2) - 생성, 수정 (0) | 2023.12.17 |
[Chapter 03] 스프링 부트에서 JPA로 데이터베이스 다뤄보자 (2) - 수정/조회 (1) | 2023.12.17 |
[Spring Boot] 스프링의 계층구조, 요청 응답 과정 (1) | 2023.12.17 |
[Spring Boot] 게시판 만들기 (1) - ERD 설계, MySQL 연결 (0) | 2023.11.13 |