대규모 시스템 설계를 위한 노트시리즈(1) - 데이터베이스의 이용

yimo22·2023년 1월 18일
2

최근에 책을 하나 읽고 있는데, 내용이 너무 좋고 SW개발자라면 한번쯤은 고민해봐야할 문제일 것 같아서 정리해서 올려보려고 합니다. 알고리즘, 프레임워크의 사용 등 다양한 요소들이 SW개발자에게 요구되는 사항이지만 결국은 SW 시스템을 설계하는 아키텍쳐를 공부하고 이해해서 설계하는 것이 궁극적인 목적이고 세부 기술사항들(알고리즘, 기술스택)이 연동된다고 생각합니다.

가상 면접 사례로 배우는 대규모 시스템 설계 기초 (알렉스 쉬 저/ 이병준 역 - 인사이트)
링크텍스트


데이터 통신의 과정

보통의 유저를 제외하고, IT를 전공하거나 다소 관련이 있는 사람이라면 우리가 사용하는 인터넷이 다음과 같은 과정을 통해 data를 주고 받는것을 알 수 있다.
1. 사용자는 도메인이름 (ex : naver.com) 을 이용하여 웹사이트에 접속
2. DNS에 질의하여 도메인이름(DN)을 DNS에 질의하여 IP주소를 반환받는다.
3. 해당 IP주소로 Http 요청이 전달된다.
4. 요청을 받은 웹 서버는 HTML 페이지나 JSON 형태의 응답을 반환한다.

여기서, 실제 요청은 2가지로 분리가 되는데 1. 웹 Application 과 2. Mobile Application 이다.

웹 어플리케이션 : 비즈니스 로직, 데이터 저장 등을 처리하기 위해서 서버 구현용 언어(Java, Python 등등)을 사용하고 유저에게 보여주는 프레젠테이션용으로 HTML, JS 등을 사용한다.
모바일 앱 : 모바일 앱과 웹 서버간의 통신을 위해서는 HTTP 프로토콜을 이요한다. HTTP프로토콜을 통해서 반환될 응답 데이터의 포맷으로는 보통 JSON(JavaScript Object Notation)을 사용한다.


데이터 베이스의 이용

사용자가 증가하면 한대의 서버로는 이를 충당할 수 없다. 즉, 여러대의 서버를 두어야 한다. 이를 위해 Data를 저장하는 별도의 서버(DB서버) 와 웹/모바일 트래픽을 처리하는 서버(웹계층 서버)를 분리하여 확장성을 확보한다.

이때, "DB를 사용할 것인가?" 는 중요한 문제로 작용한다. 전통적인 관계형 DB (Relational DB) 와 비-관계형 DB 중에 고를 수 있다. 그렇다면 관계형 DB와 비관계형 DB의 차이는 무엇일까?

  • 관계형 DB (RDBMS)
    RDBMS는 DB를 행과 열로 관리한다. 즉, 자주 사용하는 엑셀 파일을 생각하면 쉽다. 행과 열을 사용하기 위해 RDBMS는 "스키마" 라는 데이터를 정형화하는 규약을 정하여 이에 맞게 데이터를 DB에 저장하여 관리한다. 여러개의 Table을 통해서 data들을 관리하며 이들의 data들의 중복과 이상을 줄이기 위해 DB는 정규화 를 하여 관리하게 된다. 정규화된 테이블은 join(조인) 이라는 과정을 통해 합칠 수 있다.

    • 대표적으로 mysql, oracle db, PostgreSQL 등이 있다.
  • 비관계형 DB (NoSql)
    Nosql은 관계형 DB와 달리 스키마가 없이 데이터가 관리된다는 것이다. 데이터를 저장하는데 사용되는 스키마가 없기에 "Key-value 저장", "그래프 저장소", "칼럼 저장소", "문서 저장소" 등의 방법을 통해서 데이터를 저장한다. NoSql은 일반적인 조인 연산을 지원하지 않는다. 또한 NoSql은 다음과 같은 특징을 갖는다.

    • 낮은 응답 지연 시간
    • 데이터의 Serialization/Deserialization 에 용이
    • 매우 많은 데이터 양을 저장할 수 있다.

즉, "스키마의 유무" 에 따라서 관계형 DB와 비관계형 DB가 나뉜다고 볼 수 있다. 데이터를 정형화하는 스키마의 부재로 인해 NoSql 은 수평적확장 (Scale Out)이 가능하여 방대한 양의 데이터를 저장하는데 적합하다. 또한 열/행 으로 관리하지 않기 때문에 많은 data를 갖는 DB에 대하여 이를 분산하는 것이 가능하다. 이로인해 분산된 DB로의 mapping을 잘 처리한다면 낮은 응답 지연시간을 갖게 된다는 장점을 갖는다.

반면에 스키마를 사용하는 관계형 DB는 해당 스키마의 제약조건으로 인해 수직적 확장(Scale Up)에 유리하며 data의 양이 많아질수록 table의 열이 많아져 이를 탐색하고 조인하는데 많은 지연시간을 갖게 된다. 또한 Scale Up 을 통한 DB 확장은 고성능의 CPU/RAM 으로 갈수록 비용이 천문학적으로 증가한다는 단점도 갖고 있다.

그렇다고 무조건 NoSQL만 사용해야 하는가?

"상황에 따라 맞는 DB를 선택하여 사용해야한다." 설계하고자 하는 시스템의 트래픽과 데이터의 형태에 따라 적절한 DB를 선택해야 할 것이다. 위에서는 관계형 데이터베이스의 단점만 많이 부각한것 같은데, 사실 관계형 데이터베이스는 정규화라는 작업을 통해서 데이터의 무결성을 보장해주고, 지난 40년 이상동안 DB시장에서 살아남은 DB로서 그 장점과 성능에 대하여 많은 자료들이 증명되었다.

※ 잘못된 정보나, 오타는 댓글에 작성해주시면 감사하겠습니다. 추가로 보충할 정보도 남겨 주신다면 수정해서 올리겠습니다!


Reference.

  • 가상면접사례로 배우는 대규모 시스템 설계 기초 (알렉스 쉬 지음 | 이병준 옮김, 인사이트)
profile
Viva La Vida!

0개의 댓글