이 글은 이동욱 님의 스프링 부트와 AWS로 혼자 구현하는 웹 서비스를 읽고 정리한 글입니다.
이제 AWS(Amazon Web Service)라는 클라우드 서비스를 이용해 본격적으로 서버 배포를 진행해 보겠다.
외부에서 지금까지 만든 서비스에 접근하기 위해서는 24시간 내내 작동하는 서버가 필수적이다.
집의 PC를 24시간 구동, 호스팅 서비스, 클라우드 서비스 이렇게 3가지 선택지가 존재하는데 유동적으로 사양을 늘릴 수 있는 클라우드가 유리하다.
클라우드 서비스는 인터넷(클라우드)을 통해 서버, 스토리지, 데이터베이스, 네트워크, 소프트웨어, 모니터링 등의 컴퓨팅 서버를 제공하는 것을 말한다. 예를 들어 AWS의 EC2는 서버 장비를 대여하는 것에 그치지 않고 로그 관리, 모니터링, 하드웨어 교체, 네트워크 관리 등을 기본적으로 제공한다. 개발자가 직접 해야 할 일들을 AWS가 전부 지원하는 것이다.
클라우드 서비스에는 몇 가지 형태가 존재한다.
● Infrastructure as a Service (IaaS, 아이아스, 이에스)
기존 물리 장비를 미들웨어와 함께 묶어둔 추상화 서비스이다. 가상머신, 스토리지, 네트워크, 운영체제 등의 IT 인프라를 대여해 주는 서비스이다. ex) AWS의 EC2, S3 등
● Platfrom as a Service (PaaS, 파스)
앞의 IaaS를 한번 더 추상화 한 서비스이다. 한 번 더 추상화했다 보니 많은 기능이 자동화되어 있다.
ex) AWS의 Beanstalk, Heroku 등
● Software as a Service (SaaS, 사스)
소프트웨어 서비스를 말한다. ex) 구글 드라이브, 드롭박스, 와탭 등
이 책에서 사용한 클라우드 서비스는 현재 많은 국내 기업에서 사용 중인 AWS로 선택했다.
또한 이 책에서 사용하는 모든 AWS 서비스는 IaaS를 사용했다.
1. AWS 회원가입
AWS 공식 사이트(https://aws.amazon.com/ko/)로 이동한 뒤 Master 또는 Visa 카드를 준비하여 회원가입을 완료한다.
2. EC2 인스턴스 생성하기
EC2는 AWS에서 제공하는 성능, 용량등을 유동적으로 사용할 수 있는 서버이다.
먼저 EC2를 만들기 전에 자신의 리전을 서울로 변경한다.
변경 후에 EC2 대시보드에서 인스턴스 시작 버튼을 클릭한다. 인스턴스란 EC2 서비스에 생성된 가상 머신을 말한다.
먼저 이름 및 태그를 설정한다. 태그에는 웹 콘솔에서 표기될 태그인 Name 태그를 등록한다.
아래 그림과 같이 설정하면 된다.
다음으로 AMI를 선택한다. AMI(Amazon Machine Image)란 EC2 인스턴스를 시작하는데 필요한 정보를 이미지로 만들어 둔 것으로 인스턴스라는 가상머신에 운영체제 등을 설치할 수 있게 구워 넣은 이미지라고 생각하면 된다. Amazon Linux 2 AMI (HVM) - Kernel 5.10, SSD Volume Type를 선택했다.
다음으로 인스턴스 유형을 선택한다. t2.micro를 선택하자.
인스턴스에 접근하기 위해서는 pem키(비밀키)가 필요하다. 일종의 마스터키로 생각하면 된다.
Create new key pair 버튼을 클릭해서 키 페어를 생성 후 다운로드한다.
다음은 네트워크 설정이다. 아래 그림과 같이 진행한다.
보안 그룹은 방화벽을 말한다. 새로운 보안 그룹을 생성하고 이름을 설정한다.
이 보안 그룹 설정이 굉장히 중요한 부분인대, SSH면서 포트가 22인 경우는 AWS EC2에 터미널로 접속할 때를 얘기한다.
보안은 언제나 높을수록 좋으므로 pem 키 관리와 지정된 IP에서만 ssh 접속이 가능하도록 구성하는 것이 안전하다. 그래서 일단 현재 IP를 기본적으로 추가하고, 다른 장소에서 접속할 때 다시 SSH 규칙에 추가하는 것이 안전하다.
다음으로 스토리지를 선택한다. 스토리지는 쉽게 말해서 서버의 용량을 얘기한다고 보면 된다. 프리티어의 최대치인 30GB로 설정한다.
여기까지 설정을 완료하면 인스턴스 생성 버튼을 클릭한다. 그러면 다음 사진처럼 인스턴스 생성에 성공하였음을 확인할 수 있다.
인스턴스도 하나의 서버이기 때문에 IP가 존재한다. 인스턴스 생성 시와 인스턴스를 중지하고 다시 시작할 때도 새 IP가 할당된다. 요금을 아끼기 위해 잠깐 인스턴스를 중지시키는 경우에도 IP가 변경된다는 것인데 이렇게 되면 매번 접속할 때마다 IP주소를 확인해야 해서 매우 번거롭다. 그렇기 때문에 인스턴스의 IP가 매번 변경되지 않고 고정 IP를 가지게 하겠다.
● EIP 할당
AWS의 고정 IP를 Elastic IP(EIP, 탄력적 IP)라고 한다. EC2 인스턴스 페이지의 왼쪽 카테고리에서 탄력적 IP를 눌러 선택하고 주소가 없으므로 새 주소 할당 버튼을 클릭하여 할당받는다.
그리고 할당받은 탄력적 IP를 생성한 EC2에 연결한다.
연결이 완료되면 왼쪽 카테고리에 있는 인스턴스 탭을 클릭해서 인스턴스 목록 페이지에서 퍼블릭, 탄력적 IP가 모두 잘 연결되었는지 확인한다.
이렇게 하면 EC2 생성과 설정이 완료된다.
3. EC2 서버에 접속하기
이제 방금 생성한 EC2에 접속을 해보자. 윈도우는 ssh 접속하기엔 불편한 점이 많아 별도의 클라이언트인 putty를 사용하여 접속한다. putty 공식 사이트(https://www.putty.org/)에 접속하여 실행 파일을 내려받는다.
puttygen.exe 파일을 실행한다. putty는 pem키는 사용이 안 되며, pkk 파일로 변경을 해줘야만 한다. puttygen은 이 과정을 진행해 주는 클라이언트이다.
puttygen 화면에서 Conversions -> Import Key를 선택해 내려받은 pem키를 선택한다.
Save private key 버튼을 클릭하여 ppk 파일을 생성한다. 경고 메시지가 나오면 예를 클릭하고 넘기면 된다.
이제 putty.exe 파일을 실행하여 다음과 같이 각 항목을 등록한다.
- HostName : usename@public_Ip를 등록한다.
- Port: ssh 접속 포트인 22를 등록한다.
- Connection type : SSH를 선택한다.
위와 같이 등록 후에 왼쪽 사이드바의 Connection -> SSH -> Auth -> Credentials를 차례로 클릭하여 ppk 파일을 로드할 수 있는 화면으로 이동한다. Private key file for authentication에서 Browse... 버튼을 클릭하여 아까 변환한 ppk 파일을 불러온다. 마지막으로 Session 탭으로 이동하여 Saved Sessions에 현재 설정들을 저장할 이름을 등록하고 Save 버튼을 클릭한다.
저장한 뒤 open 버튼을 클릭하고, 다음과 같이 SSH 접속 알림이 나타나면 예를 클릭한다. 최종적으로 SSH 접속이 다음과 같이 성공함을 확인할 수 있다.
4. 아마존 리눅스 서버 생성 시 꼭 해야 할 설정들
아마존 리눅스 서버를 처음 열게 되었다면 꼭 해야 할 다음과 같은 설정들이 있다.
- Java8 설치 : 현재 이 프로젝트의 버전이 Java8이다.
- 타임존 변경 : 기존 서버의 시간대는 미국이므로 한국 시간대로 변경하자.
- 호스트 네임 변경 : 현재 접속한 서버의 별명을 등록한다. 실무에서는 한 대의 서버가 아닌 수 십 대의 서버가 작동되므로 구분이 필요하다.
1) Java8 설치
먼저 Java8부터 설치해 보겠다.
sudo yum install -y java-1.8.0-openjdk-devel.x86_64
그 후 현재 버전이 Java8이 되었는지 확인한다.
java -version
1.8.0_xxx로 설정되어 있다면 설치에 성공한 것이다.
2) 타임존 변경
다음 명령어들을 차례로 수행한다.
sudo rm /etc/localtime
sudo ln -s /usr/share/zoneinfo/Asia/Seoul etc/localtime
정상적으로 수행되었다면 date 명령어로 타임존이 KST로 변경된 것을 확인할 수 있다.
3) Hostname 변경
각 서버가 어느 서버인지 표현하기 위해 HOSTNAME을 변경하겠다. 다음 명령어를 입력하여 편집 파일을 열어본다.
sudo vim /etc/sysconfig/network
편집 파일에서 'HOSTNAME=자기가 원하는 서비스명'으로 변경한다.
변경 후 서버를 재부팅하고 나면 다음과 같이 잘 변경되었음을 확인할 수 있다.
다음으로 호스트 주소를 찾을 때 가장 먼저 검색하는 /etc/hosts에 변경한 HOSTNAME을 등록한다.
마지막으로 정상적으로 등록되었는지 확인해 보자.
curl 등록한 호스트 이름
위와 같이 80 포트로 접근이 안된다는 에러가 발생해야 한다. 찾을 수 없는 주소라는 에러가 발생하면 잘못 등록된 것이다.
'개발 > 스프링 부트와 AWS로 혼자 구현하는 웹 서비스' 카테고리의 다른 글
[Spring Boot & AWS] Chpt 8 - EC2 서버에 프로젝트를 배포해 보자 (0) | 2023.01.30 |
---|---|
[Spring Boot & AWS] Chpt 7 - AWS에 데이터베이스 환경을 만들어보자 - AWS RDS (0) | 2023.01.30 |
[Spring Boot & AWS] Chpt 5 - 스프링 시큐리티와 OAuth 2.0으로 로그인 기능 구현하기 (0) | 2023.01.23 |
[Spring Boot & AWS] Chpt 4 - 머스테치로 화면 구성하기 (0) | 2023.01.18 |
[Spring Boot & AWS] Chpt 3 - 스프링 부트에서 JPA로 데이터베이스 다뤄보자 (0) | 2023.01.13 |