Top

파이썬을 활용한 소프트웨어 아키텍처 [견고하고 확장 가능한 애플리케이션 아키텍처 설계]

  • 원서명Software Architecture with Python: Design and architect highly scalable, robust, clean, and high performance applications in Python (ISBN 9781786468529)
  • 지은이아난드 발라찬드라 필라이(Anand Balachandran Pillai)
  • 옮긴이김영기
  • ISBN : 9791161754857
  • 40,000원
  • 2020년 12월 30일 펴냄
  • 페이퍼백 | 656쪽 | 188*235mm
  • 시리즈 : 소프트웨어 아키텍처

책 소개

요약

파이썬이 애플리케이션의 아키텍처 작업에 얼마나 적합한지를 설명하며 시작한다. 아키텍처에 중요한 요구사항과 이들을 결정하는 방법을 이해할 수 있다. 또한 아키텍트가 비즈니스 요구사항을 만족하는 제품을 만드는 데 도움이 되는 유지보수성/재사용성, 테스트 용이성, 확장성, 성능, 사용성, 보안성 같은 다양한 아키텍처의 품질 요구사항을 완전히 이해하게 될 것이다.
데브옵스, 지속적인 통합과 같은 기법을 사용해 애플리케이션을 더 견고하게 만드는 방법을 살펴본다. 애플리케이션에 객체지향 기법을 언제 사용하고, 언제 사용하지 말아야 하는지를 이해하게 될 것이다. 또한 미래를 생각해 비즈니스 성장에 비례해 확장 가능한 애플리케이션을 설계할 수 있다.
파이썬의 세부사항을 이해하는 데 도움이 되며, 고객의 예상에 부응하는 동시에 고객의 예상을 뛰어 넘는 중요한 설계 결정도 할 수 있을 것이다.

이 책에서 다루는 내용

■ 올바른 아키텍처 속성을 갖는 프로그램 작성
■ 엔터프라이즈 아키텍처 패턴을 사용한 웹 확장성 문제 해결
■ 파이썬 관점의 디자인 패턴 이해
■ 파이썬 성능 테스팅 도구의 최적화 방법
■ 파이썬을 이용한 원격 환경 및 클라우드 환경으로의 코드 배포
■ 안전한 애플리케이션을 위한 파이썬의 아키텍처 작성법

이 책의 대상 독자

엔터프라이즈 애플리케이션에 경험이 있는, 아키텍트가 되려는 파이썬 개발자에게 적합하다. 애플리케이션의 효과적인 청사진을 만들기 위해 파이썬을 이용하려는 소프트웨어 아키텍트도 커다란 효과를 볼 수 있을 것이다.

이 책의 구성

1장, ‘소프트웨어 아키텍처의 원칙'에서는 소프트웨어 아키텍처가 갖는 주요 사항을 소개한다. 아키텍처 품질속성과 아키텍처의 배경이 되는 원칙을 간단하게 설명한다. 소프트웨어 아키텍처 원칙과 기본 속성을 파악하는 데 탄탄한 기반이 된다.
2장, ‘변경 가능하고 가독성 있는 코드'에서는 작성 개발에 관련된 아키텍처 품질속성인 변경 용이성과 가독성을 다룬다. 아키텍처 품질속성인 유지보수성과 애플리케이션의 테스트를 위한 코드를 파이썬으로 작성하는 전술을 이해할 수 있게 된다.
3장, ‘테스트 용이성 - 테스트 가능한 코드 작성'에서는 아키텍처 품질속성인 테스트 용이성과 테스트 용이성을 위해 파이썬 애플리케이션의 구조를 잡는 방법을 배운다. 테스트 용이성과 소프트웨어 테스팅의 다양한 관점을 학습하고 테스트 가능한 애플리케이션을 파이썬으로 작성하기 위해 이용할 수 있는 다양한 라이브러리와 모듈을 익힌다.
4장, ‘좋은 성능은 보상이다!'에서는 성능 관점에서 파이썬 코드를 작성하는 방법을 다룬다. 성능을 최적화하는 시기에 아키텍처에서 품질속성은 물론 성능 관련 지식도 갖추게 된다. 소프트웨어 수명주기에서 성능 최적화를 하는 시기도 알게 된다.
5장, ‘확장 가능한 애플리케이션 작성'에서는 확장 가능한 애플리케이션의 중요성을 이야기한다. 애플리케이션의 확장성을 달성하는 다양한 방법을 설명하고 파이썬에서 사용하는 확장성 관련 기법을 알아본다. 확장성의 이론적 측면과 업계의 모범 사례도 배운다.
6장, ‘보안- 안전한 코드 작성'에서는 아키텍처의 보안 측면, 관련 모범 사례와 안전한 애플리케이션의 작성 기법을 다룬다. 조심해야 할 다양한 보안 문제도 짚고 넘어간다. 처음부터 파이썬으로 안전한 애플리케이션 아키텍처를 만드는 방법을 깨닫게 된다.
7장, ‘파이썬 디자인 패턴'에서는 실용적인 프로그래머 관점에서 각 패턴에 대한 이론적인 배경과 더불어, 파이썬에서 디자인 패턴의 개요를 다룬다. 실용적인 프로그래머에게 유용한 파이썬의 디자인 패턴 지식을 얻게 된다.
8장, ‘파이썬 아키텍처 패턴 고수준의 현대적인 파이썬 아키텍처 패턴을 소개한다. 고준 아키텍처 문제를 해결하기 위한 패턴들의 접근방법을 알 수 있도록 파이썬 라이브러리와 프레임워크 예제도 제공한다.
9장, ‘파이썬으로 애플리케이션 배포'에서는 파이썬을 이용해 올바른 방법으로 원격환경이나 클라우드에 쉽게 코드를 배포하는 방법을 설명한다.
10장, ‘디버깅 기법'에서는 파이썬 코드의 디버깅 기법을 다룬다. 프로그래머에게 가장 간단하면서도 매우 편리한, 그리고 전략적으로 배치된 print문에서부터 로깅과 시스템 호출(system call) 추적까지 다룬다. 이러한 기법들은 시스템 아키텍트가 팀을 이끄는 데 도움이 된다.

저자/역자 소개

지은이의 말

소프트웨어 아키텍처나 특화된 소프트웨어 애플리케이션을 위한 기반 디자인은 쉬운 일이 아니다. 소프트웨어 아키텍처의 가장 큰 두 가지 문제는 동기화 상태를 유지하는 데 있다. 첫 번째 문제는 요구사항을 발견하거나 진화함에 따라 아키텍처와 동기화를 유지하는 것이며, 두 번째 문제는 구현물이 만들어지고 발전하는 과정에서 아키텍처와 동기화를 유지하는 것이다.
이 책은 성공적인 소프트웨어 아키텍트가 될 수 있도록 다양한 예제와 유즈케이스를 통해 직접적인 방법을 제시한다. 파이썬의 거의 모든 사항을 이해하는 데 커다란 도움이 될 것이다. 파이썬을 통해 견고하면서도 깔끔하며 확장성과 성능이 뛰어난 애플리케이션의 아키텍처를 만들 수 있으리라 확신한다.

지은이 소개

아난드 발라찬드라 필라이(Anand Balachandran Pillai)

소프트웨어 분야의 제품 공학 소프트웨어 설계와 아키텍처 연구에 18년이 넘는 경험이 있는 공학과 기술 전문가다. 마드라스의 인도 공과대학교에서 기계공학 학사 학위를 받았다.
야후(Yahoo), 맥아피(McAfee), 인포시스(Infosys) 같은 회사의 제품 개발 팀에서 새로운 제품을 만드는 수석 엔지니어와 아키텍트 역할을 수행했다. 소프트웨어 성능 공학, 고확장성 아키텍처, 보안 및 오픈소스 커뮤니티에 관심이 있으며 때때로 스타트업에서 기술 리더 역할이나 컨설팅을 담당하기도 한다. 방갈로 파이썬 사용자 그룹의 설립자이며 파이썬 소프트웨어 재단PSF의 선임연구원이기도 하다. 현재는 예지(Yegii Inc)의 선임 아키텍트로 일하고 있다.

옮긴이의 말

소프트웨어 개발자라면 적어도 한 번쯤 SW에 대한 오랜 경험과 경력을 바탕으로 멋진 소프트웨어 제품을 만드는 것을 상상해 본 적이 있을 것이다. 소프트웨어 아키텍처 분야는 다른 소프트웨어 분야에 비해 비교적 역사가 짧아도 제대로 파악하려면 많은 험난한 과정을 겪어야 한다. 이러한 어려움 중 하나는 소프트웨어 아키텍처 자체를 알려주는 레퍼런스가 부족하다는 점과, 다른 하나는 파악한 소프트웨어 아키텍처의 개념을 실제 구현 언어로 어떻게 연결시킬 것인가다.
이 책의 각 장에서 이야기하는 주제들은 그 주제만으로도 상당한 학습이 필요한 내용들이다.
그러나, 적어도 이 책은 소프트웨어 아키텍처에 관심을 갖고 파악하고 싶어하는 개발자들에게 도움이 될 것을 확신한다. 이 책을 통해 아키텍처 관련된 주요 품질속성과 아키텍처 관련 주제를 확인하고 파이썬 예제를 하나하나 살펴보면 보면 어느새 앞서 말한 두 가지 어려움의 상당 부분 해결될 것이라고 감히 생각한다.

옮긴이 소개

김영기

삼성전자 네트워크 SE 그룹에서 소프트웨어 개발과 관련한 다양한 업무를 수행하고 있다.
주요 이력으로, 지능망(IN)과 모바일 애플리케이션 개발, 정적 분석과 소프트웨어 구조 분석, 소프트웨어 개발 인프라 관리 등이 있다.
현재는 소프트웨어 개발과 관련된 조직의 개발 문화, 애자일과 데브옵스, 인프라 자동화에 관심이 많다.

목차

목차
  • 1장. 소프트웨어 아키텍처의 원칙들
    • 소프트웨어 아키텍처의 정의
      • 소프트웨어 아키텍처 대 디자인
      • 소프트웨어 아키텍처의 여러 측면
    • 소프트웨어 아키텍처의 특성
      • 아키텍처는 구조를 정의한다
      • 아키텍처는 핵심 요소의 집합을 선택한다
      • 아키텍처는 초기 디자인 결정사항을 기술한다
      • 아키텍처는 이해당사자의 요구사항을 관리한다
      • 아키텍처는 조직 구조에 영향을 미친다
      • 아키텍처는 환경의 영향을 받는다
      • 아키텍처는 시스템을 문서화한다
      • 아키텍처는 패턴을 준수한다
    • 소프트웨어 아키텍처의 중요성
    • 시스템 아키텍처 대 엔터프라이즈 아키텍처
    • 아키텍처 품질속성
      • 변경 용이성
      • 테스트 용이성
      • 확장성
      • 성능
      • 가용성
      • 보안
      • 배포 용이성
    • 요약

  • 2장. 변경하기 쉽고 가독성 있는 코드 작성
    • 변경 용이성이란 무엇인가?
    • 변경 용이성의 관련 측면
    • 가독성 이해하기
      • 파이썬과 가독성
      • 가독성 - 안티패턴
      • 가독성 기법
      • 코드의 문서화
      • 코딩 및 스타일 가이드라인 준수하기
      • 코드를 리뷰하고 리팩토링하기
      • 코드에 주석 달기
    • 변경 용이성의 기본 사항 - 응집도와 결합도
      • 응집도와 결합도 측정하기
      • 응집도와 결합도의 측정 - 문자열과 텍스트 처리
    • 변경 용이성을 위한 전략
      • 명시적인 인터페이스 제공하기
      • 양방향 의존성 감소시키기
      • 공통 서비스 추상화하기
      • 상속 기법 사용하기
      • 늦은 바인딩 기법의 사용
    • 메트릭 - 정적 분석을 위한 도구
      • 코드의 나쁜 냄새란 무엇인가?
      • 순환 복잡도 - 맥케이브 메트릭
      • 정적 체커 수행하기
    • 코드 리팩토링하기
      • 코드 리팩토링 - 복잡도 수정하기
      • 코드 리팩토링 - 코드의 나쁜 냄새 제거하기
      • 코드 리팩토링 - 스타일 및 코딩 문제 수정하기
    • 요약

  • 3장. 테스트 용이성 - 테스트 가능한 코드 작성하기
    • 테스트 용이성 이해하기
      • 소프트웨어 테스트 용이성과 관련 속성
      • 아키텍처 측면의 테스트 용이성
      • 테스트 용이성 전략들
    • 화이트 박스 테스팅 원칙
      • 단위 테스팅
      • 실제 단위 테스팅
      • nose2로 정보 알아내기
      • 코드 커버리지
      • py.test로 테스트하기
    • 모의객체 생성
    • 문서의 인라인 테스트 - doctests
    • 통합 테스트
    • 테스트 자동화
      • 셀레늄 웹 드라이버를 사용한 테스트 자동화
  • 테스트 주도 개발
  • 팰린드롬 예제를 통한 TDD
  • 요약

  • 4장. 좋은 성능은 보상이다!
    • 성능이란 무엇인가?
    • 소프트웨어 성능 엔지니어링
    • 성능 테스팅과 측정 도구
    • 성능 복잡도
    • 성능 측정
      • 컨텍스트 관리자를 사용한 시간 측정
      • timeit 모듈을 사용한 타이밍 코드
      • 시간 복잡도 확인하기 - 그래프
      • timeit을 사용한 CPU 시간 측정
    • 프로파일링
      • 결정론적 프로파일링
      • cProfile과 profile을 사용한 프로파일링
      • 프로파일링 - 통계 수집 및 보고
      • 서드 파티 프로파일러
    • 다른 도구들
      • Objgraph
      • Pympler
    • 성능을 위한 프로그래밍 - 데이터 구조
      • 변경 가능한 컨테이너 - 리스트, 딕셔너리, 세트
      • 변경이 불가능한 컨테이너 - 튜플
      • 고성능 컨테이너- 컬렉션 모듈
      • 확률론적 데이터 구조 - 블룸 필터
    • 요약

  • 5장. 확장 가능한 애플리케이션 작성
    • 확장성과 성능
    • 동시성
      • 동시성과 병렬처리
      • 파이썬에서의 동시성 - 멀티스레딩
    • 썸네일 생성기
      • 썸네일 생성기 - 생산자/소비자 아키텍처
      • 썸네일 생성기 - 잠금을 사용하는 자원 제한
      • 썸네일 생성기 - 세마포어를 사용하는 리소스 제한
      • 리소스 제한 - 세마포어 대 잠금
      • 썸네일 생성기 - 조건을 사용하는 URL 비율 컨트롤러
    • 멀티스레딩 - 파이썬과 GIL
      • 파이썬의 동시성 처리 - 멀티 프로세싱
      • 소수 검사기
      • 디스크 파일 정렬
    • 멀티스레딩 대 멀티 프로세싱
      • 파이썬에서의 동시성-비동기 실행
    • 선점형 멀티태스킹 대 협력형 멀티태스킹
    • 파이썬의 asyncio 모듈
    • future의 실행 완료 대기하기 - async와 await
    • 동시 실행되는 future 객체들 - 고수준의 동시 처리
      • 디스크 썸네일 생성기
      • 동시성 옵션 - 선택 방법
      • 병렬 처리 라이브러리
      • Joblib
      • PyMP
      • 프렉탈 - 만델브로트 세트
    • 웹 스케일링
      • 워크플로우 확장 - 메시지 큐와 태스크 큐
    • 셀러리 - 분산 태스크 큐
      • 셀러리를 사용하는 멘델로브 세트
      • 파이썬으로 웹 서비스하기 - WSGI
      • uWSGI - 강력한 WSGI 미들웨어
      • Gunicorn - WSGI용 유니콘
      • Gunicorn 대 uWSGI
      • 확장 아키텍처
    • 요약

  • 6장. 보안 - 안전한 코드 작성
    • 정보보안 아키텍처
    • 안전한 코딩
    • 일반적인 보안 취약점
    • 파이썬은 안전한가?
      • 입력 읽기
      • 임의의 입력 값 평가
      • 오버플로우 오류
      • 객체 직렬화
    • 웹 애플리케이션의 보안 문제
      • 서버 사이트 템플릿 주입
      • 서버 사이드 템플릿 주입 - 완화 전략
      • 서비스 거부
      • 크로스 사이트 스크립팅
      • DoS와 XSS 공격 완화
    • 파이썬 보안 전략
    • 안전한 코딩 전략
    • 요약

  • 7장. 파이썬 디자인 패턴
    • 디자인 패턴의 요소
    • 디자인 패턴의 분류
      • 플러그 가능한 해싱 알고리즘
      • 플러그 가능한 해싱 알고리즘 요약
    • 파이썬의 생성 패턴
      • 싱글톤 패턴
      • 상태 공유 - 보그 대 싱글톤
      • 팩토리 패턴
      • 프로토타입 패턴
      • 빌더 패턴
    • 파이썬의 구조 패턴
      • 어댑터 패턴
      • 파사드 패턴
      • 프록시 패턴
    • 파이썬의 행위 패턴
      • 이터레이터 패턴
      • 옵저버 패턴
      • 상태 패턴
    • 요약

  • 8장. 파이썬 아키텍처 패턴
    • MVC 소개
      • 모델 템플릿 뷰(MTV) - 장고
      • 장고 관리자 - 자동화된 모델 중심 뷰
      • 유연한 마이크로 프레임워크 - 플라스크
    • 이벤트 주도 프로그래밍
      • select 모듈과 I/O 멀티플랙싱을 사용하는 채팅 서버와 클라이언트
      • 이벤트 주도 프로그래밍 대 동시성 프로그래밍
      • Twisted
      • Eventlet
      • Greenlets과 Gevent
    • 마이크로서비스 아키텍처
      • 파이썬의 마이크로서비스 프레임워크
      • 마이크로서비스 예제 - 레스토랑 예약
      • 마이크로서비스의 장점
    • 파이프와 필터 아키텍처
      • 파이썬에서의 파이프와 필터
    • 요약

  • 9장. 파이썬 애플리케이션 배포
    • 배포 용이성
      • 배포 용이성에 영향을 주는 요소들
    • 소프트웨어 배포 아키텍처 계층
    • 파이썬에서의 소프트웨어 배포
      • 파이썬 코드 패키징
      • Pip
      • Virtualenv
      • Virtualenv과 pip
      • 재배치 가능한 가상 환경
      • PyPI
      • 애플리케이션 패키징과 제출
    • PyPA
    • 패브릭을 사용한 원격 배포
    • 앤서블을 이용한 원격 배포
    • 슈퍼바이저를 이용한 원격 데몬 관리하기
    • 배포 패턴과 모범 사례
    • 요약

  • 10장. 디버깅 기법
    • 최대 부분 배열 문제
      • ‘print’의 강점
      • 분석과 재작성
      • 코드 타이밍 및 최적화
    • 간단한 디버깅 트릭과 기법
      • 단어 검색 프로그램
      • 단어 검색 프로그램의 디버깅 단계 1
      • 단어 검색 프로그램의 디버깅 단계 2
      • 단어 검색 프로그램의 최종 코드
      • 코드 블록 건너뛰기
      • 실행 중지
      • 외부 의존성에 래퍼 사용하기
      • 반환 값/데이터로 함수 교체하기(모의 객체 사용)
    • 디버깅 기법으로써의 로깅
      • 간단한 애플리케이션 로깅
    • 디버깅 도구 - 디버거 사용
      • pdb로 세션 디버딩하기
      • pdb 유사 도구
    • 고급 디버깅 기법 - 추적
      • trace 모듈
      • lptrace 프로그램
      • strace를 사용한 시스템 호출 추적
    • 요약

도서 오류 신고

도서 오류 신고

에이콘출판사에 관심을 가져 주셔서 고맙습니다. 도서의 오탈자 정보를 알려주시면 다음 개정판 인쇄 시 반영하겠습니다.

오탈자 정보는 다음과 같이 입력해 주시면 됩니다.

(예시) p.100 아래에서 3행 : '몇일'동안 -> 며칠동안