| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 |
- s
- Graph
- C programming
- 메모리구조
- 윤성우의 열혈 자료구조
- buffer
- 윤성우 열혈자료구조
- datastructure
- C 언어 코딩 도장
- JSON
- coding test
- Algorithm
- Serialization
- ㅅ
- 알기쉬운 알고리즘
- R
- insertion sort
- 이것이 자바다
- list 컬렉션
- Selection Sorting
- stream
- Stack
- 혼자 공부하는 C언어
- 이스케이프 문자
- Today
- Total
목록Computer Science/Database (26)
Engineering Note
격리성 문제용어설명Dirty Read어떤 트랜잭션에서 처리한 작업이 완료(commit)되지 않았는데도 다른 트랜잭션에서 볼 수 있는 현상Non-Repeatble ReadRepeatable Read가 불가능한 상태Phantom Read트랜잭션 내부에서 같은 쿼리를 두 번 실행할 때 첫 번째 실행시에 없던(phantom)레코드가 조회되는 현상. 격리수준용어설명READ UNCOMMITTEDDirty Read가 허용되는 격리수준READ COMMITTEDDirty Read가 발생하지 않고, 어떤 트랜잭션에서 변경한 내용이 커밋되기 전까지는 다른 트랜잭션에서 조회할 수 없는 격리 수준REAPEATABLE READMVCC(Multi Version Concurrency Control)를 통해 언두 영역에서 백업된 ..
1.JOIN과 EXIST 차이 JOIN의 핵심: "조건에 맞는 테이블을 이어준다." EXISTS의 핵심: "데이터를 합치지 않는다" 보통 JOIN은 두 테이블을 가로로 이어 붙여서 커다란 종이를 만드는 작업입니다. 하지만 EXISTS는 메인 테이블을 한 줄씩 읽으면서, 서브쿼리에 물어만 보는 방식입니다. 예시 검색 조건 필터링에 따라 상품을 조회하는 동적쿼리 @Overridepublic Page findBySearchOption(ItemSearchDto itemSearchDto, Pageable pageable) { // 1. 메인 쿼리 데이터 조회 List content = jpaQueryFactory .selectFrom(item) .where( ..
복합 유니크 조건를 잘못 사용하면서 놓칠 뻔한 요구사항 반영(하나의 회원은 하나의 장바구니를 가진다. ,미래에는 여러 장바구니를 가질 수 있다.)+현재의 요구사항과 확장성을 혼동하지 않는 법유니크제약 조건에 대한 공부. DB를 설계할 때 요구사항을 어떻게 반영할 수 있는지 많은 공부를 했다. 그리고 특정 요구조건이 없더라도 불필요한 중복은 없는지도 스스로 생각해 볼 수 있었다. 상품 카페고리건이그랬다. 상품과 카테고리 정보를 연결해주는 상품카테고리 테이블에서 상품과 카테고리가 중복저장되는 상황을 방지하기 위해 복합 제약조건을 걸었다.맥북프로라는 상품이 노트북이라는 카테고리에 저장되었는데 다시 노트북이라는 카테고리에 또 저장되는 상황을 막기 위해 세팅해주었다. 맥북프로는 노트북, 컴퓨터, 전자기기 등의 ..
트랜잭션- 작업의 완전성을 보장해주는 것 락- 동시성을 제어하기 위한 기능- 여러 커넥션에서 동시에 동일한 자원(레코드나 테이블)을 요청할 경우 순서대로 한 시점에는 하나의 커넥션만 변경할 수 있게 해주는 역할 격리 수준- 하나의 트랜잭션 내에서 또는 여러 트랜잭션 간의 작업 내용을 어떻게 공유하고 차단할 것진지를 결정하는 레벨 트랜잭션 MySQL 엔진 별 트랜잭션 지원엔진트랜잭션 지원 여부InnoDBOMyISAMXMEMORYX MySQL에서의 트랜잭션트랜잭션- 여러 개의 변경 작업을 수행하는 쿼리가 조합되거나 또는 하나의 변경 작업을 수행하는 쿼리거나 상관없이 논리적인 작업 세트 자체가 100% 적용되거나(commit 실행됐을 때) 아무것도 적용되지 않아야(ROLLBACK 또는 트랜잭션을 ROL..
정규화의 목적데이터 중복 제거데이터 일관성업데이트 이상방지 비정규화의도적으로 중복을 허용하는 것.비정규화 목적성능 향상ex)집계값 저장 예시주문내역에서 전체 주문금액은 개별상품 가격과 상품 주문 개수를 통해서 다음 쿼리로 계산할 수 있다.'SELECT SUM(price * quantity) FROM order_items where order_id = 1;'하지만 자주 조회되는 경우 매번 계산하기 보다 total_amount라는 컬럼을 order 테이블에 두어 한 번에 조회할 수도 있다. 하지만 이렇게 될 경우 주문 시점에 매번 total_amount를 계산해서 insert해주어야하고, 나중에 개별상품의 주문 취소가 발생하거나, 재고 부족으로 총 주문 금액이 바뀔 경우 데이터 일관성의 문제가 발생할 수..
외래키(Foreign Key)외래키는 어떤 릴레이션에 소속된 속성 또는 속성 집합이 다른 릴레이션의 기본키가 되는 키다. 다른 말로, 다른 릴레이션의 기본키를 그대로 참조하는 속성의 집합이 외래키다. 기본키가 아니더라도 투플을 구분할 수 있는 키라면 외래키로 사용할 수 있다.외래키는 릴레이션간의 관계를 맺어줄 때 사용한다. 인터넷 쇼핑몰 데이터베이스를 통해 알아 보는 외래키고객 릴레이션고객(고객아이디(PK), 고객이름, 나이, 등급, 직업, 적립급) 주문 릴레이션주문(주문번호(PK), 주문고객(FK, 고객아이디), 조문제품, 수량, 단가, 주문일자) 주문릴레이션의 주문 고객 속성이 고객 릴레이션의 고객아이디의 속성을 참조하고 있고, 주문고객 속성은 외래키이다. 이렇게 외래키를 통해 고객 릴레이션과 주..
데이터베이스의 저장 연산 과정 데이터베이스 데이터 저장 위치데이터베이스는 비휘발성 저장장치인 디스크에 위치 저장장치 관점에서 트랜잭션 처리 과정트랜잭션이 데이터베이스의 데이터를 처리하려면 아래 그림1처럼 데이터를 디스크에서 메인 메모리로 가져와 이를 처리한 후 그 결과를 다시 디스크로 보내는 작업이 필요하다. 디스크와 메인메모리 간의 데이터 이동 연산input(x) : 디스크 블록에 저장되어 잇는 데이터X를 메인 메모리 버퍼블록으로 이동시키는 연산output(x) : 메인 메모리 버퍼 블록에 있는 데이터 X를 디스크 블록으로 이동시키는 연산 메인 메모리 버퍼블록과 프로그램 변수 간의 데이터 인동 연산read(x) : 메인 메모리 버퍼블록에 저장되어 있는 데이터 X를 프로그램의 변수로 읽어오는 연..
FLUSH와 COMMIT 차이구분FLUSHCOMMIT역할메모리의 변경 사항을 DB 트랜잭션 버퍼에 동기화(SQL 전송)현재 트랜잭션 내의 모든 변경 사항을 DB에 영구적으로 확정영구성일시적(트랜잭션 버퍼에 존재, Rollback 가능)영구적(DB에 최종 반영, Rollback 불가)가시성(다른 트랜잭션)일반적으로 보이지 않음(트랜잭션 고립 유지)보이게 됨(트랜잭션 완료 및 고립 해제)트랜잭션 종료 여부트랜잭션 유지트랜잭션 종료자동 실행COMMIT 시 내부적으로 포함되어 자동 실행수동으로 호출하거나, 설정에 따라 트랜잭션 종료시 자동 실행됨