3 Tier Architecture란?
- 클라이언트 서버 아키텍처(=2티어 아키텍처)에 데이터 베이스가 추가된 형태
1. 데이터베이스란?
데이터베이스는 여러 사람이 공유하여 사용할 목적으로 구조화해 통합,관리하는 데이터의 집합이다. 일종의 데이터 저장 창고역할을 한다
2. 데이터베이스는 왜 필요한가?
- 자바스크립트에서 변수를 만들어 저장한 경우, 프로그램이 종료될 때 해당 프로그램이 사용하던 데이터도 사라진다 =>( 데이터가 프로그램의 실행에 의존한다)
- 파일에 데이터를 저장하는 방식에도 한계가 존재한다
- 데이터가 필요할 때마다 전체 파일을 매번 읽어야 합니다. 파일의 크기가 커질수록 이 작업은 버겁고, 비효율적이어서 File I/O 방식의 큰 단점입니다.
- 파일이 손상되거나 여러 개의 파일들을 동시에 다뤄야 하거나 하는 등 복잡하고 데이터량이 많아질수록 데이터를 불러들이는 작업이 점점 힘들어집니다.
3.데이터베이스의 트랜잭션과 그 특성
1)데이터 베이스의 트랜잭션
- 트랜잭션이란 여러개의 작업을 하나로 묶은 실행 유닛이다.
2)데이터베이스의 트랜잭션의 특성
- Atomicity(원자성)
- 각 트랜잭션은 하나의 특정 작업으로 시작을 해 묶여 있는 모든 작업을 다 완료해야 정상적으로 종료합니다
작업이 하나라도 실패를 하게 되면 트랜잭션도 실패이고, 모든 작업이 성공적이면 트랜잭션 또한 성공입니다. 성공 또는 실패 라는 두 개의 결과만 존재하는 트랜잭션은, 미완료된 작업 없이 모든 작업을 성공해야 합니다.- Consistency(일관성)
- 하나의 트랜잭션 이전과 이후, 데이터베이스의 상태는 이전과 같이 유효해 야 합니다 .
트랜잭션이 일어난 이후의 데이터베이스는 데이터베이스의 제약이나 규칙을 만족해야 한다는 뜻입니다.
예를 들어 '모든 고객은 반드시 이름을 가지고 있어야 한다'는 데이터베이스의 제약이 있다고 가정하겠습니다.
다음과 같은 트랜잭션은 Consistency(일관성)를 위반합니다:
!!이름 없는 새로운 고객을 추가하는 쿼리!!
!!기존 고객의 이름을 삭제하는 쿼리!!- Isolation(격리성, 고립성)
- 모든 트랜잭션은 다른 트랜잭션으로부터 독립되어야 한다
- Durability(지속성)
- Durability(지속성)는 하나의 트랜잭션이 성공적으로 수행되든 아니든, 해당 기록은 영구적이어야 한다는 뜻입니다.
1. SQL (구조화 쿼리언어)
- SQL(Structuerd Query Lanagauage)이란 데이터베이스와 대화하기위해 특별히 디자인된 언어라고생각하면 된다
- 데이터가 구조화된(structured) 테이블을 사용하는 데이터베이스에서 활용할 수 있습니다.(마치 엑셀처럼)
- 데이터베이스 세계에서 SQL은 데이터베이스 종류를 SQL이라는 언어 단위로 분류할 정도로 중요한 자리를 차지하고 있습니다.
2. 데이터베이스 종류와 선택
- 데이터베이스는 크게 두가지로 구분한다
Relational(관계형데이터베이스) vs Non-Relational(비 관계형 데이터베이스)
SQL기반 vs Non-SQL기반1)Relational(관계형데이터베이스)
- SQL 기반이다
- 대표적인 소프트웨어로 MySQL, Oracle, SQLite, PostgreSQL 등이 있고 모두 sql(언어)를통해 명령 가능하다
- 관계형 데이터베이스에서는 테이블의 구조와 데이터 타입 등을 사전에 정의하고, 테이블에 정의된 내용에 알맞은 형태의 데이터만 삽입할 수 있습니다
- 특정한 형식을 지키기 때문에, 데이터를 정확히 입력했다면 데이터를 사용할 때에는 매우 수월합니다
- 행(row)과 열(column)로 구성된 테이블에 데이터를 저장합니다. 각 열은 하나의 속성에 대한 정보를 저장하고, 행에는 각 열의 데이터 형식에 맞는 데이터가 저장됩니다.
- 관계형 데이터베이스에서는 SQL을 활용해 원하는 정보를 쿼리할 수 있습니다. 이 말은 관계형 데이터베이스에서는 스키마가 뚜렷하게 보인다는 말과 같습니다.
- 다시 말해, 관계형 데이터베이스에서는 테이블 간의 관계를 직관적으로 파악할 수 있습니다.
2) Non-Relational(비 관계형 데이터베이스)
- NOSQL 로데이터를 다룬다
- 대표적으로 몽고DB, Casandra 등이 있습니다.
- 데이터의 구조가 고정되어있지 않다
- 테이블을 사용하지 않고 데이터를 다른 형태로 저장합니다
- Key-Value 타입
- 문서형(Document) 데이터베이스
- Wide-Column 데이터베이스
- 그래프(Graph) 데이터베이스
(하나하나의 특징까지는 지금으로선 알 필요가 없을듯 하다)3)SQL과 NoSQL 중에서 어떤 것을 사용해야 하나요?
평범한 프로젝트 라면, 거의 모든 경우SQL로도 다 커버가 가능하다
NOSQL은 특별한경우, 특별한 이슈에 대응하기에 좋은 DB다, 시작은 SQL로 나중에 규모가 커진다면
그떄 NOSQL을 고민해도 좋을 거 같다참고1.
- SQL 기반의 관계형 데이터베이스를 사용하는 케이스
- 데이터베이스의 ACID 성질을 준수해야 하는 경우
전자 상거래를 비롯한 모든 금융 서비스를 위한 소프트웨어 개발 같은경우- 소프트웨어에 사용되는 데이터가 구조적이고 일관적인 경우
- NoSQL 기반의 비관계형 데이터베이스를 사용하는 케이스
- 데이터의 구조가 거의 또는 전혀 없는 대용량의 데이터를 저장하는 경우
- 클라우드 컴퓨팅 및 저장 공간을 최대한 활용하는 경우
- 빠르게 서비스를 구축하는 과정에서 데이터 구조를 자주 업데이트하는 경우