컴퓨터 과학 및 엔지니어링/소프트웨어 엔지니어링

캐서린 넬슨, 데이터 과학을 위한 소프트웨어 엔지니어링, 제이펍

booksworld 2025. 3. 6. 01:00

 

"데이터 과학을 위한 소프트웨어 엔지니어링"은 캐서린 넬슨이 저술한 책으로, 데이터 과학과 소프트웨어 엔지니어링의 경계를 허물고 두 분야의 통합적 이해를 돕는 내용을 담고 있습니다. 이 책은 데이터 과학자들이 소프트웨어 엔지니어링의 원칙을 적용하여 보다 효율적이고 견고한 코드를 작성할 수 있도록 안내합니다.

데이터 과학 프로젝트에서 코드의 품질은 성공에 중대한 영향을 미칩니다. 이 책은 넘파이와 팬더스와 같은 파이썬 라이브러리를 활용하여 데이터 과학 코드를 개선하는 방법을 다루고 있습니다. 또한, 코드 성능 분석, 오류 처리, 테스트, 문서화 등 소프트웨어 개발의 모범 사례를 설명하여 데이터 과학자들이 실무에서 겪는 어려움을 해결할 수 있는 길잡이가 되어 줍니다.

특히, 독자들은 코드의 가독성, 모듈성, 안정성을 높이는 방법을 배우게 되며, 이는 대규모 프로젝트에서의 협업과 유지보수에 큰 도움이 될 것입니다. 책의 내용은 초보자는 물론, 데이터 과학 분야에서 경력을 쌓고 있는 전문가들에게도 유용하게 활용될 수 있습니다.

또한, 이 책은 데이터 과학과 소프트웨어 엔지니어링의 간극을 메우는 미싱 링크로서, 데이터를 다루는 모든 이들에게 필수적인 교과서가 될 것입니다. 데이터 과학의 복잡한 개념을 소프트웨어 엔지니어링의 관점에서 접근함으로써, 독자들은 보다 나은 데이터 과학 프로젝트를 수행할 수 있는 역량을 갖추게 될 것입니다.

결국, "데이터 과학을 위한 소프트웨어 엔지니어링"은 데이터 과학자들이 소프트웨어 엔지니어링의 기초를 이해하고, 이를 통해 자신들의 프로젝트를 성공으로 이끌 수 있도록 돕는 귀중한 자원이 될 것입니다. 데이터 과학의 미래를 준비하는 모든 이들에게 강력히 추천합니다.

 

 

 

목차


옮긴이 머리말 xi
베타리더 후기 xiii
시작하며 xvi
감사의 글 xxii
표지에 대하여 xxiii

CHAPTER 1 좋은 코드란 무엇인가? 1
1.1 좋은 코드가 왜 중요한가? 2
1.2 변화하는 요구사항에 대응하기 3
1.3 간결성 3
__1.3.1 같은 일을 반복하지 말라(DRY 원칙) 5
__1.3.2 장황한 코드를 피하라 6
1.4 모듈성 7
1.5 가독성 9
__1.5.1 표준과 규칙 9
__1.5.2 이름 10
__1.5.3 코드 정리 11
__1.5.4 문서화 11
1.6 성능 12
1.7 안정성 12
__1.7.1 오류와 로깅 13
__1.7.2 테스트 13
1.8 요약 14

CHAPTER 2 코드 성능 분석 17
2.1 성능 개선 기법 18
2.2 코드 시간 측정 20
2.3 코드 프로파일링 23
__2.3.1 cProfile 23
__2.3.2 line_profiler 26
__2.3.3 Memray를 활용한 메모리 프로파일링 27
2.4 시간 복잡도 30
__2.4.1 시간 복잡도 추정 방법 30
__2.4.2 빅오 표기법 31
2.5 요약 34

CHAPTER 3 데이터 구조를 효율적으로 사용하기 35
3.1 파이썬 기본 데이터 구조 36
__3.1.1 리스트 36
__3.1.2 튜플 39
__3.1.3 딕셔너리 39
__3.1.4 집합 41
3.2 넘파이 배열 43
__3.2.1 넘파이 배열 기능 43
__3.2.2 넘파이 배열의 성능 고려사항 44
__3.2.3 대스크를 사용한 배열 연산 48
__3.2.4 머신러닝에서의 배열 50
3.3 팬더스 데이터프레임 51
__3.3.1 데이터프레임 기능 52
__3.3.2 데이터프레임의 성능 고려 사항 53
3.4 요약 55

CHAPTER 4 객체지향 프로그래밍과 함수형 프로그래밍 57
4.1 객체지향 프로그래밍 58
__4.1.1 클래스, 메서드, 속성 58
__4.1.2 직접 클래스 정의하기 61
__4.1.3 OOP 원리 64
4.2 함수형 프로그래밍 68
__4.2.1 람다 함수와 map() 69
__4.2.2 함수를 데이터프레임에 적용하기 70
4.3 어떤 패러다임을 사용할 것인가? 71
4.4 요약 72

CHAPTER 5 오류, 로깅, 디버깅 73
5.1 파이썬에서의 오류 73
__5.1.1 파이썬 오류 메시지 읽기 74
__5.1.2 오류 처리 75
__5.1.3 오류 일으키기 79
5.2 로깅 81
__5.2.1 무엇을 로깅할 것인가? 81
__5.2.2 로깅 설정 82
__5.2.3 로그 남기는 방법 83
5.3 디버깅 85
__5.3.1 디버깅 전략 86
__5.3.2 디버깅 도구 87
5.4 요약 93

CHAPTER 6 코드 포매팅, 린팅, 타입 검사 95
6.1 코드 포매팅과 스타일 가이드 96
__6.1.1 PEP8 97
__6.1.2 임포트 포매팅 98
__6.1.3 블랙을 사용해 자동으로 코드 포매팅하기 100
6.2 린팅 102
__6.2.1 린팅 도구 103
__6.2.2 IDE에서 린팅하기 106
6.3 타입 검사 107
__6.3.1 타입 주석 108
__6.3.2 mypy로 타입 검사하기 110
6.4 요약 111

CHAPTER 7 코드 테스트 113
7.1 왜 테스트를 작성해야 하는가? 114
7.2 언제 테스트할까? 115
7.3 테스트 작성 및 실행 방법 116
__7.3.1 기본 테스트 116
__7.3.2 예상치 못한 입력 테스트 118
__7.3.3 Pytest로 자동화된 테스트 실행하기 120
7.4 테스트 종류 123
__7.4.1 단위 테스트 123
__7.4.2 통합 테스트 124
7.5 데이터 검증 125
__7.5.1 데이터 검증 예제 125
__7.5.2 Pandera를 사용해 데이터 검증하기 126
__7.5.3 Pydantic을 이용한 데이터 검증 128
7.6 머신러닝을 위한 테스트 130
__7.6.1 모델 학습 테스트 131
__7.6.2 모델 추론 테스트 131
7.7 요약 132

CHAPTER 8 설계와 리팩터링 133
8.1 프로젝트 설계와 구조 134
__8.1.1 프로젝트 설계 시 고려사항 134
__8.1.2 머신러닝 프로젝트 예제 136
8.2 코드 설계 138
__8.2.1 모듈식 코드 139
__8.2.2 코드 설계 프레임워크 140
__8.2.3 인터페이스와 계약 141
__8.2.4 결합도 141
8.3 노트북을 확장성 있는 스크립트로 144
__8.3.1 왜 노트북 대신 스크립트를 사용하는가? 144
__8.3.2 노트북에서 스크립트 생성하기 145
8.4 리팩터링 148
__8.4.1 리팩터링 전략 149
__8.4.2 리팩터링 작업 예제 150
8.5 요약 152

CHAPTER 9 문서화 153
9.1 코드베이스 내에서의 문서 154
__9.1.1 이름 155
__9.1.2 주석 157
__9.1.3 독스트링 159
__9.1.4 Readme, 튜토리얼, 기타 장문의 문서 162
9.2 주피터 노트북에서의 문서화 163
9.3 머신러닝 실험에 대해 문서화하기 165
9.4 요약 167

CHAPTER 10 코드 공유: 버전 관리, 종속성, 패키징 169
10.1 깃을 사용한 버전 관리 170
__10.1.1 깃의 작동 방식 171
__10.1.2 변경사항 추적 및 커밋 172
__10.1.3 원격과 로컬 174
__10.1.4 브랜치와 풀 리퀘스트 175
10.2 종속성과 가상 환경 179
__10.2.1 가상 환경 180
__10.2.2 pip를 사용한 종속성 관리 182
__10.2.3 Poetry를 사용한 종속성 관리 183
10.3 파이썬 패키징 185
__10.3.1 패키징 기초 186
__10.3.2 pyproject.toml 188
__10.3.3 패키지 빌드 및 업로드 189
10.4 요약 191

CHAPTER 11 API 193
11.1 API 호출 194
__11.1.1 HTTP 메서드와 상태 코드 194
__11.1.2 SDG API에서 데이터 받아오기 195
11.2 FastAPI를 사용해 API 생성하기 199
__11.2.1 API 구성 200
__11.2.2 API에 기능 추가하기 203
__11.2.3 API에 요청하기 207
11.3 요약 209

CHAPTER 12 자동화 및 배포 211
12.1 코드 배포 212
12.2 자동화 예제 213
__12.2.1 프리-커밋 훅 214
__12.2.2 깃허브 액션 217
12.3 클라우드 배포 222
__12.3.1 컨테이너와 도커 223
__12.3.2 도커 컨테이너 구축 223
__12.3.3 구글 클라우드에 API 배포하기 226
__12.3.4 다른 클라우드에 API 배포하기 228
12.4 요약 228

CHAPTER 13 보안 231
13.1 보안이란 무엇인가? 231
13.2 보안 위험 233
__13.2.1 자격 증명, 물리적 보안, 사회공학적 기법 234
__13.2.2 타사 패키지 234
__13.2.3 파이썬 pickle 모듈 235
__13.2.4 버전 관리 위험 235
__13.2.5 API 보안 위험 236
13.3 보안 수칙 236
__13.3.1 보안 리뷰 및 정책 236
__13.3.2 보안 코딩 도구 237
__13.3.3 간단한 코드 스캔 238
13.4 머신러닝을 위한 보안 241
__13.4.1 ML 시스템 공격 241
__13.4.2 ML 시스템에서의 보안 수칙 243
13.5 요약 244

CHAPTER 14 소프트웨어 업계에서 일하기 247
14.1 개발 원칙 및 실전 247
__14.1.1 소프트웨어 개발 생애주기 247
__14.1.2 폭포수 소프트웨어 개발 방법론 249
__14.1.3 애자일 소프트웨어 개발 방법론 249
__14.1.4 애자일 데이터 과학 250
14.2 소프트웨어 업계에서의 역할 251
__14.2.1 소프트웨어 엔지니어 251
__14.2.2 QA 혹은 테스트 엔지니어 253
__14.2.3 데이터 엔지니어 254
__14.2.4 데이터 분석가 254
__14.2.5 제품 관리자 255
__14.2.6 UX 연구원 256
__14.2.7 디자이너 257
14.3 커뮤니티 258
__14.3.1 오픈소스 258
__14.3.2 이벤트에서 연설하기 260
__14.3.3 파이썬 커뮤니티 261
14.4 요약 262

CHAPTER 15 다음 단계 265
15.1 코드의 미래 267
15.2 코드에 담긴 당신의 미래 270
15.3 감사의 말 270

찾아보기 272

 

 

 

- 교보문고: https://bitl.bz/XtgW0H

- Yes24: https://bitl.bz/wrSdUh