전체 글

전체 글

    트랜잭션의 본질 (DB 스터디 7주차)

    트랜잭션의 본질 (DB 스터디 7주차)

    "관계형 데이터베이스 실전 입문 - 오쿠노 마키아"를 읽으며 매주 스터디 진행 목표 트랜잭션의 기본을 파악 RDB에서 트랜잭션을 사용해 데이터 정합성을 보장하는 방법 14.1 트랜잭션 데이터를 올바르게 보장하기 위해 고안된 방법 실제 애플리케이션 개발에서는 관계형 모델(정규화)와 트랜잭션을 모두 구현해야 데이터의 정합성을 보장 가능 트랜잭션의 기능 트랜잭션이 필요한 상황 DB 서버에 여러 개의 클라이언트로부터 동시에 엑세스가 발생하는 경우 DB 서버 or 애플리케이션이 갱신 처리 도중에 중단되어 데이터 부정합이 발생하는 경우 ex) 은행 계좌 입/출금 처리 잔액 100만원, A 트랜잭션은 30만원 입금 처리, B 트랜잭션은 20만원 출금 처리 트랜잭션 A 잔액 조회 : 100만원 트랜잭션 B 잔액 조회 ..

    웹 응용프로그램을 위한 데이터 구조 (DB 스터디 6주차)

    웹 응용프로그램을 위한 데이터 구조 (DB 스터디 6주차)

    "관계형 데이터베이스 실전 입문 - 오쿠노 마키아"를 읽으며 매주 스터디 진행 목표 대규모 엑세스를 감당해야하는 애플리케이션은 RDB를 이용해서는 성능의 한계를 직면한다. 데이터 모델을 유지하면서 물리적인 한계에 대응하는 법을 알아본다. 12.1 캐시라는 개념 캐시가 사용되는 곳 CPU 캐시 메모리 TLB(Translation Lookaside Buffer, 가상 메모리의 논리 주소와 물리 주소 매핑하는 캐시 메모리) 디스크 캐시, 파일 시스템 캐시 브라우저 콘텐츠 캐시, DNS 캐시 DB 버퍼 풀 등 캐시는 확실한 장점과 단점을 갖기 때문에 확실하게 성능을 향상시킬 수 있을 때 적용하는 것이 바람직하다. 캐시의 장점 캐시의 본질은 비용이 많이드는 작업을 비용이 낮은 동일한 행위로 처리하는 작업 높은 비..

    인덱스 설계 전략 (DB 스터디 5주차)

    인덱스 설계 전략 (DB 스터디 5주차)

    11.1 인덱스의 동작 인덱스와 색인은 비슷 색인이 커지는 경우 키워드를 찾는데 시간이 걸림 색인 : 키워드가 문자 순서로 정렬돼 있고 해당 키워드가 있는 페이지의 번호가 기록되어 있다. RDB의 인덱스 RDB의 인덱스는 일반적으로 B+트리로 구성 B+트리는 데이터(인덱스의 값)가 저장된 리프 노드 + 리프 노드까지의 경로 역할을 하는 논리프 노드 탐색 경로의 출발점은 루트 노드 논리프 노드에는 자식 노드가 보유한 값 중에 최솟값이 저장 자식 노드는 페이지 ID에 대한 포인터가 저장 인덱스의 노드 수 = 테이블의 행 수 인덱스의 왼쪽과 검색 범위 B+트리는 등가 비교와 범위 검색(Between)에 사용 가능 LIKE 절 검색의 경우 와일드카드 위치에 따라 검색이 달라지므로 전방 일치를 권장한다. B+트리..

    이력 데이터와 친해지기 (DB 스터디 4주차)

    이력 데이터와 친해지기 (DB 스터디 4주차)

    9.1 이력 데이터의 문제점 응용프로그램이 로그 데이터를 테이블에 저장하거나,과거부터 현재에 이르는 데이터를 저장할 때 생성되는 것 일반적으로 타임스탬프나 버전 번호와 같이 저장 이력과 관계형 모델의 상성 문제 릴레이션은 집합이므로 각 요소간 순서가 존재하지 않는다. 이력에는 어느 쪽이 오래된 쪽인지, 새로운 것인지에 관한 순서가 존재한다. 이력 데이터는 쉽게 테이블이 커지므로 성능 저하가 나타날 수 있다. 이력 데이터의 예 # 현재 날짜가 2014-12-31인 경우, 턱걸이 기계의 현재 가격 구하는 쿼리 SELECT PRICE FROM PRICE_LIST WHERE ITEM = '턱걸이 기계' AND NOW() BETWEEN START_DATE AND END_DATE; 이력 데이터는 릴레이션이 시간축과..

    SELECT를 공략하자 (DB 스터디 4주차)

    SELECT를 공략하자 (DB 스터디 4주차)

    목표 SELECT에 대한 이해 8.1 SELECT는 SQL의 심장부 SELECT는 릴레이션이 연산 단위 한 개 이상의 릴레이션을 조합해 새로운 릴레이션을 뽑음 릴레이션 : 테이블 → 테이블의 데이터 조회는 "SELECT”만 가능 SELECT의 기본 구조 SELECT 컬럼 목록 # Projection FROM 테이블의 목록 # Product WHERE 검색 조건 # Restrict SELECT는 Projection, Product, Restrict의 연산이 한번에 이루어짐 Projection : 속성을 선택하는 연산 Product : 해당하는 릴레이션의 곱집합 Restrict : 특정 조건에 맞는 튜플을 포함한 릴레이션 반환 연산 SELECT 내 연산의 논리적인 순서 : Product → Restrict ..

    Optional 파헤치기!

    Optional 파헤치기!

    자비스 앤 빌런즈 인터뷰 프로세스를 진행하면서 면접관님께서 “Optional.of로 왜 데이터를 저장할 때 감쌌는지” 여쭤보셨다. 나는 내가 작성한 로직 의도대로 말씀드렸지만, 실제 메서드 내부의 동작이나 어떤 파라미터가 들어오고 어떤 경우에 이를 쓰는지, 어떤 예외가 발생할 수 있는지 등등 여러가지 꼬리 질문이 들어왔고 제대로 답변 드리지 못했다. 특히, Optional을 주로 써오면서 .of().orElseThrow() 이런 방식으로 코딩을 가끔 했었는데 그동안은 예외가 발생하지 않았던 것이지 null이 들어오는 경우 반드시 NPE가 발생하는 것에 대해 면접을 통해 알게 되었다. 이를 계기로 기본적인 Optional 사용법에 대해 파악하고 앞으로는 Optional을 사용할 때 적절한 경우와 조심해서 ..

    정규화 이론(두번째) - 결합 종속성 (DB 스터디 3주차)

    정규화 이론(두번째) - 결합 종속성 (DB 스터디 3주차)

    "관계형 데이터베이스 실전 입문 - 오쿠노 마키아"를 읽으며 매주 스터디 진행 4.1 결합 종속성 (JD) BCNF를 통해 후보키, 키가 아닌 속성의 함수종속성을 제거했지만, 중복을 모두 제거한 것은 아니다. ☁️ 결합 종속성 (Join Dependency, JD) → 키 자체에 다중성이 포함됐을 때 나타나는 중복 [정의] A, B, … C를 릴레이션 R의 제목의 부분집합이라고 할 때 A,B,C의 프로젝션에 대응하는 릴레이션을 결합한 결과 = 릴레이션 R 이면 “결합 종속성”이다. [표현식] ☆{A, B, …, C} A, B, C의 제목 중 하나가 R의 제목 전체와 같은 경우 “결합 종속성이 명백하다.” 릴레이션 내에 명백하지 않은 결합 종속성이 존재하면 4NF ~ 6NF의 대상이다. 결합 종속성은 프로..

    SQL과 관계형 모델 (정규화) (DB 스터디 3주차)

    SQL과 관계형 모델 (정규화) (DB 스터디 3주차)

    "관계형 데이터베이스 실전 입문 - 오쿠노 마키아"를 읽으며 매주 스터디 진행 목표 왜 정규화가 필요한지? 정규화는 어떤 과정인지? 3.1 왜 DB 설계가 중요한가? 테이블이 적절하게 설계되지 않으면 쿼리를 통한 데이터 조작이 어렵다. 정규화를 통해 테이블의 깔끔한 설계를 가능하게 한다. 3.2 정규화 관계형 모델을 보완하는 이론 🔥 “정규화” - RDB를 잘 다루는 데 필요한 기술이며 관계형 모델을 전제로 구축된 DB 설계 이론 - 관계형 모델을 보완하는 이론 정규화 ≠ 관계형 모델의 일부 변칙 (Anomalies) 정규화의 이점 = 모순 방지 변칙 (Anomalies) : 릴레이션을 잘못 설계해 모순이 발생하는 상태 SQL의 이상현상 (삽입, 갱신, 삭제 이상) 변칙의 예 이름 과목 학년 맹준영 DB..