간편결제, 신용카드 청구할인
카카오페이 3,000원
(카카오페이 결제시 최대할인 3천원 / 5만원 이상 결제, 기간 중 1회)
삼성카드 6% (29,610원)
(삼성카드 6% 청구할인)
인터파크 롯데카드 5% (29,930원)
(최대할인 10만원 / 전월실적 40만원)
북피니언 롯데카드 30% (22,050원)
(최대할인 3만원 / 3만원 이상 결제)
NH쇼핑&인터파크카드 20% (25,200원)
(최대할인 4만원 / 2만원 이상 결제)
Close

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

원제 : Hands-On Dependency Injection in Go: Develop clean Go code that is easier to read, maintain, and test
소득공제

2013년 9월 9일 이후 누적수치입니다.

판매지수 130
?
판매지수란?
사이트의 판매량에 기반하여 판매량 추이를 반영한 인터파크 도서에서의 독립적인 판매 지수입니다. 현재 가장 잘 팔리는 상품에 가중치를 두었기 때문에 실제 누적 판매량과는 다소 차이가 있을 수 있습니다. 판매량 외에도 다양한 가중치로 구성되어 최근의 이슈도서 확인시 유용할 수 있습니다. 해당 지수는 매일 갱신됩니다.
Close
공유하기
정가

35,000원

  • 31,500 (10%할인)

    1,750P (5%적립)

할인혜택
적립혜택
  • I-Point 적립은 출고완료 후 14일 이내 마이페이지에서 적립받기한 경우만 적립됩니다.
  • 추가혜택
    배송정보
    주문수량
    감소 증가
    • 이벤트/기획전

    • 연관도서(30)

    • 사은품(7)

    책소개

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

    출판사 서평

    [이 책에서 다루는 내용]

    ■ 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장, '진행 사항 복습'에서는 의존성 주입을 도입한 후의 샘플 서비스 상태를 최초 상태와 비교해본다. 또한 의존성 주입을 통해 새로운 서비스를 시작하는 경우 취할 수 있는 단계도 설명한다.

    [지은이의 말]

    Go 언어를 사용한 의존성 주입(DI, Dependency Injection) 실습을 다룬다. Go 언어에서도 의존성 주입을 적용하는 여러 가지 방법이 있다는 사실이 다소 충격적으로 다가올 수도 있다. 이 책에서는 상이하고 때로는 상호 보완적인 의존성 주입의 여섯 가지 옵션을 살펴본다.
    많은 소프트웨어 엔지니어링 콘셉트와 마찬가지로 의존성 주입은 오해하기 쉽기 때문에 이 책에서 다루는 내용을 통해 문제를 해결하고자 한다. SOLID 원칙, '코드 속 나쁜 냄새(code smells)', 테스트로 인한 손상과 관련된 개념을 깊이 연구하고 좀 더 광범위하며 실용적인 관점을 제공한다.
    이 책의 목표는 의존성 주입을 적용하는 방법만 소개하는 것이 아니라 언제, 어디에 사용하고 언제 사용하지 않는지도 함께 알려주는 것이다. 이 책에는 각각의 의존성 주입 기법이 명확하게 정의돼 있다. 의존성 주입 기법의 장단점을 비롯해 의존성 주입 기법을 적용하는 가장 좋은 시점도 논의한다.
    하지만 내가 의존성 주입을 좋아하는 것만큼 의존성 주입이 모든 작업에 항상 적합한 것은 아니다. 이 책은 의존성 주입을 적용하는 것이 최선의 선택이 아닐 수 있는 상황을 파악하는 데도 도움이 될 것이다.
    각각의 의존성 주입 기법을 소개할 때 잠시 한 걸음 뒤로 물러나서 다음 사항을 고려해볼 것을 권한다.
    이 기법을 사용해 해결하려는 문제점은 무엇인가? 이 방법을 적용한 후에 코드는 어떻게 변할 것인가? 이러한 질문에 대한 답을 빨리 얻지 못하더라도 걱정하지 말자. 이 책이 끝날 무렵에는 이러한 질문에 모두 대답할 수 있을 것이다.

    [옮긴이의 말]

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

    목차

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

    평가

    저자소개

    코리 스캇(Corey Scott) [저] 신작알림 SMS신청 작가DB보기
    생년월일 -
    출생지 -
    출간도서 1종
    판매수 2권

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

    펼쳐보기
    생년월일 -
    출생지 -
    출간도서 0종
    판매수 0권

    경희대학교 컴퓨터공학과를 졸업하고 동 대학에서 네트워크 분야 석사 학위를 받았다. 졸업 후 네트워크 장비 개발 업체에서 소프트웨어 개발자로 근무하며 경력을 쌓았다. 현재 기아자동차에 재직 중이며 커넥티드 카 서비스를 위한 클라우드 인프라 및 플랫폼 설계 업무를 담당하고 있다.

    역자의 다른책

    전체보기

    이 상품의 시리즈

    프로그래밍 언어 시리즈(총 31권 / 현재구매 가능도서 31권)

    펼쳐보기

    이 책과 내용이 비슷한 책 ? 내용 유사도란? 이 도서가 가진 내용을 분석하여 기준 도서와 얼마나 많이 유사한 콘텐츠를 많이 가지고 있는가에 대한 비율입니다.

      리뷰

      0.0 (총 0건)

      구매 후 리뷰 작성 시, 북피니언 지수 최대 600점

      리뷰쓰기

      기대평

      작성시 유의사항

      평점
      0/200자
      등록하기

      기대평

      0.0

      교환/환불

      교환/환불 방법

      ‘마이페이지 > 취소/반품/교환/환불’ 에서 신청함, 1:1 문의 게시판 또는 고객센터(1577-2555) 이용 가능

      교환/환불 가능 기간

      고객변심은 출고완료 다음날부터 14일 까지만 교환/환불이 가능함

      교환/환불 비용

      고객변심 또는 구매착오의 경우에만 2,500원 택배비를 고객님이 부담함

      교환/환불 불가사유

      반품접수 없이 반송하거나, 우편으로 보낼 경우 상품 확인이 어려워 환불이 불가할 수 있음
      배송된 상품의 분실, 상품포장이 훼손된 경우, 비닐랩핑된 상품의 비닐 개봉시 교환/반품이 불가능함

      소비자 피해보상

      소비자 피해보상의 분쟁처리 등에 관한 사항은 소비자분쟁해결기준(공정거래위원회 고시)에 따라 비해 보상 받을 수 있음
      교환/반품/보증조건 및 품질보증 기준은 소비자기본법에 따른 소비자 분쟁 해결 기준에 따라 피해를 보상 받을 수 있음

      기타

      도매상 및 제작사 사정에 따라 품절/절판 등의 사유로 주문이 취소될 수 있음(이 경우 인터파크도서에서 고객님께 별도로 연락하여 고지함)

      배송안내

      • 인터파크 도서 상품은 택배로 배송되며, 출고완료 1~2일내 상품을 받아 보실 수 있습니다

      • 출고가능 시간이 서로 다른 상품을 함께 주문할 경우 출고가능 시간이 가장 긴 상품을 기준으로 배송됩니다.

      • 군부대, 교도소 등 특정기관은 우체국 택배만 배송가능하여, 인터파크 외 타업체 배송상품인 경우 발송되지 않을 수 있습니다.

      • 배송비

      도서(중고도서 포함) 구매

      2,000원 (1만원이상 구매 시 무료배송)

      음반/DVD/잡지/만화 구매

      2,000원 (2만원이상 구매 시 무료배송)

      도서와 음반/DVD/잡지/만화/
      중고직배송상품을 함께 구매

      2,000원 (1만원이상 구매 시 무료배송)

      업체직접배송상품 구매

      업체별 상이한 배송비 적용