DevOps 의 과정 1편 - 훑어 보기 + 리눅스

dev_ops

목록 보기
1/1

Terraform 들어가기 전에 먼저 깔아야 할 기초

  1. 리눅스 명령어 (기본 정도)

  2. 네트워크 기초

  • VPC, Subnet, Route, NAT, Security Group/Firewall
  1. 클라우드 기초
  • IAM, Compute, Storage, Load Balancer
  1. Git 기초
  • branch, PR, revert
  1. JSON/YAML 읽기 능력

이중에서 4번 같은 경우는 생략

Terraform은 인프라를 코드로 만들지만,
실제로 다루는 대상은 결국 리눅스 서버다.

그래서 최소한의 리눅스 명령어를 모르면
인프라를 만들고도 디버깅, 로그 확인, 서버 접근 자체가 어려워진다.

리눅스 기본 명령어

Terraform은 인프라를 코드로 만들지만,
운영하게될 대상은 리눅스 서버/컨테이너/VM

📂 파일/디렉토리 관련

  • pwd: 현재 위치 확인
  • ls: 현재 디렉토리 파일 목록
  • cd: 디렉토리 이동
  • mkdir: 디렉토리 생성
  • cp: 파일/디렉토리 복사
  • mv: 파일 이동/이름 변경
  • rm: 파일 삭제

📄 파일 내용 확인

  • cat: 파일 전체 출력
  • less: 스크롤하면서 보기
  • head: 앞부분 확인
  • tail: 뒷부분 확인 (로그 볼 때 많이 씀)
  • grep: 특정 문자열 검색

🔐 권한 관련

  • chmod: 권한 변경
  • chown: 소유자 변경

⚙️ 프로세스/시스템 상태

  • ps: 실행 중인 프로세스 확인
  • top / htop: CPU, 메모리 상태 확인

🌐 네트워크/요청

  • curl: HTTP 요청 보내기 (API 테스트할 때 자주 사용)

🧪 환경 변수

  • echo $PATH
  • env

💡 예시

# 로그 실시간 보기
tail -f app.log

# 로그에서 error만 찾기
grep "error" app.log

# 로그 실시간 + 필터
tail -f app.log | grep "ERROR"

👉 실제 서버 장애 확인할 때 거의 이 조합을 사용한다.

Mac을 쓰는 경우에도 위 같은 경우를 사용하다 보니
가볍게 다루어 보고 가려고 한다.

pwd   
/Users/jaehyungkim/Desktop/Swift/TuistGoolbitg/Real2/goolbitg-iOS

ls
현재 폴더 내부 파일들

cd
경로 이동

cat
concatenate 줄임말 -> 합치다  ->  여라 파일 내용 하나로 합치기

cat filename.txt 						: 파일 내용 출력
cat file1.txt file2.txt 				: 파일 내용 이어서 출력
cat -n filename.txt 					: 행 번호 붙여서 출력 
cat file1.txt file2.txt > new_file.txt : 파일 여러개 합쳐서 새로운 파일
...

less = 보여지는 만큼만 출력
head = 앞부분 부터 확인하는 명령어
tail = 뒷부분 부터 확인하는 명령어
grep = 특정 문자열 순환탐색
cp = 디렉토리 또는 파일 복사 명령어
cp_r = [복사 디렉토리] [대상 디렉토리]
mv = 파일 이동
rm = 파일 삭제
mkdir = 디렉토리 생성
chmod = 권한 변경 (파일, 디렉토리 권한)
chown = 권한 변경 (파일, 디렉토리 소유권 변경 ex: Group)
ps = 활성프로세스 출력
top or htop = OS 상태 하단 사진 참고

curl = Network Protocol 를통한 데이터 송수신 명령어
curl http://example.com
curl -O http://example.com/file.zip
curl -X POST -H "Content-Type: application/json" -d '{"name": "user", "age": 25}' 
curl -F "file=@/path/to/file.txt" 

환경 변수 확인
echo $PATH, env

@참고 자료 : https://monkeybusiness.tistory.com/645

네트워크 기초

좀 중요하다 결국 인프라이기에 보안, 통신 에 대한 이야기 이게 때문에
이를 좀 어느정도 잡아놔야 한다.
VPC, subnet, route table, internet gateway, NAT gateway, security group
를 다루어 보고자 한다.

간단한 큰 그림

  • VPC: 네트워크 전체 땅
  • Subnet: 그 땅을 나눈 구역
  • Route Table: 이 구역의 트래픽이 어디로 갈지 정한 안내판
  • Internet Gateway: 인터넷과 직접 연결되는 출입문
  • NAT Gateway: 내부 서버가 바깥으로 나갈 때만 쓰는 대리 출구
  • Security Group / Firewall: 누가 들어오고 나갈지 통제하는 문지기

@참고자료 : https://docs.aws.amazon.com/vpc/latest/userguide/configure-subnets.html?utm_source=chatgpt.com

subnet 은 VPC 안의 IP주소 범위
route table 은 해당 subnet이나 gateway에서 나가는 트래픽 경로 결정 규칙들
InternetGateway 는 VPC와 인터넷 사이 통신 가능케
NAT Gateway는 private subnet 인스턴스가 외부로 나갈 수 있게 하되 외부에서 먼저 들어오는 연결 차단
Security Group은 연결된 리소스의 인바운드/아웃바운드 트래픽을 제어하는 가상 방화벽

VPC 란? (Virtual Private Cloud)

클라우드 안에 가상 네트워크 공간
1. IP 대역을 정한다
2. subnet을 할당한다.
3. route 연결
4. gateway 연결


InternetGateWay

VPC의 구성요소로써 VPC와 인터넷간에 통신을 할 수 있게 만들어주는 역할
출입문

  • 외부 사용자가 접근해야 하는 리소스가 있을 때 필요함!
  • subnet의 route table에도 인터넷 방향 경로가 있어야 함

subnet 이란?

  1. 네트워크 안에 네트워크
  2. VPC 안에서 나눈 작은 IP 주소 범위
    why? -> 바로 옆으로 전달해도 될때 구지 구지 큰 범위 벗어난후 전달할 필요가 없음
    ex) 배송: 도봉구 -> 노원구
  • 서울시 도봉구 배송 출발 -> 서울 중앙 센터 -> 노원구 센터
  • 서울시 도봉구 배송 출발 -> 노원구 센터

Public Subnet?

  • 인터넷에서 직접 접근 가능한 리소스
  • 외부에서 접근이 가능한 네트워크영역
  • subnet -> RoutingTable(인터넷 게이트웨이로)

Private Subnet?

  • 인터넷에서 직접 접근되면 안 되는 리소스
  • 외부에서 다이렉트로 접근이 불가능한 네트워크 영역
  • 해당 서브넷에 위치한 리소스들은 외부와의 연결이 불가능

why?

  • public subnet에는 internet gateway 경로를, private subnet에는 NAT gateway 경로
  • 즉 보안

Route Table 이란

말 그대로 “이 subnet에서 나가는 패킷을 어디로 보낼지” 정한 규칙표
AWS는 route table을 VPC의 traffic controller라고 표현한다.
서브넷 혹은 게이트웨이를 통해서 네트워크 트래픽이 어디로 향하는지에 대해 결정

  • 라우팅 규칙은 목적지 주소에 따른 Next Hop을 지정
  • 10.0.0.0/16 -> local
    같은 VPC 내부 통신
  • 0.0.0.0/0 -> igw
    인터넷으로 보냄
  • 0.0.0.0/0 -> nat
    NAT를 통해 외부로 보냄

서브넷 5개, 기본 라우팅 테이블 1개, 사용자 지정 라우팅 테이블 3개가 포함된 VPC

네트워크 문제의 절반은 route에서 난다.

통신이 안 될 때는 거의 항상 아래 순서로 보자

  • 같은 VPC/대역인가?
  • route가 맞나?
  • 보안 정책이 막고 있나?

NAT Gateway ( 주소 변환 NAT )

  • NAT: 사설 네트워크에 속한 여러 개의 호스트가 하나의 공인 IP 주소를 사용하여 인터넷에 접속하기 위함
    - 기본적으로 내부에서 시작한 연결의 응답만 돌아오게 하는 구조

private subnet 안의 서버가 외부 인터넷이나 외부 서비스로 나갈 수만 있게 해 주는 장치
즉 외부에서 먼저 연결 시도 불가

Firewall이 뭔가 (방화벽)

정의된 규칙에 따라 네트워크 트래픽을 허용하거나 차단하는 보안 시스템
Cloudflare는 이를 신뢰 영역과 비신뢰 영역 사이에 놓여 트래픽을 통제하는 장치

Security Group은 뭐가 다른가

AWS Security Group은 VPC 리소스에 붙는 가상 방화벽
인바운드와 아웃바운드 규칙을 설정하고, 소스/대상, 포트 범위, 프로토콜을 지정
허용된 연결의 응답 트래픽은 별도 규칙 없이도 돌아온다.
어떤 계층의 어떤 서버끼리 말하게 할지 정하는 정책

과정

  • VPC 하나 생성
  • public subnet 2개 생성
  • private subnet 2개 생성
  • Internet Gateway 연결
  • public subnet route table은 IGW로 연결
  • NAT Gateway는 public subnet에 둠
  • private subnet route table은 NAT로 연결
  • ALB는 public subnet
  • App 서버는 private subnet
  • DB는 private subnet
  • Security Group으로 ALB → App, App → DB만 허용

로드 밸런서가 뭘까?

  • 들어오는 요청을 여러 서버로 나누자

예시
Example.com 접속! -> 서버가 1대가 아닌 3대로

why?

  • 서버 한대가 죽어도 동작
  • 사용자 수가 많아져도 나눠 처리
  • 서비스 앞단을 하나의 점으로 통일

온프레미스는 뭘까?

회사가 소유한 물리적인 서버실, 네트워크 장비, 스토리지 같은 자체 인프라 환경
그럼 AWS는..? -> 클라우드

서버를 public subnet에 두면 인터넷인가?


1. route table은 VPC의 traffic controller
2. route 규칙이 subnet이나 gateway의 트래픽이 어디로 갈지 결정
3. 인터넷 게이트웨이는 VPC route table에서 인터넷으로 향하는 트래픽의 대상(target) 이 됨
4. 라우팅 규칙으로 결정되는거지 public subnet의 유무가 아님!

서버가 어떤 subnet에 있든,
그 subnet이 연결된 route table에 인터넷 방향 경로가 있어야 인터넷으로 나갈 수 있다.

  1. VPC에 Internet Gateway가 연결되어 있어야 함
  2. 그 subnet의 route table에 0.0.0.0/0 -> Internet Gateway 경로가 있어야 함

subnet의 route table에도 인터넷 방향 경로가 있어야 함

0.0.0.0/0 -> igw-xxxx
  • 목적지가 어디든(0.0.0.0/0)
  • 모르면 인터넷 게이트웨이로 보내라

ALB 가 뭐지?

Application Load Balancer
클라이언트의 단일 진입점 역할
애플리케이션 계층 트래픽을 여러 대상, AZ(가용영역)으로 분산
웹 서비스 앞에서 HTTP/HTTPS 요청을 받아서 뒤쪽 서버들로 나눠주는 로드밸런서

  • 사용자가 브라우저로 https://myservice.com 접속
  • ALB가 요청을 받음
  • 뒤에 있는 앱 서버 여러 대 중 하나로 전달

ALB는 public subnet
App 서버는 private subnet
DB는 private subnet


CIDR 이란

IP 주소 범위를 표현하는 방법
10.0.0.0/16 처럼 적음
10.0.0.0 이 주소
/16 은 앞 16비트가 네트워크 구간

IPv4 주소는 총 32bit

  • /16이면 앞 16비트가 네트워크
  • /24면 앞 24비트가 네트워크
  • 남은 비트는 호스트에
  • VPC = 큰 땅
  • CIDR = 땅의 주소 범위
  • subnet CIDR = 땅을 잘라 나눈 구획 주소 범위

공인 IP / 사설 IP

공인 IP

전 세계적으로 유일하게 식별되는 주소
인터넷에서 직접 라우팅될 수 있는 주소

사설 IP

내부망용 주소
인터넷 공용 라우팅에 직접 쓰이지 않는다.
사설 IP는 내부 네트워크에서만 쓰는 주소다. RFC 1918에서 대표적인 사설 IPv4 대역은 아래 3개다.

  • 10.0.0.0/8
  • 172.16.0.0/12
  • 192.168.0.0/16

왜 사설 IP를 쓰냐

인터넷에 연결되는 모든 장비에 공인 IP를 다 줄 수는 없다.
IPv4 주소는 한정되어 있고, 내부 시스템은 인터넷에서 직접 접근될 필요가 없는 경우도 많다.
내부 시스템은 사설 IP를 쓰고, 외부와 통신이 필요할 때는 NAT 같은 방식으로 나가게 만든다.

VPC 에선?

VPC 내부 EC2는 기본적으로 사설 IP를 가진다.
public subnet에 있는 인스턴스는 경우에 따라 공인 IP를 추가로 받을 수 있지만
내부 통신 자체는 여전히 사설 IP 중심으로 이뤄진다

  • App ↔ DB 통신: 사설 IP
  • 외부 사용자 ↔ ALB: 공인 IP 또는 퍼블릭 엔드포인트

Port란 무엇인지

한 컴퓨터 안에서 어떤 서비스/프로세스에게 트래픽을 보낼지 구분하는 번호
네트워크 연결이 시작되고 끝나는 가상 지점

  • IP 주소 = 어느 집인지
  • 포트 번호 = 그 집의 몇 번 방인지

예를 들어 서버 IP가 10.0.1.15여도,

  • 22: SSH
  • 80: HTTP
  • 443: HTTPS
  • 3306: MySQL
  • 5432: PostgreSQL
  • 6379: Redis
  • 8080: 웹 애플리케이션

한눈으로 봐보자

[사용자 브라우저]
        |
        |  HTTPS 443
        v
   [ALB / Load Balancer]
        |
        |  HTTP 80 or HTTPS 443
        v
   [App Server 1]
   [App Server 2]
        |
        |  DB Port 3306 or 5432
        v
      [DB]
VPC (10.0.0.0/16)
├─ Public Subnet A (10.0.1.0/24)
│   ├─ ALB
│   └─ NAT Gateway
│
├─ Public Subnet B (10.0.2.0/24)
│   └─ ALB
│
├─ Private Subnet A (10.0.10.0/24)
│   └─ App Server 1
│
├─ Private Subnet B (10.0.20.0/24)
│   └─ App Server 2
│
└─ Private DB Subnet (10.0.30.0/24)
    └─ DB
App Server (Private Subnet)
   -> Route Table
   -> NAT Gateway (Public Subnet)
   -> Internet Gateway
   -> Internet

마무리 하면서

자자 네트워크 아직 끝이 아니에욧

profile
IOS 개발자 새싹이, 작은 이야기로부터

0개의 댓글