- EC2 인스턴스 생성하기
- EC2 서버에 접속하기
- 아마존 리눅스 1 서버 생성 시 꼭 해야하는 설정들
- 외부에서 본인이 만든 서비스에 접근하려면 24시간 작동하는 서버 필수
- 집에 PC 24시간 구동
- 호스팅 서비스 이용
- 클라우드 서비스(AWS, AZURE, GCP) 이용
- 인터넷(클라우드)를 통해 서버, 스토리지, 데이터베이스, 네트워크, 소프트웨어, 모니터링 등 컴퓨팅 서비스 제공
→ 비용은 호스팅 서비스나 집 PC를 이용하는 것이 저렴하지만
특정 시간에만 트래픽이 몰릴 경우 유동적으로 사양을 늘릴 수 있는 클라우드 가 유리함
- 클라우드의 형태
- Infrastructure as a Service (IaaS)
- 기존 물리 장비를 미들웨어와 함께 묶어둔 추상화 서비스
- 가상머신, 스토리지, 네트워크, 운영체제 등의 IT 인프라 대여 - Platform as a Service (PaaS)
- IaaS를 한 번 더 추상화한 서비스 → 더 많은 기능 자동화
ex) AWS의 빈스톡 (무료사용계층(free tier)로 무중단 배포 불가), 헤로쿠 - Software as a Service (SaaS)
- 소프트웨어 서비스
ex) 구글 드라이브, 드랍박스, 와탭
< EC2 인스턴스 생성하기 >
EC2 = AWS에서 제공하는 성능, 용량 등을 유동적으로 사용할 수 있는 서버
1. AWS 공식 사이트에서 무료 계정 만들기 https://aws.amazon.com/ko/
2. 서울로 리전 설정
리전 = AWS가 구동될 지역 (AWS는 도시별 클라우드 센터에 가상머신 구축)
3. EC2 인스턴스 생성
스크린 상단 검색창에 'EC2' 검색 > 인스턴스 시작
- 인스턴스 = EC2 서비스에 생성된 가상머신
3-1) 이름 및 태그 설정
여러 인스턴스가 있을 때 태그별로 구분하면 검색이나 그룹 짓기 편함
3-2) AMI(Amazon Machine Image) - Amazon Linux AMI 선택하기
AMI
= EC2 인스턴스를 시작하는 데 필요한 정보를 이미지로 만들어둔 것
→ 인스턴스라는 가상머신에 운영체제 등을 설치할 수 있도록 함
- Amazon Linux AMI를 선택한 이유?
- 지원 받기 쉽고, AWS의 각종 서비스와의 상성이 좋음
- 레드햇 베이스로, 레드햇 계열의 배포판을 다뤄본 사람일 수록 사용이 쉬움
- 아마존 독자적인 개발 레포지토리를 사용하고 있어 yum이 빠름
3-3) 인스턴스 유형 - t2.micro 선택
- 인스턴스 크기에 따라 정해진 비율로 CPU 크레딧 받음
( 크레딧 = CPU를 사용할 수 있는 포인트 개념 ) - 트래픽이 높을 경우 크레딧 적극적 사용 → 크레딧 모두 사용 시 EC2 사용 불가
⇒ 트래픽 높은 서비스는 T 시리즈(t2, t3../범용시리즈) 사용 △
3-4) 세부정보 구성
기업에서 사용할 경우 세세하게 다루지만, 혼자서 1대의 서버만 사용할 경우 별다른 과정 생략
3-5) 키 페어 설정 > pem 키 다운로드
- pem 키 (비밀 키)
= 서버와 클라이언트 간의 보안을 위해 사용되는 키 파일
- 인스턴스에 접근하기 위해서는 pem 키 필요
- 해당 pem키 외에는 접근 허용 X
- 일종의 마스터키 - 유출되거나 잃어버리면 안됨 ⚠️
3-6) 방화벽(보안 그룹) 설정
- 네트워크 설정 옆의 '편집' 버튼 > 보안 그룹 생성 > 보안 그룹 이름, 설명 설정 > 인바운드 보안 그룹 규칙 세 가지 추가
- 유형이 ssh, 포트범위가 22인 경우
= AWS EC2에 터미널로 접속할 경우
(ssh = 네트워크를 통해 안전하게 원격서버에 접속할 수 있는 프로토콜)
ㄴ pem키가 없을 경우 서버에 접속할 수 없기 때문에 편의상 전체오픈 (0.0.0.0/0,::/0)하는 경우 (모든 IP주소에서 서버에 접근 가능하도록 하는 경우) 발생
-> 이후 실수로 pem 키가 외부로 노출되면 누구나 서버에 접근이 가능해져 서버에서 가상화폐가 채굴되기도 함 (서버 자원 악용)
⇒ 보안 높이기 위해 pem 키 관리와 지정된 IP에서만 ssh 접속이 가능하도록 구성하기
→ 유형이 ssh, 포트범위가 22인 경우의 소스 유형을 ‘내 IP’로 설정
(8080은 전체 오픈해도 괜찮음)
3-6) 스토리지 (서버 용량) 선택
4. '인스턴스 시작' > 인스턴스 생성 완료!! ✅
➕ EIP (탄력적 IP) 할당
- 인스턴스 생성 시에 항상 새 IP를 할당 ( 같은 인스턴스를 중지 후 다시 시작할 때도 )
→ 매번 접속해야 하는 IP가 변경되므로 번거로움
⇒ 인스턴스 IP가 매번 변경되지 않고 고정 IP(EIP)를 가지도록 함
- 좌측 카테고리의 ‘탄력적 IP’ > ‘탄력적 IP 주소 할당’ > ‘할당’
> 탄력적 IP 생성(할당) 완료 ✅ > ‘작업’ 버튼의 ‘탄력적 IP 주소 연결’
> 인스턴스와 프라이빗 IP 선택 후 연결
> 탄력적 IP와 인스턴스 연결 완료 ✅
⚠️ 탄력적 IP는 EC2 서버에 연결하지 않으면 비용 발생
생성 후 EC2 서버에 바로 연결 / 사용할 인스턴스 없을 시 삭제 필요
< EC2 서버에 접속하기 >
- Mac & Linux에서 접속하기 (터미널)
AWS와 같은 외부서버로 SSH 접속을 하려면 매번 아래 명령어 입력해야 함 (불편함)
ssh -i pem [키 위치] [EC2의 탄력적 IP 주소]
⇒ 쉽게 ssh에 접속하는 방법 💡
- 인스턴스 생성 시 받은 키페어 pem 파일을 ~/.ssh로 복사하기
cp pem [키 위치(키 다운로드 받은 위치)] ~/.ssh/
→ ssh 실행 시 pem 키 파일 자동으로 읽어 접속, 별도로 pem 키 위치 지정 필요 없음
( pem 키가 잘 복사되었는지 확인하고 싶다면 cd ~/.ssh/ 명령어로 ~/.ssh 디렉토리로 이동한 후 ll 명령어로 파일 목록 확인해보기 )
2. pem 키 권한 변경
chmod 600 ~/.ssh/[pem키이름(pem키파일이름)]
3. pem키가 있는 ~/.ssh 디렉토리에 config 파일 생성
vim ~/.ssh/config
4. config 파일 수정
Host 본인이 원하는 서비스명
HostName [ec2의 탄력적 IP주소]
User ec2-user
IdentityFile ~/.ssh/[pem키이름]
Host = 앞으로 접속할 키 값
ex) Host abc로 등록할 경우 ssh abc로 해당 EC2 접속 가능
:wq 명령어로 저장 종료
5. config 파일 권한 수정
chmod 700 ~/.ssh/config
⏩ 이제 터미널에서 아래 명령어만 입력하면 접속 가능 ✅
ssh [config에 등록한 서비스명(Host)]
‘Are you sure you want to continue connecting (yes/no)?’ 질문에 ‘yes’ 입력
- Windows에서 접속하기 (Putty)
ssh 접속하기는 불편 -> 별도 클라이언트인 putty 설치
1. putty 사이트에서 putty.exe와 puttygen.exe 모두 다운로드 후 puttygen.exe 실행
https://www.putty.org/
2. puttygen 화면의 상단 ‘Conversions’의 ‘Import Key’ 선택 후 다운로드 받았던 pem 키 파일 선택
- puttygen - putty에서는 pem 키로 사용이 안되어 pem 키를 ppk 파일로 변환하는 과정을 진행해주는 클라이언트
3. 'Save private key' 클릭하여 ppk 파일 생성 후 저장
4. putty.exe 실행 후 각 항목 등록
HostName : [username]@[public_IP] 등록 (ec2-user@탄력적IP주소)
Port : 22 (ssh 접속 포트)
Connection type : SSH
5. 좌측의 'Connection' > 'SSH' > 'Auth' > 'Credentials'의 'Browse..' 클릭 -> ppk 파일 등록
6. 좌측의 'Session'의 'Saved Sessions'에 현재 설정을 저장할 이름 등록 > 'Save' > 'Open'
⏩ SSH 접속 성공 ✅
< 아마존 리눅스 1 서버 생성 시 꼭 해야하는 설정들 >
1. Java 8 설치
- 아마존 리눅스 1은 기본 자바 버전 7 -> 책의 내용에 따라 자바 8 설치
sudo yum install -y java-1.8.0-openjdk-amazon-corretto
- 설치 후 인스턴스의 Java 버전을 8로 변경
sudo /usr/sbin/alternatives --config java
(저는 해당 명령어를 따로 실행하지 않아도 Java 8로 바로 적용이 되었습니다)
- java -version 명령어로 현재 버전이 Java8인지 확인
- 사용하지 않는 Java7 삭제
sudo yum remove java-1.7.0-openjdk
🚨 에러
책의 내용을 따라 'sudo yum install -y java-1.8.0-openjdk-devel.x86_64' 명령어로 설치 시 Amazon Linux 2023에서는 java-1.8.0-openjdk-devel를 지원하지 않기 때문에 아래의 오류가 발생함 -> amazon corretto 사용하기
2. 타임존 변경
기본 서버의 시간은 미국 시간대이기 때문에 한국 시간대로 변경해야만 우리가 사용하는 시간이 모두 한국 시간으로 등록/ 사용됨
sudo rm /etc/localtime
sudo ln -s /usr/share/zoneinfo/Asia/Seoul /etc/localtime
date // 타임존이 KST로 변경되었는지 확인
3. HostName 변경
여러 서버를 관리 중이라면 IP만으로 어떤 서비스의 서버인지 확인 어려움
-> 어떤 서비스인지 표현 하기 위해 HOSTNAME 변경
sudo hostnamectl set-hostname [설정할 호스트명]
hostnamectl
(책에는 /etc/sysconfig/network 편집파일을 열어서 수정하라고 나와있지만, Amazon Linux 2023 기준 해당 편집파일에 hostname 부분이 없으므로 위의 명령어를 사용합니다)
서버를 껐다가 재부팅하면 아래와 같이 변경됨
3-1) /etc/hosts에 변경된 hostname 등록하기
sudo vim /etc/hosts // 파일 열기
> i 키를 누른 후 127.0.0.1 [등록한 hostname] 등록 > esc + :wq 명령어로 저장 후 종료
> curl 명령어로 정상적으로 등록되었는지 확인
curl [등록한 hostname]
- 정상 등록된 경우
(7) Failed to connect to [hostname] port 80: ~~ 메세지
= 아직 80포트로 실행된 서비스는 없지만 curl 호스트 이름으로 실행은 잘 되었음
- 등록 실패한 경우
(6) Could not resolve host:[hostname] 메세지 = 찾을 수 없는 주소임
'Group Study (2024-2025) > Spring 입문' 카테고리의 다른 글
[Spring 입문] 6주차 - EC2 서버에 프로젝트를 배포해 보자 (3) | 2024.11.10 |
---|---|
[Spring 입문] 5주차 - AWS 서버 환경을 만들어보자 - AWS RDS (7장) (1) | 2024.11.05 |
[Spring 입문] 4주차 - 스프링 시큐리티와 OAuth 2.0으로 로그인 기능 구현하기 (1) (2) | 2024.10.29 |
[Spring 입문] 4주차 - 스프링 시큐리티와 OAuth 2.0으로 로그인 기능 구현하기 (2) (0) | 2024.10.28 |
[Spring 입문] 3주차 - 머스테치로 화면 구성하기 (5) | 2024.10.14 |