Go 프로그래밍 개발 환경에서 의존성 주입 실습 (Go개발환경에서 읽기 쉽고 유지관리와 테스트가 편리한 클린 코드 작성법)

Go 프로그래밍 개발 환경에서 의존성 주입 실습 (Go개발환경에서 읽기 쉽고 유지관리와 테스트가 편리한 클린 코드 작성법)

$36.25
Description
의존성 주입(Dependency Injection)은 객체지향 프로그래밍(Object Oriented Programming) 방법론 중 하나로 객체 간의 결합도를 낮추고 변경사항에 유연하게 대처하도록 구성하는 방법이다. 의존성 주입을 사용하면 코드의 가독성과 재사용성이 높아지고 테스트의 편의성을 제공해 소프트웨어의 유지 관리가 쉬워지기 때문에 실무에서 많이 사용되고 있다. 이 책은 의존성 주입을 구현하는 다양한 방법을 소개하고, 관련 예제를 통해 내용을 쉽게 습득하도록 했다. Go 언어를 사용하는 개발환경에서 의존성 주입을 구현할 수 있는 좋은 지침서가 될 것이다.
저자

코리스캇

CoreyScott
현재호주멜버른에거주하고있는시니어소프트웨어엔지니어다.2000년부터전문적으로프로그래밍을해왔으며,최근5년동안에는Go언어를사용해대규모분산서비스를구축했다.
때로는다양한소프트웨어관련주제로기술발표와블로그활동을하고있으며,높은품질의소프트웨어를디자인하고구축하는데많은열정을쏟고있다.소프트웨어엔지니어링분야는다듬어지고,논의되고,지속적으로개선돼야하는기술분야라믿고있다.또한코딩에대해실용적이고비열성적인접근방법을취하고있으며소프트웨어엔지니어링,지속적배포(ContinuousDelivery,CD),테스팅또는클린코딩(cleancoding)에관해언제든토론을할준비가돼있다.

목차

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를통해새로운서비스시작하기
____사용자경험
____코드의구조
____교차관심사
____아웃사이드-인전략으로디자인
__요약
__질문

평가

출판사 서평

★이책에서다루는내용★
■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장,‘컨피그에의한의존성주입’에서는컨피그주입(configinjection)을소개한다.컨피그주입은생성자및메서드주입의확장버전이며,매개변수의수를줄임으로써코드의사용성을향상시키는것을목적으로한다.
9장,‘JIT의존성주입’에서는특이한형태의또다른의존성주입인JIT(Just-In-Time)주입을다룬다.JIT주입은생성자또는메서드에매개변수를추가하지않고도디커플링(decoupling)과테스트가능성(testability)같은의존성주입의많은이점을제공하는전략이다.
10장,‘오프더셸프주입’에서는마지막의존성주입기법인프레임워크를활용한의존성주입을소개한다.의존성주입프레임워크에관한몇가지장단점을살펴본후,구글Go클라우드의와이어(Wire)프레임워크를소개하고샘플서비스에적용해본다.
11장,‘열정을억제하라’에서는의존성주입이잘못될수있는몇가지방법을살펴본다.의존성주입을적용하는것이불필요하거나의존성이코드에악영향을미치는여러가지예제를소개한다.
12장,‘진행사항복습’에서는의존성주입을도입한후의샘플서비스상태를최초상태와비교해본다.또한의존성주입을통해새로운서비스를시작하는경우취할수있는단계도설명한다.

★옮긴이의말★
Go는2009년구글이개발한프로그래밍언어로쉽고단순한문법을특징으로하며,개발용이성등에힘입어최근IT분야에서각광받고있다.Go언어는객체지향에필요한대부분의기본기능을제공하므로객체지향프로그래밍에많이활용되고있다.
객체지향프로그래밍을실무단계에서적용할경우에는객체간의결합도를낮추는설계및구현을우선적으로고려해야한다.객체간의결합도를낮추기위한가장대표적인방법이바로의존성주입이며,이를통해프로그램의유연성과확장성을향상시킬수있다.
이책은Go언어를활용해객체지향프로그래밍을수행할때알아야할Go언어의특징과다양한의존성주입방법을예제와함께설명하고있으므로쉽게읽을수있다.의존성주입을올바르게이해한후재사용성이높고수정과유지보수가용이한코드를작성하는데이책이많은도움이되길바란다.