책 이미지

책 정보
· 분류 : 국내도서 > 컴퓨터/모바일 > 프로그래밍 개발/방법론 > 프로그래밍 기초/개발 방법론
· ISBN : 9791197992971
· 쪽수 : 390쪽
· 출판일 : 2023-11-07
책 소개
목차
역자 서문
저자 서문
1장. 안티패턴이란?
1.1 안티패턴 유형
1.2 안티패턴 해부하기
1.3 ERD(Entity-Relationship Diagram, 앤터티 관계 다이어그램)
1.4 예제 데이터베이스
1부. 논리적 데이터베이스 디자인 안티패턴
2장. 무단횡단
2.1 목표: 다중 값 속성 저장
2.2 안티패턴: 쉼표로 구분된 목록 형식 지정
2.3 안티패턴을 인식하는 방법
2.4 안티패턴의 적법한 사용
2.5 솔루션: 교차 테이블 생성
2.6 미니-안티패턴: CSV를 행으로 분할
3장. 순진한 나무
3.1 목표: 계층으로 저장하고 쿼리하기
3.2 안티패턴: 항상 자신의 부모에 의존함
3.3 안티패턴을 인식하는 방법
3.4 안티패턴의 적법한 사용
3.5 솔루션: 대체 트리 모델 사용
3.6 미니 안티패턴: 내 컴퓨터에서 작동
4장. ID 필수
4.1 목표: PK 규칙 설정
4.2 안티패턴: 모든 상황에 맞는 방식
4.3 안티패턴을 인식하는 방법
4.4 안티패턴의 적법한 사용
4.5 솔루션: 맞춤형
4.6 미니-안티패턴: BIGINT가 충분히 클까?
5장. 키가 없는 엔트리
5.1 목표: 데이터베이스 아키텍츠 단순화
5.2 안티패턴: 제약조건을 생략
5.3 안티패턴을 인식하는 방법
5.4 안티패턴의 적법한 사용
5.5 솔루션: 제약조건 선언
6장. 엔터티-속성-값
6.1 목표: 변수 속성 지원
6.2 안티패턴: 일반 속성 테이블 사용
9.4 안티패턴을 인식하는 방법
6.4 안티패턴의 적법한 사용
6.5 솔루션: 서브타입 모델링
7장. 다형성 연결
7.1 목표: 여러 부모 참조
7.2 안티패턴: 이중 목적 FK 사용
7.3 안티패턴을 인식하는 방법
7.4 안티패턴의 적법한 사용
7.5 솔루션: 관계 단순화
8장. 다중 컬럼 속성
8.1 목표: 다중값 속성 저장
8.2 안티패턴: 여러 컬럼 만들기
8.3 안티패턴을 인식하는 방법
8.5 솔루션: 종속 테이블 만들기
8.6 미니 안티패턴: 가격 저장
9장. 메타데이터 트리블
9.1 목표: 확장성 지원
9.2 안티패턴: 테이블 또는 컬럼 복제
9.3 안티 패턴을 인식하는 방법
9.4 안티패턴의 합법적 사용
9.5 솔루션: 분할 및 정규화
2부. 물리적 데이터베이스 디자인 안티패턴
10장. 반올림 오류
10.1 목표: 정수 대신 소수 사용
10.2 안티패턴: FLOAT 데이터 타입 사용
10.3 안티패턴을 인식하는 방법
10.4 안티패턴의 적법한 사용
10.5 솔루션: NUMERIC 데이터 타입 사용
11장. 31가지 맛
11.1 목표: 컬럼을 특정 값으로 제한
11.2 안티패턴: 컬럼 정의에 값 지정
11.3 안티패턴을 인식하는 방법
11.4 안티패턴의 적법한 사용
11.5 솔루션: 데이터에 값 지정
11.6 미니 안티패턴: 예약어(Reserved Words)
12장. 유령 파일
12.1 목표: 이미지 또는 기타 대용량 미디어 저장
12.2 안티패턴: 파일을 사용해야 한다고 가정
12.3 안티패턴을 인식하는 방법
12.5 솔루션: 필요에 따라 BLOB 데이터 타입 사용
13장. 인덱스 샷건
13.1 목표: 성능 최적화
13.2 안티패턴: 계획 없이 인덱스 사용하기
13.3 안티패턴을 인식하는 방법
13.4 안티패턴의 적법한 사용
13.5 솔루션: 인덱스 멘토링
13.6 미니 안티패턴: 모든 컬럼 인덱싱
3부. 쿼리 안티패턴
14장. 미지에 대한 두려움
14.1 목표: 누락된 값 구별
14.2 안티패턴: Null을 일반 값으로 사용하거나 그 반대의 경우
14.3 안티패턴을 인식하는 방법
14.4 안티패턴의 적법한 사용
14.5 솔루션: 고유 값으로 Null 사용
14.6 미니-안티패턴: NOT IN (NULL)
15장. 모호한 그룹
15.1 목표: 그룹당 가장 큰 값을 가진 행 가져오기
15.2 안티패턴: 그룹화되지 않은 컬럼 참조
15.3 안티패턴을 인식하는 방법
15.4 안티패턴의 적법한 사용
15.5 솔루션: 컬럼을 명확하게 사용
15.6 미니 안티패턴: 이식 가능한 SQL
15장. 무작위 선택
16.1 목표: 샘플 행 가져오기
16.2 안티패턴: 무작위로 데이터 정렬
16.3 안티패턴을 인식하는 방법
16.4 안티패턴의 적법한 사용
16.5 솔루션: 특별한 순서 없이…
16.6 미니 안티패턴: 여러 임의 행에 대한 쿼리
17장. 가난한 사람의 검색엔진
17.1 목표: 전체 텍스트 검색
17.2 안티패턴: 패턴 매칭 연산자
17.3 안티패턴을 인식하는 방법
17.4 안티패턴의 적법한 사용
17.5 솔루션: 작업 수행에 적합한 도구 사용
18장 스파게티 쿼리
18.1 목표: SQL 쿼리 감소
18.2 안티패턴: 복잡한 문제를 한 번에 해결
18.3 안티패턴을 인식하는 방법
18.4 안티패턴의 적법한 사용
18.5 솔루션: 잘게 나누고 정복하기
19장. 암묵적 컬럼
19.1 목표: 타이핑 줄이기
19.2 안티패턴: 길을 잃게 만드는 지름길
19.3 안티패턴을 인식하는 방법
19.4 안티패턴의 적법한 사용
19.5 솔루션: 명시적으로 컬럼 이름 지정
4부. 애플리케이션 개발 안티패턴
20장. 읽을 수 있는 패스워드
20.1 목표: 패스워드 복구 또는 재설정
20.2 안티패턴: 패스워드를 일반 텍스트로 저장
20.3 안티패턴을 인식하는 방법
20.4 안티패턴의 적법한 사용
20.5 솔루션: 소금을 가미한 패스워드 해시 저장
20.6 미니 안티패턴: VARCHAR로 해시 문자열 저장
21장. SQL 인젝션
21.1 목표: 동적 SQL 쿼리 작성
21.2 안티패턴: 확인되지 않은 입력을 코드로 실행
21.3 안티패턴을 인식하는 방법
21.4 안티패턴의 적법한 사용
21.5 해결책: 아무도 믿지 마라
21.6 미니 안티패턴: 따옴표 안의 쿼리 파라미터
22장. 가상키 결벽증
22.1 목표: 데이터 정리
22.2 안티패턴: 모서리 채우기
22.3 안티패턴을 인식하는 방법
22.4 안티패턴의 적법한 사용
22.5 솔루션: 극복
22.6 미니 안티패턴: 그룹당 자동 증가
23장. 악을 보지 마라
23.1 목표: 적은 코드 작성
23.2 안티패턴: 지푸라기 없이 벽돌 만들기
23.3 안티패턴을 인식하는 방법
23.4 안티패턴의 적법한 사용
23.5 솔루션: 우아하게 오류 복구
23.6 미니 안티패턴: 구문 오류 메시지 읽기
24장. 외교관 면책 특권
24.1 목표: 모범 사례 적용
24.2 안티패턴: SQL을 2급 시민으로 만들기
24.3 안티패턴을 인식하는 방법
24.4 안티패턴의 적법한 사용
24.5 솔루션: 대규모 품질 문화 구축
24.6 미니 안티패턴: 이름 바꾸기
25장. 표준 운영 프로시저
25.1 목표: 저장 프로시저 사용
25.2 안티패턴: 리더를 따르라
25.3 안티패턴을 인식하는 방법
25.4 안티패턴의 적법한 사용
25.5 솔루션: 최신 애플리케이션 아키텍처 채택
25.6 미니 안티패턴: MySQL의 저장 프로시저
5부. 보너스: FK 미니 안티패턴 추가
26장. 표준 SQL의 FK 실수
26.1 참조 방향 바꾸기
26.2 테이블이 생성되기 전에 테이블 참조
26.3 부모 테이블의 PK를 참조하지 않음
26.4 복합키의 각 컬럼에 대해 별도의 제약조건 만들기
26.5 잘못된 컬럼 순서 사용
26.6 일치하지 않는 데이터 타입 사용
26.7 일치하지 않는 문자 조합(Collation) 사용
26.8 고아 데이터 생성
26.9 Null을 허용하지 않는 컬럼에 SET NULL 옵션 사용
26.10 중복 제약조건 식별자 만들기
26.11 호환되지 않는 테이블 타입 사용
27장. MySQL에서의 FK 실수
27.1 호환되지 않는 스토리지 엔진 사용
27.2 대용량 데이터 타입 사용
27.3 고유하지 않은 인덱스에 대한 MySQL FK
27.4 인라인 참조 구문 사용
27.5 기본 참조 구문 사용
27.6 MySQL에서 호환되지 않는 테이블 타입 사용
28장. 정규화 규칙
A.1 관계형(Relational)이란 무엇을 의미할까?
A.2 정규화에 대한 오해
A.3 정규화란 무엇일까?
A.4 상식
참고문헌
찾아보기
책속에서
안티패턴은 문제를 해결하기 원했지만, 종종 다른 문제를 야기시키는 기술을 의미한다. 안티패턴은 다른 방식으로 널리 실행되지만 공통점을 가지고 있다. 사람들은 동료, 책, 기사로부터 도움을 받거나 스스로 안티패턴에 맞는 아이디어를 갖게 된다. 객체지향 소프트웨어 디자인 및 프로젝트 관리의 많은 안티패턴은 Portland Pattern Repository 및 1998년 판 AntiPatterns [BMMM98] 책에서 확인할 수 있다.
1.1 안티패턴 유형
이 책은 안티패턴의 네 가지 유형에 대해 소개한다.
논리적 데이터베이스 디자인 안티패턴
코딩을 시작하기 전에 여러분은 데이터베이스에 넣어야 할 정보가 무엇인지와 데이터를 구성하고 상호 연결하는 최선의 방법이 무엇인지를 결정해야 한다. 여기에는 데이터베이스 테이블, 컬럼 및 관계를 계획하는 방법을 소개한다.
물리적 데이터베이스 디자인 안티패턴
여러분이 어떤 데이터를 저장할 필요가 있는지 알고 난 후 RDBMS 기술의 기능을 사용하여, 할 수 있는 한 효과적으로 데이터 관리를 실행한다. 여기서는 테이블, 인덱스 및 데이터 타입을 정의하는 방법을 소개한다. CREATE TABLE과 같은 SQL의 DDL(Data Definition Language, 데이터 정의 언어)를 사용한다.
쿼리 안티패턴
여러분은 데이터베이스에 데이터를 추가한 다음 그 데이터를 검색할 필요가 있다. SQL 쿼리는 SELECT, UPDATE 및 DELETE와 같은 DML(Data Manipulation Language, 데이터 조작 언어)로 만들어진다
애플리케이션 개발 안티패턴
SQL은 C++, Java, PHP, Python, 또는 Ruby와 같은 다른 언어로 만들어진 애플리케이션의 컨텍스트에서 사용될 것이다. 애플리케이션에 SQL를 활용하는 올바른 방법 및 잘못된 방법이 있다. 그래서 이 부분에서 일반적인 몇 가지 실수를 소개한다.
일반적인 소프트웨어 개발이나 운영과 관련된 다른 많은 안티패턴이 있지만 이 책은 SQL 언어를 집중해서 다룬다.
또한 책 전체에서 챕터(Chapter) 사이에 미니 안티패턴을 찾을 수 있다. 여기에는 SQL을 사용하는 개발자가 일반적으로 저지르는 다른 실수가 포함된다. 미니 안티패턴은 주요 안티패턴보다 더 간략하게 다룬다.
은유적이거나 기억하기 쉽도록 올바른 긍정적인 디자인 패턴과 안티패턴 모두 은유적이거나 기억하기 쉬운 이름을 만드는 것이 전통이다. 그래서 이 책의 대부분의 안티패턴 부분은 재미있거나 연상되는 제목을 포함한다.
부록에는 관계형 데이터베이스 이론의 실질적인 내용을 소개한다. 이 책에서 다루는 안티패턴의 대부분은 데이터베이스 이론을 잘못 이해한 결과에 의한 것이다.