티스토리 뷰

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)이란?

- 소켓을 사용하면 컴퓨터끼리(서버와 클라이언트) 데이터를 주고 받을 수 있다.

- 예시: 채팅 서버, 웹 서버 등

반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/02   »
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
글 보관함