본문 바로가기

추천 검색어

실시간 인기 검색어

SQL Antipatterns 데이터베이스 프로그래밍의 실수 줄이기

빌 카윈 지음 | 하세정 , 이애라 옮김
지니북스

2024년 10월 18일 출간

국내도서 : 2023년 11월 07일 출간

(개의 리뷰)
( 0% 의 구매자)
eBook 상품 정보
파일 정보 pdf (12.71MB)
ISBN 9791198786661
지원기기 교보eBook App, PC e서재, 리더기, 웹뷰어
교보eBook App 듣기(TTS) 불가능
TTS 란?
텍스트를 음성으로 읽어주는 기술입니다.
  • 전자책의 편집 상태에 따라 본문의 흐름과 다르게 텍스트를​ 읽을 수 있습니다.
  • 이미지 형태로 제작된 전자책 (예 : ZIP 파일)은 TTS 기능을 지원하지 않습니다.

PDF 필기가능 (Android, iOS)
소득공제
소장
정가 : 28,000원

쿠폰적용가 25,200

10% 할인 | 5%P 적립

이 상품은 배송되지 않는 디지털 상품이며,
교보eBook앱이나 웹뷰어에서 바로 이용가능합니다.

카드&결제 혜택

  • 5만원 이상 구매 시 추가 2,000P
  • 3만원 이상 구매 시, 등급별 2~4% 추가 최대 416P
  • 리뷰 작성 시, e교환권 추가 최대 200원

작품소개

이 상품이 속한 분야

이 책은 프로그래머들이 데이터에 사용하는 인기 있는 언어인 SQL에 관한 책이며, 특히 SQL을 사용하면서 자주하는 실수를 줄이는 방법에 관한 것이다. 일반적인 실수를 식별하고 피하는 방법을 배우고 실제로 작동하는 데이터 모델로 리팩토링한다. 2010년 출판된 ‘SQL Antipatterns’의 내용을 보강하였으며, 최신 버전의 MySQL 및 Python용으로 업데이트된 이 책에서는 빠른 승리를 위한 12개의 새로운 ‘미니 안티패턴’이 추가되었다. 누구나 실수를 하지만, 실수로부터 배우고 이를 자신의 기술을 향상할 수 있는 기회로 바꾸려고 노력한다. 다른 개발자가 저지른 가장 일반적인 오류와 이를 해결하는 방법을 연구함으로써 더 나은 소프트웨어 개발자가 될 것이다.
■ ‌효율적이고 확장 가능하며 유지 관리 가능한 데이터베이스를 설계하는 방법
■ ‌빠르고 정확한 SQL 쿼리를 작성하는 방법
■ ‌일반적인 성능 함정을 피하는 방법
■ ‌데이터베이스를 애플리케이션에 효율적이고 효과적으로 통합하는 방법
역자 서문
저자 서문

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을 사용하는 개발자가 일반적으로 저지르는 다른 실수가 포함된다. 미니 안티패턴은 주요 안티패턴보다 더 간략하게 다룬다.
은유적이거나 기억하기 쉽도록 올바른 긍정적인 디자인 패턴과 안티패턴 모두 은유적이거나 기억하기 쉬운 이름을 만드는 것이 전통이다. 그래서 이 책의 대부분의 안티패턴 부분은 재미있거나 연상되는 제목을 포함한다.
부록에는 관계형 데이터베이스 이론의 실질적인 내용을 소개한다. 이 책에서 다루는 안티패턴의 대부분은 데이터베이스 이론을 잘못 이해한 결과에 의한 것이다.

작가정보

저자(글) 빌 카윈

(Bill Karwin)
캘리포니아주 산타크루즈에서 태어났으며, University of California에서 컴퓨터 및 정보 과학 학위를 받았다. 소프트웨어 엔지니어, 컨설턴트 및 관리자로 20년 이상 근무했다. 그는 MySQL, InterBase 등을 포함한 관계형 데이터베이스를 전문적으로 다루었고 온라인에서 수천 개의 질문에 답했으며, 2010에 출판한 “SQL AntiPatterns: 데이터베이스 프로그래밍의 함정 피하기(인사이트, 2011)”에서 가장 반복되는 실수들에 관해서 자신만의 통찰력을 서술했다.

LG상사, 삼성SDS를 거쳐 현재 정보통신산업진흥원에서 ICT 인력양성 연구위원으로 활동하고 있다. 기업들이 원하는 현장에 바로 투입할 수 있는 AI 인력을 공급하기 위한 교육과정 개발 및 운영에 참여해왔다. 현재 코딩을 모르는 일반인들도 쉽게 활용할 수 있는 AI 솔루션 교육의 대중화를 위해 노력하고 있다.

LG CNS, SK 주식회사(C&C) 에서 20년 넘게 시스템 통합 및 구축 업무를 수행했으며, 현재는 공공 기획 업무의 시스템 컨설팅 및 기술자문을 수행하고 있다. 주요 관심분야는 데이터 모델링 및 프로그래밍으로 개발자의 고품질의 코드 작성에 도움이 되기를 바라며 책의 번역을 진행하였다.

이 상품의 총서

Klover리뷰 (0)

Klover리뷰 안내
Klover(Kyobo-lover)는 교보를 애용해 주시는 고객님들이 남겨주신 평점과 감상을 바탕으로, 다양한 정보를 전달하는 교보문고의 리뷰 서비스입니다.
1. 리워드 안내
구매 후 90일 이내에 평점 작성 시 e교환권 100원을 적립해 드립니다.
  • - e교환권은 적립일로부터 180일 동안 사용 가능합니다.
  • - 리워드는 1,000원 이상 eBook, 오디오북, 동영상에 한해 다운로드 완료 후 리뷰 작성 시 익일 제공됩니다. (5,000원 이상 상품으로 변경 예정, 2024년 9월 30일부터 적용)
  • - 리워드는 한 상품에 최초 1회만 제공됩니다.
  • - sam 이용권 구매 상품 / 선물받은 eBook은 리워드 대상에서 제외됩니다.
2. 운영 원칙 안내
Klover리뷰를 통한 리뷰를 작성해 주셔서 감사합니다. 자유로운 의사 표현의 공간인 만큼 타인에 대한 배려를 부탁합니다. 일부 타인의 권리를 침해하거나 불편을 끼치는 것을 방지하기 위해 아래에 해당하는 Klover 리뷰는 별도의 통보 없이 삭제될 수 있습니다.
  • 도서나 타인에 대해 근거 없이 비방을 하거나 타인의 명예를 훼손할 수 있는 리뷰
  • 도서와 무관한 내용의 리뷰
  • 인신공격이나 욕설, 비속어, 혐오 발언이 개재된 리뷰
  • 의성어나 의태어 등 내용의 의미가 없는 리뷰

구매 후 리뷰 작성 시, e교환권 100원 적립

문장수집

문장수집 안내
문장수집은 고객님들이 직접 선정한 책의 좋은 문장을 보여 주는 교보문고의 새로운 서비스 입니다. 교보eBook 앱에서 도서 열람 후 문장 하이라이트 하시면 직접 타이핑 하실 필요 없이 보다 편하게 남길 수 있습니다. 마음을 두드린 문장들을 기록하고 좋은 글귀들은 ‘좋아요’ 하여 모아보세요. 도서 문장과 무관한 내용 등록 시 별도 통보없이 삭제될 수 있습니다.
리워드 안내
  • 구매 후 90일 이내에 문장 수집 등록 시 e교환권 100원을 적립해 드립니다.
  • e교환권은 적립일로부터 180일 동안 사용 가능합니다.
  • 리워드는 1,000원 이상 eBook에 한해 다운로드 완료 후 문장수집 등록 시 제공됩니다. (5,000원 이상 eBook으로 변경 예정, 2024년 9월 30일부터 적용)
  • 리워드는 한 상품에 최초 1회만 제공됩니다.
  • sam 이용권 구매 상품 / 선물받은 eBook / 오디오북·동영상 상품/주문취소/환불 시 리워드 대상에서 제외됩니다.

구매 후 문장수집 작성 시, e교환권 100원 적립

    교보eBook 첫 방문을 환영 합니다!

    신규가입 혜택 지급이 완료 되었습니다.

    바로 사용 가능한 교보e캐시 1,000원 (유효기간 7일)
    지금 바로 교보eBook의 다양한 콘텐츠를 이용해 보세요!

    교보e캐시 1,000원
    TOP
    신간 알림 안내
    SQL Antipatterns 데이터베이스 프로그래밍의 실수 줄이기 웹툰 신간 알림이 신청되었습니다.
    신간 알림 안내
    SQL Antipatterns 데이터베이스 프로그래밍의 실수 줄이기 웹툰 신간 알림이 취소되었습니다.
    리뷰작성
    • 구매 후 90일 이내 작성 시, e교환권 100원 (최초1회)
    • 리워드 제외 상품 : 마이 > 라이브러리 > Klover리뷰 > 리워드 안내 참고
    • 콘텐츠 다운로드 또는 바로보기 완료 후 리뷰 작성 시 익일 제공
    감성 태그

    가장 와 닿는 하나의 키워드를 선택해주세요.

    사진 첨부(선택) 0 / 5

    총 5MB 이하로 jpg,jpeg,png 파일만 업로드 가능합니다.

    신고/차단

    신고 사유를 선택해주세요.
    신고 내용은 이용약관 및 정책에 의해 처리됩니다.

    허위 신고일 경우, 신고자의 서비스 활동이 제한될 수
    있으니 유의하시어 신중하게 신고해주세요.


    이 글을 작성한 작성자의 모든 글은 블라인드 처리 됩니다.

    문장수집 작성

    구매 후 90일 이내 작성 시, e교환권 100원 적립

    eBook 문장수집은 웹에서 직접 타이핑 가능하나, 모바일 앱에서 도서를 열람하여 문장을 드래그하시면 직접 타이핑 하실 필요 없이 보다 편하게 남길 수 있습니다.

    P.
    SQL Antipatterns 데이터베이스 프로그래밍의 실수 줄이기
    저자 모두보기
    낭독자 모두보기
    sam 이용권 선택
    님이 보유하신 이용권입니다.
    차감하실 sam이용권을 선택하세요.
    sam 이용권 선택
    님이 보유하신 이용권입니다.
    차감하실 sam이용권을 선택하세요.
    sam 이용권 선택
    님이 보유하신 프리미엄 이용권입니다.
    선물하실 sam이용권을 선택하세요.
    결제완료
    e캐시 원 결제 계속 하시겠습니까?
    교보 e캐시 간편 결제
    sam 열람권 선물하기
    • 보유 권수 / 선물할 권수
      0권 / 1
    • 받는사람 이름
      받는사람 휴대전화
    • 구매한 이용권의 대한 잔여권수를 선물할 수 있습니다.
    • 열람권은 1인당 1권씩 선물 가능합니다.
    • 선물한 열람권이 ‘미등록’ 상태일 경우에만 ‘열람권 선물내역’화면에서 선물취소 가능합니다.
    • 선물한 열람권의 등록유효기간은 14일 입니다.
      (상대방이 기한내에 등록하지 않을 경우 소멸됩니다.)
    • 무제한 이용권일 경우 열람권 선물이 불가합니다.
    이 상품의 총서 전체보기
    네이버 책을 통해서 교보eBook 첫 구매 시
    교보e캐시 지급해 드립니다.
    교보e캐시 1,000원
    • 첫 구매 후 3일 이내 다운로드 시 익일 자동 지급
    • 한 ID당 최초 1회 지급 / sam 이용권 제외
    • 네이버 책을 통해 교보eBook 구매 이력이 없는 회원 대상
    • 교보e캐시 1,000원 지급 (유효기간 지급일로부터 7일)
    구글바이액션을 통해서 교보eBook
    첫 구매 시 교보e캐시 지급해 드립니다.
    교보e캐시 1,000원
    • 첫 구매 후 3일 이내 다운로드 시 익일 자동 지급
    • 한 ID당 최초 1회 지급 / sam 이용권 제외
    • 구글바이액션을 통해 교보eBook 구매 이력이 없는 회원 대상
    • 교보e캐시 1,000원 지급 (유효기간 지급일로부터 7일)