본문 바로가기

728x90
반응형

책리뷰

(40)
SQL 전문가가이드 [과목3] 1장 3절 데이터베이스 I/O 메커니즘 블록단위 I/O 모든 DBMS에서 I/O는 블록(혹은 페이지) 단위로 이뤄진다. (즉, 하나의 레코드를 읽더라도 레코드가 속한 블록 전체를 읽는다.) SQL 성능을 좌우하는 중요한 성증지표는 액세스할 블록개수이고 옵티마이저의 판단에 가장 큰 영향을 미치는 것도 블록 개수다. 블록단위 I/O는 버퍼캐시와 데이터 파일 I/O 모두에 적용된다. 데이터 파일에서 DB 버퍼 캐시로 블록을 적재할 때 데이터 파일에서 블록을 직접 읽고 쓸 때 버퍼 캐시에서 블록을 읽고 쓸 때 버퍼 캐시에서 변경된 블록을 다시 데이터 파일에 쓸 때 메모리 I/O vs. 디스크 I/O 1. I/O 효율화 튜닝의 중요성 디스크를 경유한 데이터 입출력은 디스크의 액세스암이 움직이면서 헤드를 통해 데이터를 읽고 써서 느림 메모리 통한 입출력..
SQL 전문가가이드 [과목3] 1장 2절 SQL 처리 과정 구조적, 집합적, 선언적 질의 언어 SQL은 'Structured Query Language'의 줄임말이다. 구조적 질의언어다. SQL은 기본적으로 구조적이고 집합적이고 선언적인 질의 언어다. SQL 처리과정 서브엔진 별 역할 엔진 역할 Parser SQL문장을 이루는 개별 구성요소를 분석하고 파싱해서 파싱 트리(내부적인 구조체)를 만든다. 이 과정에서 사용자 SQL에 문법적 오류가 없는지(-> Syntax 체크), 의미상 오류가 없는지(->Semantic체크) 확인한다. Optimizer Query Transformer 파싱된 SQL을 좀 더 일반적이고 표준적인 형태로 변환한다. Estimator 오브젝트 및 시스템 통계정보를 이용해 쿼리 수행 각 단계의 선택도, 카디널리티, 비용을 계산하고, 궁극적으..
SQL 전문가가이드 [과목3] 1장 1절 데이터베이스 아키텍처 데이터베이스 구조 1. Oracle 구조 데이터베이스 : 디스크에 저장된 데이터 집합(Datafile, Redo Log File, Control File 등) 인스턴스 : SGA 공유 메모리 영역과 이를 액세스하는 프로세스 집합 하나의 인스턴스가 하나의 데이터베이스에 액세스하지만, RAC(Real Application Cluster)환경에서는 여러 인스턴스가 하나의 Database에 액세스 할 수 있다. ( 인스턴스 하나 > 여러 데이터베이스 불가) 2. SQL Server 구조 하나의 인스턴스당 최고 3만 2767개의 데이터베이스 정의해서 사용 가능 master, model, msdb, tempdb 등의 시스템 베이스가 만들어지며 사용자 데이터베이스를 추가해서 생성하는 구조 데이터베이스 하나를 만들때마..
SQL 전문가가이드 [과목1] 1장 1절 데이터 모델의 이해 모델링이란 사람이 살아가면서 접할 수 있는 다양한 현상이 사람, 사물, 개념에 의해 발생된다고 할 때 모델링은 이것을 표기법에 따라 표기하는 것 자체를 의미한다. 즉, 모델을 만들어가는 일 자체가 모델링이다. 모델링에 대한 다양한 정의 - 가설적 또는 일정 양식에 맞춘 표현 - 어떤 것에 대한 예비 표현으로 그로부터 최종대상이 구축되도록 계획으로서 기여하는 것 - 복잡한 현실세계를 단순화해 표현하는 것 - 모델이란 사물 또는 사건에 관한 양상이나 관점을 연관된 사람이나 그룹을 위해 명확히 하는 것 - 모델이란 현실세계를 추상화한 반영이다. 모델링의 특징 추상화 : 현실 세계를 일정한 형식에 맞춰 표현한다는 의미. 다양한 현상을 일정한 양식인 표기법에 따라 표현하는 것 단순화 : 복잡한 현실세계를 약속된 ..
[이펙티브자바] 아이템11. equals를 재정의하려거든 hashCode도 재정의하라 equals를 재정의할 때 hashCode를 재정의하지 않으면 HashMap이나 HashSet같은 컬렉션의 원소로 클래스의 인스턴스를 사용할 때 문제가 된다. Object 명세 규약 equals 비교에 사용되는 정보가 바뀌지 않으면 몇 번을 호출해도 hashCode는 같은 값을 리턴한다. 어플리케이션이 재실행되면 값이 달라질 수도 있다. equals(Object)가 두 객체를 같다고 판단하면 hashCode도 같아야 한다. equals가 다르다고 hashCode도 다른 값을 반환할 필요는 없다. 하지만 다른 값을 반환해야 해시테이블의 성능이 좋아진다. @Getter @Setter @AllArgsConstructor public class User { private int id; private int ph..
[이펙티브자바] 아이템10. equals는 일반 규약을 지켜 재정의하라 equals메서드는 많은 경우에 Object의 equals가 정확히 비교해주기 때문에 꼭 필요한 경우가 아니라면 재정의하지 말자. equals를 재정의 하지 말아야하는 경우 각 인스턴스가 본질적으로 고유하다. 인스턴스가 가지는 값보다 동작하는 개체임을 나타내는 게 더 중요한 클래스(Thread) Thread클래스는 Object의 equals로 충분함 인스턴스의 논리적 동치성을 검사할 일이 없다. java.util.regex.Pattern의 equals를 재정의해서 두 Pattern인스턴스가 같은 정규표현식을 나타내는지 검사할 필요가 없다. 상위 클래스에서 재정의한 equals가 하위클래스에도 딱 들어맞는다. 클래스가 private이거나 package-private이고 equals메서드를 호출할 일이 없다..
[이펙티브자바] 아이템9. try-finally보다는 try-with-resources를 사용하라 자바 라이브러리에서 close메서드를 호출해 직접 자원을 닫아 줘야하는 경우가 있다. (InputStream, OutputStream, java.sql.Connection 등..) 자원을 닫을 때 finalizer는 믿을 수 없다. 2022.02.24 - [책리뷰/이펙티브자바] - [이펙티브자바] 아이템8. finalizer와 cleaner사용을 피하라 전통적인 방법으로는 try-finally가 쓰였다. try-finally 구문의 문제 static String firstLineOfFile(String path) throws IOException { BufferedReader br = new BufferedReader(new FileReader(path)); try { return br.readLine(..
[이펙티브자바] 아이템8. finalizer와 cleaner사용을 피하라 자바에서는 두 가지 객체 소멸자를 제공하는데 Finalizer는 예측불가능하고 위험하며 대부분 불필요하다. 자바9에서 deprecated되었다. 그 대안으로 Cleaner를 사용하는데 Finalizer보다는 덜 위험하지만 예측불가능하며, 느리고, 불필요하다. 자바에서 접근할 수 없는 객체 자원을 회수하는 역할은 GC가 한다. 비메모리 자원을 회수하기 위해서는 try-with-resource, try-finally를 사용해 해결한다. 사용을 피해야하는 이유1 언제 수행될지 모른다. finalizer와 cleaner로 제때 실행되어야하는 작업은 절대 할 수 없다. 타이밍이 중요한 작업은 절대 사용하면 안된다. 예를 들어, 파일 닫기를 처리한다면 시스템이 finalizer나 cleaner실행을 게을리 해서 동..

728x90
반응형