
NoSQL과 RDBMS는 데이터를 저장, 조회, 관리하는 방식에 있어 서로 다른 접근 방식을 제공합니다. 이들 각각의 특징, 장단점, 그리고 차이점을 아래에서 상세히 설명하겠습니다.
[1] WhaTap - RDBMS와 NoSQL의 차이 | 와탭 블로그 (https://www.whatap.io/ko/blog/173/)
[2] TISTORY - [Database] RDBMS와 NoSQL의 차이점 (https://khj93.tistory.com/entry/Database-RDBMS%EC%99%80-NOSQL-%EC%B0%A8%EC%9D%B4%EC%A0%90)
[3] velog - NoSQL과 RDBMS의 특징과 차이점에 대해서 장, 단점을 ... (https://velog.io/@coco_116/NoSQL%EA%B3%BC-RDBMS%EC%9D%98-%ED%8A%B9%EC%A7%95%EA%B3%BC-%EC%B0%A8%EC%9D%B4%EC%A0%90%EC%97%90-%EB%8C%80%ED%95%B4%EC%84%9C-%EC%9E%A5-%EB%8B%A8%EC%A0%90%EC%9D%84-%EB%93%A4%EC%96%B4-%EC%84%A4%EB%AA%85%ED%95%B4%EC%A3%BC%EC%84%B8%EC%9A%94)
[4] < Hyun / Log > - RDBMS와 NoSQL의 차이점 및 개념 완벽 정리 (https://hstory0208.tistory.com/entry/RDBMS%EC%99%80-NoSQL%EC%9D%98-%EC%B0%A8%EC%9D%B4%EC%A0%90-%EB%B0%8F-%EA%B0%9C%EB%85%90-%EC%99%84%EB%B2%BD-%EC%A0%95%EB%A6%AC)
배열은 데이터를 연속적인 메모리 공간에 순서대로 저장하는 데이터 구조입니다. 각 데이터 항목은 인덱스를 통해 접근할 수 있으며, 이 인덱스를 사용하여 빠르게 특정 요소를 검색할 수 있습니다. 배열은 고정된 크기를 가지거나, 동적으로 크기가 조정될 수 있는 동적 배열(variant)도 있습니다.
let arr = [1, 2, 3];
arr.push(4); // 배열 끝에 요소 추가
console.log(arr); // [1, 2, 3, 4]
arr.pop(); // 배열 끝의 요소 제거
console.log(arr); // [1, 2, 3]연결 리스트는 데이터 항목들이 포인터를 이용해 연결된 구조를 가지는 데이터 구조입니다. 각 요소(노드)는 데이터와 다음 노드를 가리키는 포인터(또는 이전 노드를 가리키는 포인터를 추가로 가지는 양방향 연결 리스트의 경우도 있음)를 포함합니다. 연결 리스트는 동적으로 크기가 변할 수 있으며, 삽입과 삭제가 배열에 비해 상대적으로 간단합니다.
접근: 첫 번째 노드부터 시작하여 원하는 노드까지 순차적으로 이동해야 하므로 평균적으로 O(n) 시간이 소요됩니다.
삽입/삭제: 특정 위치에 노드를 삽입하거나 삭제할 때, 해당 노드의 이전 노드와 다음 노드를 연결만 시켜주면 되므로 O(1) 시간이 소요됩니다(단, 삽입/삭제 위치를 찾는 데에는 O(n) 시간이 소요될 수 있습니다).
예시 (JavaScript):
class Node {
constructor(data) {
this.data = data;
this.next = null;
}
}
class LinkedList {
constructor() {
this.head = null;
}
// 연결 리스트 끝에 새 노드 추가
append(data) {
let newNode = new Node(data);
if (this.head === null) {
this.head = newNode;
} else {
let current = this.head;
while (current.next) {
current = current.next;
}
current.next = newNode;
}
}
}
let list = new LinkedList();
list.append(1);
list.append(2);
배열은 인덱스를 통한 빠른 접근이 필요할 때 유리하고, 메모리가 연속적으로 할당되므로 캐시 효율성이 높습니다. 반면, 삽입과 삭제가 빈번히 발생하는 경우나 동적으로 크기를 변화시켜야 할 때는 연결 리스트가 더 효율적일 수 있습니다. 각각의 특성을 이해하고 상황에 맞게 적절히 선택하여 사용하는 것이 중요합니다.
이런 자료를 참고했어요.
[1] velog - Array, LinkedList에 대해 설명해주시고 각각 어떻게 사용 ... (https://velog.io/@theon2/Array-LinkedList%EC%97%90-%EB%8C%80%ED%95%B4-%EC%84%A4%EB%AA%85%ED%95%B4%EC%A3%BC%EC%8B%9C%EA%B3%A0-%EA%B0%81%EA%B0%81-%EC%96%B4%EB%96%BB%EA%B2%8C-%EC%82%AC%EC%9A%A9%ED%95%98%EB%8A%94%EC%A7%80-%EB%A7%90%EC%94%80%ED%95%B4%EC%A3%BC%EC%84%B8%EC%9A%94)
[2] TISTORY - 간략 설명! 배열(Array)과 연결 리스트(Linked List)에 대해서 ... (https://blacklobster.tistory.com/8)
[3] velog - [자료구조] 연결 리스트 vs 배열 / JavaScript로 ... (https://velog.io/@sunohvoiin/%EC%9E%90%EB%A3%8C%EA%B5%AC%EC%A1%B0-%EC%97%B0%EA%B2%B0-%EB%A6%AC%EC%8A%A4%ED%8A%B8-vs-%EB%B0%B0%EC%97%B4-JavaScript%EB%A1%9C-%EC%97%B0%EA%B2%B0-%EB%A6%AC%EC%8A%A4%ED%8A%B8-%EA%B5%AC%ED%98%84%ED%95%98%EA%B8%B0-Linked-List-Array)
[4] 티스토리 - [면접 꿀팁] 배열(Array)과 링크드 리스트(Linked list)의 특징 (https://thecho7.tistory.com/entry/%EB%A9%B4%EC%A0%91-%EA%BF%80%ED%8C%81-%EB%B0%B0%EC%97%B4Array%EA%B3%BC-%EB%A7%81%ED%81%AC%EB%93%9C-%EB%A6%AC%EC%8A%A4%ED%8A%B8Linked-list%EC%9D%98-%ED%8A%B9%EC%A7%95)