강의를 들으며 내가 알고 있는 내용을 점검하고,
새로 배운 내용을 정리하며,
궁금한 내용을 알아가며 학습해나가는 것을 목표로 합니다.
데이터베이스에 대해 들어 본 적이 있으신가요?
데이터베이스는 무엇이고, 어떨 때 사용될까요?
모든 서비스는 데이터를 만들어내고 이는 기록 되어야 합니다.
검색 서비스로 예를 들면 회원의 아이디, 암호 등이 저장이 필요할 것이고
사용자의 검색 기록을 저장해야 하고, 사용자별 검색 기록등을 토대로 맞춤형 정보를 제공할 수도 있습니다.
그렇기 때문에 이러한 데이터를 저장할 공간이 필요했습니다.
SQL은 1970년대 초반에 IBM이 개발한 구조화된 데이터 질의 언어입니다.
구조화된 데이터를 다루는 한 SQL은 데이터 규모와 상관없이 쓰입니다.
모든 대용량 데이터 웨어하우스는 SQL 기반이며,
빅데이터를 다룰 때 사용된는 Spark, Hadoop도 SparkSQL, Hive라는 SQL 언어가 지원됩니다.
그렇기 때문에 빅데이터를 다루는 현재에도 SQL은 중요하다고 할 수 있습니다.
그러나 SQL은 구조화 된 데이터를 다루는데 최적화가 되어 있기 때문에,
Production DB용 RDB에서는 스타 스키마를 사용해 데이터를 저장합니다.
스타 스키마 구조는 데이터를 논리적 단위로 나눠 저장하고 필요시 조인합니다.
그렇기 때문에 스토리지의 낭비가 덜하고 업데이트가 쉽다는 특징이 있습니다.
NoSQL이나 데이터 웨어하우스에서 사용하는 방식입니다.
단위 테이블로 나눠 저장하지 않음으로 별도의 조인이 필요없는 형태를 뜻 합니다.
이는 스토리지를 더 사용하지만 조인이 필요 없기에 빠른 계산이 가능합니다.
SQL1; SQL2; SQL3;
--인라인 주석 (1줄)
/* -- 여러줄 주석
*/
CREATE TABLE
CREATE TABLE raw_data.user_seeion_channel (
userid int,
sessionid varchar(32) primary key,
channel varhchar(32)
);
DROP TABLE
테이블을 지우는 명령어입니다.
없는 테이블을 지우려고 하는 경우 에러를 낼 수 있기 때문에
DROP TABLE IF EXISTS table_name;
형식으로 사용하면 에러를 방지할 수 있습니다.
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;
레코드 질의 : SELECT
레코드 추가/삭제/수정
이러한 순서로 데이터 순환 구조를 만들어 서비스를 개선합니다.
그렇다면 구조화 되지 않은 데이터베이스도 있을까요?
주로 데스크톱 응용 프로그램에서 사용 되는 아키텍처인 2 tier는 클라이언트와 서버 두 개의 티어로 구성됩니다.
클라이언트가 직접 서버의 데이터베이스에 접속하여 자원을 활용하기 때문에 편리하지만 보안에 취약한 단점이 있었습니다.
클라이언트는 사용자가 사용하는 UI와 비지니스 로직을 담당하고, 서버단이 데이터베이스가 됩니다.
하지만 인터넷의 발전으로 이러한 응용 프로그램들이 웹 환경에 맞게 바뀌기 시작하였고
현재는 주로 3 Tier 구조를 사용하며 3 tier 아키텍처는 서버 구조를 어플리케이션과 데이터로 분리하였습니다.
중간 계층의 도입으로 클라이언트가 데이터에 직접 접근할 수 없어 보안이 강화 되었고, 개발이 더욱 편리해졌습니다.
웹 개발에서는 주로 이런 기술들을 바탕으로 3 티어 아키텍쳐를 구현합니다.
이러한 구조를 바탕으로 백엔드에서는 데이터 모델을 만들고 프론트 개발자와 공유 협업합니다.
또 항상 속도 개선을 위한 쿼리 성능을 모니터링하고 필요시 성능 개선 작업을 수행 해야합니다.