[Node.js_6기 사전캠프] 개발 아티클 스터디 -웹개발 편

2024. 6. 21. 17:25[Node.js_6기 사전캠프]

글을 시작하기 전에

팀 과제는 어떻게 진행해야 하는지 알 수가 없어서, 아티클 예시 중 '웹개발' 태그가 붙은 아티클 3개를 읽고 정리해보았다.


1. [개념 콕] RDB, RDBMS, NoSQL

 

a. 데이터베이스(DB)는 공유 및 활용을 목적으로 하는 디지털 방식으로 저장 및 관리되는 데이터들을 말한다. 그 형태에 따라 관계형 데이터베이스(RDB/Relation Database), 비관계형 데이터베이스(NoSQL/Not Only SQL)로 나뉜다.

 

b. RDB의 경우, 양식에 맞게 작성된 엑셀 파일을 생각하면 편하다. 고정된 형식을 사용하기 때문에 테이블 구조를 수정하기 어려워, 목적에 맞는 구조를 처음부터 잘 잡는 것이 중요하다. 동일한 데이터를 중복으로 저장하지 않는 만큼 저장 공간을 효율적으로 사용할 수 있으나, 여러 테이블에서 데이터를 가져오려면 복잡한 쿼리가 필요하다. 절대적인 데이터 양이 많아질 경우 서버 자체를 확장해야 할 가능성이 높다. 

 

c. NoSQL은 주로 소셜 미디어 데이터와 같은 대용량의 데이터를 빠르게 처리하는 데 사용된다. 처리하는 데이터의 양이 많은 만큼, 유연성과 빠른 데이터 읽기 속도 그리고 수평 확장(서버를 추가하여 용량과 처리 성능을 높이는 방법)에 중점을 두는 특성을 가지고 있다. 다만, 유연성에 한계가 있기 때문에 데이터 구조 결정을 미루면 후에 복잡한 문제가 발생할 수 있다. 여러 곳에 중복 데이터를 저장하는 만큼 업데이트 및 수정이 RDB에 비해 번거롭고 어렵다는 단점이 있다.


> RDB의 경우 1)상대적으로 적은 데이터 양과 2)데이터 간의 연관성 분석/관리가 중점인 B2B 업계에 적합할 것으로 보인다.  

> NoSQL의 경우 1)상대적으로 많은 데이터 양과 2)빠른 처리가 중점인 B2C 업계에 적합할 것으로 보인다.


2. [개념 콕] 배열과 연결 리스트

 

a. 데이터들을 모아서 관리하기 위한 방식에는 정적인 자료구조의 '배열(Array)'과 동적인 자료구조의 '연결리스트(Linked List)'가 있다. 

 

b. 배열은 책장에 비유할 수 있다. 책장의 크기 이상으로 책을 넣을 수 없는 것처럼, 미리 정해진 크기 이상으로 요소를 저장할 수 없다. 또한 이미 진열된 책들 사이에 책을 넣거나 빼려면 다른 책들을 옮겨야 하는 것처럼, 요소를 추가하거나 삭제하려면 다른 요소들이 이동되어야 한다. 그러나 인덱스 처리가 가능하여, 도서번호를 검색해서 찾듯 임의의 요소에 빠르게 접근이 가능하다는 장점이 있다.

 

c. 연결 리스트는 체인에 비유할 수 있다. 각각의 링을 간편하게 끊어내고 추가하여 원하는 형태와 길이의 체인으로 만들 수 있듯이, 유동적으로 크기를 관리하거나 데이터 추가 및 삭제가 빈번할 때 주로 사용한다. 노드라는 기본 단위를 사용하는데, 데이터를 저장하는 부분과 다음 노드 주소를 가리키는 포인터로 구성된다. 이러한 구조 덕분에 연속된 메모리 주소를 할당 받지 않아도 되며, 노드를 추가할 때 포인터만 변경하면 된다. 다만, 노드가 A>B>C와 같은 형태로 이루어져 있기 때문에 특정 노드에 접근하기 위해서는 순차적으로 접근해야 하는 만큼 접근 속도가 느리다는 단점이 있다.


> 배열과 연결 리스트의 방식이 크게 다르기 때문에, 전환하게 될 경우 비용과 시간이 크게 소모될 것으로 보인다. 현재 관리해야 하는 데이터의 양과 수정 빈도 뿐만 아니라, 미래에 변동될 수 있는 상황을 모두 고려하여 신중하게 선택해야 하지 않을까?


3. [개념 콕] 동시성과 병렬성

 

a. 동시성: 하나의 작업 내에서 여러 개의 서브태스크를 동시에 처리하여, 동시에 여러 작업이 처리되는 것처럼 보이게 하는 방식이다. 음식점에 주문이 여러개가 들어왔을 때, 요리사가 동시에 여러 요리를 동시에 조리하지만 한 번에 한 요리만 완성할 수 있는 것과 같다. 전혀 다른 독립적인 작업을 동시에 처리할 수는 없으며, 각각의 작업이 서로 의존성/유사성을 가진다. 

 

b. 멀티태스킹: 하나의 컴퓨터에서 CPU 시간을 분할하여 여러 프로그램이 동시에 실행되는 것처럼 보이도록 하는 방식이다. 음악을 들으면서 문서 작성 프로그램을 사용하는 것과 같다. 프로세스 또는 스레드 간의 독립성을 가진다.

 

c. 병렬성: 여러 CPU 혹은 CPU 코어를 사용하여 여러 작업을 병렬적으로 처리하는 방식이다. 각각의 작업이 독립적으로 실행되며, 서로 영향을 주지 않는다. 공장의 생산 라인에서 여러 대의 기계가 제품을 동시에 가공 및 조립하는 것과 같다. 모든 작업이 독립성을 가진다.


> 병렬성의 예시로 공장의 생산라인이 적절한지 잘 모르겠다. 생산 라인의 기계만 본다면 독립성을 가지고 움직이는 것이 맞다. 그러나 하나의 제품이 같은 라인을 타고 순차적으로 가공 및 조립되는 만큼 기계A와 기계B의 작업이 관계성과 의존성을 가지기도 한다. 앞선 공정의 영향을 받는 공장의 생산 라인보다 더 좋은 예시가 없을까?