티스토리 뷰
1. python 에서 변수 scope
- 다른 언어와 달리 python은 별도의 블록 범위를 생성하지 않아, if문 안에서 선언된 변수도 밖에서 사용 가능하다
- 리소스는 자동으로 정리하지 않는다
* if, for, while과 같은 블록에서 선언된 변수는 해당 블록이 끝나도 여전히 사용할 수 있다.
x=3
if x>2:
y=30
print(y) # 30
** 대신 함수 범위를 사용하기 때문에 함수 안에서 선언한 변수는 함수 밖에서 사용할 수 없다.
def add(x,y):
a=x+y
return a
result = add(2,3)
print(a) # error
2. with
- with문은 단순한 블록이 아니라 컨텍스트 매니저(Context Manager)라는 특별한 구조를 가진다
- with문이 끝나면 __exit()__가 실행되면서 세션이나 파일 같은 리소스가 자동으로 닫힌다.
1) with 블록시 시작될 때 __enter__() 실행 : 리소스를 준비
2) with 블록 내부 코드 실행
3) with 블록이 끝나면 __exit__()실행 : 리소스를 정리
with open("test.txt", "w") as file:
file.write("Hello, World!")
print(file) # 변수 `file`은 존재하지만, 파일은 이미 닫힘
3. requests.Session()도 컨텍스트 매니저이기 때문에 with 문이 끝나면 자동으로 세션을 닫는다.
그러나 session.get()이 반환한 response는 session이 닫혀도 메모리에 남아있어 계속 사용할 수 있다.
with requests.Session() as session:
response = session.get("https://example.com") # response는 메모리에 남음
print(response.status_code) # with 문이 끝나도 response는 유지됨
4. SSL.SSLSocket이란?
- HTTPS 요청을 처리할 때 자동으로 생성되는 암호화된 네트워크 소켓
- ResourceWarning 오류 발생 시, requests.Session()을 사용해 명시적으로 소켓을 닫아 해결할 수 있다.
- python의 ssl 모듈에서 제공하는 SSL/TLS 보안 연결을 위한 소켓
* SSL/TLS: 인터넷에서 안전한 통신을 보장하는 프로토콜
5. SSL/TLS이란?
- Secure Sockets Layer, 인터넷에서 데이터를 암호화하여 안전하게 전송하기 위한 보안 프로토콜
- Transport Layer Security, SSL이 업그레이드 된것 (현재는 SSL은 사용되지 않고 대부분 TLS가 사용된다)
- 매번 새로운 키를 사용하여 암호화해, 보안성이 극대화 되었고, 불필요한 핸드셰이크 과정을 단순화해 속도를 향상시켰다.
* 핸드셰이크 발전
- 암호화 알고리즘 목록을 숨겨 공격자가 예측할 수 없게 만듦
- RSA key exchange 제거하여 중간자 공격 방지, RSA의 보안성은 큰 숫자의 소인수 분해가 어렵다는 가정에 기반하였지만, 양자 컴퓨터가 발전하면 RSA 암호를 쉽게 풀 수 있는 알고리즘이 존재하기 때문
횟수 | 핸드셰이크 과정 | TLS 1.2 (4번 왕복) | TSL 1.3 (1번) |
1 | 클라이언트 → 서버 | 지원 가능한 암호화 알고리즘 목록 전송 서버의 공개키 요청 |
지원 가능한 암호화 알고리즘 + Pre-Master Key전송 |
2 | 서버 → 클라이언트 | 서버 인증서(SSL/TLS 인증서) + 선택된 암호화 알고리즘 전송 공개키 제공 |
서버 인증서 + 보안 채널 설정 완료 |
3 | 클라이언트 → 서버 | 공개키로 암호화한 Pre-Master Key(초기 암호화 키) 전송 |
|
4 | 서버 → 클라이언트 | 비밀키로 Pre-Master Key를 복호화 보안 채널 설정 완료 => 이후 세션키를 생성하여 암호화된 통신 진행 |
|
키의 차이점 |
RSA key exchange | ECDHE 방식을 사용해 PFS를 보장 (Elliptic Curve Diffie-Hellman Ephemeral) (Perfect Forward Secrecy) |
|
비밀키가 해킹되면, 과거에 주고 받은 모든 암호화된 데이터를 복화할 수 있다는 문제가 있음. | 클라이언트와 서버는 각각 새로운 임시키를 생성하고, 이 임시 키를 사용해 안전한 "세션키" 교환 => 세션키는 한 번 사용되면 폐기됨 해킹당하더라도 과거의 데이터는 복호화 할 수 없음. |
- 예: https - SSL/TLS 암호화를 사용해 안전하게 전송 (http는 SSL/TLS없이 데이터를 평문으로 전송)
1) 왜 필요할까?
- 데이터 암호화, 데이터 무결성(중간에 데이터가 변경되지 않도록 보호), 신뢰성(신뢰할 수 있는 웹사이트)
2) 동작과정
- 클라이언트(웹 브라우저)가 서버에 접속 요청 : https://www.~
- 서버가 SSL/TLS 인증서를 클라이언트에 전달
- 클라이언트가 인증서의 유효성을 검증(CA인증)
- 암호화된 보안 키(세션 키) 생성 및 공유
- 이제 모든 데이터는 SSL/TLS 암호화 방식으로 암호화되어 안전하게 전송됨
6. 소켓(Socket)이란?
- 소켓을 사용하면 컴퓨터끼리(서버와 클라이언트) 데이터를 주고 받을 수 있다.
- 예시: 채팅 서버, 웹 서버 등
'AI > Python' 카테고리의 다른 글
[Python] GIL, 멀티스레드, Python의 메모리 관리, 참조 카운트 (0) | 2025.02.09 |
---|---|
[Python] 비동기 asyncio, async, 이벤트루프, 코루틴(Coroutine) (0) | 2025.02.07 |
[python] 우선순위 큐(Priority Queue)와 힙(Heap) (1) | 2024.12.27 |
[python] 스택을 이용한 주식가격 문제풀이 (1) | 2024.12.26 |
[python] 리스트 pop(0)과 dequeue popleft()의 성능차이 (0) | 2024.12.25 |
- Total
- Today
- Yesterday
- C언어
- 오블완
- 습관
- 아침
- 갓생
- 프로그래머스
- 빅데이터 분석기사
- llm
- 기초
- opic
- Python
- ChatGPT
- 오픽
- Ai
- 뉴스
- 루틴
- SQL
- 30분
- 다이어트
- 고득점 Kit
- 스크랩
- 줄넘기
- 실기
- 티스토리챌린지
- 운동
- 아침운동
- 영어회화
- IH
- 경제
- 미라클모닝
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |