DB의 핵심 3가지

  • 무결성 : 정확, 일관성(누가 보더라도 동일)
  • 안전성 : 고장x
  • 확장성 : scale-up 코어, 메모리 등을 확장 / scale-out 기기를 여러개
    • 크기를 키울건지 : 한 사람만 조회, 모노리식
    • 기기를 늘릴건지 : 여러 사람이 조회, stateless면 분산도 가능, CDN

관계형 DB

  • 테이블 사이에 관계를 맺어서 중복데이터 줄임
  • ↔ laterncy가 많이 소모 & 예전에는 메모리가 비싸서 주로 사용했음- 중복된 데이터를 없애고 메모리 비용을 아낌
  • 데이터 수정 시 관련된 여러 테이블을 변경해야 하기 때문에 시간이 오래 걸릴 수 있음

 

row-oriented : 읽는 양이 적은 경우, 많은 데이터 삽입에 적합

  • row뒤에 바로 row가 붙어서 삽입이 쉬움

column-oriented : 읽는 것이 빨라서 데이터 분석에 사용

  • 각 칼럼끼리 모아두는 구조 ⇒ 삽입이 많으면 부적합

 

NOSQL

- 서로 다른 종류의 데이터를 저장할 수 있고, 유연한 스키마를 가지고 있어서 데이터 구조를 동적으로 변경

  • key-value : redis
  • graph : 촌 수 같은 관계 표현하기에 유리, 한국에서는 덜 사용함
  • Document : json 데이터 넣기 좋음

 

CAP 이론

- 분산 시스템에서 일관성, 분산 저장 가능성, 가용성(항상 데이터에 접근 가능성) 중 두 가지만 선택할 수 있다는 이론

선택지

- 높은 가용성을 제공하면서 일부 일관성을 희생하는 NoSQL 데이터베이스

- 높은 일관성을 제공하면서 가용성을 희생하는 관계형 데이터베이스

'Spring > DB' 카테고리의 다른 글

[DB] 트랙잭션과 인덱스  (0) 2023.08.28
[DB] PostgreSQL과 MySQL  (0) 2023.08.08
[멋사] DB 연동  (0) 2023.04.06
DB(MySQL) & Spring 오류  (0) 2023.03.08

트랜잭션이란

  • 정의 : 데이터베이스의 상태를 변화시키기 해서 수행하는 작업의 단위 (작업 단위 ≠ 질의어 한 문장)
  • 예시 : 게시물 등록 = 저장 + 조회 → 하나의 트랜잭션

 

  • 특징 4가지 : 원자성(모두 반영 o / 아예 반영 x) / (결과) 일관성(중간에 업데이트 되더라도 처음 참조 기준 이용) / 독립성 / 지속성(성공 시, 영구적 반영)
    • 관련 정보
      • 질의어 = sql : DDL / DML로 나뉨
      • (데이터 정의 언어 : 스키마 조작 / 데이터 조작 언어 : 레코드 조작)
      • 테이블 : 행과 열의 데이터 집합 → @Table : 엔티티와 테이블 매핑
      • 스키마 : 제약 조건(@Column), 무결성 규칙, 데이터 유형, 테이블 등 정의한 것
        • PostgreSQL : mysql db가 스키마라서 db가 다르면 물리적으로 분리되었다고 봐서 다른 db 테이블 끼리 조인 불가능
        • 오라클, mysql : 오브젝트 집합 != db와 같은 의미처럼 많이 사용
      • 무결성 : 데이터의 일관성 유지 → 적용되는 연산에 제한을 둠
        • 개체 무결성 : 기본 키로 고유한 값, 빈 값x
        • (후보 키 : 부분 집합으로 유일성, 최소성)
        • 참조 무결성 : 참조 관계 테이블 사이에 일관된 값 유지
        • 외래 키 - 참조 무결성 : 참조 대상이 존재해야 함 → 참조 객체 존재시 취소, 참조 객체까지 연산, 참조 객체 값 null → RESTRICTED:, CASCADE, SET NULL

commit : 트랜잭션이 성공적으로 종료 / rollback : 비 정상 종료로 연산된 결과 취소

 

인덱스란

  • 정의 : 추가적인 쓰기와 저장 공간을 활용해 db 테이블 검색 속도를 향상시키기 위한 자료 구조
  • → 전체적인 연산 속도 향상
  • 관리 : 항상 최신 정렬 상태 유지 필요 (DML에 따라 각 해당하는 인덱스도 반영)
  • 장점 : 조회 속도에 따른 성능 향상 (부하 감소)
  • 단점 : db의 10% 저장공간을 인덱스 관리에 사용, 잘못 사용하면 성능이 저하
  • (빈번하게 조작(x)되는 속성에 걸면 인덱스 크기 커짐)

 

  • 인덱스 구현 : 해시 테이블 & b+tree
    • 해시 테이블 : (키, 테이블) 구조로 빠른 검색에 유용 → 부등호 자주 사용되는 순차 검색에 x
    • b+tree : 리프노드만 인덱스+”데이터” 나머지는 데이터 위한 인덱스만 있어 linkedList로 연결
  • 인덱스 생성시, 어떻게 db에 저장 되는지
    • 인덱스 설정 기준 : 카디널리티(높을수록 값 중복도 높음), 선택도(한 칼럼 값으로 얼마나 여러 row가 조회), 조회 활용도, 수정 빈도
    • 테이블 당 하나의 Clustered Index만 생성 → 물리적인 데이터 정렬에 이용(일반적 PK)
    • Non Clustered Index테이블당 여러 개를 생성 → 인덱스에 의해 찾아가야함
    • 두개 이상의 필드를 조합하여 생성한 Index
  • db에서 null 의미 : 값이 존재하지 않음 (입력 되지 않은, 알 수 없는 값)

참고자료

'Spring > DB' 카테고리의 다른 글

[DB] 다양한 DB 비교  (0) 2023.10.04
[DB] PostgreSQL과 MySQL  (0) 2023.08.08
[멋사] DB 연동  (0) 2023.04.06
DB(MySQL) & Spring 오류  (0) 2023.03.08

PostgreSQL과 MySQL

 

이 2가지는 서로 적합한 분야가 다르다고 표현되곤 합니다.

 

주로 MySQL은 쉽고 빠르게 데이터베이스를 구축하여 사용할 수 있는 RDBMS으로 속도와 안정성에 중심을 두어 웹사이트와 온라인 트랜잭션(동시에 다수의 트랜잭션이 발생하는 상황)에 적합하고

PostgreSQL은 상속, 함수, 오버로딩 등 기능을 가진 객체 관계형 데이터베이스(ORDMNS)로 복잡한 쿼리와 대규모 데이터베이스를 다루는 경우에 적합합니다.

 

 

그에 따라 DB 사용 순위에서 높은 위치에 자리하고 있습니다.

https://db-engines.com/en/ranking

Mysql은 다양한 어플리케이션 중 특히 웹의 표준 구성 요소로 사용에 적합합니다.


마찬가지로 ProgreSQL은 광범위한 데이터 유형(json, bool, 열거 등)을 지원할 뿐만 아니라 객체 유형 데이터, 사용자 정의 함수 및 저장 프로시저(하나의 함수처럼 실행시키기 위한 쿼리 집합)도 지원합니다.

 

이러한 ProgreSQL가 복잡한 대량의 데이터 작업을 수행에 적합한 이유"특수 데이터베이스 상황 처리"에 유리하기 때문입니다. 테이블과 열 정보뿐만 아니라 데이터 유형, 함수, 액세스 방법 등 많은 정보를 카탈로그 기반 작업으로 확장이 가능합니다.

 


 

질문

왜 사용하였는지(비교와 함께)
: 복잡한 쿼리를 보다 높은 성능으로 이용할 수 있는 방법을 사용하는 방법을 찾다가, Mysql에 비해서 복잡한 다량의 작업에 유리한 ProgreSQL을 사용하게 됨

어떤 면에서 효과적이였는지

어떤 것이 어려웠는지


위 내용은 관련 회사에서 내린 정의를 활용해서 정리한 글 입니다.

https://www.integrate.io/ko/blog/postgresql-vs-mysql-the-critical-differences-ko/

 

PostgreSQL과 MySQL 비교: 주요 차이점

사용 사례에 더 나은 DBMS를 결정하기 위해 MySQL과 PostgreSQL을 비교합니다.

www.integrate.io

https://www.postgresql.org/docs/9.0/extend-how.html

 

How Extensibility Works

PostgreSQL is extensible because its operation is catalog-driven. If you are familiar with standard relational database systems, you know that they store information about databases, tables, columns, etc., in what are commonly known as system catalogs. (So

www.postgresql.org

 

'Spring > DB' 카테고리의 다른 글

[DB] 다양한 DB 비교  (0) 2023.10.04
[DB] 트랙잭션과 인덱스  (0) 2023.08.28
[멋사] DB 연동  (0) 2023.04.06
DB(MySQL) & Spring 오류  (0) 2023.03.08

데이터 받는 방식

  • get : query(주소 뒤)
  • post : http body 이용 → 민감한 정보를 보호해서 전달할 수 있음

 

JSON

Http Body에서는 json이라는 형식 이용

  • <key, value> 구조로, {}안에 값을 넣음
{
	"key":"value",
	"key2":[1,2],
	"key3": {"inner" :"value2" }
}

 

spring layerad 구조

  • controller : 들어온 데이터를 객체화
    • @RestController : @Controller + @ResponseBody
  • service : controller에서 받은 데이터 가공
  • repository : DB 직접 관리

 

주로 사용되는 기술 & 패턴

JPA : ORM(객체 관계 매핑) 표준

ORM : 객체와 db 관계 매핑하는 도구

mvc : model - view - controller 디자인 패턴

 

ORM 사용 이유

객체와 DB 사이 불일치 해결 → @Entity

 

Intellj - mysql 연결

community : intellj - setting -plugin - database navigator → mysql 설정

 

Domain

Wrapper 클래스 이용 : null인 경우에 오류 안나기 위해

'Spring > DB' 카테고리의 다른 글

[DB] 다양한 DB 비교  (0) 2023.10.04
[DB] 트랙잭션과 인덱스  (0) 2023.08.28
[DB] PostgreSQL과 MySQL  (0) 2023.08.08
DB(MySQL) & Spring 오류  (0) 2023.03.08

Spring에서 DB 연결시, 문제가 없던 부분이 갑자기 오류가 뜨면서 돌아가지 않는 경우가 있다.

그 중 가장 대표적인 이유를 가져와 보았다.


1. Spring과 DB 연결에서 db, user, password 등 정보 오류

  • 해결 : 접속되야하는 db의 정보에 따라서 spring 코드 수정

2. MySQL 접속 -> mysql 서비스가 로컬 컴퓨터에서 중지되었습니다.

  • 원인 : 여러개의 mysql을 동작되는 문제 or 동작 중 오류
  • 해결 : mysql 프로세스 중지 후 다시 시작
  • 참고자료 : MySQL 서버 연결 불가
 

[MySQL] 'mysql80 서비스가 로컬 컴퓨터에서 시작했다가 중지되었습니다. '

Mysql을 사용해서 개발을 하다가 이런 오류를 만나면 진짜 진짜 짜증난다ㅜㅠㅠ 저번에도 이것때문에 Mysql을 새로 설치했는데, 또다시 이런 문제가 발생해서 인터넷을 찾아봤는데, cmd 창(관리자

kumsil1006.tistory.com

3. DB 비밀번호 변경

  • 해결 : MySQL 서비스 종료 -> 비밀번호 초기화 후 다시 비밀번호 지정
    • 서비스 종료 : net stop MySql80 
    • cmd에서 SQL에 패스워드 없이 접속 가능
      • mysqld --datadir="C:\ProgramData\MySQL\MySQL Server 8.0\Data" --console --skip-grant-tables --shared-memory
      • mysql -u root
    • MySQL에서 비밀번호 초기화
      • use mysql;
      • UPDATE user SET authentication_string=null WHERE User='root';
      • select authentication_string from user;
      • flush privileges;
    • MySQL에서 비밀번호 재설정
      • ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY '123456';
      • use mysql;
      • select authentication_string from user;
    • MySQL 프로그램 재시작
  • 참고자료 : mysql 비밀번호 초기화
 

[MySQL] mysql root 비밀번호 초기화 (mysql 8)

ㅎㅎ 인코딩 설정하다가 뭔가가 꼬여, 비밀번호 초기화가 필요했다. ① 설정 > 시스템에서 Mysql80 시스템을 종료하거나 cmd를 관리자 권한으로 열어 >> net stop MySql80 ② mysql이 program Files에, Program Dat

sseyeon.tistory.com

 

'Spring > DB' 카테고리의 다른 글

[DB] 다양한 DB 비교  (0) 2023.10.04
[DB] 트랙잭션과 인덱스  (0) 2023.08.28
[DB] PostgreSQL과 MySQL  (0) 2023.08.08
[멋사] DB 연동  (0) 2023.04.06

+ Recent posts