장바구니 담기 close

장바구니에 상품을 담았습니다.

Go 프로그래밍 개발 환경에서 의존성 주입 실습

Go 프로그래밍 개발 환경에서 의존성 주입 실습

  • 코리스캇
  • |
  • 에이콘출판
  • |
  • 2020-05-29 출간
  • |
  • 448페이지
  • |
  • 188 X 235 X 26 mm
  • |
  • ISBN 9791161754154
판매가

35,000원

즉시할인가

31,500

카드할인

0원(즉시할인 0%)

적립금

1,750원 적립(5%적립)

배송비

무료배송

(제주/도서산간 배송 추가비용:3,000원)

추가혜택

네이버페이 무조건 1%적립+ 추가 1%적립

수량
+ -
총주문금액
31,500

※ 스프링제본 상품은 반품/교환/환불이 불가능하므로 신중하게 선택하여 주시기 바랍니다.

출판사서평




★ 이 책에서 다루는 내용 ★

■ DI의 장점
■ SOLID 디자인 원칙과 Go 언어와의 연관성
■ Go 개발 환경에서 사용 가능한 다양한 종류의 의존성 주입 패턴 분석
■ DI 활용으로 느슨하게 결합된 고품질 Go 코드 작성
■ DI 적용으로 기존 코드 리팩터링
■ 코드의 테스트 가능성과 테스트 커버리지 향상을 위한 툴 학습
■ Go 의존성 그래프의 생성 및 해석 방법

★ 이 책의 대상 독자 ★

코드를 쉽게 읽고, 테스트하고, 유지 관리하길 원하는 개발자를 위한 책이다. 코드의 품질이 특정 기능을 제공하는 것 이상이라고 생각하는 개발자뿐만 아니라 Go 언어를 사용해 더 많은 것을 구현하길 원하는 객체지향(object-oriented)에 익숙한 개발자에게 적합하다.
코드를 작성하는 것은 쉽다. 마찬가지로 단일 테스트 케이스를 통과하는 것도 간단하다. 하지만 몇 달 또는 몇 년 후에 부가적인 기능을 추가해도 테스트를 계속 통과할 수 있는 코드를 작성하는 것은 점점 불가능해지고 있다.
동일한 수준에서 일관되게 코드를 전달하려면 몇 가지 멋진 트릭이 필요하다. 이 책을 통해 이러한 트릭을 배울 뿐만 아니라, 트릭을 효과적으로 적용할 수 있는 지혜를 얻길 바란다.

★ 이 책의 구성 ★

1장, ‘개선을 멈추지 말라’에서는 의존성 주입을 정의하고, 의존성 주입이 Go 언어를 활용한 개발에 중요한 이유를 설명하며, 의존성 주입으로 해결할 수 있는 몇 가지 코드 속 나쁜 냄새를 소개한다.
2장, ‘Go 언어를 위한 SOLID 디자인 원칙’에서는 SOLID 소프트웨어 디자인 원칙을 소개하고 Go에서 의존성 주입과 프로그래밍이 어떤 관계인지 살펴본다.
3장, ‘사용자 경험을 위한 코딩’에서는 프로그래밍에서 종종 간과되는 개념인 테스팅과 코드의 사용자 경험을 설명한다. 또한 모의(mock), 스텁(stub), 테스트로 인한 손상, 의존성 그래프 등 이 책에서 전반적으로 사용할 여러 가지 개념을 소개한다.
4장, ‘ACME 등록 서비스 소개’에서는 이후 장들에서 실습하게 될 여러 예제의 기초가 되는 소규모 가상 서비스를 소개한다. 서비스의 현재 구현과 관련된 문제를 강조하고 의존성 주입을 적용해 달성하고자 하는 목표를 간략하게 설명한다.
5장, ‘몽키 패치를 통한 의존성 주입’에서는 테스트 과정에서 의존성을 바꿀 수 있는 방법인 몽키 패치를 살펴본다. 샘플 서비스에 몽키 패치를 적용해 데이터베이스에 대한 의존성으로부터 테스트 코드를 분리하고, 중요한 리팩터링 없이도 서로 다른 계층(layer)을 분리하도록 한다.
6장, ‘생성자 주입을 통한 의존성 주입’에서는 가장 전통적인 방식의 의존성 주입 기법이라 할 수 있는 생성자 주입을 소개한다. 생성자 주입의 여러 가지 장단점을 살펴보고, 생성자 주입을 성공적으로 적용할 수 있는 방법을 보여준다.
7장, ‘메서드 주입을 통한 의존성 주입’에서는 두 번째로 많이 사용되는 의존성 주입 기법인 메서드 주입을 소개한다. 메서드 주입의 여러 가지 장단점을 살펴보고, 요청 범위 의존성에 메서드를 성공적으로 적용할 수 있는 방법을 보여준다.
8장, ‘컨피그에 의한 의존성 주입’에서는 컨피그 주입(config injection)을 소개한다. 컨피그 주입은 생성자 및 메서드 주입의 확장 버전이며, 매개변수의 수를 줄임으로써 코드의 사용성을 향상시키는 것을 목적으로 한다.
9장, ‘JIT 의존성 주입’에서는 특이한 형태의 또 다른 의존성 주입인 JIT(Just-In-Time) 주입을 다룬다. JIT 주입은 생성자 또는 메서드에 매개변수를 추가하지 않고도 디커플링(decoupling)과 테스트 가능성(testability) 같은 의존성 주입의 많은 이점을 제공하는 전략이다.
10장, ‘오프 더 셸프 주입’에서는 마지막 의존성 주입 기법인 프레임워크를 활용한 의존성 주입을 소개한다. 의존성 주입 프레임워크에 관한 몇 가지 장단점을 살펴본 후, 구글 Go 클라우드의 와이어(Wire) 프레임워크를 소개하고 샘플 서비스에 적용해본다.
11장, ‘열정을 억제하라’에서는 의존성 주입이 잘못될 수 있는 몇 가지 방법을 살펴본다. 의존성 주입을 적용하는 것이 불필요하거나 의존성이 코드에 악영향을 미치는 여러 가지 예제를 소개한다.
12장, ‘진행 사항 복습’에서는 의존성 주입을 도입한 후의 샘플 서비스 상태를 최초 상태와 비교해본다. 또한 의존성 주입을 통해 새로운 서비스를 시작하는 경우 취할 수 있는 단계도 설명한다.


목차


1장. 개선을 멈추지 말라

__기술적 요구 사항
__DI는 왜 중요한가?
____그렇다면 어떻게 DI를 정의하는가?
__DI가 필요한 코드 냄새
____코드 팽창
____변경에 대한 저항
____낭비되는 노력
____강한 결합
__합리적 의심
__관용적인 Go에 관한 간단한 고찰
__기존의 관점에서 벗어난 새로운 관점에서의 접근
__요약
__질문
__더 읽을 거리

2장. Go 언어를 위한 SOLID 디자인 원칙

__기술적 요구 사항
__단일 책임 원칙(SRP)
____SRP는 DI와 어떤 관련이 있는가?
____Go 언어에서 SRP는 무엇을 의미하는가?
__개방/폐쇄 원칙(OCP)
____OCP는 DI와 어떤 관련이 있는가?
____Go 언어에서 OCP는 무엇을 의미하는가?
__리스코프 치환 원칙(LSP)
____LSP는 DI와 어떤 관련이 있는가?
____Go 언어에서 LSP는 무엇을 의미하는가?
__인터페이스 분리 원칙(ISP)
____ISP는 DI와 어떤 관련이 있는가?
____Go 언어에서 ISP는 무엇을 의미하는가?
__의존성 역전 원칙(DIP)
____DIP는 DI와 어떤 관련이 있는가?
____Go 언어에서 DIP는 무엇을 의미하는가?
__요약
__질문
__더 읽을 거리

3장. 사용자 경험을 위한 코딩

__기술적 요구 사항
__사람을 위한 최적화 작업
____Go 코드에서 사용자 경험은 무엇을 의미하는가?
____좋은 사용자 경험을 발견하라
__단위 테스트란 이름의 안심 담요
____그렇다면 왜 단위 테스트를 작성해야 하는가?
____무엇을 테스트해야 하는가?
__테스트로 인한 손상
____테스트로 인한 손상의 징후
__고디그래프를 통한 패키지 의존성 시각화
____시각화 도구 설치 방법
____의존성 그래프 생성하기
____의존성 그래프 해석하기
__요약
__질문

4장. ACME 등록 서비스 소개

__기술적 요구 사항
__시스템의 목표
____높은 가독성
____높은 테스트 가능성
____낮은 결합도
____목표에 대한 최종 결론
__시스템 소개
____소프트웨어 아키텍처
__알려진 이슈
____테스트 가능성
____노력의 중복
____테스트 환경에서 부족한 격리
____data 패키지와 REST 패키지 사이의 강한 결합
____config 패키지와 강한 결합
____다운스트림의 통화 서비스
__요약
__질문

5장. 몽키 패치를 통한 의존성 주입

__기술적 요구 사항
__몽키 매직!
__몽키 패치의 장점
__몽키 패치 적용
____SQLMock 소개
____SQLMock을 활용한 몽키 패치
____에러 핸들링 테스트
____테이블 주도 테스트를 통한 테스트 부풀림 방지
____패키지 사이의 몽키 패치
__몽키 패치의 단점
__요약
__질문
__더 읽을 거리

6장. 생성자 주입을 통한 의존성 주입

__기술적 요구 사항
__생성자 주입
____방 안에 있는 오리 설명하기
__생성자 주입의 장점
__생성자 주입 적용하기
____의존성으로부터 분리
____생성자 만들기
____테스트 시나리오 커버리지 개선하기
____의존성 그래프를 통한 개선 사항 검증하기
__생성자 주입의 단점
__요약
__질문

7장. 메서드 주입을 통한 의존성 주입

__기술적 요구 사항
__메서드 주입
__메서드 주입의 장점
__메서드 주입 적용하기
____빠르게 요약하기
____짧은 중단
____대기 시간 예산
__메서드 주입의 단점
__요약
__질문

8장. 컨피그에 의한 의존성 주입

__기술적 요구 사항
__컨피그 주입
__컨피그 주입의 장점
__컨피그 주입 적용하기
____모델 계층에 컨피그 주입 적용하기
____data 패키지에 컨피그 주입 적용하기
____exchange 패키지에 컨피그 주입 적용하기
____경계 테스트
__컨피그 주입의 단점
__요약
__질문

9장. JIT 의존성 주입

__기술적 요구 사항
__JIT 주입
__JIT 주입의 장점
__JIT 주입 적용하기
____프라이빗 의존성
____선택적인 퍼블릭 의존성
__JIT 주입의 단점
__요약
__질문

10장. 오프 더 셸프 주입

__기술적 요구 사항
__와이어를 통한 오프 더 셸프 주입
____프로바이더 소개
____인젝터에 대한 이해
____프로바이더 세트 적용
__오프 더 셸프 주입의 장점
__오프 더 셸프 의존성 주입 적용하기
____구글 와이어 도입하기
____API 회귀 테스트
__오프 더 셸프 주입의 단점
__요약
__질문

11장. 열정을 억제하라

__기술적 요구 사항
__DI에 의한 손상
____긴 생성자 파라미터 리스트
____컨피그를 수행할 때 객체의 주입
____불필요한 간접화
____서비스 로케이터
____조기 미래 방지
____HTTP 요청에 대한 모의
__불필요한 주입
__요약
__질문

12장. 진행 사항 복습

__기술적 요구 사항
__개선 사항의 개요
____글로벌 싱글톤
____config 패키지를 통한 강한 결합
____업스트림 서비스에 대한 의존성 제거
____짧은 중단 및 대기 시간 예산
____의존성 생성의 단순화
____결합 및 확장성
__의존성 그래프 복습
__테스트 커버리지와 테스트 가능성 복습
____테스트 커버리지
__DI를 통해 새로운 서비스 시작하기
____사용자 경험
____코드의 구조
____교차 관심사
____아웃사이드-인 전략으로 디자인
__요약
__질문

평가

교환 및 환불안내

도서교환 및 환불
  • ㆍ배송기간은 평일 기준 1~3일 정도 소요됩니다.(스프링 분철은 1일 정도 시간이 더 소요됩니다.)
  • ㆍ상품불량 및 오배송등의 이유로 반품하실 경우, 반품배송비는 무료입니다.
  • ㆍ고객님의 변심에 의한 반품,환불,교환시 택배비는 본인 부담입니다.
  • ㆍ상담원과의 상담없이 교환 및 반품으로 반송된 물품은 책임지지 않습니다.
  • ㆍ이미 발송된 상품의 취소 및 반품, 교환요청시 배송비가 발생할 수 있습니다.
  • ㆍ반품신청시 반송된 상품의 수령후 환불처리됩니다.(카드사 사정에 따라 카드취소는 시일이 3~5일이 소요될 수 있습니다.)
  • ㆍ주문하신 상품의 반품,교환은 상품수령일로 부터 7일이내에 신청하실 수 있습니다.
  • ㆍ상품이 훼손된 경우 반품 및 교환,환불이 불가능합니다.
  • ㆍ반품/교환시 고객님 귀책사유로 인해 수거가 지연될 경우에는 반품이 제한될 수 있습니다.
  • ㆍ스프링제본 상품은 교환 및 환불이 불가능 합니다.
  • ㆍ군부대(사서함) 및 해외배송은 불가능합니다.
  • ㆍ오후 3시 이후 상담원과 통화되지 않은 취소건에 대해서는 고객 반품비용이 발생할 수 있습니다.
반품안내
  • 마이페이지 > 나의상담 > 1 : 1 문의하기 게시판 또는 고객센터 1800-7327
교환/반품주소
  • 경기도 파주시 문발로 211 1층 / (주)북채널 / 전화 : 1800-7327
  • 택배안내 : CJ대한통운(1588-1255)
  • 고객님 변심으로 인한 교환 또는 반품시 왕복 배송비 5,000원을 부담하셔야 하며, 제품 불량 또는 오 배송시에는 전액을 당사에서부담 합니다.