1. 데이터베이스의 필요성
- 모든 서비스는 데이터를 만들어내고 이는 기록되어야함(ex) 카카오톡 - 사용자 정보, 친구리스트, 채팅기록, 쿠팡 - 회원 정보, 구매정보, 추천을 위한 상품정보)
- 어디에 저장? → 우리는 관계형 데이터베이스 사용
✅ 프로덕션 관계형 데이터베이스(RDBMS)
- 정의 : 관계형 데이터베이스 중 웹 또는 앱 운영에 필요한 정보를 저장해주는 관계형 데이터베이스
- 서비스 운영에 필요한 데이터를 저장하는 곳(MySQL, PostgreSQL,..)
- 빠른 처리속도 중요(vs 데이터 웨어하우스 관계형 데이터베이스 - 처리속도 보다 얼마나 많은 양을 처리할 수 있는지가 중요)
- 데이터를 구조화된 테이블들의 집합으로 구성하여 저장하고 관리
→ SQL : 관계형 데이터베이스의 프로그래밍 언어
✅ 데이터 웨어하우스 관계형 데이터베이스
- 정의 : 사용자보다 회사 내 직원들을 위한 데이터베이스(BigQuery, Snowflake, …)
- 처리속도 보다 얼마나 많은 양을 처리할 수 있는지가 중요
- 데이터 엔지니어, 데이터 분석가, 데이터 과학자
데이터 순환 구조 : 프로덕션용 데이터베이스와 데이터 웨어하우스
- 웹 또는 앱에서 추출된 데이터(방문 트래픽, 외부 데이터)를 프로덕션 데이터베이스(MySQL)에 저장(데이터 엔지니어)
- MySQL에 저장된 데이터들을 추출하여 데이터 웨어하우스에 저장 후 지표를 설정 후 시각화(데이터 분석가)
- 데이터 웨어하우스의 데이터를 기반으로 사용자 기반 추천기능 등 제품 서비스 개선(데이터 과학자)
데이터베이스의 종류
- 관계형 데이터베이스 : 구조화된 데이터
- 프로덕션용 관계형 데이터베이스
- 데이터 웨어하우스용 관계형 데이터베이스
- 비관계형 데이터베이스 : 비구조화 데이터 + 구조화된 데이터
- NoSQL 데이터베이스
- 보통 프로덕션용 관계형 데이터베이스를 보완하기위한 용도
- 크게 4종류
- Key/Value Storage: Redis, Memcache, ...
- Document Store: MongoDB,
- Wide Column Storage: Cassandra, HBase, DynamoDB
- Search Engine: ElasticSearch
2. 백엔드 시스템 구성도 예제
직군
- 프론트엔드 : 사용자와 인터랙션을 하는 부분 → 웹 또는 모바일 사용자에게 노출되는 서비스
- 백엔드 : 실제 데이터를 저장/추가하고 사용자가 요구한 일을 수행하는 부분
- 풀스택 : 개발 속도를 내기 위해 프론트엔드&백엔드 모두 할 수 있는 개발자
- 데브옵스(DevOps) : 주로 백엔드에 집중해서 서비스의 운영을 책임지는 팀(모바일이나 웹을 모니터링해서 운영) → 회사가 작으면 보통 백엔드 담당
- 데이터 직군 : 데이터의 중요성이 증대되면서 등장(보통 코딩을 하지 않음)
- 데이터 엔지니어: 사실상 소프트웨어 개발자로 데이터 웨어하우스와 관련일을 담당
▪ MLOps라는 직군이 나타나기 시작
- 데이터 분석가: 데이터 웨어하우스를 기반으로 다양한 지표설정과 분석 수행
- 데이터 과학자: 수집된 과거 데이터를 기반으로 미래를 예측하는 모델링 혹은 개인화 작업으로 서비스의 만족도를 높이고 프로세스의 최적화를 수행
시스템 구성의 변화(3 tier를 자주 씀)
✅ 2 tier
- 데스크탑 응용프로그램에서 사용되는 아키덱쳐
- 클라이언트와 서버 2개의 티어로 구성
- 클라이언트(client) : 사용자가 사용하는 UI가 됨 (front-end)
▪ 비지니스 로직은 보통 클라이언트에 위치
- 서버(server) : 데이터베이스 (back-end)
✅ 3 tier
- 웹 서비스에서 많이 사용되는 아키덱쳐
- 프리젠테이션 티어 (Presentation Tier): 프런트엔드
- 애플리케이션 티어 (Application Tier): 비즈니스 로직 - 백엔드
- 데이터 티어 (Data Tier): 백엔드
시스템 구성 예(Spring Boot)
- 기본적으로 3 tier구조
- 백엔드 프레임워크 중 하나(파이썬 - Django/Flask, 자바스크립트 - Node.js)
- 프론트엔드는 React
- Data Tier : Database Layer와 Persistence Layer(관계형 데이터 읽고 쓰는 것)은 하나의 Layer
- Application Tier : Business Layer
- Presentation Tier : Presentation Layer
관계형 데이터베이스의 중요성
- 데이터베이스는 꼭 필요함
- 이 데이터베이스를 잘 다룬 것이 좋은 개발자가 되기 위해 필요
- 기본은 SQL을 잘 아는 것
- 백엔드 개발자로써 중요한 부분
- 데이터 모델을 잘 만들고 그걸 프런트 개발자와 공유/협업
- 속도 개선을 위한 쿼리 성능 모니터링 & 필요시 성능 개선 수행
▪ 어떤 경우에는 이를 전담하는 사람이 존재 (DBA - DataBase Administrator)
3. 관계형 데이터베이스
관계형 데이터베이스란?
- 구조화된 데이터를 저장하고 질의할 수 있도록 해주는 스토리지
- 엑셀 스프레드시트 형태의 테이블로 데이터를 정의하고 저장
▪ 테이블에는 컬럼(열)과 레코드(행)이 존재
- 관계형 데이터베이스를 조작하는 프로그래밍 언어가 SQL
- DDL (Data Definition Language) : 테이블 정의를 위한 언어
▪ 테이블의 포맷을 정의해주는 언어
- DML (Data Manipulation Language) : 테이블 데이터 조작/질의를 위한 언어
▪ DDL로 정의된 테이블에 레코드를 추가, 수정, 삭제 혹은 읽어들이기 위해 사용하는
언어
대표적 관계형 데이터베이스
- 프로덕션 데이터베이스: MySQL, PostgreSQL, Oracle, …
- OLTP (OnLine Transaction Processing)
- 빠른 속도에 집중. 서비스에 필요한 정보 저장
- 우리는 MySQL을 사용
- 데이터 웨어하우스: Redshift, Snowflake, BigQuery, Hive, …
- OLAP (OnLine Analytical Processing)
- 처리 데이터 크기에 집중. 데이터 분석 혹은 모델 빌딩등을 위한 데이터 저장
▪ 보통 프로덕션 데이터베이스를 복사해서 데이터 웨어하우스에 저장
관계형 데이터베이스의 구조(2단계로 구성)
- 데이터베이스(or 스키마) : 테이블들은 데이터베이스 밑으로 구성 - 폴더와 같은 역할(엑셀에서는
파일)
- 테이블 : 가장 밑단에 존재 (엑셀의 시트에 해당)
- 테이블의 구조 (테이블 스키마)
- 테이블은 레코드들로 구성 (행)
- 레코드는 하나 이상의 필드(컬럼)로 구성 (열)
- 필드(컬럼)는 이름과 타입과 속성(primary key)으로 구성됨
4. SQL
SQL 소개
- SQL: Structured Query Language
- 관계형 데이터베이스에 있는 데이터(테이블)를 질의하거나 조작해주는 언어
- SQL은 1970년대 초반에 IBM이 개발한 구조화된 데이터 질의 언어
- 두 종류의 언어로 구성
- DDL (Data Definition Language): 테이블의 구조를 정의하는 언어
- DML (Data Manipulation Language)
▪ 테이블에서 원하는 레코드들을 읽어오는 질의 언어
▪ 테이블에 레코드를 추가/삭제/갱신해주는데 사용하는 언어
SQL의 장점
- 구조화된 데이터를 다루는한 SQL은 데이터 규모와 상관없이 쓰임
- 모든 대용량 데이터 웨어하우스는 SQL 기반(Redshift, Snowflake, BigQuery, Hive)
- Spark이나 Hadoop도 예외는 아님
- SparkSQL과 Hive라는 SQL 언어가 지원됨
- 백엔드/프런트엔드/데이터 분야에서 반드시 필요한 기본 기술
SQL의 단점
- 구조화된 데이터를 다루는데 최적화가 되어있음
- 정규표현식을 통해 비구조화된 데이터를 어느 정도 다루는 것은 가능하나
제약이 심함
- 많은 관계형 데이터베이스들이 플랫한 구조만 지원함 (no nested like JSON)
▪ 구글 빅쿼리는 nested structure를 지원함
- 비구조화된 데이터를 다루는데 Spark, Hadoop과 같은 분산 컴퓨팅 환경이
필요해짐
- 관계형 데이터베이스마다 SQL 문법이 조금씩 상이
⇒ SQL만으로는 비구조화 데이터를 처리하지 못함
데이터 모델의 구조 2가지
1. Star schema(프로덕션 DB에서 주로 사용)
- Production DB용 관계형 데이터베이스에서는 보통 스타 스키마를 사용해 데이터를 저장
- 데이터를 논리적 단위로 나눠 저장하고 필요시 조인
- 장점 : 스토리지의 낭비가 덜하고 업데이트가 쉬움
- 단점 : 조인할 때 속도 저하
2. Denormalized schema(NoSQL 또는 데이터 웨어하우스에서 사용)
- NoSQL이나 데이터 웨어하우스에서 사용하는 방식
- 단위 테이블로 나눠 저장하지 않음 → 별도의 조인이 필요 없는 형태
- 장점 : 빠른 계산
- 단점 : 스토리지를 더 사용하고 업데이트가 어려움, 다양한 정보에 접근하는 것이 제약