2.0 2주차 워크북 학습 목표
서버의 인프라 구축을 위해 AWS에 대한 학습을 진행해보자.
1) AWS의 VPC를 이해한다.
2) 서버가 어떻게 구축되는지 이해한다.
2주차는 AWS VPC에 대한 이론을 다룬 후,
EC2 구축에 대한 내용으로 이어진다.
2.1 AWS에서 리전과 가용영역
먼저 리전과 가용영역의 의미에 대해 짚고 넘어가보자.
리전
- AWS는 수 많은 서버 컴퓨터 자원을 대여해줌 (물리적으로 존재)
- 수 많은 컴퓨팅 서비스를 위해 대규모 컴퓨터 서버를 모아놓아야 함
- 한 곳에 컴퓨터를 몰아두면 자연재해시 문제발생과 서비스 지연 문제가 발생
- 따라서 서비스를 위한 자원들을 여러 곳에 분산해서 배치
가용영역
- 리전을 다시 한 번 더 분산하여 배치
2.2 AWS와 VPC
AWS의 시작은 VPC 라고 할 정도로,
VPC를 이해하는 것은 매우 중요하다!
(DevOps의 필수적인 개념!)
아래는 워크북을 수행하기 위해 알아야 하는 사전 개념을 간단하게 정리해보았다.
컴퓨터 네트워크 (IP 계층) 전반에 대한 이해가 선행되어야 한다.
[ 사전 개념 (1) - 서브네팅 ]
- IPv4 주소 체계는 클래스를 나누어 IP를 할당하므로 비효율적
- 서브넷은 IP주소에서 네트워크 영역을 부분적으로 나눈 부분 네트워크
- 서브넷 마스크를 이용하여 원본 네트워크를 여러개의 네트워크로 분리 가능 -> 서브네팅
- 서브네팅을 통해 IP 주소 낭비를 방지할 수 있음
[ 사전 개념 (2) - 라우팅 ]
- 패킷에 포함된 주소 정보를 이용하여 목적지까지 데이터/메시지를 전달하는 경로를 선택하는 것
- 출발지 목적지 네트워크 정보, 가는 경로, 최적 경로, 네트워크 상태를 확인하며 라우팅
- 라우팅 테이블은 목적지까지 갈 수 있는 가장 효율적이라고 판단되는 정보를 모아놓은 것
- 정적 라우팅과 동적 라우팅 방법이 있음
[ 사전 개념 (3) - IP 기초 ]
- IP란 인터넷에 연결되어 있는 모든 디바이스를 식별하기 위한 고유 주소
- IP주소는 IPv4 / IPv6 2가지 종류가 있음
- 43억개의 주소가 있지만, 디바이스의 수가 증가함에 따라 IP 주소가 고갈됨
- 공유기까지는 공인 IP를 할당하고, 공유기에 연결되어 있는 기기에는 사설 IP(내부적으로 사용) 를 부여하여 문제 해결
[ 사전 개념 (4) - CIDR 개념 이해 ]
- 도메인간의 라우팅에 사용되는 인터넷 주소를 IP 주소 체계보다 능동적으로 할 수 있도록 지정
- 서브네팅은 CIDR의 부분집합 개념
- 203.230.7.0/24 가 의미하는 것은 무엇인가?
- 32bit 중에서 앞에서부터 24개의 bit가 고정되어 있음. (할당 가능한 부분은 8bit)
- 네트워크 아이디 : 203.230.7.0 / 할당 가능한 호스트 갯수 : 256(2^8)개 - 2 (가장 앞의 주소 NetworkAddress, 마지막은 broadcast를 위해 사용)
다음으로 아래의 VPC 학습에서 이해해야 할 부분을 먼저 확인하고,
워크북 학습을 통해 하나씩 답을 찾아보자.
[ VPC 공부에서 유의해야 할 부분 ]
1. 서브넷을 나누어서 인프라 자원을 배치 (가상의 공간을 주면, 원하는 형태로 쪼개서 사용)
2. 사설 IP를 부여받기 때문에(외부와 통신이 안됨), AWS에서 어떻게 이 자원들이 외부와 통신하는가?
3. 보안을 위해 보호해야 할 자원들은 어떻게 배치하는가? (사설 IP의 장점)
2.3 VPC
VPC에 대해 공부하기 전에, 먼저 IP 대역에 대해 살펴보자.
VPC와 IP 대역
VPC는 가상 네트워크 이므로, 사설 아이피 주소를 갖게 된다.
IPv4 에서 사설 IP 대역은 다음의 3가지 대역을 갖는다.
- 10.0.0.0/8
- 172.16.0.0/12
- 192.168.0.0/24
따라서 AWS에서 부여받은 IP 주소도 위의 3가지 대역 중 하나에 속하게 된다.
이때 하나의 VPC는 효율적인 자원관리를 위해
네트워크 대역, 서브넷 대역이 할당 가능하다.
( 10.0.0.0/8의 서브넷인 10.0.0.0/16도 VPC에 할당 가능 )
VPC의 실제 사용
VPC 는 아래와 같이 자원의 효율성을 위해 서브넷을 나누어 사용하도록 권장된다.
위의 그림을 살펴보면 사설 IP 대역이 10.0.0.0/16 으로 할당되어 있다.
이때 이를 10.0.1.0/24 , 10.0.2.0/24 , 10.0.3.0/24 로 다시 한번 서브네팅 한 것을 확인할 수 있다.
즉, VPC 자체도 이미 서브네팅이 된 상태이지만,
이를 한 번 더 서브넷을 나누어 할당함으로서 자원을 효율적으로 사용하는 것을 확인할 수 있다.
또한 서브넷은 각각 가용영역 한개를 할당하는 것을 볼 수 있다.
이때 유의해야 할 점을 살펴보자!
앞서 IP 주소에서 가장 앞의 주소는 NetworkAddress, 마지막 주소는 broadcast를 위해 사용되므로,
2개의 주소를 사용할 수 없다는 것을 알아보았다.
하지만 VPC의 서브넷 아이피 대역에서는 실제 네트워크와 달리,
총 5개의 아이피 주소를 호스트에 할당 할 수 없다!
첫 주소 : 서브넷의 네트워크 대역 (동일)
두번째 : VPC 라우터에 할당 (중요!)
세번째 : Amazon이 제공하는 DNS에 할당
미래를 위해 예약
브로드 캐스트 주소 (동일)
[ VPC 라우터를 쓰는 이유] 매우 중요 !!
VPC는 내부적으로 서브넷이 나누어져 있으므로, 기본적으로 서로 다른 LAN 임(통신 안됨)
이들끼리 통신하기 위해서는 라우터를 사용해야 하고, 따라서 VPC 내부 서브넷끼리도 통신이 가능하다!
VPC와 외부 통신
VPC는 사설 아이피 대역을 사용하므로,
기본적으로 공용 IP 대역과 통신이 불가능하다.
그렇다면 VPC 는 어떻게 외부와 통신할 수 있는 것일까?
이를 공부하기 위해 먼저 Public Subnet 과 Private Subnet의 개념을 살펴보자.
[ Public Subnet ]
- 주로 많이 쓰는 Subnet
- 외부와 통신이 원활하게 되는 서브넷 대역
- AWS의 Internet Gateway를 통해 퍼블릭 서브넷 사용
- public subent 이 Internet Gateway를 거치도록하여 외부와 통신 가능
- 라우팅 테이블을 만들어서 내가 원하는 서브넷에 연결하고, public subnet을 만듦
위의 그림에서는
- Destination : 10.0.0.0/16 (VPC 주소 = VPC로 들어올 때)
- Target : Local (내부 VPC 라우터가 알아서 잘 보내줄 것)
- Destination : 0.0.0.0/0(모든 IP주소를 의미 = 외부 모든 아이피 = 밖으로 나갈 때) public subnet
- Target : 만들어둔 인터넷 게이트웨이 식별자
[ Private Subnet ]
- 주로 사용하지 않음
- 아무런 조치를 취하지 않아, 외부와 통신이 되지 않는 서브넷 대역
- 사설 아이피는 부족한 아이피 주소 문제 해결과 높은 보안성 제공
- 릴리즈 서버의 경우는 실제 고객의 데이터가 저장되는 데이터베이스를 보호해야 함
- 따라서 데이터베이스를 Private Subnet에 배치하는 것이 필요
2.4 실습 진행하기
[ 사전 준비 ]
- 교육용 계정이 아닌, 생성한지 6개월이 지나지 않은 AWS 계정 생성
- 교육용은 서울 리전을 사용할 수 없음
실습 1) VPC를 이용한 EC2 구축
먼저 AWS에서 로그인 한 후, 검색창에 VPC를 입력하여 들어온다.
다음으로 VPC 생성 버튼을 클릭한다.
(이때 서울 리전으로 설정하는 것을 잊지 말자!)
다음으로 VPC 생성 설정을 다음과 같이 완료한다.
1) 생성할 리소스 : VPC 만으로 설정
2) 이름 태그 : 띄어쓰기는 - (하이픈) 을 이용하여 사용
3) IP 대역은 10.0.0.0/16으로 설정 (VPC는 계속 이 대역을 사용)
4) 태넌시와 태그는 그대로 사용
설정을 완료했으면 VPC 생성 버튼을 클릭하여 생성을 완료하자.
다음으로 서브넷을 만들어보자.
사이드바에서 서브넷을 찾고, 서브넷 생성 버튼을 클릭한다.
다음으로 서브넷 생성 설정을 아래와 같이 완료한다.
1) VPC ID : 앞서 만들었던 VPC로 설정
2) 서브넷 이름 : 의미 있는 서브넷 이름 설정
3) 가용 영역 : 아시아 태평양 (서울) 설정
4) CIDR : 10.0.1.0/24 (서브넷을 이어서 만들 때는 10.0.2.0/24, 10.0.3.0/24 … 설정)
마지막으로 하단의 서브넷 생성 버튼을 클릭하면 완료된다.
다음으로 인터넷 게이트웨이를 만들어보자.
상단의 인터넷 게이트웨이 생성 버튼을 클릭한다.
인터넷 게이트웨이는 별다른 설정 없이 이름만 지정해주면 된다
(보통 인터넷 게이트웨이는 IG로 줄여서 부른다.)
다음으로 앞서 만든 인터넷 게이트웨이를
VPC 에 연결해주자!
(리전이 서울에 있도록 계속해서 주의!)
상단의 VPC 연결 버튼을 클릭하면 다음과 같은 설정창이 뜬다.
앞서 만든 VPC로 VPC 연결 설정을 완료한 후
인터넷 게이트웨이 연결 버튼을 클릭하자
다음으로 라우팅 테이블을 수정해보자.
앞서서 public subnet은 외부로 나가기 위해
Internet Gateway를 거쳐야 한다는 것을 배웠다!
따라서 IG를 거치도록 라우팅을 서브넷에 연결해주면
public subent을 만들 수 있다.
(라우팅 테이블은 VPC 를 만들면 자동으로 만들어지므로, 수정만 하면 된다!)
아래와 같이 라우팅 테이블 > 해당되는 VPC 클릭 > 라우팅 버튼을 누른다
라우팅 테이블을 확인해보면,
라우팅 테이블에 외부로 나가는 설정이 없는 것을 확인할 수 있다.
우특의 라우팅 편집을 눌러 편집을 해보자.
라우팅 추가 버튼을 누르고
0.0.0.0/0(외부 아이피 대역)이 목적지일 때, 인터넷 게이트웨이로 나가도록 테이블을 추가한다.
마지막으로 외부와 통신이 완료되도록 세팅된 라우팅을 서브넷에 연결해주면,
서브넷이 이제 퍼블릭 서브넷으로 완성된다!
아래의 서브넷 연결 > 서브넷 연결 편집 버튼을 클릭한 후
해당 라우팅 테이블을 원하는 서브넷에 연결해주자
이렇게 하면 VPC의 기본적인 설정이 완료된다!
실습 2) 보안 그룹 생성하기
보안그룹을 생성하기 전에 아래의 개념을 짚고 넘어가보자.
[ 보안 그룹 ]
- 인스턴스 각각에 보안 설정을 할 수 있는 서비스
- 방화벽과 유사
[ 방화벽 ]
- 보안 규칙을 기반으로 네트워크 트래픽을 모니터링하고 제어하는 보안 시스템
- 수신 및 발신 트래픽의 통과 허용 여부 결정
이제 보안그룹을 생성해보자
좌측 사이드 바의 보안그룹 선택 > 보안그룹 생성 버튼을 클릭한다.
보안그룹 설정은 아래와 같이 완료한다.
1) 보안그룹 이름 : 식별할 수 있는 보안그룹 이름으로 설정
2) VPC : 앞서 만든 VPC 로 설정 (기본적으로는 Default VPC)
3) 인바운드 설정 : 위의 사진을 참고하여 설정 (소스는 IPv4로 설정)
8080번 포트는 백엔드 서버, API 서버와 같은 서버 측 컴포넌트에 대한 포트로 주로 이용하고, 3000번 포트는 주로 로컬 개발 환경에서 프론트 개발 서버를 호스팅 하는데 사용된다. 따라서 웹 어플리케이션을 호스팅하고 개발, 테스트 하기 위해 보안 그룹에서 열어둔다.
실습 3) EC2 생성하기
EC2를 검색한 후 인스턴스 시작 버튼을 클릭한다.
(서울 리전인 것을 계속 확인!)
다음으로 EC2 설정을 하나씩 완료해보자.
1) 이름 : 식별할 수 있는 이름 설정
2) OS : EC2의 운영체제 선택 (Ubuntu 20.04 또는 Ubuntu 18.04 추천)
3) 인스턴스 유형 : t2.micro t3.micro 등 micro 유형 선택
4) 키페어 : 키페어가 없는 경우 새 키 페어 생성한 후 설정 (아래 사진 참고)
네트워크 설정은 아래와같이 완료해주자.
마지막으로 인스턴스 시작 버튼을 누르면 EC2 생성이 완료된다.
실습 4) 탄력적 IP 설정하기
[ 탄력적 IP ]
- IG(Internet Gateway)를 거쳐 통신 시 부여받을 아이피 주소를 고정시킴
- 인스턴스가 종료되어도 다시 실행할 때 아이피 주소가 바뀌지 않음
- EC2를 중지 후 재실행을 하면 아이피 주소가 바뀜! (혼란 야기)
- EC2가 꺼지더라도 아이피 주소가 바뀌지 않도록 탄력적 IP를 연결해야 함
EC2 메뉴의 좌측 사이드바에서 탄력적 IP를 클릭한 후
탄력적 IP 주소 할당 버튼을 클릭한다.
기본 설정을 건드리지 않고 할당 버튼을 클릭하면 완료된다.
다음으로 앞서 만든 탄력적 아이피를 연결 해보자.
작업 > 탄력적 IP 주소 연결 버튼을 클릭한다.
다음으로 탄력적 아이피를 연결하고 싶은 인스턴스를 선택하고
연결 버튼을 클릭하여 완료한다.
다음으로 IntelliJ를 통해 원격접속을 해보자.
Tool > Deployment > Configuration을 선택한다.
+ 버튼을 누르고 SFTP를 선택한 후, 아래의 SSH configuration을 설정한다.
Configuration 설정은 다음과 같다.
1) Host: 연결하려는 EC2의 아이피주소를 기입
2) Username : ubuntu 입력
3) 키 페어로 인증 선택 (저장된 키 페어 입력)
다음으로 테스트 버튼을 클릭하여 확인한다.
처음에는 SFTP 커넥션 실패가 떴는데,
확인해보니 Private Key File 에 자동 다운로드 된 key file 을 넣어야 하는데,
기본 default 값으로 두어 에러가 발생했다!
( key file 은 pc의 download 폴더에 자동으로 다운로드 된다! )
제대로 된 key file을 넣으니 커넥션 성공!
실습 5) NGINX 설치하고 브라우저에서 접속하기
원격 접속을 한 터미널에서 nginx 설치 후,
(local 이 아님을 주의)
브라우저에서 EC2 아이피 주소로 접속하면
브라우저에서 성공화면을 확인할 수 있다!
[NGINX 설치 명령어]
sudo apt update
sudo apt ugrade -y
sudo apt install nginx -y
(처음에 보안으로 인해 경고 문구가 뜨니 확인 버튼을 누르면 아래의 화면으로 넘어간다!)
최용욱 'UMC Server 2주차 워크북' 내용을 기반으로 작성하였습니다.
'[UMC Ewha 5th] Server - SpringBoot' 카테고리의 다른 글
[UMC Server] Chapter 6. API URL의 설계 & 프로젝트 세팅 (0) | 2023.11.15 |
---|---|
[UMC Server] Chapter 5. 실전 SQL - 어떤 Query를 작성해야 할까? (0) | 2023.11.07 |
[UMC Server] Chapter 4. Database 설계 & AWS RDS 설정 (1) | 2023.11.01 |
[UMC Server] Chapter 3. Web Server & Web application Server(WAS), Reverse Proxy (1) | 2023.10.09 |
[UMC Server] Chapter 1. 서버란 무엇인가(소켓&멀티 프로세스) (1) (0) | 2023.09.27 |