[천재교육] 프로젝트 기반 빅데이터 서비스 개발자 양성 과정 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: 데이터 삭제
- RESTful API는 HTTP의 주요 메서드를 활용함
- 자원(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, 인증 상태 등)가 저장됨
- 로그인 상태가 종료되거나 세션이 만료되면 사라짐
- 사용자 정보 DB 저장
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 게이트웨이
📙 내일 일정
- 중간 프로젝트
'TIL _Today I Learned > 2024.11' 카테고리의 다른 글
[DAY 90] 중간 프로젝트_ 수학 단원별 라벨링 (0) | 2024.11.26 |
---|---|
[DAY 89] 중간 프로젝트_ 학업성취도 평가 지표 (0) | 2024.11.25 |
[DAY 87] Django REST Framework & 중간 프로젝트 (0) | 2024.11.21 |
[DAY 86] 중간 프로젝트_ 채점 기준 선정 (0) | 2024.11.20 |
[DAY 84] 중간 프로젝트_ LLM (0) | 2024.11.18 |