HTTPS 공개키 암호화로 안전한 키 교환, 비밀키 암호화로 효율적인 데이터 통신을 보장/ 두 암호화 방식 사용
·
여러가지/이것저것
HTTPS에서 공개키 암호화와 비밀키(대칭키) 암호화를 복합적으로 사용하는 이유는 각각의 암호화 방식이 가진 장점을 최대화하고 단점을 보완하기 위해서입니다. 이 두 암호화 방식을 함께 사용함으로써, HTTPS는 안전하고 효율적인 데이터 전송을 보장합니다. 공개키 암호화의 사용 - 목적: 주로 비밀키를 안전하게 교환하기 위해 사용됩니다. 공개키 암호화에서는 두 개의 키(공개키와 개인키)를 사용하는데, 하나는 데이터를 암호화하는 데 사용하고, 다른 하나는 암호화된 데이터를 복호화하는 데 사용합니다. 이 중 공개키는 누구나 접근할 수 있지만, 개인키는 키의 소유자만이 보유하고 있습니다. - 장점: 데이터를 안전하게 교환할 수 있고, 인증서를 통한 서버의 신원 인증에도 사용됩니다. - 단점: 계산 과정이 복잡하..
HTTP, HTTPS 차이점
·
여러가지/이것저것
HTTP와 HTTPS 간의 주요 차이점 중 하나는 보안성에 있습니다. HTTP(Hypertext Transfer Protocol)는 웹 서버와 클라이언트 간의 통신을 위한 프로토콜이지만, 데이터를 암호화하지 않고 평문으로 전송합니다. 이 때문에 데이터가 네트워크를 통해 이동하는 동안 제3자에 의해 쉽게 가로채거나 수정될 수 있습니다. HTTP의 취약점 - 데이터 도청: 데이터가 암호화되지 않은 상태로 전송되기 때문에, 해커들이 중간에서 데이터를 가로채 정보를 읽을 수 있습니다. 이는 개인정보, 로그인 자격 증명, 금융 정보 등의 민감한 데이터에 대한 위험을 증가시킵니다. - 데이터 변조: 중간자 공격(Man-In-The-Middle, MITM)을 통해, 해커들이 전송 중인 데이터를 변경하거나 손상시킬 수..
TCP 3, 4 way handshake
·
여러가지/이것저것
TCP의 3-way handshake 과정은 TCP/IP 네트워크 통신에서 매우 중요한 역할을 하며, 이를 통해 두 통신 장비 간의 신뢰할 수 있는 연결을 수립합니다. 여기서 "가상 회선"이라 함은 물리적인 회선이 아닌, TCP 연결을 통해 생성되는 논리적인 경로를 의미합니다. 이 과정을 통해 데이터의 정확한 전송을 보장합니다. 단계별로 살펴보면 다음과 같습니다: 1. 연결 수립(3-way Handshake) - SYN: 클라이언트는 서버에게 연결을 요청하는 SYN 패킷을 보냅니다. 이때, 클라이언트는 자신의 초기 시퀀스 번호(Sequence Number)를 임의의 난수로 설정하여 전송합니다. 이 초기 시퀀스 번호는 이후 데이터 전송에서 순서와 무결성을 보장하는 데 사용됩니다. - SYN-ACK: 서버는..
TCP와 UDP의 차이점
·
여러가지/이것저것
TCP는 연결 지향형 프로토콜이고 UDP는 데이터를 데이터그램단위로 전송하는 프로토콜입니다. TCP는 가상 회선을 만들어 신뢰성을 보장하도록(흐름 제어, 혼잡 제어, 오류 제어) 하는 프로토콜로 따로 신뢰성을 보장하기 위한 절차가 없는 UDP에 비해 속도가 느린편입니다. TCP는 그래서 파일전송과 같은 신뢰성이 중요한 서비스에 사용되고, UDP는 스트리밍, RTP와 같이 연속성이 더 중요한 서비스에 사용됩니다. +) 하지만 UDP도 신뢰성을 UDP자체에서 보장하지 않는 것 뿐이지, 개발자가 직접 신뢰성을 보장하도록 할 수 있습니다. 그래서 HTTP/3은 QUIC이라는 프로토콜을 기반으로 하는데, QUIC은 UDP를 기반으로 합니다. 즉, UDP 자체는 신뢰성을 보장하지 않지만, 추가적인 정의를 통해 신뢰..
웹 통신의 큰 흐름 : HTTP://WWW.GOOGLE.COM/ 을 접속할 때 일어나는 일
·
여러가지/이것저것
웹 통신의 큰 흐름 : HTTP://WWW.GOOGLE.COM/ 을 접속할 때 일어나는 일 브라우저가 URL에 적힌 값을 파싱해서 HTTP Request Message를 만들고 OS에 전송 요청을 합니다. 이 때, Domain으로 요청을 보낼 수 없기 때문에 DNS Lookup을 수행합니다. DNS 룩업 과정은 크롬의 경우 브라우저 -> 호스트파일 -> DNS Cache의 순서로 도메인에 매칭되는 ip를 찾습니다. 일반적으로 설명하는 DNS Lookup은 루트 도메인서버에서부터 서브도메인 서버순으로 찾게됩니다. 이 요청은 프로토콜 스택이라는 OS에 내장된 네트워크 제어용 소프트웨어에 의해 패킷에 담기고 패킷에 제어정보를 덧붙여 LAN 어댑터에 전송하고, LAN 어댑터는 이를 전기신호로 변환시켜 송출합니다..
FastAPI를 이용한 TDD 개발 - 8
·
프로그래밍 언어/파이썬
Code Coverage 코드 커버리지는 테스트 중에 실행되는 코드의 양을 측정한 것입니다. 테스트 스위트에 코드 적용 범위를 추가하면 테스트에서 다루지 않는 코드 영역을 찾을 수 있습니다. Coverage.py 는 Python 기반 애플리케이션에서 코드 적용 범위를 측정하는 데 널리 사용되는 도구입니다. 이제 pytest를 사용하고 있으므로 pytest-cov를 사용하여 Coverage.py를 pytest와 통합하겠습니다 . requirements.txt에 추가적으로 라이브러리와 버전을 작성합니다. pytest-cov==4.1.0 `.coveragerc` 파일을 이용하여 coverage report 를 수정 할 수 있습니다. project 디렉토리에 추가해주도록 합니다. [run] omit = test..
FastAPI를 이용한 TDD 개발 - 6
·
프로그래밍 언어/파이썬
TDD 를 이용하여서 3개의 새로운 endpoint를 RESTful 개발로 진행하겠습니다. /summaries GET READ get all summaries /summaries/:id GET READ get a single summary /summaries POST CREATE add a summary 각각의 엔드포인트에서 1. 테스트를 작성합니다. 2. 테스트 코드가 실패하는 것을 확인합니다.(레드) 3. 테스트 코드가 통과 되도록 코드를 작성합니다(그린) 4. 리팩토링합니다. Post Route app 디렉토리 아래 api 디렉토리 아래 summaries.py 모듈을 작성하겠습니다. # project/app/api/summaries.py from fastapi import APIRouter, HTT..
FastAPI를 이용한 TDD 개발 - 5
·
프로그래밍 언어/파이썬
App Structure 테스트가 잘 수행 되었면 앱을 리팩터링하고 FastAPI의 APIRouter, 새로운 데이터베이스 초기화 함수 및 pydantic 모델을 추가해 보겠습니다. API라우터 먼저 "app" 폴더에 "api"라는 새 폴더를 추가합니다. 새로 생성된 폴더에 __init__.py 파일을 추가합니다 . 이제 경로를 project/app/api/ping.py/ping 라는 새 파일로 이동할 수 있습니다 . # project/app/api/ping.py from fastapi import APIRouter, Depends from app.config import get_settings, Settings router = APIRouter() @router.get("/ping") async def..