본문 바로가기

전체 글377

[알고리즘] 버블 정렬 (Bubble Sort, 개념과 장단점, 과정, 자바 코드 구현, 시간복잡도, 공간복잡도) 목차 버블 정렬이란? 버블 정렬 과정 버블 정렬 구현 (자바 코드) 시간복잡도 공간복잡도 정렬 알고리즘 비교 1. 버블 정렬이란? 연속하는 두 개의 원소를 오름차순 혹은 내림차순으로 비교하며 교환한다. 정렬되지 않는 값들 중 가장 큰 값(혹은 가장 작은 값)이 끝으로 이동하게 된다. (특징) 최선, 평균, 최악의 시간복잡도는 모두 O(n^2)이다. 직관적이나 거의 사용하지 않는 정렬 알고리즘이다. (장점) 알고리즘이 단순하고, 구현이 쉽다. 배열 내에서 교환하는 방식(제자리 정렬)으로 추가적인 메모리 공간을 필요로 하지 않는다. (단점) 배열의 길이가 길어질수록 지수적으로 시간이 증가하기 때문에 비효율적이다. 하나의 요소가 끝으로 이동하기 위해서 배열의 모든 요소와 교환이 이뤄져야 한다. 2. 버블 정렬.. 2024. 2. 28.
[알고리즘] 삽입 정렬 (Insertion Sort, 개념과 장단점, 과정, 자바 코드 구현, 시간복잡도, 공간복잡도) 목차 삽입 정렬이란? 삽입 정렬 과정 삽입 정렬 구현 (자바 코드) 시간복잡도 공간복잡도 정렬 알고리즘 비교 1. 삽입 정렬이란? 선택한 요소를 이미 정렬된 요소들과 비교해 알맞은 위치에 삽입한다. 선택한 요소의 앞쪽 요소들은 이미 정렬된 상태를 유지하고 있으므로, 매 순서마다 바로 이전 인덱스 요소와 비교하여 원소가 삽입될 올바른 위치를 찾아낸다. (특징) 최선의 시간복잡도는 O(n)이며, 평균 및 최악의 시간복잡도는 O(n^2)이다. O(n^2)의 시간복잡도를 가지는 선택 정렬과 버블 정렬에 비해 상대적으로 속도가 빠르다. (장점) 알고리즘이 단순하고, 구현이 쉽다. 이미 정렬된 배열일 경우, 매번 1번의 비교로 정렬되기 때문에 O(n)의 시간복잡도를 가지며 매우 효율적이다. 배열 내에서 교환하는 방.. 2024. 2. 28.
[알고리즘] 선택 정렬 (Selection Sort, 개념과 장단점, 과정, 자바 코드 구현, 시간복잡도, 공간복잡도) 목차 선택 정렬이란? 선택 정렬 과정 선택 정렬 구현 (자바 코드) 시간복잡도 공간복잡도 정렬 알고리즘 비교 1. 선택 정렬이란? 정렬되지 않은 값들 중에서 최솟값(혹은 최댓값)을 찾고, 정렬되지 않은 값 중 제일 앞에 위치한 값과 교체한다. 정렬되지 않는 값들 중 제일 앞쪽 위치, 즉 해당 순서에 원소를 넣을 위치가 이미 정해져 있다. (특징) 최선, 평균, 최악의 시간복잡도는 모두 O(n^2)이다. 비교 횟수는 많지만, 실제 교환되는 횟수는 적다. 따라서 똑같은 O(n^2)의 시간복잡도를 가지는 버블 정렬보다 적은 시간이 소요된다. (장점) 알고리즘이 단순하고, 구현이 쉽다. 정렬된 배열을 반대로 재정렬할 때 효율이 좋다. 배열 내에서 교환하는 방식(제자리 정렬)으로 추가적인 메모리 공간을 필요로 하.. 2024. 2. 28.
[네트워크] 검색 창에 google.com을 치면 일어나는 일 우선 클라이언트는 요청을 보내기 위해 google.com에 대한 IP 주소를 DNS를 통해 알아냅니다. 전달받은 IP 주소를 패킷에 포함하여 네트워크에서 경로를 찾아가고, 공유기와 같은 마지막 라우터 장비에 도달하면 MAC 주소를 이용해 최종적으로 패킷이 서버에 도달할 수 있습니다. 처음 전달받은 패킷은 google.com에 대한 요청 패킷이 아니라, TCP 연결에 대한 요청 패킷입니다. 따라서 3-way handshaking 과정인 syn 패킷, syn+ack 패킷, ack 패킷을 주고 받습니다. 이로써 클라이언트와 서버의 TCP 연결이 수립이 되었고, 클라이언트는 google.com에 대한 요청 패킷을 보냅니다. 서버는 클라이언트의 요청을 처리한 후에 데이터를 담아 응답함으로써 클라이언트는 사이트에 .. 2024. 2. 19.
[네트워크] DNS란? (도메인과 URL 차이, URL 구성, 도메인 구조와 규칙, DNS 종류, DNS 동작원리, DNS가 분산 데이터베이스 구조를 가지는 이유) 목차 URL이란? URL 구성 DNS란? 도메인 구조와 규칙 DNS 종류 DNS 동작 원리 DNS가 분산 데이터베이스 구조를 가지는 이유 1. URL이란? 검색 창에 google.com을 치는 것과 URL은 다르다. URL은 google.com과 같은 도메인 네임을 포함한 인터넷상에서 자원을 요청하기 위한 규약이다. google.com이라는 도메인 네임은 자원이 어디에 존재하는지 나타내는지를 나타내는 경로이고, 자원을 어떻게 송수신할지에 대한 정보인 프로토콜 등을 포함한 것이 URL이다. 2. URL 구성 Protocol : 자원을 요청해야 하는 프로토콜 Domain name : 자원의 주소 [옵션] Port : 자원에 접근할 수 있는 포트 번호 Path : 자원이 위치하는 경로 Parameters : .. 2024. 2. 19.
[네트워크] TCP와 UDP, TCP 헤더 면접 질문 및 답변 정리 TCP와 UDP에 대해 설명해주세요. 더보기 TCP와 UDP는 OSI 7계층 중 전송 계층에서 사용되는 프로토콜입니다. TCP는 서버와 클라이언트라는 두 엔드포인트 사이에 3-way handshake로 TCP 연결을 이루고, 흐름제어, 혼잡제어, 오류제어를 통해 데이터의 신뢰성을 보장합니다. 이에 반해 UDP는 엔드포인트 간 연결을 이루지 않고, 일방향적인 데이터 전달이 이뤄집니다. 따라서 TCP에 비해 속도가 빠르다는 장점을 가지고 있습니다. TCP와 UDP는 각각 언제 사용하나요? 더보기 우선 UDP는 비연결지향적이기 때문에, 속도가 빠르다는 강점을 가지고 있습니다. 이러한 특징으로 스트리밍과 같은 실시간 서비스에 적합합니다. TCP는 UDP를 사용하지 않는 대부분의 상황에서 사용됩니다. HTTP나 .. 2024. 2. 19.
[네트워크] OSI 7계층 면접 질문 및 답변 정리 OSI 7계층이란 무엇이죠? 더보기 OSI 7계층은 국제표준화기구에서 데이터가 송수신되는 과정을 7개의 계층으로 나눠 정리한 것입니다. 1계층인 물리 계층부터 시작해, 데이터링크 계층, 네트워크 계층, 전송 계층, 세션 계층, 프레젠테이션 계층, 애플리케이션 계층으로 나뉘어 있습니다. 각 계층에 대해 간단하게 설명드리겠습니다. 1계층인 물리 계층은 데이터를 전기적 신호로, 혹은 전기적 신호를 데이터로 변환하는 과정이 이뤄집니다. 2계층인 데이터링크 계층은 네트워크 상에서 데이터가 송수신될 때 이동하는 각 노드들의 간 데이터의 신뢰성을 보장합니다. 3계층인 네트워크 계층은 데이터가 송수신되는 각 컴퓨터에 주소를 부여하고, 네트워크 상에서 데이터가 이동하는 경로를 설정합니다. 4계층인 전송 계층은 데이터가 .. 2024. 2. 19.
[네트워크] 토큰과 토큰 기반 인증이란? (토큰 기반 인증 필요성, 특징과 장단점, 세션과 토큰 인증 방식 차이, JWT 개념과 구조, 엑세스 토큰과 리프레시 토큰) 목차 토큰 기반 인증 필요성 토큰과 토큰 기반 인증이란? 토큰 기반 인증 과정 세션 인증 방식과 토큰 인증 방식 차이 JWT란? JWT 사용 시 주의사항 엑세스 토큰과 리프레 토큰 1. 토큰 기반 인증 필요성 웹에서 쿠키와 세션을 이용해 클라이언트와 서버 사이의 상태 정보를 저장하는데, 상태 정보를 이용하여 동작하는 가장 흔한 기능은 단연코 '인증과 인가'이다. 로그인에 성공한 사용자가 사이트를 이용하기 위해 권한을 부여받은 것을 '인가', 신원을 증명하는 행위를 '인증'라고 한다. 쿠키는 클라이언트에 데이터를 저장하기 때문에, 탈취와 변조에 대한 위험성을 지닌다. 따라서 인증과 인가를 위해 사용하기보다 팝업 창에서 오늘 하루 그만 보기, 장바구니 등과 같은 기능에 사용된다. 세션은 데이터베이스를 이용해.. 2024. 2. 16.
[네트워크] 쿠키와 세션 (쿠키와 세션의 필요성, 쿠키/세션 개념과 동작방식, 쿠키와 세션 차이, 쿠키를 사용하는 이유, 세션을 사용하는 이유, 웹캐시란?) 목차 쿠키와 세션의 필요성 : HTTP Stateless, Connectionless 쿠키 개념과 동작 방식 세션 개념과 동작 방식 쿠키와 세션 차이 쿠키를 사용하는 이유 세션을 사용하는 이유 웹캐시란? 1. 쿠키와 세션의 필요성 : HTTP Stateless, Connectionless HTTP는 웹 상에서 서버와 클라이언트 간 데이터를 송수신하기 위해 사용되는 프로토콜이다. HTTP는 서버와 클라이언트 구조를 띄며, Stateless하고 Connectionless하다는 특징을 가지고 있다. 그중 요청에 대한 응답이 끝나면 연결을 끊어버리는 Connectionless와 서버가 클라이언트의 상태를 저장하고 있지 않다는 Stateless 특성으로 인해, 클라이언트는 서버와 송수신할 때 요청하는 데이터 외에.. 2024. 2. 16.