1. HTTP가 통신 고속화를 위해서 어떤 기능들을 지원했나요? 어떻게 가능한가요?
Keep Alive
- 연속된 요청일 때 접속을 재사용합니다. 매번 커넥션을 다시 하지 않기 때문에 효율적입니다.
파이프라인
- 최초의 요청이 완료되기 전에 다음 요청을 보냅니다.
- 다음 요청까지 대기시간을 없앰으로써 네트워크 가동률과 성능이 향상됩니다.
2. TLS계층 통신에서 대칭키암호화와 비대칭키 암호화가 어떻게 사용되나요?
암호화에서 중요한 것은 암호화 알고리즘 자체를 비밀로 하는 것이 아니라, 알고리즘이 알려져도 안전하게 통신할 수 있게 하는 것입니다. 또 현재 많이 사용하는 브라우저는 대부분 핵심 소스 코드를 누구나 볼 수 있는 오픈 소스로서 공개됩니다. 그래서 암호화 알고리즘 자체를 비밀로 해서는 안되죠. 현재 일반적으로 사용하는 방식은 암호화 알고리즘은 공개하고, 그 암호화에 사용하는 데이터(키)를 따로 준비하는 방식입니다.
공통키 방식 = 대칭 암호
자물쇠를 잠글 때와 열 때 모두 같은 열쇠를 사용하는 방식입니다.
- 키만 있으면 망가진 데이터를 원래대로 수리 가능
- 일반 통신의 암호화에 사용함.
공개키 방식 = 비대칭 암호
디지털 서명(인증서) 방식에서 사용함.
이 정보가 누구거다 라는걸 검증하는데 쓰임.
publicKey로는 privateKey를 절대 찾을 수 없다.
공개키 방식에서는 public key와 private key 두 가지가 필요합니다.
public key란? 전세계에 공개해도 문제 없습니다. 암호화를 합니다. 자물쇠에 비유됩니다.
private key란? 다른 사람에게 알려져선 안됩니다. 해독을 합니다. 열쇠에 비유됩니다.
비밀 통신을 원하는 사람은 자물쇠를 잠궈 보냅니다.
다른 사람은 키를 갖고있지 않아 열수 없지만 비밀키를 가진 사람은 그 자물쇠를 열 수 있습니다.
태호(publicKey) 윤석님(publicKey)에게만 정보를 보내고 싶다.
윤석님은 열쇠를 가지고 있는 거고 태호님이 자물쇠를 잠가서 보내면 윤석님이
태호가 보낸 자물쇠를 열 수 있다.
--- 여기서 윤석님은 자물쇠 아닌가...? 헷갈린다.
비트코인 지갑이 publicKey 사용
내 지갑에다가 돈을 보낼 거. 그 지갑은 열쇠가 있는 사람만 열 수 있다.
이런 경우도 있어요!)
privateKey로 암호화해서 데이터를 전송 -> publicKey로 풀려요.
정보가 왔어.
윤석이 공개키로 이 정보가 풀려, 그럼 윤석이꺼
안풀려 그럼 윤석이가 아닌 거.
이것도 비트코인에서 쓰인대요.
TLS에서는 통신마다 한 번만 사용되는 공통키를 만들어내고, 공개 키 방식을 사용해 사용자에게 신중히 키를 전달한 이후,
주고받을 때는 공통키 방식으로 고속으로 암호화하여 사용합니다.
3. TLS 통신 절차를 설명해주세요. 면접 필수 질문! 암기!
1. 핸드셰이크 프로토콜로 통신을 확립하는 단계
2. 레코드 프로토콜로 불리는 통신 단계
3. SessionTicket 구조를 이용한 재접속 시의 고속 핸드셰이크
핸드셰이크란?
A와 B가 통신할 때
{ A: 나 너한테 데이터 줘도 돼? B: 응 줘도 돼. (커넥션, 응답)
A: 나 이제 연결 끊을게? B: 응 잘가~ }
- 1회의 핸드셰이크 -
4. HTTP/1.1에서 host가 생긴 이유는?
하나의 웹 서버로 여러 웹 서비스를 운영하기 위해서
클라이언트에서 Host를 붙이면 같은 서버에서 콘텐츠를 구분해 보낼 수 있다.
5. Chunk 전송방식은 주로 어디서 사용되나요?
라이브 동영상을 배포할 때, 시간이 걸리는 검색 결과를 전송할 때
6. 브라우저가 다운로드하려면 어떤 헤더 속성이 있어야 하나요?
'Content-Disposition'입니다.
7. XMLHttpRequest와 브라우저의 HTTP 요청 차이는 무엇인가요?
XMLHttpRequest의 속성입니다.
-송수신할 때 HTML 화면이 새로고침되지 않습니다.
-GET POST 이외의 메서드도 전송할 수 있습니다.
-폼의 경우 키와 값이 일대일이 되는 형식의 데이터만 전송할 수 있고, 응답은 브라우저로 표시되어버리지만, 플레인 텍스트, JSON, 바이너리 데이터, XML등 다양한 형식을 송수신할 수 있습니다.
-몇가지 보안상 제약이 있습니다.
정보제한
쿠키가 다른 사이트로 새어나갈 위험이 있습니다.
전송제한
1) 요청을 보낼 수 있는 도메인을 제한합니다. 악의가 있는 웹사이트로도 정보를 전송하는 문제를 방지하기 위해 기본적으로 브라우저가 액세스하고 있는 호스트에만 접근할 수 있게 하거나 CORS(cross origin resource sharing, 교차 출처 리소스 공유)를 사용합니다.
2) 이용할 수 있는 메서드를 제한합니다. CONNECT, TRACE, TRACK을 사용하지 못합니다.
3) 현재의 프로토콜 규약이나 환경에 영향을 미치는 헤더, 쿠키처럼 보안에 영향을 주는 헤더, 브라우저의 능력을 넘어가는 헤더를 제한합니다.
8. 인증과 인가의 차이는 무엇인가요?
인증은 사용자가 누구인지 확인하는 것입니다.
인가는 권한을 부여하는 것입니다. 사용자에게 어디까지 권한을 줄지 결정합니다.
9. 오픈아이디 커넥트가 앞으로 표준이 될 것이라고 한 이유는 무엇인가요?
인증과 인가에 모두 사용할 수 있고, 서비스 제공자에서 구현하기도 어렵지 않습니다.
10. 원격 프로시저 호출이란 무엇인가요?
Remote Procedure Call(RPC)
다른 컴퓨터에 없는 기능을 마치 자신의 컴퓨터 안에 있는 것처럼 호출하고, 필요에 따라 반환값을 받는 구조입니다.
'책' 카테고리의 다른 글
[달랩 책모임] 적정 소프트웨어 아키텍처 (0) | 2022.10.31 |
---|---|
[세로토닌의 힘] 세로토닌을 높이기 위한 방법들 (0) | 2022.10.22 |
테스트 주도 개발로 배우는 객체지향 설계와 실천 10장 동작하는 골격 (0) | 2021.04.28 |
1부 - 테스트 주도 개발의 핵심은 무엇인가? (0) | 2021.04.22 |
테스트주도 개발로 배우는 객체 지향 설계와 실천 목차 (0) | 2021.04.19 |