AWS 상에서 네트워크를 구성
컨테이너를 학습하고 3 tier로 운영 환경 구성
개발 환경 구성 및 지속적 통합 경험
💡 클라우드
인터넷을 은유적으로 표현하는 말
어떤 형태로든 어디에든 있기 때문에
인터넷을 통해 원격으로 접근할 수 있는 모든 것
서버, 데이터베이스, 네트워크등 컴퓨팅 리소스를 인터넷을 통해 관리하는 것
public cloud에 대해서 알아본다.
왜 쓰나?
관심사의 분리
- 파일, 데이터베이스 등 저장소에 있는 데이터를
- 서버에서 원하는 형태로 가공해
- 네트워크를 통해 사용자에게 전달
=> 사용자는 관심 없음
1) 개인 PC에서 서비스하는 경우
- 데이터 백업/보안 이슈
- 장비를 끌 수 없다
- 다른 프로그램을 사용해도 문제 없나?
- 장비가 망가지면?
- 외부에서 어떻게 접근하지?
- 한 번에 몇 명이 접속할 수 있나?
2) 사무실 서버로 서비스하는 경우
- 사무실에 정전이 나면?
- 관리인이 필요하다
- 서버실에 에어컨을 둬야 한다
- 사무실 서버가 공격받으면?
- 다른 팀과 데이터를 어떻게 공유하지?
- 유휴장비는 어디에?
3) 데이터센터(IDC)를 활용하는 경우
- 이중화 구성은?
- 데이터센터도 이중화해야 하나?
- 장기 백업은?
- 상주 인력을 두어야 하나?
- 배포 구성은?
- DDoS 대응 장비는?
- 보안 구성은 누가하고 보안 관제를 따로 두어야 하나?
서비스 제공자가 집중해야 할 일은 서비스의 Core Value
기존의 고민들은 cloud 제공 업체가 한다.
여러가지 면에서 클라우드를 사용하는 것이 합리적이다.
💡 통신망
노드들과 이 노드들을 연결하는 링크들로 구성된 하나의 시스템
망 구성
노드 : IP로 식별할 수 있는 대상
링크 : 물리적 회선
하나의 서브넷을 하나의 망이라고 칭할 수 있다.
AWS에서의 망
region : 국가/지역
availability zone : 데이터 센터(ap-northeast-2a, ...)
VPC : 하나의 region에 종속, 다수의 AZ 설정 가능, VPC IP 대역 내에서 망 구성
L2 Switch
- ec2를 생성하면 가상의 스위치와 연결된다고 보면 된다.
- multiple access를 위한 장비
- 서버에는 네트워크 인터페이스 카드가 있다.
통신 방식
- mac 테이블에 정보가 있을 때 : Forwarding
- mac 테이블에 정보가 없을 때 : Flooding (응답하는 장비가 있으면 그 포트에 장비가 있다고 인지하고 mac 테이블에 등록)
Router
통신 방식
- 라우팅 테이블에 정보가 있을 때 : Forwarding
- 라우팅 테이블에 정보가 없을 때 : Drop
라우팅 프로토콜을 활용하여, 어떤 대역으로 패킷을 보내는 것이 최적 경로인지 학습
인터넷 통신
- 외부 네트워크와 통신하기 위해서는 public IP가 있어야 함
- 라우터는 private IP가 목적지일 경우 인터넷 구간으로 보내지 않음
정리
- 자신이 속한 subnet의 서버는 가상 스위치를 통해 직접 통신
- 자신이 속하지 않은 subnet의 서버는 가상 라우터를 통해 직접 통신
- 그 외의 전체 대역은 Internet Gateway로 통신을 보내도록 학습
💡 서브네팅

https://www.ipaddressguide.com/cidr
💡 접근 제어
- 많은 부분 보안성을 보장해준다
- SYN Flooding, LAND, Smulf Attack, SQL Injection, ...
- AWS를 사용한다면 크게 신경쓰지 않아도 된다.
- 서버 보안 패치는 AWS에 일임하고 우리는 네트워크 보안과 계정 보안(IAM)에 집중하면 된다.
- AWS에서는 Security Group을 통해 IP, Port에 대한 접근 제어가 가능하다.
💡 컨테이너
xxx의 라이프 사이클을 관리
생성 -> 운영 -> 제거까지 생애주기를 관리
외부와 명확하게 격리되어있음
프로세스
실행중인 프로그램
프로그램의 명령과 실행시 필요한 정보 조합의 오브젝트
OS에 의해 실행되는 프로그램의 단위
저장장치에 있는 프로그램을 실행하면 실행 명령과 실행하는 데 필요한 정보를 메모리에 적재한다.
컨테이너와 VM의 차이
왜 쓰나?
컨테이너 단위로 사고하고 각 프로세스의 라이프 사이클을 관리할 수 있어서 컨테이너를 사용한다.
컨테이너 네트워크
컨테이너의 본질은 격리인데 어떻게 통신하나?
독자적인 네트워크 인터페이스가 생성됨
컨테이너 내 라우팅 테이블은 모르는 대역에 대해 docker0이라는 브릿지(스위치를 소프트웨어적으로 구현)를 통해 요청을 보냄
- 컨테이너 생성하면 veth가 생성되고 컨테이너 내의 eth0과 연결
- 컨테이너 내의 veth들은 docker0을 통해 컨테이너들 간 통신 가능
- 컨테이너는 gateway인 docker0을 거쳐 외부와 통신
포트포워딩
docker run -d -p 80:80 nginx
Host OS 포트 번호 : 컨테이너 내의 포트 번호
컨테이너를 제거하면?
컨테이너 이미지는 읽기전용
컨테이너를 제거하면 메모리에서 사라짐
== 영속적인 데이터를 다룰 수 없음