[백엔드] Database (데이터베이스) : 개념/구분/대표적인 DB/ DB관련 지식

기본기가 가장 중요하다는 생각으로,
인프런에서 [초보 백엔드 개발자 로드맵] 이라는 강의를 수강하며
개발 관련 지식을 학습 및 복습하며 새로이 깨닫게 되는 점을
정리 및 요약하여 올리는 페이지이다.
🚩학습 컨텐츠
- 강의명 : 인프런 - [초보 백엔드 개발자 로드맵]
✅ Database 개념 및 구분

데이터베이스 개념
: 검색과 축적이 쉽도록 정리된 데이터 모음 또는 데이터베이스 소프트웨어
대부분의 서버 애플리케이션은 클라이언트에서 받은 데이터(형태는 메모리, 텍스트파일 엑셀, 바이너리 파일 등 다양)를 어딘가에 저장한다.
데이터베이스는 검색, 데이터수정/삭제, 읽기 등을 동시에 안전하게 할 수 있도록 지원해주는 소프트웨어이다.
데이터베이스 구분
1. RDB
: Relational DataBase(관계형 데이터베이스) 의 약자.
- 관계형데이터 베이스는 행-열(관계)로 이루어진 테이블로 관리
- 기본키를 사용해 각 행 식별.
- 가장 유명한 RDB는 오라클, MySQL, SQL서버, 포스트그레스큐엘 등 이있음.
- 하지만, MySQL 하나만 잘 알아두어도 다른 RDB를 충분히 다룰수있음.
- 데이터 저장,수정,삭제는 용이하지만 성능을 높이려면 다른 장치 고안이 필요함. (분산서버가 필요) NoSQL 은 RDB의 이런 단점을 보완해준다.
2. NoSQL (=RDB가 아닌 것)
: SQL이 아닌것으로 통용되지만, 최근에는 Not Only SQL 이라고해서 SQL 이 아닌 다른것도 함께 쓴다는 의미로도 쓰임.
⭐ 대표적인 NoSQL
몽고디비 :
도큐먼트를 저장하는 DB
JSON과 매우 비슷하게 생긴 BSON 이라는 문서 모델을 저장.
클러스터를 이용해 확장이 용이하기떄문에 요청이 많은 경우에도 속도가 빠름
레디스 :
키밸류기반의 NoSQL 데이터베이스.
분산캐시로 많이 사용.
키를 기반으로 데이터를 잘 관리해줌.
리스티, 셋, 해쉬 등 다양한 타입의 데이터 지원 및 빠른 성능으로
대부분의 회사에서 기분적으로 사용
✅ DB 관련 지식
아래 소개할 프레임워크들은 모두 서버측에서 api를 만드는데 필요한 프레임워크로 대표적인 것 3가지만 추려서 자세히 소개했다.
이외에도 프레임워크가 많고, 백엔드 개발을 위해서는 어떤것이든 프레임워크 하나 정도는 깊게 공부해야한다.
1. ORM
: Object Relation Mapping.
클래스 오브젝트와 테이블의 관계를 클래스로 가져올 수 있도록 해주는 프로그램
- 특정 클래스의 메소드 실행시, 실행시 쿼리 생성함.
- 따라서 , ORM 사용시 쿼리 작성 없이 디비조작가능. 직관적 데이터관리 가능
- 하지만 통계쿼리같은 복잡한 쿼리는 RAW쿼리 사용 권장.
2. 트랜잭션
: DB의 상태변화를 지키기위해 수행하는 작업 단위.
트랜잭션은 동시다발적으로 발생하는 데이터 변경요청 중에도
DB의 데이터가 안전하게 변경될 수 있도록 해줌.
3. ACID
: 각각 원자성, 일관성, 격리성, 내구성 의미.
데이터베이스에서 데이터의 일관성을 유지할수 있도록해줌. 문제발생시에는 이전으로 돌릴수있도록 해줌.
- 원자성 : 트랜젝션을 구성하는 명령을 하나의 묶음으로 처리하여
모두성공/모두실패를 보장하는 기법 - 일관성 : 트랜젝션에서 사용된 변경사항이 DB의 무결성조건을 만족할 수 있도록 하는 것.
- 격리성 : 2개의 트랜잭션이 서로에게 영향을 미칠수없음.
- 내구성 : 트랜잭션이 끝나면 그 결과가 DB에 계속 유지
4. N+1 문제
: ORM 사용시 많이 발생하는 문제.
클래스와 다른 클래스의 관계 설정 후, 해당 클래스를 조회 할때,
데이터 갯수만큼 쿼리가 발생하는 것을 의미.
의도한 쿼리는 JOIN해서 데이터를 한번에 가져오는 것을 의도했지만,
N+1번 실행해서 불필요하게 많은 쿼리가 발생하는것을 의미
참고 문헌:
"인프런 - [초보 백엔드 개발자 로드맵]"