본문 바로가기
TIL _Today I Learned/2024.11

[DAY 88] 네트워크 기본 개념 & 중간 프로젝트

by gamdong2 2024. 11. 22.
[천재교육] 프로젝트 기반 빅데이터 서비스 개발자 양성 과정 9기
학습일 : 2024.11.22

📕 학습 목록

  • 네트워크 기본 개념: TCP/IP, HTTP 프로토콜
  • 보안과 인증: 세션 기반 인증, 토큰 기반 인증
  • 클라우드 네트워크 구성: VPC와 안전한 네트워크 설계

 

📗 기억할 내용

1. 네트워크 기본 개념

1) TCP/IP 와 HTTP 프로토콜의 이해

 

1-1) TCP/IP (Transmission Control Protocol/Internet Protocol)

① 개념

  • TCP/IP: 인터넷과 네트워크 통신의 기본이 되는 프로토콜(규칙) 모음
  • 네트워크를 통해 데이터를 안정적으로 전달하고 수신하기 위해 설계됨

② 주요 특징

  • 계층적 구조: TCP/IP는 4계층 구조로 나뉘며, 각 계층은 특정 역할을 담당함
- 응용 계층: 사용자와 상호작용 (예: HTTP, FTP, SMTP)
- 전송 계층: 데이터 전송의 신뢰성 보장 (예: TCP, UDP)
- 인터넷 계층: 데이터를 목적지로 라우팅 (예: IP)
- 네트워크 인터페이스 계층: 물리적 데이터 전송 (LAN, Wi-Fi 등)
  • 신뢰할 수 있는 데이터 전송
    • TCP(전송 계층): 데이터를 패킷으로 나누어 전송하고, 수신 확인(ACK)을 통해 데이터가 정확히 도착했는지 확인함
    • 패킷이 유실되면 재전송을 수행
  • IP 주소를 통한 데이터 라우팅
    • IP(인터넷 계층)는 데이터 패킷이 올바른 목적지로 전송되도록 경로를 설정함

③ TCP와 IP의 역할

  • TCP (Transmission Control Protocol)
    • 데이터를 패킷 단위로 나누어 전송하고, 데이터가 도착했는지 확인하며, 손실된 데이터를 재전송
    • 연결 지향적: 송신자와 수신자 간의 연결이 먼저 설정됨
  • IP (Internet Protocol)
    • 데이터를 전송할 경로를 결정
    • 데이터는 목적지의 IP 주소로 전송됨

 

1-2) HTTP (HyperText Transfer Protocol)

① 개념

  • HTTP: 클라이언트(예: 웹 브라우저)와 서버 간에 데이터를 주고받기 위한 애플리케이션 계층 프로토콜

② 특징

  • 요청-응답 구조
    • 클라이언트가 서버에 요청(Request)을 보내고, 서버가 응답(Response)을 반환하는 방식
    • 예: 사용자가 웹 페이지를 요청하면 서버는 HTML 문서를 반환
  • 비상태성(Stateless)
    • HTTP는 비상태 프로토콜임. 각 요청은 독립적으로 처리되며, 이전 요청의 상태를 기억하지 않음
    • 이를 보완하기 위해 세션, 쿠키, 토큰 등이 사용됨
  • TCP 기반
    • HTTP는 TCP를 사용해 신뢰할 수 있는 데이터 전송을 보장
    • TCP가 데이터의 손실이나 순서 뒤바꿈을 방지
  • 포트 80 사용
    • 기본적으로 HTTP는 포트 80을 사용
    • HTTPS(HTTP + SSL/TLS)는 포트 443을 사용하며, 데이터 암호화를 제공함

1-3) RESTful API와 HTTP

① 개념

  • RESTful API: HTTP 프로토콜을 기반으로 한 API 설계 원칙

② 특징

  • HTTP 메서드
    • RESTful API는 HTTP의 주요 메서드를 활용함
      • GET: 데이터 조회
      • POST: 데이터 생성
      • PUT: 데이터 수정
      • DELETE: 데이터 삭제
  • 자원(Resource) 기반
    • 각 데이터는 고유한 URL을 통해 접근 가능
    • 예: /users/123 → ID가 123인 사용자 정보
  • 상태를 URL에 포함
    • REST는 상태를 요청 URL에 명시적으로 포함
    • 예: /articles?page=2 → 2페이지의 게시글 요청
  • 비상태성
    • 요청 간에 상태를 저장하지 않으며, 모든 요청은 독립적

 

1-4) TCP/IP와 HTTP의 관계

  • HTTP는 TCP/IP를 기반으로 동작함. HTTP는 애플리케이션 계층 프로토콜로, 사용자와 가장 가까운 층에서 동작하며, 데이터 전송의 신뢰성은 TCP/IP가 보장함
    • HTTP: 데이터를 어떻게 교환할지 정의
    • TCP: 데이터를 안전하고 신뢰성 있게 전달
    • IP: 데이터를 목적지까지 올바르게 라우팅

2) 포트 번호

2-1) 포트 번호란?

 

  • 포트 번호는 네트워크에서 데이터를 주고받는 출입구 역할
  • 하나의 컴퓨터(서버)에서 여러 애플리케이션이 동시에 네트워크 통신을 하기 위해 각 애플리케이션에 고유한 포트 번호를 할당
  • 포트 번호는 0번부터 65535번까지 사용할 수 있으며, 특정 포트 번호는 특정 서비스와 연결됨

2-2) 주요 포트 번호

포트 번호 용도
80 HTTP 웹 서버 (운영 환경에서 주로 사용)
443 HTTPS 웹 서버 (보안 연결)
22 SSH (원격 접속)
3306 MySQL 데이터베이스
5432 PostgreSQL 데이터베이스
8000 Django, Flask 등 개발 서버 기본 포트
[tip] 8000번 포트의 역할
- 8000번 포트는 일반적으로 개발 및 테스트 환경에서 웹 서버가 실행될 때 자주 사용되는 포트
- 표준 포트가 아니며, 개발자가 임의로 선택하여 사용하는 경우가 많음
- 예: Django, Flask 같은 웹 프레임워크에서 기본적으로 8000번 포트를 사용하여 개발용 서버를 실행
- 예2: Django 개발 서버 예시
    - 아래 명령어를 실행하면 Django 개발 서버가 기본적으로 127.0.0.1:8000 에서 실행됨
    - 127.0.0.1: 로컬 호스트(자신의 컴퓨터)
    - 8000: 웹 애플리케이션의 접근 경로를 나타내는 포트
python manage.py runserver​

 

2. 보안과 인증

1) 세션(Session)

1-1) 세션이란?

  • 세션은 서버와 클라이언트 간의 연결 상태를 추적하기 위한 방법
  • 클라이언트가 서버에 접속할 때, 서버는 클라이언트에 고유한 세션 ID를 부여하고 이를 저장해 둠. 이후 클라이언트는 요청할 때마다 세션 ID를 함께 보내서 자신을 식별함

1-2) 세션의 작동 방식

클라이언트가 서버에 접속하면 서버는 세션 ID를 생성

② 이 세션 ID는 클라이언트의 쿠키(Cookie)에 저장

③ 클라이언트가 요청을 보낼 때 세션 ID를 쿠키에 포함시켜 보

④ 서버는 세션 ID를 사용해 클라이언트의 상태(예: 로그인 정보)를 확인

 

1-3) 세션의 특징

 

  • 서버가 상태를 유지: 세션 데이터는 서버에 저장됨. 서버는 세션 ID를 키(key)로 사용해 클라이언트와 연결된 데이터를 찾음.
  • 서버에 저장된 데이터는 주로 메모리데이터베이스에 저장됨
  • 단점: 사용자가 많아지면 서버가 세션 데이터를 관리하는 데 부담이 커질 수 있음

 

2) 세션과 사용자 정보 DB 저장의 차이

 

  • 세션은 사용자 인증을 위한 임시적인 상태 정보를 저장
  • 반면, 사용자 정보는 회원가입 시 등록된 영구적인 데이터로, 주로 데이터베이스에 저장
  • 예시
    • 사용자 정보 DB 저장
      • 이메일, 비밀번호, 이름 등 회원가입 시 저장되는 영구 데이터
      • 로그인 여부와 상관없이 항상 DB에 저장되어 있음
    • 세션
      • 사용자가 로그인했을 때 "누가 로그인했는지"를 서버가 기억하기 위한 데이터
      • 세션에는 사용자 정보 전체가 아닌, 필요한 최소한의 정보(예: 사용자 ID, 인증 상태 등)가 저장됨
      • 로그인 상태가 종료되거나 세션이 만료되면 사라짐

3) 세션과 토큰의 차이

  • 세션 기반 인증
    • 서버가 세션을 관리
    • 서버가 사용자별로 세션 ID와 세션 데이터를 저장하며 상태를 추적
    • 클라이언트는 쿠키에 세션 ID를 저장해 서버와 통신
  • 토큰 기반 인증
    • 클라이언트가 토큰을 관리
    • 서버는 인증할 때만 토큰을 발급하고, 이후에는 클라이언트가 요청에 토큰을 포함시킴
    • 토큰 자체에 인증 정보(예: 사용자 ID, 권한 등)가 포함되어 있어, 서버가 추가적으로 상태를 유지하지 않음
  세션 기반 인증 토큰 기반 인증
서버 상태 관리 서버가 클라이언트별로 세션 데이터를 관리 서버가 상태를 유지하지 않음
인증 데이터 위치 서버의 저장소(메모리, DB 등)에 저장 토큰 자체에 포함
추가 작업 요청마다 서버가 세션 데이터 조회 요청 시 토큰만 검

 

3. 클라우드 네트워크 구성

1) VPC(Virtual Private Cloud) 

1-1) VPC란?

  • VPC는 AWS(Amazon Web Services)나 기타 클라우드 서비스에서 제공하는 사용자 정의 가상 네트워크. 사용자가 네트워크를 직접 설계하고 구성하여 클라우드 리소스(서버, 데이터베이스 등)를 안전하고 효율적으로 관리할 수 있도록 해줌
    • Virtual: 물리적인 네트워크가 아닌, 소프트웨어적으로 가상화된 네트워크
    • Private: 사용자가 정의한 네트워크로, 외부와 격리되어 보안성을 제공
    • Cloud: 클라우드 인프라 위에서 동작

1-2) VPC의 주요 구성 요소

 

  • 서브넷(Subnet)
    • VPC 내부에서 네트워크를 더 작은 단위로 나눈 것
    • 퍼블릭 서브넷: 인터넷에 직접 연결 가능
    • 프라이빗 서브넷: 외부 접근 불가, 내부 리소스 간 통신에 사용
  • 라우팅 테이블(Route Table)
    • 네트워크 트래픽의 방향을 정의
    • 특정 트래픽을 인터넷 게이트웨이, NAT 게이트웨이, 또는 다른 서브넷으로 보냄
  • 인터넷 게이트웨이(Internet Gateway)
    • 퍼블릭 서브넷에서 인터넷에 연결하기 위한 출입구
  • NAT 게이트웨이(NAT Gateway)
    • 프라이빗 서브넷에서 외부로 요청을 보낼 때 사용
    • 외부에서 프라이빗 서브넷으로 직접 접근은 불가
  • 보안 그룹(Security Group)
    • 인스턴스별로 적용되는 방화벽 규칙
    • 특정 IP 주소, 포트에 대한 접근 허용/차단
  • 네트워크 ACL(Access Control List)
    • 서브넷 단위에서 트래픽을 제어하는 방화벽 규칙

 

1-3) VPC의 역할과 이점

 

  • 보안 강화
    • 내부 리소스를 인터넷에서 격리할 수 있어 보안성이 높음
    • API 서버는 퍼블릭 서브넷, 데이터베이스는 프라이빗 서브넷에 배치하여 외부 접근 차단
  • 사용자 정의 네트워크
    • IP 주소 범위, 라우팅, 게이트웨이 등을 사용자 요구에 맞게 설정
  • 클라우드 리소스 관리
    • 서버, 데이터베이스, 로드 밸런서 등 다양한 리소스를 VPC 내에서 관리
  • 유연한 네트워크 연결
    • 다른 VPC, 온프레미스 데이터센터와 연결 가능(VPC 피어링, VPN 등)

 

1-4) DRF 배포 시 VPC 활용

 

  • 안전한 네트워크 구성
    • Django REST Framework(DRF)로 만든 API 서버를 퍼블릭 서브넷에 배포하여 클라이언트 요청을 수신
    • 데이터베이스는 프라이빗 서브넷에 배치하여 외부 접근을 완전히 차단
  • 보안 강화
    • 보안 그룹을 설정하여 API 서버와 데이터베이스 간 통신만 허용
    • 외부 공격으로부터 데이터베이스 보호
  • 트래픽 관리
    • 라우팅 테이블과 게이트웨이를 설정하여 내부/외부 트래픽을 효율적으로 관리
    • 프라이빗 서브넷은 NAT 게이트웨이를 통해 필요한 외부 요청만 수행

 

1-5) VPC를 활용한 네트워크 아키텍처 예시

 

  • 퍼블릭 서브넷
    • API 서버(DRF) 배포
    • 외부에서 접근 가능
  • 프라이빗 서브넷
    • 데이터베이스(PostgreSQL) 배치
    • API 서버만 데이터베이스에 접근 가능
  • 인터넷 게이트웨이
    • API 서버를 통해 인터넷과 통신 가능
  • NAT 게이트웨이
    • 프라이빗 서브넷의 데이터베이스가 필요 시 외부 리소스(예: 업데이트) 요청 가능

1-6) VPC의 구성 예시

 

  • VPC 생성
    • IP 주소 범위(CIDR): 10.0.0.0/16
  • 서브넷 나누기
    • 퍼블릭 서브넷: 10.0.1.0/24
    • 프라이빗 서브넷: 10.0.2.0/24
  • 보안 그룹 설정
    • 퍼블릭 서브넷: HTTP/HTTPS 트래픽 허용
    • 프라이빗 서브넷: 퍼블릭 서브넷(API 서버)에서만 접근 허용
  • 라우팅 테이블 구성
    • 퍼블릭 서브넷 → 인터넷 게이트웨이
    • 프라이빗 서브넷 → NAT 게이트웨이

 

 

 

 

📙 내일 일정

  • 중간 프로젝트