HomeAboutMeBlogGuest
© 2025 Sejin Cha. All rights reserved.
Built with Next.js, deployed on Vercel
🛁
공부기록
/
🧑🏻‍💻
TIL
/
TIL - 4

TIL - 4

태그
DB
날짜
Mar 28, 2022
속성

데이터베이스 시스템 소개

요즘 세상의 배움이란?

배움에는 시간과 노력이 걸림 * 어떻게 하느냐가 가장 중요하다. * 가장 중요한 것은 버티는 힘(즐겨야한다.) * 내가 뭘 모르는지 생각해봐야함.(구체적으로 질문할 수 있나?) * 잘 하는 사람 보고 기죽지 않기 * 나 자신과만 비교해라.

새로운 것을 처음 배울 때의 좋은 자세

  • 자신이 아는것과 모르는 것을 분명히 이해하는지?
    • 멍청한 질문이란 없다는 점을 명심하자. 대충 알거나 모르면서 안물어보는 것이 더 큰 문제
    • 이는 피드백을 잘 받아들일 수 있는지와도 연계됨.
  • 마음을 편하게 먹기
    • 내가 이해하기 힘들다면 남들도 이해하기 힘듬
    • 나보다 잘 하는 사람들은 그만큼 시간을 쏟았기 때문

새로운 것을 처음 배울 때의 좋은 자세2

  • 배움의 발전은 tipping point를 거치면서 폭발하는 형태임.
    • 발전이 더딘 기간을 즐기는 자세가 필요하다.

데이터베이스가 왜 필요할까?

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

  • 모든 서비스는 데이터를 만들어내고 그 데이터의 저장을 필요로한다.
    • (예) 카카오톡
      • 사용자 등록시 사용자 정보(ID, 암호, 번호)의 저장이 필요
      • 사용자 친구 리스트 관리 필요(친구의 id를 저장)
      • 특정 사용자 혹은 단톡방에서의 채팅 기록을 저장해야함.
    • (예) 쿠팡
      • 구매 관런 정보의 저장이 필요
      • 추천을 잘 하려면 사용자별로 검색기록과 보거나 클릭했던 상품정보 저장과 가공이 필요

어디에 이런 데이터를 저장해야 할까?

  • 프로덕션 관계형 데이터베이스 (RDBMS)
    • 어떤 서비스의 운영에 필요 데이터를 저장하는 곳(MySQL, PostgreSQL, …)
    • 빠른 처리속도가 중요함
      • vs. 데이터 웨어하우스 관계형 데이터베이스
    • 데이터를 구조화된 테이블들의 집합으로 구성하여 저장하고 관리
    • 백엔드 개발자이건 프론트 개발자이건 잘 알아야 하는 기본 기술
      • 관계형 데이터베이스의 프로그래밍 언어가 SQL

데이터 웨어하우스

  • 회사 관련 데이터를 저장하고 분석함으로써 의사결정과 서비스 최적화에 사용
    • BigQuery, Snowflake, MySql, …
  • 처리속도 보다는 구조화된 큰 데이터를 처리하는 것이 중요
    • vs. 프로덕션 관계형 데이터페이스
  • 데이터 직군이라면 반드시 알아야함 (SQL)
    • 데이터 엔지니어, 데이터 분석가, 데이터 과학자

관계형 데이터베이스의 종류

  • 관계형 데이터베이스 : 구조화된 데이터(테이블, 필드, 레코드)
    • 프로덕션용 관계형 데이터베이스(처리속도가 중요, mysql, postgreSQL)
    • 데이터 웨어하우스용 관계형 데이터베이스
  • 비관계형 데이터베이스 : 비구조화 데이터도 다룸
    • 흔히 NoSQL 데이터베이스라고 부르기도한다.
    • 보통은 프로덕션용 관계형 데이터베이스를 보완하기위한 용도로 많이 사용됨
    • 크게 4종류가 존재
      • Key/Value : Redis, Memcache, …
      • Document Store : MongoDB, …
      • Wide Column Storage : Cassandra, HBase, DynamoDB
      • Search Engine : ElasticSearch

백엔드 시스템 구성도 예제 보기

어떤 개발자 직군들이 있는지 / 관계형 데이터베이스가 전체 시스템에서 어떻게 사용되는지 몇가지 구성도를 알아보자.

프론트엔드와 백엔드

  • 웹/앱 서비스를 간단하게 보면 크게 프론트 / 백엔드로 구성된다.
    • 프론트엔드 : 사용자와 인터렉션을 하는 부분으로 보통 웹 브라우저 혹은 모바일 폰에 사용자에게 노출되는 서비스를 말함
    • 백엔드 : 프론트엔드 뒤에 숨어서 사용자에게 보이지는 않지만 실제 데이터를 저장/추가하고 사용자가 요구한 일을 수행하는 부분으로 여기에 다양한 데이터베이스들이 사용된다.
    • 초기에는 이렇게 크게 두 직군이 존재하게 되었다.
      • notion image
https://www.geeksforgeeks.org/what-is-the-difference-between-front-end-and-back-end-web-development/

다른 직군의 등장

  • 데브옵스 : 주로 백엔드에 집중을 두고 서비스의 운영을 책임지는 팀으로 회사가 작을 때는 보통 백엔드 팀이 이 일을 담당한다.
  • 풀스택 : 개발속도를 내기위해 프론트/백엔드 모두 할 수 있는 개발자로 작은 회사에서 선호하는 형태의 직군
  • 데이터 직군 : 데이터의 중요성이 증대되면서 3가지 데이터 직군이 등장
    • 데이터 엔지니어 : 사실상 소프트웨어 개발자로 데이터 웨어하우스와 관련일을 담당
      • MLOps라는 직군이 나타나기 시작
    • 데이터 분석가 : 데이터 웨어하우스를 기반으로 다양한 지표설정과 분석을 수행
    • 데이터 과학자 : 수집된 과거 데이터를 기반으로 미래를 예측하는 모델링 혹은 개인화 작업으로 서비스의 만족도를 높이고 프로세스의 최적화를 수행

시스템 구성의 변화 : 2tier

  • 보통 데스크탑 응용 프로그램에서 사용되는 아키텍쳐
  • 클라이언트와 서버 두개의 티어로 구성
    • 클라이언트는 사용자가 사용하는 UI가 됨(front-end)
      • 비즈니스 로직은 보통 클라이언트에 위치
    • 서버단이 데이터베이스가 됨(back-end)

시스템 구성의 변화 : 3tier

  • 웹 서비스 / 앱 서비스에서 많이 사용되는 아키텍쳐
    • 프레젠테이션 티어 : 프론트엔드
    • 애플리케이션 티어 : 백엔드
    • 데이터 티어 : 백엔드

관계형 데이터베이스의 중요성

  • 어떤 구조이건 데이터베이스는 꼭 필요한 컴포넌트
  • 이 데이터베이스를 잘 다룬 것이 좋은 개발자가 되기 위해 필요
    • 기본은 SQL을 잘 아는 것
  • 백엔드 개발자로써 중요한 부분
    • 데이터 모델을 잘 만들고 그걸 프론트 개발자와 협업/공유
    • 속도 개선을 위한 쿼리 성능 모니터링하고, 필요시 성능 개선 수행
      • 어떤 경우에는 이를 전담하는 사람이 존재(DBA - DataBase Administrator)
        • notion image

관계형 데이터베이스 소개

관계형 데이터베이스 1

  • 구조화된 데이터를 저장하고 저장된 데이터를 질의할 수 있또록 해주는 스토리지
    • 엑셀 스프레드시트 형태의 테이블로 데이터를 정의하고 저장
      • 테이블에는 컬럼(열)과 레코드(행)이 존재한다.

관계형 데이터베이스 2

  • 관계형 데이터베이스를 조작하는 프로그래밍 언어가 SQL
    • 테이블 정의를 위한 DDL (Data Definition Language)
      • 앞서 보여준 테이블의 포맷을 정의해주는 언어
    • 테이블 데이터 조작/질의를 위한 DML(Data Manipulation Language)
      • DDL로 정의된 테이블에 레코드를 추가, 수정, 삭제 혹은 읽어들이기 위해 사용하는 언어

대표적 관계형 데이터베이스

  • 프로덕션 데이터베이스 : MySQL, PostgreSQL, Oracle
    • OLTP (Online Transaction Processing)
    • 빠른 속도에 집중, 서비스에 필요한 정보 저장
  • 데이터 웨어하우스 : redShift, Snowflake, BigQuery, Hive, …
    • OLAP (Online Analytical Processing)
    • 처리 데이터 크기에 집중. 데이터 분석 혹은 모델 빌딩등을 위한 데이터 저장
      • 보통 프로덕션 데이터베이스를 복사해서 데이터 웨어하우스에 저장

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

  • 관계형 데이터베이스는 2단계로 구성됨
    • 가장 밑단에는 테이블들이 존재(테이블은 엑셀의 시트에 해당)
    • 테이블들은 데이터베이스(혹은 스키마)라는 폴더 밑으로 구성(엑셀에서는 파일)
  • 테이블의 구조
    • 테이블은 레코드들로 구성(행)
    • 레코드는 하나 이상의 필드(컬럼)로 구성(열)
    • 필드(컬럼)는 이름과 타입과 속성(primary key)으로 구성됨

SQL 소개

  • SQL : Structured Query Language
    • 관계형 데이터베이스에 있는 데이터를 질의하거나 조작해주는 언어
  • SQL은 1970년대 초반에 IBM이 개발한 구조화된 데이터 질의 언어
  • 두 종류의 언어로 구성됨
    • DDL : 테이블의 구조를 정의하는 언어
    • DML : 테이블에서 원하는 레코드를 읽거나 추가/삭제/갱신 해주는데 사용하는 언어
SQL은 빅데이터 세상에서도 중요하다.
구조화된 데이터를 다루는 한 SQL은 데이터 규모와 상관없이 쓰인다. 모든 대용량 데이터 웨어하우스는 SQL 기반 Spark나 Hadoop도 예외는 아니다. 백엔드/프론트엔드/데이터 분야에서 반드시 필요한 기본 기술이다.

SQL의 단점

  • 구조화된 데이터를 다루는데 최적화가 되어있다.
    • 정규표현식을 통해 비구조화된 데이터를 어느 정도 다루는 것은 가능하나 제약이 심함
    • 만은 관계형 데이터베이스들이 플랫한 구조만 지원함
      • 구글 빅쿼리는 nested structure를 지원함
    • 비구조화된 데이터를 다루는데 Spark, Hadoop과 같은 분산 컴퓨팅 환경이 필요해짐
      • 즉 SQL만으로는 비구조화 데이터를 처리하지 못함
  • 관계형 데이터베이스마다 SQL 문법이 조금씩 상이하다.

Star schema

  • Production DB용 관계형 데이터베이스에서는 보통 스타스키마를 이용하여 데이터를 저장
  • 데이터를 논리적 단위로 나눠 저장하고 필요시 조인
  • 스토리지의 낭비가 덜하고 업데이트가 쉬움

Denormalized schema

  • NoSql이나 데이터 웨어하우스에서 사용하는 방식
    • 단위 테이블로 나눠 저장하지 않음으로 별도의 조인이 필요없는 형태를 말함
  • 이는 스토리지를 더 사용하지만 조인이 필요 없기에 빠른 계산이 가능하다.

SQL 기본

  • 먼저 다수의 SQL 문을 실행한다면 세미콜론으로 구분이 필요하다.
    • SQL문1; SQL문2; SQL문3;
  • SQL 주석
    • – : 인라인 한줄짜리 주석. 자바 //에 해당
    • /* – */ : 여러줄에 걸쳐 사용 가능한 주석
  • SQL 키워드는 대문자를 사용한다던지 하는 나름대로의 포맷팅이 필요함
    • 팀 프로젝트라면 팀에서 사용하는 공통 포맷이 필요
  • 테이블/필드이름의 명명규칙을 정하는 것이 중요
    • 단수형 vs 복수
      • User vs Users
    • _ vs CamelCasing
      • user_session_channel vs UserSessionChannel

DDL - 테이블 구조 정의 언어 (1)

  • CREATE TABLE
    • Primary key 속성을 지정할 수 있음
      • Primary key uniqueness : 유일키 보장
    • 성능향상을 위해 인덱스를 지정할 수 있음
    • CREATE TABLE raw_data.user_session_channel ( userid int, sessionid varchar(32) primary key , channel varchar(32) )

DDL - 테이블 구조 정의 언어 (2)

  • DROP TABLE
    • DROP TABLE table_name;
      • 없는 테이블을 지우려고 하는 경우 에러를 냄
    • DROP TABLE IF EXISTS table_name;
    • vs. DELETE FROM
      • DELETE FROM은 조건에 맞는 레코드들을 지움(테이블 자체는 존재)

DDL - 테이블 구조 정의 언어 (3)

  • ALTER TABLE
    • 새로운 컬럼 추가
      • ALTER TABLE 테이블 이름 ADD COLUMN 필드이름 필드타입;
    • 기존 컬럼 이름 변경
      • ALTER TABLE 테이블 이름 RENAME 현재 필드이름 to 새로운 필드이름
    • 기존 컬럼 제거
      • ALTER TABLE 테이블 이름 DROP COLUMN 필드이름
    • 테이블 이름 변경
      • ALTER TABLE 현재 테이블이름 RENAME to 새 테이블 이름

DML - 테이블 데이터 조작 언어 (1)

  • 레코드 질의 언어 : SELECT
    • SELECT FROM : 테이블에서 레코드와 필드를 읽어오는데 사용
    • WHERE를 사용해서 레코드 선택 조건을 지정
    • GROUP BY를 통해 정보를 그룹 레벨에서 뽑는데 사용하기도 함
      • DAU, WAU, MAU 계산은 GROUP BY를 필요로함
    • ORDER BY를 사용해서 레코드 순서를 결정하기도 함
    • 보통 다수의 테이블의 조인애허 사용하기도 함

DML - 테이블 데이터 조작 언어 (2)

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