본문 바로가기
DB

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

by yapdol 2024. 9. 4.

 

[백엔드] 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번 실행해서 불필요하게 많은 쿼리가 발생하는것을 의미

 

 

 

 

 

 

 

 

 

 

참고 문헌:

"인프런 - [초보 백엔드 개발자 로드맵]"