시간복잡도,공간복잡도에 대해 설명해주세요
- 알고리즘의 성능을 평가하는 두가지 중요한 기준
시간 복잡도
- 알고리즘이 실행되는 데 걸리는 시간을 데이터크기(N)와의 관계로 표현한것
- Big-O 표기법을 사용해 최악의 경우에서의 수행시간을 나타냅니다
- Ex)
- O(1)
- 데이터 크기에 관계없이 항상 일정한 시간
- ex) 배열의 인덱스를 활용한 특정 요소 접근
- O(n)
- 데이터 크기에 비례해 실행 시간 증가
- ex) 배열에서 특정 값을 찾기위해 접근 시간
- O(log n)
- 데이터 크기가 커질수록 실행시간이 천천히 증가
- 이진 탐색: 정렬된 배열 또는 리스트에서 원하는 값을 효율적으로 찾기위한 알고리즘
- O(n^2)
공간 복잡도
- 알고리즘이 실행되는 동안 사용하는 메모리 양을 데이터 크기(n)와의 관계로 표현한것
- 구성 요소
- 고정공간 (Fixed Space):
- 알고리즘이 항상 사용하는 메모리 (상수 공간)
- Ex) 변수, 상수, 고정크기의 배열
- 가변 공간 (Variable Space):
- 표현 방식
- 시간복잡도와 마찬가지로 Big-O 표기법 사용
- 상수 공간 O(1)
- 입력 크기에 관계없이 일정한 메모리 사용
- Ex) 두 변수만 사용하여 배열 요소 합 계산
- 선형 공간 O(n)
- 입력 크기에 비례해 메모리 사용량 증가
- Ex) 새로운 배열에 데이터 복사
ArrayList,LinkedList의 차이점을 설명해주세요
ArrayList
- 메모리의 연속적인 특성
- 동적 배열 기반 선형 자료구조
- 인덱스기반 조회시 O(1) 의 속도
- 중간삽입, 중간삭제시 O(n)의 속도
- 중간데이터 삭제후, 앞의 데이터를 끌어와서, 메모리의 연속적인 특성을 살려야하기 때문에
LinkedList
- 메모리의 비연속적인 특성
- 포인터 기반 선형 자료구조
- 인덱스 기반 조회불가
- 데이터 기반 조회시 O(n)
- 중간삽입, 중간삭제시 O(1)
HTTP 프로토콜에 대해 설명해주세요
- Hyper-Text-Transfer-Protocol
- 데이터를 주고받기위한 프로토콜
- 서버 - 클라이언트 모델을 따릅니다
- Stateless, Connectionsless의 특징을 가지고있음
Stateless, Connectionless의 특징에 대해 설명해주세요
Stateless
- 서버가 이전 상태를 기억하고있지않아, 각 요청이 독립적이며 확장성이 뛰어납니다
- 확장성이 왜 뛰어나나요?
- 서버는 클라이언트의 상태를 기억하고있지 않기때문에 (종속되지않음), 따라서 새로운 서버를 똑같이 증설해주기만 하면 되기때문에 확장성이 뛰어나다고 말할 수 있습니다.
Connectionless
- 서버는 한번의 요청처리후, 연결을 끊는 구조로서, 서버의 리소스를 절약할 수 있습니다
HTTP와 HTTPS의 차이점은 무엇인가요?
HTTP
- 평문 데이터를 전송하는 프로토콜이기 때문에, 중간에 데이터를 제3자가 가로채가 볼 수 있다
- HTTP프로토콜이 직접 TCP프로토콜과 통신하였음
HTTPS
- HTTPS프로토콜이 SSL과 통신하고, SSL이 TCP프로토콜과 통신하는 방식
쿠키와 세션의 차이점에 대해 설명해주세요
- 공통점
- 웹 애플리케이션에서 사용자 상태를 유지하기 위한 기술
쿠키
- 브라우저에 저장되는 작은 데이터파일로, 서버가 사용자의 상태 정보를 클라이언트에 저장하고, 필요할때마다 서버로 전송하는 기술
세션
- 서버에 사용자 상태 정보를 저장하고, 클라이언트는 세션 ID만 서버로 전송해 서버에서 상태를 유지
TCP/UDP의 차이점을 설명해주세요
TCP
- 연결형 서비스
- 3-way handshaking 과정을 통해 연결을 설정하기 때문에 높은 신뢰성 보장
- 속도가 느림
- 파일교환에서 많이사용됨
UDP
- 비연결형 서비스
- 3-way handsahking 과정을 하지않아, 신뢰성이 보장되지 않음
- 데이터의 수신 여부를 파악하지않기 때문에 속도가 빠름
- 실시간성이 중요한 스트르밍에 사용됨
3핸드쉐이크의 통신방식이 어떻게 이루어지는지 설명해주세요
- 정의
- TCP 네트워크에서 통신하는 장치가 서로 연결이 잘되었는지 확인하는 방법
- 클라이언트 -> 서버
- SYN(승인요청)을 보내며 자신의 ISN (클라이언트의 고유번호)인 X를 보냄
- 서버 -> 클라이언트
- 서버는 클라이언트의 ISN인 X + 1을한후, 서버자신의 ISN인 Y를 보냄
- 클라이언트 -> 서버
- 클라이언트는 X+1, Y+1한 플래그값을 서버로 보내며 연결완료
4핸드쉐이크 통신방식에 대해 설명해주세요
- 정의
- TCP 네트워크에서 통신하는 장치의 연결을 해제하는 방법
- 클라이언트가 연결을 닫으려고할때 실행됨
- 클라이언트 -> 서버
- FIN으로 설정된 세그먼트를 보냄
- FIN_WAIT_1 상태로 들어가며, 서버의 응답 대기
- 서버 -> 클라이언트
- 서버가 FIN 수신을 확인했다는 의미로, ACK 승인 세그먼트를 보냄
- CLOSE_WAIT 상태에 들어간다
- 클라이언트
- 서버 -> 클라이언트
- 서버가 더이상 보낼데이터가 없다고 판단한순간, 클라이언트에게 FIN 설정된 세그먼트 전달
- 클라이언트
- FIN으로 설정된 세그먼트 수신시, TIME_WAIT 상태 돌입
- 클라이언트 -> 서버
- ACK를 보낸후, 서버는 CLOSED 상태가된다
- 이후 클라이언트는 어느정도의 시간을 대기한후, 연결이 닫히고 클라이언트와 서버의 모든 자원 연결이 해제된다
참조 문헌
https://dev-coco.tistory.com/161