백엔드 데브코스 TIL 06일차

Inchang Choi·2022년 3월 29일
0
post-thumbnail

학습목표

강의를 들으며 내가 알고 있는 내용을 점검하고,

새로 배운 내용을 정리하며,

궁금한 내용을 알아가며 학습해나가는 것을 목표로 합니다.


Database

데이터베이스에 대해 들어 본 적이 있으신가요?

데이터베이스는 무엇이고, 어떨 때 사용될까요?

데이터베이스가 필요한 이유?

모든 서비스는 데이터를 만들어내고 이는 기록 되어야 합니다.

검색 서비스로 예를 들면 회원의 아이디, 암호 등이 저장이 필요할 것이고

사용자의 검색 기록을 저장해야 하고, 사용자별 검색 기록등을 토대로 맞춤형 정보를 제공할 수도 있습니다.

그렇기 때문에 이러한 데이터를 저장할 공간이 필요했습니다.

관계형 데이터베이스의 종류 (RDBMS)

  • 프로덕션 관계형 데이터베이스
    • OLTP (OnLine Transaction Processing)
    • 빠른 처리 속도가 중요합니다.
    • 서비스에 필요한 정보를 저장합니다.
    • MySQL, PostgreSQL이 있습니다.
  • 데이터 웨어하우스 관계형 데이터베이스
    • OLAP (OnLine Analytical Processing)
    • 주로 프로덕션 데이터베이스를 복사해서 데이터 웨어하우스에 저장합니다.
    • 규모가 큰 데이터를 저장하고 분석하여 서비스의 의사 결정과 서비스 최적화에 사용합니다.
    • 큰 데이터를 처리 할 수 있는 ScaleAblity에 초점을 두고 있습니다.
    • 구글 클라우드 BigQuery, Snowflake, 아마존 클라우드의 Redsjoft 등이 있습니다.

관계형 데이터베이스의 특징

  • 어떤 서비스의 운영에 필요한 데이터를 저장하는 곳
  • 데이터를 구조화된 테이블의 집합으로 구성하여 저장하고 관리합니다.
    • 엑셀 스프레드시트 형태의 테이블로 데이터를 정의하고 저장합니다.
    • 다양한 entity들의 관계를 어떻게 정의하냐가 중요합니다.
  • 관계형 데이터베이스를 사용하기 위한 프로그래밍 언어가 SQL입니다.
    • DDL
      • 테이블 정의를 위해 사용됩니다.
      • 테이블의 포맷을 정의해주는 언어입니다.
    • DML
      • 테이블 데이터 조작/질의를 위한 언어입니다.
      • DDL로 정의된 테이블에 레코드를 추가, 수정, 삭제, 혹은 읽어들이기 위해 사용하는 언어입니다.

Structured Query Language

SQL은 1970년대 초반에 IBM이 개발한 구조화된 데이터 질의 언어입니다.

구조화된 데이터를 다루는 한 SQL은 데이터 규모와 상관없이 쓰입니다.

모든 대용량 데이터 웨어하우스는 SQL 기반이며,

빅데이터를 다룰 때 사용된는 Spark, Hadoop도 SparkSQL, Hive라는 SQL 언어가 지원됩니다.

그렇기 때문에 빅데이터를 다루는 현재에도 SQL은 중요하다고 할 수 있습니다.

그러나 SQL은 구조화 된 데이터를 다루는데 최적화가 되어 있기 때문에,

  • 정규표현식을 통해 비구조화된 데이터를 어느 정도 다루는 것은 가능하나 제약이 심합니다.
  • 또 많은 관계형 데이터베이스들이 flat한 구조만 지원합니다 (no nested like JSON)
    • 구글 빅쿼리는 nested structure를 지원합니다
  • 비구조화된 데이터를 다루려면 Spark, Hadoop가 같은 분산 컴퓨팅 환경이 필요해집니다.
  • 관계형 데이터베이스마다 SQL 문법이 조금씩 상이합니다.

Star Schema

Production DB용 RDB에서는 스타 스키마를 사용해 데이터를 저장합니다.

스타 스키마 구조는 데이터를 논리적 단위로 나눠 저장하고 필요시 조인합니다.

그렇기 때문에 스토리지의 낭비가 덜하고 업데이트가 쉽다는 특징이 있습니다.

Denormalized schema

NoSQL이나 데이터 웨어하우스에서 사용하는 방식입니다.

단위 테이블로 나눠 저장하지 않음으로 별도의 조인이 필요없는 형태를 뜻 합니다.

이는 스토리지를 더 사용하지만 조인이 필요 없기에 빠른 계산이 가능합니다.

SQL 기본

SQL1; SQL2; SQL3;
--인라인 주석 (1줄)
/* -- 여러줄 주석
*/
  • 테이블 / 필드 이름의 명명규칙을 정하는 것이 중요합니다.
    • 단수형? 복수형?
    • UnderBar? CamelCase

SQL DDL

  1. CREATE TABLE

    • 유일 키를 보장하는 Primary Key 속성을 지정 할 수 있습니다.
    • 성능 향상을 위해 인덱스를 지정할 수 있습니다.
      CREATE TABLE raw_data.user_seeion_channel (
      	userid int,
      	sessionid varchar(32) primary key,
      	channel varhchar(32)
      );
  2. DROP TABLE

    테이블을 지우는 명령어입니다.

    없는 테이블을 지우려고 하는 경우 에러를 낼 수 있기 때문에

    DROP TABLE IF EXISTS table_name;

    형식으로 사용하면 에러를 방지할 수 있습니다.

  3. ALTER TABLE

    table과 column들의 이름을 변경할 수 있습니다.

    ALTER TABLE table_name ADD COLUMN field_name file_type;
    ALTER TABLE table_name RENAME table_name to new_field_name;
    ALTER TABLE table_name DROP COLUMN field_name;
    ALTER TABLE table_name RENAME to new_table_name;

SQL DML

레코드 질의 : SELECT

  • SELECT FROM
  • WHERE
  • GROUP BY
  • ORDER BY
  • JOIN

레코드 추가/삭제/수정

  • INSERT INTO : 테이블에 레코드를 추가하는데 사용
  • UPDATE FROM : 테이블 레코드의 필드 값 수정
  • DELETE FROM : 테이블의 레코드를 삭제

관계형 데이터베이스의 구조

  • 가장 밑단에는 테이블들이 존재합니다. (엑셀에서는 시트)
  • 테이블들은 데이터베이스(혹은 스키마)라는 폴더 밑으로 구성되어 있습니다. (엑셀에서는 파일)
  • 이런 테이블의 속성을 바탕으로 테이블의 이름을 정합니다.
  • 테이블의 구조 (테이블 스키마)
    • 테이블에는 컬럼(열)과 레코드(행)이 존재합니다
    • 테이블은 레코드들로 구성됩니다.
    • 레코드는 하나 이상의 필드(컬럼)로 구성 됩니다.
    • 필드는 이름과 타입과 속성으로 구성됩니다.
    • 레코드를 식별하기 위한 식별자(Primary Key)가 있어야합니다.

  1. 데이터 엔지니어 팀에서 데이터 웨어하우스에 저장될 데이터를 추출해 올 코드를 작성합니다.
  2. 데이터 분석가가 팀의 중요한 지표를 데이터 기반으로 정리하고 시각화 합니다.
  3. 수집된 데이터를 기반으로 ML, AI로 데이터 과학자들이 제품 서비스 개선을 진행합니다.

이러한 순서로 데이터 순환 구조를 만들어 서비스를 개선합니다.

그렇다면 구조화 되지 않은 데이터베이스도 있을까요?

비관계형 데이터베이스

  • NoSQL 데이터베이스라고 부릅니다.
  • 일반적으로는 프로덕션 관계형 데이터베이스를 보완하기 위한 용도로 사용됩니다.
  • Key/Value Storage
    • Redis, Memcache
  • Document Store
    • MongoDB
  • Wide column Storage
    • Cassandra, HBase, Dynamo
  • Search Engine
    • ElasticSearch

Back-end에서의 데이터베이스

시스템 구조의 변화

2 Tier

주로 데스크톱 응용 프로그램에서 사용 되는 아키텍처인 2 tier는 클라이언트와 서버 두 개의 티어로 구성됩니다.

클라이언트가 직접 서버의 데이터베이스에 접속하여 자원을 활용하기 때문에 편리하지만 보안에 취약한 단점이 있었습니다.

클라이언트는 사용자가 사용하는 UI와 비지니스 로직을 담당하고, 서버단이 데이터베이스가 됩니다.

하지만 인터넷의 발전으로 이러한 응용 프로그램들이 웹 환경에 맞게 바뀌기 시작하였고

3 Tier

https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FROnrw%2Fbtq7FiGVnhw%2FuLvlYyCZWuMCtIdrF1DEWK%2Fimg.png

현재는 주로 3 Tier 구조를 사용하며 3 tier 아키텍처는 서버 구조를 어플리케이션과 데이터로 분리하였습니다.

중간 계층의 도입으로 클라이언트가 데이터에 직접 접근할 수 없어 보안이 강화 되었고, 개발이 더욱 편리해졌습니다.

웹 개발에서는 주로 이런 기술들을 바탕으로 3 티어 아키텍쳐를 구현합니다.

이러한 구조를 바탕으로 백엔드에서는 데이터 모델을 만들고 프론트 개발자와 공유 협업합니다.

또 항상 속도 개선을 위한 쿼리 성능을 모니터링하고 필요시 성능 개선 작업을 수행 해야합니다.

profile
always positive

0개의 댓글