TIL 220827

강지훈·2022년 8월 27일
0

static 변수를 자주 사용하게 되었을 때 단점은 뭘까요?

static은 일정의 전역변수라 전역변수의 단점 일부를 가지고 있습니다. but, 전역변수와는 다르게 get, set 함수를 만들 수 있고 클래스에서 다용된다는 명시성을 가진다는 점 등이 다릅니다.

  • 동시성 문제: 여러 스레드에서 해당 전역변수를 참조하게 된다고 보죠. 만약 해당 static 변수가 변경되었을 때 다른 모든 스레드에 영향을 주기 때문에 사이드 이펙트가 일어나 안전하지 않을 수 있습니다.
  • 메모리 문제: 클래스가 생성될 때 메모리를 할당, 그리고 프로그램 종료시점에 반환되므로 사용하지 않아도 메모리가 할당되어 있음. 근데 만약에 이걸 객체에다가 집어넣은 메서드의 경우 사용하지 않을 경우에는 메모리 할당이 일어나지 않음.
  • 테스트 문제: 단위테스트를 한다고 하면 해당 메서드, 함수만을 실행해야 하는데 static으로 한 경우 단위적이지 않고 전역적으로 관리되기 때문에 해당 부분을 깨끗하게 테스팅하기가 어렵습니다.

HTTPS 와 SSL / TLS
HTTPS 는 HTTP와는 달리 애플리케이션 계층과 전송 계층 사이에 신뢰 계층인 SSL/TLS 계층을 넣은 신뢰할 수 있는 HTTP를 말합니다. 이를 통해 '통신을 암호화'합니다
SSL/TLS
SSL(Secure Socket Layer)은 SSL 1.0부터 시작해서
SSL 2.0, SSL 3.0, TLS(TransportLayer Security Protocol) 1.0, TLS 1.3 까지 버전이 올라가며 마지막으로 TLS로 명칭이 변경되었으나, 보통 이를 합쳐 SSL /TLS로 많이 부릅니다. 이 책에서는 최신 TLS 버전인 TLS 1.3을 기반으로 설명합니다.
SSL / TLS은 전송 계층에서 보안을 제공하는 프로토콜입니다. 클라이언트와 서버가 통신할 때 SSL/TLS를 통해 제3자가 메시지를 도청하거나 변조하지 못하도록 합니다.

SSL / TLS 는 보안세션을 기반으로 데이터를 암호화하며 보안 세션이 만들어질 때 인증 메커니즘, 키 교환 암호화 알고리즘, 해싱 알고리즘에 사용됩니다.
-인증메커니즘
-키교환 암호화 알고리즘
-해싱 알고리즘

클라이언트에서 서버에 사이퍼 슈트를 전달, 이 알고리즘으로 가능하자면 서버에서 클라이언트로 인증서를 보냄(인증메커니즘), 키교환 암호화 알고리즘, 해싱 알고리즘>> 보안세션 생성 >> 데이터 송수신

보안 세션
보안 세션이란 보안이 시작되고 끝나는 동안 유지되는 세션을 말하고, SSL / TLS는 핸드셰이크를 통해 보안 세션을 생성하고 이를 기반으로 상태 정보 등을 공유합니다

*세션: 운영체제가 어떠한 사용자로부터 자신의 자신 이용을 허락하는 일정한 기간을 뜻한다. 즉, 사용자는 일정 시간동안 응용 프로그램, 자원 등을 사용할 수 있다.

클라이언트와 서버와 키를 공유하고 이를 기반으로 인증, 인증확인 등의 작업이 일어나는 단 한번의 1-RTT 가 생긴 후 데이터를 송수신하는 것을 볼 수 있습니다.

사이퍼 슈트: 프로토콜, AEAD 사이퍼 모드, 해싱 알고리즘이 나열된 규약

인증 메커니즘
인증 메커니즘은 CA 에서 발급한 인증서를 기반으로 이루어집니다.
CA 에서 발급한 인증서는 안전한 연결을 시작하는 데 있어 필요한 '공개키'를 클라이언트에 제공하고 사용자가 접속한 '서버가 신뢰'할 수 있는 서버임을 보장합니다. 인증서는 서비스 정보, 공개키, 지문, 디지털 서명 등으로 이루어져 있습니다.

참고로 CA는 아무 기업이나 할 수 있는 것이 아니고 신뢰성이 엄격하게 공인된 기업들만 참여할 수 있다.

TLS 1.3은 사용자가 이전에 방문한 사이트로 다시 방문 한다면 SSL / TLS 에서 보안세션을 만들 때 걸리는 통신을 하지 않아도 됩니다. 이를 0-RTT라고 합니다
HTTPS 구축 방법
HTTPS 구축 방법은 크게 세 가지 입니다. 직접 CA에서 구매한 인증키를 기반으로 HTTPS 서비스를 구축하거나, 서버 앞단의 HTTPS를 제공하는 로드밸런서를 두거나, 서버 앞단에 HTTPS를 제공하는 CDN을 둬서 구축합니다.
CA 발급 과정
자신의 서비스가 CA 인증서를 발급받으려면 자신의 사이트 정보와 공개키를 CA에 제축해야 합니다. 이후 CA는 공개키를 해시한 값인 지문(finger print)을 사용하는 CA의 비밀키 등을 기반으로 CA 인증서를 발급합니다.

profile
never stop

0개의 댓글