1. 지수 백오프 알고리즘을 설명하시오
지수 백오프는 네트워크 상에서 일시적인 오류가 발생했을 때, 재시도 간격을 점진적으로 늘려가며 재시도를 수행하는 알고리즘이다. 이 방법은 주로 네트워크의 혼잡을 피하거나, 서버가 과부하 상태일 때 과도한 요청을 방지하기 위해 사용된다. 이 방법의 핵심은, "지수적으로" 대기 시간을 늘리는 것이다. 네트워크 통신 중 오류가 발생할 경우, 클라이언트는 보통 재시도를 통해 이를 해결하려고 한다. 하지만 모든 클라이언트가 동시에 재시도를 한다면, 서버는 한꺼번에 많은 요청을 처리해야 하므로 부하가 증가할 수 있다. 이러한 현상을 '재시도 폭주'라고 하며, 이를 방지하기 위해 지수 백오프가 필요하다. 지수 백오프는 '재시도 폭주'를 방지하고, 네트워크와 서버의 부하를 줄이는 데 큰 도움이 된다. 또한, 과도한 요청으로 인한 비용 증가를 막을 수 있다. 이 밖에도, 지수 백오프를 사용하면 서버와 클라이언트 사이의 트래픽을 좀 더 효과적으로 관리할 수 있다.
2. 이진 트리와 이진 탐색 트리(BST)의 차이점은 무엇인가요?
이진 트리는 각각의 노드가 최대 두 개의 자식 노드를 가지는 트리 자료 구조입니다. 이진 탐색 트리는 기존 이진 트리에서 왼쪽 자식 노드는 부모 노드보다 작고, 오른쪽 자식 노드는 부모 노드보다 큰 특징을 가집니다.
3. 데이터베이스에서 Index는 무엇이며 왜 사용하나요?
인덱스란 추가적인 쓰기 작업과 저장 공간을 활용하여 데이터베이스 테이블의 검색 속도를 향상시키기 위한 자료구조입니다.
3-1. 언제 사용하며 어떻게 구현할 수 있나요?
규모가 작지 않은 테이블에 사용하면 좋고, 데이터 조작(select insert update delete)이 자주 일어나지 않고 다른 테이블과 join 하거나 조건문에 자주 참조하며 중복이 적은 필드에 사용합니다.
인덱스는 보통 해시 테이블, B+ Tree를 통해 구현합니다.
3-2. 그럼 모든 컬럼에 대해 Index를 설정할 수 있을까요?
앞서 말씀드렸듯이 데이터 조작(select insert update delete)이 자주 일어나지 않고 다른 테이블과 join 하거나 조건문에 자주 참조하며 중복이 적은 필드에 사용해야 합니다. 그렇지 않으면 데이터 조작을 수행하면서 실제 레코드 수에 비해 더 많은 인덱스를 가지게 되면서 성능이 저하될 수 있습니다.
4. SQL 과 NoSQL 데이터베이스는 어떤 차이가 있나요? 그러한 차이를 고려했을 때 어떤 경우에 SQL 과 NoSQL 데이터베이스를 사용해야 하는지 설명해주세요.
SQL 데이터베이스는 관계형 데이터베이스이고, NoSQL 데이터베이스는 비관계형 데이터베이스입니다.
SQL 데이터베이스는 구조화 쿼리 언어(SQL)를 사용하며 미리 정의된 스키마가 있습니다. NoSQL 데이터베이스에는 구조화되지 않은 데이터를 위한 동적 스키마가 있습니다.
SQL 데이터베이스는 수직적 확장이 가능한 반면, NoSQL 데이터베이스는 수평적 확장이 가능합니다.
SQL 데이터베이스는 테이블 기반인 반면, NoSQL 데이터베이스는 문서, 키-값, 그래프 또는 와이드 컬럼 스토어입니다.
SQL 데이터베이스는 다중 행 트랜잭션에 더 적합한 반면, NoSQL은 문서나 JSON과 같은 비정형 데이터에 더 적합합니다.
5. 가장 좋아하는 정렬 알고리즘이 있나요? 왜 그 알고리즘을 좋아하나요? 해당 알고리즘의 동작 방식에 대해서 설명해주실 수 있나요?
6. 도서관에서 책에 대한 정보를 저장하는 웹사이트를 개발한다고 하고 각 도서에 대한 정보를 담는 자료구조를 만들어야할 때, 어떤 자료구조를 왜 사용할 것인가요?
7. 정렬 알고리즘에서 일반적으로 가장 빠른 정렬 알고리즘을 설명해주세요.
일반적으로 big-O 표기상 O(nlogn)의 시간 복잡도를 가지는 정렬 알고리즘이 가장 빠른 알고리즘이며, 이에 해당하는 알고리즘에는 merge sort와 quick sort가 있습니다.
8. 논리적 설계와 물리적 설계에 대해서 상세히 설명해주세요.
9. SQL에서 JOIN에 대해서 상세히 설명해주세요.
10. 퀵 소트 알고리즘에서 최악의 시간복잡도를 방지하기 위한 방법에 대해서 설명해주세요.
'CS' 카테고리의 다른 글
| [WIL] 20240325 ~ 20240329 7주차 정리 (0) | 2024.03.29 |
|---|---|
| [TIL] 20240328 32일차 (0) | 2024.03.28 |
| [TIL] 20240326 30일차 (0) | 2024.03.26 |
| [TIL] 20240325 29일차 (0) | 2024.03.25 |
| [WIL] 20240318 ~ 20240322 6주차 정리 (0) | 2024.03.22 |