AWS (4)

 

 

 

예전에 TIL 에서 작성했던 글 중에 AWS VPC와 subnet에 관해 정리한 글이 있어서 AWS 카테고리에 다시 정리해서 올린다. 🙂

 

 

 

 

 

🍹 VPC 란?

 

VPC : Vitual Private Cloud 서비스

클라우드 내 private 공간을 제공해서 클라우드를 public과 private 영역으로 논리적으로 분리할 수 있게 해준다.

 

 

 

🍹 VPC 구성 요소와 주요 용어

 

 

🍺 IP Address

 

IP는 컴퓨터 네트워크에서 장치들이 서로를 식별하기 위해 사용하는 특수한 번호이다.

OSI의 3계층인 네트워크 계층에 해당된다.

IPv4, IPv6로 나뉘어 있으며 혼용하여 사용하고 있다.

IPv4는 각 8비트, IPv6는 각 32비트로 4개의 옥텟으로 이루어져 있다.

네트워크 주소와 호스트 주소로 나뉘어 진다.

 

🌱 네트워크 주소 : 호스트들을 모은 네트워크를 지칭하는 주소이다. 네트워크 주소가 동일한 네트워크를 로컬 네트워크라고 한다.

🌱 호스트 주소 : 하나의 네트워크 내에 존재하는 호스트를 구분하기 위한 주소

 

네트워크 주소와 호스트 주소를 나누는 경계점이 고정되어 있지 않다.

IP주소는 네트워크 주소와 호스트 주소를 나누는 경계점에 따라 클래스(Class)를 나눈다.

호스트 IP 개수에 따라 네트워크의 크기를 다르게 할당할 수 있다.

클래스는 총 5가지(A, B, C, D, E)로 나뉘어져 있다.

D와 E 클래스는 멀티캐스트용, 연구 개발을 위한 예약 IP라서 보통은 사용하지 않는다.

 

A, B, C 클래스의 맨 앞자리 숫자만 보면 무슨 클래스인지 식별이 가능하다.

클래스풀(Classful) 방식이라고 부른다.

 

 

 

🍺 CIDR(Classless inter-domain routing)

 

클래스 없는 도메인 간 라우팅 기법으로 사이더라고 불린다.

현재 국제 표준의 IP 주소 할당 방법이다.

클래스풀 방식을 대체한 방식이다.

 

기존에는 클래스에 따라 정해진 Network Address와 Host Address를 사용했지만 CIDR은 원하는 블록만큼 Network Address를 지정할 수 있다.

AWS의 VPC는 CIDR 방식이다.

 

ex) 172.16.0.0/24

-> /24 이 서브넷 블록, 네트워크 주소에 앞에서부터 24비트인 172.16.0 부분만 할당한다는 의미이다.

 

AWS VPC에서는 /16 블록을 사용하도록 권장하고 있다.

※ 추가 자료) AWS VPC 기본 및 연결 옵션

 

 

 

🍺 서브넷(Subnet)

 

Subnetwork의 줄임말이다.

IP 네트워크의 논리적 하위 부분을 가리킴

서브넷을 통해 하나의 네트워크를 여러 개로 나눌 수 있음

VPC를 사용하면 필요에 따라 다양한 서브넷을 생성할 수 있음

  • 퍼블릭 서브넷: 인터넷을 통해 연결할 수 있는 서브넷
  • 프라이빗 서브넷: 인터넷을 연결하지 않고, 보안을 유지하는 배타적인 서브넷
  • VPN only 서브넷 : 기업 데이터 센터와 VPC를 연결하는 서브넷

 

AWS VPC

 

 

서브넷은 VPC의 CIDR 블록을 이용해 정의된다.

최소 크기의 서브넷은 /28 이다.

서브넷은 AZ(Availability Zone, 가용 영역)당 최소 하나를 사용할 수 있고, 여러 개의 AZ에 연결되는 서브넷은 만들 수 없다.

 

※ 참고) AWS 예약된 서브넷

AWS가 확보한 서브넷 중 처음 네 개와 마지막 IP 주소는 인터넷 네트워킹을 위해 예약되어 있다. 예를 들어 10.0.0.0/24 체계의 CIDR 블록이 있는 서브넷에서 10.0.0.0, 10.0.0.1, 10.0.0.2, 10.0.0.3, 10.0.0.255 는 IP 주소가 예약되어 있다.

 

 

🍺 라우팅 테이블(Routing Table)

 

트래픽의 전송 방향을 결정하는 라우트와 관련된 규칙을 담은 테이블이다.

목적지까지 최적의 경로로 데이터 패킷을 전송하기 위한 모든 정보를 담고 있다.

모든 서브넷은 라우팅 테이블을 가진다.

하나의 테이블 규칙을 여러 서브넷에 연결할 수 있다.

서브넷 생성 후 별도의 라우팅 테이블을 생성하지 않으면 클라우드가 자동으로 VPC의 메인 라우팅 테이블과 연결한다.

 

 

 

 

 

'AWS' 카테고리의 다른 글

AWS의 EC2 인스턴스 종료? 중지?  (0) 2022.09.03

 

 

 

 

EC2 인스턴스를 종료하면 인스턴스가 삭제된다❗️❗️❗️❗️

 

 

AWS를 팀원과 설정하고 생성한 이후에 팀원에게서 "ec2 종료 누르면 삭제되니까 끄실 때는 중지하셔야 될거에요" 라는 말을 들었다. 😱

Pre Project 진행하면서 free-tier 사용 중이라 서버 테스트 제대로 하기 전까진 꺼두려고 했다...

그런데 설정 다 마치고 서버 올렸는데 여기서 "인스턴스 종료" 를 눌렀으면... 다시 설정해야하는 귀찮음을 겪었을 것이다.

웃기게도 aws의 '인스턴스 종료'는 우리가 아는 컴퓨터 종료가 아니라 삭제의 개념이다!

인스턴스를 잠시 끄는 것은 '인스턴스 중지' 이다.

왜 헷갈리게 삭제를 종료라고 사용하는지는 모르겠다...

 

AWS 공식 문서에서도 인스턴스를 종료한 이후에는 해당 인스턴스에 연결하거나 재시작할 수 없다고 써져있다.

AWS는 왜이렇게 복잡하게 해놨는지 모르겠다.

자사 서비스를 쓰려면 공부를 하고 쓰라는건가..?

AWS 자격증을 따야지만 쓸 수 있는 겁니까????!!!!!

 

유명한 aws 밈

 

 

심지어 인스턴스 생성할 때 과금안하게 설정하려면 많은 조사가 필요했다. 그래서 전혀 과금이 안되게 만들었다. (대신에 퍼포먼스가 너무 심각하다... 이건 따로 다시 포스팅을 할 예정이다.)

 

 

 

결론

 

혹시라도 이 글을 보시는 분들은 실수라도 "인스턴스 종료"를 눌러서 인스턴스를 날리지 않도록 조심하세요.

EC2 서버를 잠시 끄려면 "인스턴스 중지" 상태로 놓고 다시 "시작"을 하세요...!!

 

 

 

'AWS' 카테고리의 다른 글

AWS VPC? Subnet?  (0) 2022.09.27

 

 

 

 

 

🧊 프록시 서버(Proxy Server)

 

 

Proxy는 대리라는 뜻

클라이언트가 서버와 소통할 때 서버와 바로 통신하지 않고 프록시 서버를 통해 서버에 접근할 수 있다. ➡️ 대리 서버

 

일반 사용자는 지역이 제한되어 있는 서비스를 이용하기 위해 IP를 우회하거나, 캐시를 통해 더 빠른 이용을 하기 위해 프록시 서버를 사용한다.

 

 

🍹 프록시 서버의 종류

 

위치에 따라 Forward ProxyReverse Proxy 두가지로 나뉜다.

 

 

 

🍺 Forward Proxy

 

Forward Proxy

 

클라이언트 가까이에 위치한 프록시 서버

클라이언트를 대신해 서버에 요청을 전달한다.

주로 캐싱을 제공하는 경우가 많아 사용자가 빠른 서비스 이용을 할 수 있도록 도와준다.

 

 

➡️ Forward Proxy를 사용할 경우 이점

 

✅ 캐싱을 통해 빠른 서비스 이용 가능

여러 클라이언트가 동일한 요청을 보내는 경우 첫 응답 결과 데이터를 캐시에 저장해놓고, 이후 서버에 재요청을 보내지 않아도 다른 클라이언트에게 빠르게 전달할 수 있다.

 

✅ 보안

서버에서 클라이언트의 IP추적이 필요한 경우 클라이언트의 IP가 아닌 프록시 서버의 IP가 전달된다. 서버가 응답받은 IP는 프록시 서버의 IP이기 때문에 서버에게 클라이언트를 숨길 수 있다.

 

 

 

🍺 Reverse Proxy

 

Reverse Proxy

 

서버 가까이에 위치한 프록시 서버이다.

서버를 대신하여 클라이언트에 응답을 제공한다.

 

 

➡️ Reverse Proxy 사용할 경우 이점

 

✅ 분산처리

클라이언트-서버 구조에서 사용자가 많아져 서버에 과부하가 올 경우를 위해 부하를 분산할 수 있다. 프록시 서버로 요청이 들어오면 여러대의 서버로 요청을 나누어 전달한다.

 

✅ 보안

Forward Proxy와는 반대로 클라이언트에게 서버를 숨길 수 있다. 클라이언트 입장에서는 요청을 보내는 서버가 프록시 서버이므로 실제 서버 IP 주소가 노출되지 않는다.

 

 

 

🧊 로드밸런서

 

웹 서버로 너무 많은 사용자가 요청을 보낼 경우 서버는 감당하지 못하고 과부하가 오게 된다.

과부하가 올 경우 서비스를 정상적으로 제공하지 못하는 문제가 생긴다.

이를 해결하기 위해 서버의 하드웨어를 업그레이드 하는 방법과 서버의 개수를 늘리는 방법이 있다.

 

 

 

🍹 Scale-Up

 

물리적으로 서버의 사양을 업그레이드하는 방법이다. (HDD, 메모리 등)

수직적 스케일링

 

🍺 장점

서버의 수를 늘리지 않고 프로그램 구현에 있어 변화가 필요없다.

 

🍺 단점

서버의 사양을 높이는 데는 굉장히 높은 비용이 든다.

하드웨어의 업그레이드에는 한계가 있다.

 

 

🍹 Scale-Out

 

서버의 개수를 늘려 하나의 서버에 줄 부하를 분산시키는 방법이다.

수평적 스케일링

많은 요청이 오더라도 여러대의 서버가 나눠서 처리를 하기 때문에 서버의 사양을 높이지 않고도 비교적 저렴한 방법으로 부하를 처리할 수 있다.

 

Scale-Out 방법으로 서버를 여러대 있을 경우 서버에 요청을 나눠 처리할 수 있는 역할이 필요하다. ➡️ 로드 밸런서

여러 서버에 교통정리를 해주는 기술 혹은 프로그램을 로드 밸런싱이라고 부른다.

 

※ 추가학습) Scale-Up vs Scale-Out

 

 

 

🍹 로드 밸런서 종류

 

클라이언트의 요청을 어떤 기준으로 분산하냐에 따라 네종류로 나뉜다.

 

L2 : 데이터 전송 계층에서 Mac 주소를 바탕으로 로드 밸런싱한다.

L3 : 네트워크 계층에서 IP 주소를 바탕으로 로드 밸런싱한다.

L4 : 전송 계층에서 IP주소와 Port를 바탕으로 로드 밸런싱한다.

L7 : 응용 계층에서 클라이언트의 요청을 바탕으로 로드 밸런싱한다. ex) 엔드포인트

 

 

 

 

🧊 오토스케일링 (AWS의 Auto Scaling 기준)

 

오토스케일링은 Scale-Out 방식으로 서버를 증설할 때 자동으로 서버(리소스)를 관리해주는 기능이다.

클라이언트의 요청이 많아져 서버의 처리 요구량이 증가하면 새 리소스를 자동으로 추가하고 반대로 처리 요구량이 줄어들면 리소스를 감소시켜 효율적으로 관리해준다.

 

 

🍹 Auto Scaling의 장점

 

🍺 동적 스케일링

사용자의 요구 수준에 따라 리소스를 동적으로 스케일링 할 수 있다.

스케일 업 할 수 있는 서버의 수에 제한이 없고, 필요한 경우 즉시 수백~수만대로 늘릴 수 있다.

 

🍺 로드 밸런싱

로드 밸런서와 함께 사용하면, 다수의 EC2 인스턴스에게 워크로드를 효과적으로 분배할 수 있다. 사용자가 정의한 규칙에 따라 워크로드를 효과적으로 관리할 수 있다.

워크로드(Workloads) :  애플리케이션이나 백엔드 프로세스 같이 비즈니스 가치를 창출하는 리소스 및 코드 모음

 

🍺 타겟 트래킹

사용자는 특정 타겟에 대해서만 Auto Scaling을 할 수 있다.

사용자가 설정한 타겟에 맞춰 EC2 인스턴스의 수를 조정한다.

 

🍺 헬스 체크와 서버 플릿 관리

EC2 인스턴스의 헬스 체크 상태를 모니터링 할 수 있다.

특정 인스턴스의 문제가 감지되면 자동으로 다른 인스턴스로 교체한다.

 

 

서버 플릿(Fleet)

Fleet은 직역하면 함대라는 의미이다.

다수의 EC2 서버에서 애플리케이션을 호스팅하는 경우,

호스팅하고 있는 일련의 EC2 집합을 AWS는 서버 플릿(Fleet)이라고 부른다.

Auto Scaling은 적정 수준의 서버 플릿 용량을 유지하는데 도움을 준다.

Auto Scaling은 한대 또는 그 이상의 서버가 다운되면 서버 인스턴스 처리용량을 유지하기 위해 부족한 만큼 새로운 서버를 추가로 실행시키는 방식으로 서버 플릿을 유지한다.

 

※ 참고자료) EC2 Fleet 설명서

 

 

 

🍹 EC2 Auto Scaling 활용

 

Auto Scaling은 EC2 인스턴스 뿐만 아니라 다른 인스턴스와도 결합이 가능하다.

EC2 Auto Scaling은 오직 EC2 서버(리소스)만 대상으로 한다.

 

 

🍺 시작 템플릿(Launch Template)

시작 템플릿을 통해서 인스턴스를 확장할 때 구성 정보를 쉽게 적용할 수 있다.

인스턴스를 늘릴 때마다 매번 parameter들을 설정할 필요없이 시작 템플릿으로 쉽게 설정하고 확장할 수 있다.

시작 템플릿은 AMI ID, 인스턴스 타입, 네트워크 세팅 등의 인스턴스 생성시 필요한 정보를 담고 있다.

여러 시작 템플릿 버전을 만들어서 서로 다른 launch parameter를 가진 템플릿을 여러개 만들수있다.

 

※ AWS 공식문서

 

 

🍺 Auto Scaling 그룹

 

스케일업 및 스케일다운 규칙의 모음이다.

EC2 인스턴스 시작부터 삭제하기까지의 모든 동작에 대한 규칙과 정책을 담고 있다.

 

 

🍺 Scaling 유형

 

🥑 인스턴스 레벨 유지

기본 스케일링 계획이라고 불린다.

항상 실행 상태를 유지하고자 하는 인스턴스의 수를 지정할 수 있다.

일정한 수의 인스턴스가 필요한 경우 최소, 최대, 원하는 용량에 동일한 값을 설정할 수 있다.

 

🥑 수동 스케일링

기존 Auto Scaling 그룹의 크기를 수동으로 변경할 수 있다.

수동 스케일링을 선택하면 사용자가 직접 콘솔이나, API, CLI 등을 이용해 수동으로 인스턴스를 추가하거나 삭제해야 한다. 이 방식은 추천하지 않는 방식이다.

 

🥑 일정별 스케일링

예측 스케일링 트래픽의 변화를 예측할 수 있고, 특정 시간대에 어느 정도의 트래픽이 증가하는지 패턴을 파악하고 있다면 일정별 스케일링을 사용하는 것이 좋다.

 

🥑 동적 스케일링

수요 변화에 대응하여 Auto Scaling 그룹의 용량을 조절하는 방법을 정의한다.

CloudWatch가 모니터링 하는 지표를 추적하여 경보 상태일 때 수행할 스케일링 규칙을 정한다.

예를 들어 CPU 처리 용량의 80% 수준까지 급등한 상태가 5분 이상 지속될 경우 Auto Scaling이 작동돼 새 서버를 추가한다.

동적 스케일링 정책을 정의할 때는 스케일 업과 스케일 다운 두 가지의 정책을 작성해야 한다.

 

 

 

 

🧊 TOMCAT

 

Tomcat

 

🍹 Tomcat 이란?

 

Apache사에서 개발한 서블릿 컨테이너만 있는 오픈소스 웹 애플리케이션 서버이다.

 

 

🍺 Tomcat의 특징

 

🥑 자바 애플리케이션을 위한 대표적인 오픈소스 WAS(Web Application Server)이다.

🥑 오픈소스이기 때문에 라이선스 비용 부담없이 사용할 수 있다.

🥑 독립적으로도 사용 가능하며 Apache 같은 다른 웹 서버와 연동하여 함께 사용할 수 있다.

🥑 Spring Boot의 내장 서버이기 때문에 별도의 설치 과정 없이 사용할 수 있다.

🥑 spring-boot-starter-web 모듈 속에 내장되어있다.

 

 

 

🧊 Jetty

 

jetty

 

🍹Jetty 란?

 

Jetty는 이클립스 재단의 HTTP 서버이자 자바 서블릿 컨테이너 이다.

 

 

🍺 Jetty의 특징

 

🥑 2009년 이클립스 재단으로 이전하며 오픈소스 프로젝트로 개발되었다.

🥑 Jetty는 타 웹 애플리케이션 대비 적은 메모리를 사용하여 가볍고 빠르다.

🥑 애플리케이션에 내장 가능하다.

🥑 경량 웹 애플리케이션으로 소형 장비, 소규모 프로그램에 더 적합하다.

 

 

🍹 Tomcat에서 Jetty로 서버 변경하기

 

build.gradle 파일

➡️ spring-boot-starter-web 의존성 추가된 부분에 Tomcat을 제외시켜준다.

dependencies {
	implementation ('org.springframework.boot:spring-boot-starter-web') {
		exclude module: 'spring-boot-starter-tomcat'
	}
}

 

Jetty 의존성을 추가한다.

implementation ('org.springframework.boot:spring-boot-starter-jetty')

 

Tomcat을 모듈에서 제외시켰고 Jetty 모듈을 추가했기 때문에 서버를 실행할 때 Jetty로 실행되는 것을 확인할 수 있다.

 

 

 

🧊 NGINX

 

NGINX

 

🍹 NGINX란?

 

🥑 NGINX는 가볍고 높은 성능을 보이는 오픈소스 웹 서버 소프트웨어이다.

🥑 Igor Sysoev 라는 러시아 개발자가 개발했다.

🥑 동시접속 처리에 특화된 웹 서버 프로그램이다.

🥑 Apache보다 동작이 단순하고 전달자 역할만 하기 때문에 동시접속 처리에 특화되어 있다.

🥑 Nginx는 클라이언트에게 정적 리소스를 빠르게 응답 하기 위한 웹 서버로 사용할 수 있다.

 

 

🍺 NGINX의 특징

 

🥑 트래픽이 많은 웹 사이트의 확장성을 위해 개발된 고성능 웹 서버이다.

🥑 비동기 이벤트 기반으로 적은 자원으로 높은 성능과 높은 동시성을 위해 개발되었다.

🥑 다수의 클라이언트 연결을 효율적으로 처리할 수 있다.

🥑 클라이언트와 서버 사이에 존재하는 리버스 프록시 서버로 사용할 수 있다.

🥑 Nginx를 클라이언트와 서버 사이에 배치하여 무중단 배포를 할 수 있다.

 

 

🍹 Spring Boot와 Nginx 연동하기

 

nginx를 이용해서 Spring Boot 앞에 프록시 서버를 구축할 수 있다.

그래서 클라이언트가 실제로 통신하는 포트를 Spring Boot 서버와 분리할 수 있다.

 

클라이언트 - NGINX - Spring Boot

 

 

🍺 NGINX 설치 및 실행 (Mac OS)

 

✅ 설치

brew install nginx

 

✅ 실행

brew services start nginx

 

✅ 중단

brew services stop nginx

 

 

 

🍺 NGINX 설정 파일(.conf 파일) 찾기

 

nginx의 설정파일(.conf 파일)로 여러가지 설정을 변경할 수 있다.

(사용할 포트번호, 연결할 서버의 포트 번호 등)

 

✅ 설정파일 위치 찾기

nginx -t

 

텍스트 편집기 실행 후 설정 변경

nano /opt/homebrew/etc/nginx/nginx.conf

 

 

 

🍺 NGINX로 Proxy Server 만들기

 

설정파일에 아래와 같이 코드 작성

 

http {
	...
	server{
		listen 80; #8080 포트에서 80번 포트로 변경한다
		...
		location / {
			root html;
			index index.html index.htm;
			proxy_pass http://localhost:8080; # 요청을 8080 포트로 전달한다
			proxy_set_header X-Real-IP $remote_addr;
			proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
			proxy_set_header Host $http_host;
		}
		...
	}
}

 

 

설정파일 수정 뒤에는 재시작을 해준다.

brew services restart nginx

 

 

 

🍹 NGINX를 Load Balancer로 활용하기

 

 

NGINX를 통해 로드밸런싱을 구성할 수 있다.

로드밸런싱에 추가할 서버를 실행한다.

NGINX 설정 파일에 들어가서 서버 그룹을 만들고 해당 서버 포트 번호를 추가해준다.

 

http {
	upstream backend {
		server localhost:{포트번호1};	#로드밸런싱할 서버1
		server localhost:{포트번호2};	#로드밸런싱할 서버2
		...
	}
	location / {
		proxy_pass http://backend;
	}
}

 

upstream 뒤에 적은 backend는 지정한 서버 그룹이름이다.

원하는 그룹이름으로 적으면 된다.

 

추가자료) nginx 공식 문서

 

 

 

 

🧊 VPC

 

 

🍹 VPC 란?

 

VPC : Vitual Private Cloud 서비스

클라우드 내 private 공간을 제공해서 클라우드를 public과 private 영역으로 논리적으로 분리할 수 있게 해준다.

 

 

 

🍹 VPC 구성 요소와 주요 용어

 

 

🍺 IP Address

 

IP는 컴퓨터 네트워크에서 장치들이 서로를 식별하기 위해 사용하는 특수한 번호이다.

OSI의 3계층인 네트워크 계층에 해당된다.

IPv4, IPv6로 나뉘어 있으며 혼용하여 사용하고 있다.

IPv4는 각 8비트, IPv6는 각 32비트로 4개의 옥텟으로 이루어져 있다.

네트워크 주소와 호스트 주소로 나뉘어 진다.

 

🌱 네트워크 주소 : 호스트들을 모은 네트워크를 지칭하는 주소이다. 네트워크 주소가 동일한 네트워크를 로컬 네트워크라고 한다.

🌱 호스트 주소 : 하나의 네트워크 내에 존재하는 호스트를 구분하기 위한 주소

 

네트워크 주소와 호스트 주소를 나누는 경계점이 고정되어 있지 않다.

IP주소는 네트워크 주소와 호스트 주소를 나누는 경계점에 따라 클래스(Class)를 나눈다.

호스트 IP 개수에 따라 네트워크의 크기를 다르게 할당할 수 있다.

클래스는 총 5가지(A, B, C, D, E)로 나뉘어져 있다.

D와 E 클래스는 멀티캐스트용, 연구 개발을 위한 예약 IP라서 보통은 사용하지 않는다.

 

A, B, C 클래스의 맨 앞자리 숫자만 보면 무슨 클래스인지 식별이 가능하다.

클래스풀(Classful) 방식이라고 부른다.

 

A 클래스

Network Address Host Address Host Address Host Address
0 ~ 127 0 ~ 255 0 ~ 255 0 ~ 255

0.0.0.0은 자체 네트워크를 의미하고 127.0.0.0 ~ 127.255.255.255는 자기자신을 가리키기 위해 예약된 IP 주소이기 때문에 사용할 수 없다.

 

B 클래스

Network Address Network Address Host Address Host Address
128 ~ 191 0 ~ 255 0 ~ 255 0 ~ 255

 

C 클래스

Network Address Network Address Network Address Host Address
192 ~ 223 0 ~ 255 0 ~ 255 0 ~ 255

 

모든 클래스의 맨 앞 주소는 네트워크 주소로, 맨 뒤 주소는 브로드캐스트 주소로 사용하므로 실제 사용할 수 있는 IP는 2^n - 2이다.

 

 

🍺 CIDR(Classless inter-domain routing)

 

클래스 없는 도메인 간 라우팅 기법으로 사이더라고 불린다.

국제 표준의 IP 주소 할당 방법이다.

클래스풀 방식을 대체한 방식이다.

 

기존에는 클래스에 따라 정해진 Network Address와 Host Address를 사용했지만 CIDR은 원하는 블록만큼 Network Address를 지정할 수 있다.

AWS의 VPC는 CIDR 방식이다.

 

ex) 172.16.0.0/24

-> /24 이 서브넷 블록, 네트워크 주소에 16비트만 할당한다는 의미이다. 총 2^인 개의 IP 주소를 사용할 수 있다.

 

AWS VPC에서는 /16 블록을 사용하도록 권장하고 있다.

※ 추가 자료) AWS VPC 기본 및 연결 옵션

 

 

🍺 서브넷(Subnet)

 

Subnetwork의 줄임말이다.

IP 네트워크의 논리적 하위 부분을 가리킴

서브넷을 통해 하나의 네트워크를 여러 개로 나눌 수 있음

VPC를 사용하면 필요에 따라 다양한 서브넷을 생성할 수 있음

  • 퍼블릭 서브넷: 인터넷을 통해 연결할 수 있는 서브넷
  • 프라이빗 서브넷: 인터넷을 연결하지 않고, 보안을 유지하는 배타적인 서브넷
  • VPN only 서브넷 : 기업 데이터 센터와 VPC를 연결하는 서브넷

 

VPC

 

서브넷은 VPC의 CIDR 블록을 이용해 정의된다.

최소 크기의 서브넷은 /28 이다.

서브넷은 AZ(Availability Zone, 가용 영역)당 최소 하나를 사용할 수 있고, 여러 개의 AZ에 연결되는 서브넷은 만들 수 없다.

 

AWS가 확보한 서브넷 중 처음 네 개와 마지막 IP 주소는 인터넷 네트워킹을 위해 예약되어 있다. 예를 들어 10.0.0.0/24 체계의 CIDR 블록이 있는 서브넷에서 10.0.0.0, 10.0.0.1, 10.0.0.2, 10.0.0.3, 10.0.0.255 는 IP 주소가 예약되어 있다.

 

 

🍺 라우팅 테이블(Routing Table)

 

트래픽의 전송 방향을 결정하는 라우트와 관련된 규칙을 담은 테이블이다.

목적지까지 최적의 경로로 데이터 패킷을 전송하기 위한 모든 정보를 담고 있다.

모든 서브넷은 라우팅 테이블을 가진다.

하나의 테이블 규칙을 여러 서브넷에 연결할 수 있다.

서브넷 생성 후 별도의 라우팅 테이블을 생성하지 않으면 클라우드가 자동으로 VPC의 메인 라우팅 테이블과 연결한다.

 

 

 

 

 

 

 

 

 

 

Cloud Service 대표 예시

 

 

 

만든 웹 서비스를 배포하지 않는다면... 더 이상 의미를 가질 수 없다.

따라서 웹 개발자라면 배포에 대한 기본 지식을 탑재하고 있고 혼자서 간단한 배포정도는 할 줄 알아야 한다.!

 

요즘엔 서버실을 직접 구축하기 보다 비용, 시간 면에서 유리한 배포를 위한 클라우드 서비스를 이용한다.

가장 일반적으로 사용하는 클라우드 서비스는 Amazon Web Service(AWS) 이다.

많은 국내외 기업에서 배포를 위해 AWS를 사용하기 때문에 취업시장에서 AWS를 잘 다룰 수록 유리하다.

 

AWS 배포를 배우려면..

  1. 3 Tier Architecture 구성을 이해하고 있어야 한다.
  2. Linux 운영체제에서 개발 환경을 처음부터 구축할 수 있어야 한다.

 

 

 

AWS

 

 

✓ 클라우드 서비스 업체의 장점

 

  • 신속한 인프라 구축
  • 유연한 인프라 관리
  • 예상치 못한 트래픽 폭주 대응
  • 손쉬운 글로벌 서비스
  • 강력한 보안과 장애 없는 서비스
  • 합리적인 요금제

 

 

이제 클라우드를 통해 클릭 몇번, 또는 코드 몇줄로 거대한 서버실에 해당하는 네트워크를 구축할 수 있게 되었다. 

자체 서버실을 유지, 운영, 구축하기 위한 초기비용이 들었다면 클라우드 서비스를 이용하는 지금은 사용한 만큼만 비용을 지불하는 온디맨드(On-Demand) 방식의 요금제가 도입되어 보다 합리적으로 서비스 운영이 가능하게 되었다.

 

 

 

 

Cloud Computing

 

 

➤ 클라우드 등장 이전

 

기존 서버의 방식은 서버실(전산실)에 여러대의 서버 컴퓨터를 배치해서 직접 관리했다.
➡️ On-premise(온프레미스) 방식

그런데 만약 서버에 요청수가 늘어나 수용 능력이 한계에 도달하게 되면 어떻게 했을까?

직접 컴퓨터의 개수를 늘리거나 컴퓨터 성능을 업그레이드 했다.

 

기존 방식의 한계

주기적인 유지 관리가 필요하다.

공간의 한계가 있다.

 

그래서 일부 기업에서는 데이터 센터라는 건물을 세우기 시작했다.

이때부터 데이터 센터의 유휴(사용 x)자원을 대여하는 서비스가 등장했다.

 

 

➤ Cloud 등장

 

물리적인 컴퓨터가 아닌 가상 컴퓨터를 대여한다.

가상화(Vitualization)기술의 발전으로 가상 컴퓨터를 제공한다.

 

 

 

▶️ Cloud의 장점

 

🍎 서버의 자원과 공간, 네트워크 환경을 제공한다.

🍎 필요할 때마다 컴퓨팅 능력을 유연하게 조절 가능하다.

🍎 사용한 만큼의 요금만 지급하면 된다.

🍎 다른 컴퓨터로 즉시 이주(migration)가 가능하다.

 

 

▶️ Cloud의 단점

 

클라우드 서비스에 종속되어 클라우드 서비스에 문제가 생기면 내 서비스에도 영향을 미친다.

 

 

➤ Cloud 서비스 형태

 

 

출처: RedHat https://www.redhat.com/ko/topics/cloud-computing/iaas-vs-paas-vs-saas

 

▶️ IaaS(Infrastructure-as-a-Service, 서비스로서의 인프라)

 

  • 종량제 서비스
  • 제공업체에서 storage 관리와 액세스, vitualization, 서버, 네트워크 등 인프라 서비스를 클라우드로 제공
  • 장점 : 개발 및 테스트 환경의 구축 및 제거가 빠르고 유연하다.
  • 단점 : 제공업체의 보안 문제 가능성, 제공업체가 여러 클라이언트와 인프라 리소스를 공유해야 하는 멀티 테넌시(Multitenancy) 시스템 및 서비스 신뢰성
  • 예시 : AWS, Microsoft Azure, Google Cloud

 

✅ Multitenancy(멀티 태넌시) : 단일 소프트웨어 인스턴스로 서로 다른 여러 사용자 그룹에 서비스를 제공할 수 있는 소프트웨어 아키텍처

 

 

▶️ PaaS(Platform-as-a-Service, 서비스로서의 플랫폼)

 

  • 제공업체가 자체 인프라에서 하드웨어와 소프트웨어를 호스팅한다.
  • 호스팅한 플랫폼을 사용자에게 통합 솔루션, 솔루션 스택 또는 인터넷을 통한 서비스로 제공한다.
  • 인프라나 플랫폼 구축, 유지관리할 필요 없이 사용자가 자체 애플리케이션을 관리, 실행하는데 집중할 수 있게 해준다.
  • 빌드 및 배포를 위한 환경이 사용자에게 제공된다.
  • 예시 : AWS Elastic Beanstalk, Heroku, Red Hat OpenShift

 

 

▶️ SaaS(Software-as-a-Service, 서비스로서의 소프트웨어)

 

  • 가장 포괄적인 형식의 클라우드 컴퓨팅 서비스
  • 모든 애플리케이션은 제공업체가 관리하며 웹 브라우저를 통해 제공한다.
  • 제공업체가 소프트웨어의 전반적인 관리 작업을 처리하며, 사용자는 대시보드 또는 API를 통해 애플리케이션에 연결한다.
  • 장점 : 시간과 유지관리를 훨씬 줄일 수 있다.
  • 단점 : 제어, 보안 및 성능과 관련된 비용이 소요 ➡️ 신뢰할 수 있는 제공업체 선정이 중요
  • 예시 : Dropbox, Salesforce, Google Apps

 

 

※ 미들웨어(Middleware)란?

 

미들웨어는 서로 다른 애플리케이션간의 통신에 사용되는 소프트웨어를 말한다.

주로 컴퓨터 제작회사가 운영체제와 응용 소프트웨어의 중간에서 조정과 중개의 역할을 수행하도록 만든 소프트웨어이다.

데이터관리, 애플리케이션 서비스, 메시징, 인증 및 API 관리를 주로 처리한다.

클라우드 컴퓨팅에서 미들웨어는 고도로 분산된 플랫폼 전반에서 원활하고 일관되게 작동하는 애플리케이션 환경을 지원한다.

 

참고) RedHat 홈페이지 IaaS, PaaS, SaaS 비교글

 

 

 

Deploy

 

 

➤ Deployment

 

전개, 배포라는 의미이다.

배포란 개발한 서비스를 이용자가 이용가능하게 하는 과정이다.

 

개발부터 배포까지는 보통 크게 4단계로 이루어져 있다.

Development ➡️ Integration ➡️ Staging ➡️ Production

 

 

▶️ Development

 

🥝 Local 컴퓨터 환경에서 개발 및 테스트

🥝 더미 데이터를 이용한 테스트

🥝 변경 사항이 있어도 문제가 되지 않음

🥝 모든 구성원이 각자의 환경에서 진행

 

 

▶️ Integration

 

🥝 각자의 환경에서 개발된 부분을 취합

🥝 코드간 Conflict가 없는지 확인하는 단계

🥝 작성한 코드가 다른 코드에 문제를 발생시키지 않는지 확인

 

 

▶️ Staging

 

🥝 Production 단계와 가장 유사한 환경에서 테스트

🥝 실제 데이터를 복사해서 테스트에 사용

🥝 모든 관계자들에게 검증하는 단계

 

 

▶️ Production

 

  • 개발환경과는 구분된 환경
  • 실제 데이터를 이용
  • 실제로 서비스가 제공되는 단계

 

 

✅ 배포에서는 환경의 차이를 이해하고 환경설정을 코드와 분리하는 것이 중요하다.

 

 

➤ 작성한 코드가 다른 환경에서도 정상 작동할 수 있게 하려면?

 

🍅 절대경로 대신 상대경로를 사용한다.

🍅 환경에 따라 포트를 분기할 수 있도록 환경변수를 설정한다.

🍅 Docker와 같은 가상화도구를 이용해 개발 환경 자체를 통일시킨다.

 

 

 

 

 

EC2

 

 

 

➤ EC2 란?

 

 

Elastic Compute Cloud

 

AWS에서 제공하는 클라우드 컴퓨팅 서비스

AWS에서 원격으로 제어할 수 있는 가상의 컴퓨터를 한대 빌리는 것

 

 

Elastic = 탄력(신축성) 있는, 유연한

➡️ 비용 뿐 아니라 성능, 용량을 자유롭게 조절 가능

 

 

➤ EC2 의 장점

 

🥑 구성하는데 필요한 시간이 짧다.

🥑 AMI를 통해 다양한 운영체제 선택이 가능하다. (+ CPU, RAM, 용량까지도 손쉽게 구성 가능)

 

 

➤ 인스턴스

 

AWS에서 빌리는 컴퓨터를 Instance라 한다.

인스턴스는 1대의 컴퓨터를 의미하는 단위이다.

AWS에서 컴퓨터를 빌리는 것을 인스턴스를 생성한다고 한다.

 

 

 

➤ AMI(Amazon Machine Image)

 

AMI는 인스턴스를 시작하는데 필요한 소프트웨어 구성이 기재된 템플릿(이미지)이다.

인스턴스를 시작할 때 AMI를 지정해야 한다.

동일한 구성의 인스턴스가 여러개 필요할 땐 한 AMI에서 여러 인스턴스를 시작할 수 있다.

이미지 종류로는 OS만 깔려있는 템플릿을 선택할 수도 있고, 아예 특정 런타임이 설치되어 있는 템플릿이 제공되는 경우도 있다.

ex) 우분투 + node.js, 윈도우 + JVM 등

 

 

참고) aws AMI

 

 

 

✅ AWS EC2 인스턴스를 생성한다

= AMI를 토대로 운영체제, CPU, RAM 혹은 런타임 등이 구성된 컴퓨터를 빌리는 것

 

 

 

 

 

RDS(Relational Database Service)

 

 

AWS에서 제공하는 관계형 데이터베이스 서비스이다.

 

 

 

➤ EC2 인스턴스에 DB 엔진을 설치해서 사용하는 것과 무엇이 다른가?

 

 

EC2 인스턴스를 사용하면 데이터베이스와 관련해서 자동으로 관리하는 부분이 매우 적다.

사용자가 일일이 시간을 투자하여 데이터베이스 엔진의 설치와 버전관리, 데이터 백업을 해야한다.

 

거기다 가용성과 내구성이 확보되지 않기 때문에 데이터가 유실되거나 정상적으로 사용하지 못할 확률이 커진다.

또 후에 필요에 따른 데이터베이스 규모 확장도 어렵다.

 

가용성 : 시스템이 정상적으로 사용가능한 정도

 

RDS를 이용하면 데이터베이스와 관련된 유지 보수를 모두 RDS에서 전적으로 자동 관리한다.

사용자가 해야할 일은 초기 설정을 제외하고는 DB에 저장된 데이터를 관리하는 일밖에 없어서 편의성이 매우 향상된다.

 

 

▶️ RDS를 사용할 경우 AWS에서 관리하는 것들

 

🍅 데이터베이스 규모 확장

🍅 가용성, 내구성 확보

🍅 데이터 백업

🍅 데이터베이스 설치/ 관리

🍅 운영체제 설치/ 관리

🍅 기반 시설 구축

 

RDS에서는 다양한 데이터베이스 엔진 선택지를 제공하기 때문에 실무에서 필요에 맞게 엔진을 취사선택해서 이용할 수 있다.

 

 

 

 

S3

 

 

➤ S3(Simple Storage Service)란?

 

 

▶️ Cloud Storage 란?

 

인터넷 공간에 데이터를 저장하는 저장소이다.

컴퓨터의 하드디스크의 역할을 하는 서비스이다.

ex) Google Drive, 네이버 MYBOX, MS Onedrive

 

클라우드 스토리지는 뛰어난 접근성을 장점으로한다.

 

S3는 AWS에서 제공하는 클라우드 스토리지 서비스이다.

 

 

 

➤ S3의 이점

 

 

▶️ 높은 확장성

 

데이터를 무한히 저장 가능하다.

사용한 만큼만 비용을 지불하면 되기 때문에 비용적인 측면에서 매우 효율적

 

 

▶️ 강력한 내구성

 

99.999999999%의 내구성을 보장

S3에 저장한 데이터가 유실될 가능성은 거의 없다.

(벼락맞을 확률이 700배는 더 높다고 한다...😅)

 

 

▶️ 높은 가용성 보장

 

스토리지에 저장된 파일들을 정상적으로 사용할 수 있는 시간이 길다.

99.99%의 스토리지 가용성을 보장한다.

(1년 동안 S3에 파일 저장시, 8.76 시간 동안만 스토리지 사용에 장애가 발생하는 정도라고 한다.)

 

 

※ aws가 높은 가용성과 높은 내구성을 가진 이유

aws는 전세계 곳곳에 격리된 리전(Region)이라는 것을 세워놓았다.

이 리전을 통해 EC2를 세계 각지의 여러 곳에서 물리적인 서버로 호스팅한다.

가용 영역(Availability Zon)이란 각 리전안에 존재하는 데이터센터(IDC)를 뜻한다.

가용 영역은 각각 개별적인 위치에 떨어져서 존재하기 때문에 한 곳의 가용 영역이 재난이나 사고로 가동이 불가능해지더라도

다른 가용 영역에 백업을 해놓은 데이터를 활용하여 문제없이 서버가 가동되게 된다.

이러한 방식 덕분에 aws가 높은 가용성과 내구성을 보장하는 것이다.

 

참고) EC2 Region

 

 

▶️ 다양한 스토리지 클래스 제공

 

저장소를 어떤 목적으로 활용할지에 따라 효율적으로 선택할 수 있는 스토리지 클래스가 달라진다.

대표적으로 많이 사용하는 스토리지 클래스 : Standard class, Glacier class

 

Standard Class

🍑 범용적인 목적으로 사용하기 좋다.

🍑 데이터 액세스 요청에 대한 처리 속도가 빠르다.

🍑 데이터에 자주 액세스해야 할 경우 사용

🍑 오래보관하는 목적으로는 알맞지 않다. ➡️ 보관비용이 높게 발생!

 

 

Glacier Class

🍑 장기적인 보관 목적으로 적합

🍑 데이터 액세스 속도는 느리다.

🍑 대신 데이터 보관 비용이 매우 저렴하다.

 

 

▶️ 정적 웹 사이트 호스팅이 가능

 

정적 파일: 서버의 개입 없이 생성된 파일(↔️ 동적파일: 클라이언트가 서버에 요청을 보내서 생성한 파일)

 

🍅 웹 호스팅(Web Hosting) : 서버의 한 공간을 임대해 주는 서비스를 뜻한다.

 

S3에서는 버킷이 사용자들이 정적 웹 사이트를 배포할 수 있는 공간을 제공한다.

버킷이라는 저장공간에 정적 파일을 업로드하고 버킷을 정적 웹 사이트 호스팅 용도로 구성하면 정적 웹 사이트를 배포할 수 있다.

 

버킷?

🍅 파일을 담는 바구니(최상위 디렉토리)

🍅 무한히 많은 파일 저장 가능

🍅  버킷의 이름은 각 리전(Region)에서 고유해야 함

🍅  버킷의 정책을 생성하여 액세스 권한을 부여 가능

 

객체?

🍅 버킷에 담기는 파일

🍅 객체는 파일과 메타데이터로 구성

🍅 file(파일): key-value 페어 형식으로 데이터를 저장한다. 실제 데이터를 저장한다.

🍅 key : 각각의 객체를 고유하게 만들어주는 식별자 역할

🍅 메타데이터: 객체의 정보(생성일, 크기, 유형 등)가 담긴 데이터

🍅 객체의 값으로써 저장될 수 있는 데이터 최대 크기는 5TB이다.

🍅 모든 객체는 고유한 키를 가진다.

🍅 모든 객체는 URL 주소를 가지고 있다.

🍅 URL 주소 형식: http://[버킷 이름].S3.amazonaws.com/[객체의 키]

 

 

 

 

 

3-Tier Architecture 배포 전략

 

 

➤ Client 배포

 

AWS에서 제공하는 S3 를 통해 사용자들에게 Client를 제공할 수 있다.

 

클라이언트를 정적 파일로 빌드하여 배포한다.

 

이때 빌드하는 과정이 필요하다.

 

▶️ 여기서의 빌드란?

 

🍋 불필요한 데이터를 없애고, 통합/압축하여 배포하기 최적화된 상태로 만드는 것

🍋 데이터의 용량이 줄어들고 웹 사이트 로딩 속도가 빨라진다.

🍋 HTML, CSS, JS 같은 웹 앱으로 배포하는 경우엔 배포 가능한 정적 파일의 형태로 만들어 주어야 한다.

🍋 asset 자체가 정적인 경우 그대로 배포하면 된다.

 

 

▶️ 사용자들이 더 빠르게 파일을 받게 하는 방법?

 

AWS에서 제공하는 CDN 서비스인 CloudFront를 통해서 각지의 데이터센터에 데이터를 분산시켜서 저장해 뒀다가 사용자와 가까운 지역에서 데이터를 주는 방식으로 더 빠르게 서비스를 제공할 수 있다.

 

※ 참고) CDN(콘텐츠 전송 네트워크)에 대한 설명

 

 

 

➤ Server Application 배포

 

AWS EC2 서비스를 통해 손쉽게 서버를 구성하고 제공할 수 있다.

 

 

 

➤ Database 배포

 

RDS 서비스를 통해 EC2를 통해 배포된 Server Application의 데이터를 저장, 제공하는 데이터베이스를 배포할 수 있다.

 

 

➤ DNS

 

기본으로 생성되는 IP주소는 사용자에게 불편하다.

IP 주소가 아닌 도메인 주소로 사이트에 접근할 수 있다.

AWS에서 제공하는 Route 53 서비스를 이용하면 직관적인 도메인 주소를 통해서 서비스에 접근하도록 할 수 있다.

 

 

 

 

 

감사합니다.

오개념에 대한 지적은 늘 환영입니다. 🤩

 

 

1