728x90
반응형
뭔가 기술 면접 준비를 한 달동안 하긴 했는데 개념이 머릿속에 산재해있는 느낌이라 하루에 테마 한 개씩 정리해보려 한다.
실제 면접에선 이렇게 장황하게 대답 안 하고 핵심만 딱 추려서, 내가 대답 잘 할 수 있는 부분만 추려서 대답할 수 있도록 충분히 연습해야겠다.
$\color{#f08080}{기술면접 준비}$
- 프로토콜
- 말 그대로 통신 규약, 즉 데이터를 체계화(foramtting)하고 가공(processing)하는 규칙들
- 통신할 때 데이터를 어떻게 가공할지에 대한 규칙들
- 네트워크 프로토콜은 컴퓨터 간의 공통 언어(common language)라고 볼 수 있다.
- 프로토콜을 통해 다른 소프트웨어와 하드웨어를 가진 컴퓨터들 간 소통이 가능해진다.
- 인터넷 프로토콜
- 출발지의 IP, 목적지의 IP, 전송 데이터를 포함한다.
- 패킷이라는 통신 단위로 데이터를 전달한다.
- 한계점
- 비연결성
- 패킷을 받을 대상이 없거나 서비스 불능 상태여도 패킷을 전송한다.
- 서버가 다운된 상태에서도 클라이언트가 계속 패킷을 전송한다.
- 비신뢰성
- 중간에 패킷이 사라져도 IP 프로토콜에서 전송하는 데이터가 정확하게 갔는지 확인하지 않는다. 즉 패킷 전달 여부에 대해 보증하지 않는다.
- 패킷을 보낸 순서와 받는 순서가 다를 수 있다.
- 프로그램 구분→ IP 주소는 해당 기기의 고유한 주소인데 해당 주소에서 여러개의 애픞리케이션에 대한 구분이 어렵다.
- → 같은 IP를 사용하는 서버에서 통신하는 애플리케이션이 여러개일 경우 구분이 어렵다.
- 비연결성
- HTTP 프로토콜
- 클라이언트가 HTTP나 HTTPS 형태의 request(요청)을 보내면 서버에서 response(응답)을 보내는 단방향 프로토콜
- 서버가 응답을 보낸 직후 연결이 끊긴다. == 매 통신마다 새로이 연결한다.
- 특징
- 무상태 (Stateless)
- 요청—응답 사이클을 돌고 나서 연결이 끊겨 서버가 클라이언트를 식별할 수 없다 = 클라이언트의 상태를 기억하지 않는다.
- 매번 새로운 인증을 해야 하는 번거로움이 생기기 때문에 쿠키와 세션을 이용해 상태를 기억한다.
- 토큰 방식을 활용해 상태를 기억하기도 한다 → OAuth, JWT
- 인증 방식은 추후 작성 예정
- 비연결성
- 요청—응답 사이클을 돌고 나서 연결이 끊긴다.
- 장점 : 불특정 다수의 클라이언트와의 연결을 유지하는 데 들어가는 리소스를 줄여 더 많은 연결을 할 수 있다.
- 단점 : 클라이언트를 식별할 수 없으므로 동일한 사용자의 모든 요청에 대해 매번 새로이 연결을 해야 하고, 이로 인한 오버헤드가 발생한다.
- 오버헤드
- 프로그램 실행 도중 추가적인 처리를 해야할 때 들어가는 간접적인 처리 시간 · 메모리 등을 말한다.
- 가령 A를 실행하는 데 10초가 걸리는데, 안전성을 위해 부가적으로 B라는 처리를 추가해 결과적으로 15초의 시간이 걸렸다면, 오버헤드는 5초가 된다.
- 해결책 → KeepAlive
- 지정된 시간동안 서버와 클라이언트 간 패킷 교환이 없을 경우 주기적으로 패킷을 보내 클라이언트의 상태를 체크하는 것
- 패킷에 반응이 없으면 접속을 끊는다.
- 여전히 메모리 사용에 대한 이슈가 남아있다.
- 비신뢰성
- 무상태 (Stateless)
- HTTPS의 개념과 원리
- HTTP는 암호화 과정이 없어, 누군가 전송 중인 데이터를 가로채면 누구나 데이터를 읽을 있다는 보안 이슈를 가지고 있다.
- HTTPS는 HTTP의 이런 보안적 문제를 해결한 프로토콜
- HTTP를 SSL(Secure Sockets Layer) 프로토콜 위에서 돌아가도록하여 클라이언트와 서버가 주고받는 텍스트를 암호화하는 방식으로 구현
- 즉, HTTPS는 HTTP 프로토콜 + SSL 프로토콜
- SSL 프로토콜 (SSL 인증서)
- SSL 프로토콜은 SSL 인증서를 사용해 작동한다.
- SSL 인증서 : 클라이언트와 서버간의 통신을 제 3자, 즉 검증된 민간 기업이 보증해주는 문서
- SSL/TLS Handshake
- SSL 인증서에는 서비스의 정보(인증서를 발급한 민간 기업, 서비스의 도메인 등)와 서버의 공개키가 포함되어 있다.
- 이 정보들은 해당 기업에 의해 암호화된다.
- 이때 공개키 암호화 기법이 사용되는데, 특이하게 CA의 비공개키로 암호화가 진행된다.
- 이는 브라우저가 보유한 검증된 CA 공개키에 의해 복호화 된다. (cf. 브라우저는 신뢰된 CA 기업의 공개키는 모두 보유하고 있다.)
- 브라우저가 보유한 CA 기업의 공개키로 복호화가 가능하다는 것은 그 데이터가 공개키와 쌍을 이루는 비공개키를 통해 암호화되었음을 인증하는 것과 같다. 즉, 해당 인증서가 CA 기업으로부터 왔음이 증명된 것.
- 사이트를 신뢰할 수 있음이 확인되었으므로 클라이언트는 해당 공개키를 활용해 서버와 소통하며 대칭키인 ‘세션키’를 생성하고 이를 활용해 통신을 진행한다.
$\color{#f08080}{알고리즘 - 큐: 기능 개발}$
- IDEA
- 뒤에 있는 기능이 앞에 있는 기능보다 먼저 개발될 수 있고, 이때 뒤에 있는 기능은 앞에 있는 기능이 배포될 때 함께 배포됩니다. → 아 빼박 큐임 ^^
- 근데 큐 아니어도 각 기능별 소요일 구하고 이전 기능보다 소요일이 높을 때만 카운팅하면 풀릴 거 같은데? → 테스트 케이스만 통과하고 실제론 통과 못 함
- 걍 큐로 품…
- 첫 시도
def solution(progresses, speeds):
answer = [0]
days = []
# 각 기능별 소요일 구하기
for i in range(len(progresses)) :
if (100-progresses[i]) % speeds[i] == 0 :
days.append((100-progresses[i])//speeds[i])
else :
days.append((100-progresses[i])//speeds[i] + 1)
start = days[0]
for day in days :
if day <= start :
answer[-1] += 1
else :
answer.append(1)
return answer
- 정답 → 풀고 나서 다른 풀이도 찾아봤는데 똑같길래 패스함
def solution(progresses, speeds) :
answer = []
while progresses :
count = 0
progresses = [progresses[i] + speeds[i] for i in range(len(progresses))]
while progresses and progresses[0] >= 100 :
count += 1
progresses.pop(0)
speeds.pop(0)
if count > 0 :
answer.append(count)
return answer
반응형
'Programming > TIL and WIL' 카테고리의 다른 글
| 파이썬: 데코레이터, 가변 객체와 불변 객체, set 자료형 vs. dict 자료형, list 자료형 vs. tuple 자료형, assert와 raise (0) | 2023.02.07 |
|---|---|
| TIL - 기술 면접 준비1: TCP, UDP, 3-way handshake / 알고리즘 - 큐 : 프린터 (0) | 2023.02.05 |
| TIL: pathlib, with~as, swagger, re_path (0) | 2023.02.02 |
| TIL : 알고리즘 문제 (포도주 시식, 더 맵게) (0) | 2023.02.01 |
| TIL : 프로그래머스 알고리즘 문제 (0) | 2023.01.31 |