Release의 모든 것 - 대규모 웹 분산 시스템을 위한 운영 고려 설계 | 아마존 소프트웨어 공학 분야 베스트셀러
마이클 나이가드 지음, 박성철 옮김 / 한빛미디어 / 2023년 11월
평점 :
장바구니담기


매우 유명한 책입니다. 지금 소개드리는 책은 [2판] 입니다.

부제 : 대규모 웹 분산 시스템을 위한 운영 고려 설계

 

첫버전은 2007년에 나온 아래 "Release It 릴리스 잇 성공적인 출시를 위한 소프트웨어 설계와 배치" 아래 책입니다.

왼쪽에 출간된 책이 초판, 오른쪽이 이번에 출간된 2판의 표지입니다.

정말 오랜만에 다음 개정판이 나온것 같습니다. 

 

번역을 담당하신 분은 "박성철"님으로 여러 활동들을 통해서 다양한 SW개발에 긍정적인 선한 영향력을 제공해주시는 분이십니다.

세미나를 통해서 들었는지, 어떤 글에서 본것인지는 잘 기억이 나지 않지만, "이책이 너무 좋은 책이라서 바쁘신 와중에 시간을 쪼개어서 번역을 진행하셨다고 들었습니다." 그만큼 애정이 가고, 좋은 책이라는 애정이 느껴졌습니다.

 

 

 

■ 추천사만 보아도 느낌이 다른책

· 서비스를 3년이상 운영해봤다면, 이책의 내용에 공감을 할수 있습니다.

· 번역을 누구나 하고 싶었던 책

· 모든말을 제처두고, 반드시 이책을 읽어야 합니다.

· 필요할때 마다 다시 꺼내서 한번 더 읽으세요

· 소프트웨어 출시 전 검점목록 같은책

· 시니어 개발자로 도약하기 위해 반드시 알아야할 내용

· 현실에서 잘 동작하는 프로그램을 만드는 방법

· 해결할 문제가 무엇이고, 어떻게 그 문제를 해결할수 있는지

 

■ 책의 구성

· 책은 총 4부로 구성됩니다.

· 1부 : 안정성 구축

 - 시스템이 작동을 유지하면서, 멈추지 않게 할 방법

· 2부 : 운영 고려 설계

 - 1부 안정성 다음에 지속적으로 운영하기 위한 방법

· 3부 : 시스템 전달

 - 배치(deployment)를 뜻하는 의미로 1판과 동일하게 배포가 아닌 배치로 변역하셨습니다.

    고객에 피해를 주지 않고, 배치를 하는 것을 하는 방법

· 4부 : 쳬계적 문제 해결

 - 시간이 지남에 따라 성장하고 유연하게 적응하는 시스템을 만드는 방법

 

· 운영환경의 현실

내용중에 우리는 QA부서의 테스트를 통화하는 것을 목표로 삼는다.

이 글이 주는 울림이 많이 있었습니다.  실제 QA를 통해서 기능적인 결함을 잘 찾고, 품질을 높이는 것은 분명한 사실입니다.

하지만, 우리가 만드는 서비스에 대해서 목표에 대해서 다시한번 생각해보고, 어떠한 주안점을 가지는 방향이 맞는지 알게 됩니다.

 

· 4장에서는 "안정성 안티패턴"에 대해서 설명하고 이어서 5장에서는 안티를 제거한 "안정성 패턴"을 설명합니다.

시스템들이 통합의 구성으로 연결되는 구조에서는 데이터의 input의 출처가 다양화 될수 밖에 없다. 이러한 시점에 우리는 장애시 발생될수 있는 연쇄반응에 대해서 고려해야 한다.

사용자가 늘어난다는 것은 트래픽이 늘어난다는 것이고, 이것은 기존에 구성된 시스템의 처리능력이 해당 요청을 처리할수 있는지 명확히 판단할수 있어야 한다. 시간단 처리 최대량에 대해서 알고 있어야 한다는 점이다. 

자연스럽게 물리적인 내부 메모리를 이용하는 방식에서 외부 메모리 시스템(멤캐시드, 레디스)와 같은 데이터 구조 서버를 고려하게 되며

이것은 지나친 서비스 비용이 발생하는 부분은 아닌지 고려해야 되는 부분이다.

· 불쾌한 사용자, 해로운 사용자에 대한 부분은 우리가 어떠한 부분을 고려해야 하는지 안내되어 집니다.

글의 중간중간 현업에서 고민되거나 맹목적으로 좋다고 사용하는 것에 대해서 고려해야 하는 글들이 있습니다.

 

라이브러리, 자기부정 공격, 공유자원, 처리능력 불균형, 도그 파일, 응답지연등에 대해서 우리가 구성한 시스템에서 나타날수 있는 다양한 현상을 설명합니다.

· 5장에서는 " 안정성 패턴"으로 우리가 시스템, 서비스를 개발할때 주의 깊게 보아야 하는 부분입니다.

시간제한(응답시간에 대한 제한을 적용하라), 회로 차단기(문제가 있으면 호출을 멈추어라), 격벽(유용한 분할 수준을 선정해서, 서비스의 일부분이라도 유지될수 있는 구조를 만들어라), 정상 상태에 대한 데이터, 로그, 캐시에 대한 처리 기준, 빠른 실패(느린 응답에 대한 빠른 노티)

파손방지, 핸드셰이킹, 테스트 하네스, 결하분리 미들웨어 등등 서비스를 운영할때 모두 다를 고려할 필요는 없지만, 서비스 구성에 대한 정의를 내릴수 있고 필요한 부분은 부분적으로 도입을 하는 올바른 방향을 제시합니다.

 

 

■ 소스 코드, 실제 분석 내용을 통한 reference

· 실제 필자분의 경험하신 사례를 통해서, 발생한 이슈 및 그에 대한 대응책, 해결방안의 내용을 보면서 실제 사이트 담당자의 입장에서 관련 이슈를 같이 분석해보는 생각이 듭니다. 발생된 사이트 및 관련 이슈는 단순한 범위가 아니고 실제 많은 사용자들이 사용하는 서비스의 이슈에 대해서 설명되어 집니다.

· 코드적으로 분석이 필요한 부분은 코드를 예시로 구성됩니다.

 

 

· 이론적인 부분에 대한 설명도 예시를 들어 구성되어 있습니다.

 

 

· 개념, 구조가 필요한 부분에 대한 서비스흐름형태가 설명되어 집니다.

 

 

 

■ 운영 고려 설계

· 이 단어가 모두 좋은것 같습니다. 2부의 제목인데 우리는 실제적으로 운영환경에서 장애를 발생안하고, 안정적인 요구사항을 서비스 하기 위해서 고민하고, 개발을 합니다. 단순한 개발이 아니라, "운영을 고려한 설계"는 궁극적으로 우리가 나아가는 방향과 일치하는것 같습니다.

 

· 실제 일어난 사례를 통해서, 우리도 저자분과 함께 해당 사이트에서 일어나는 일을 경험해보고 우리는 어떠한 fact를 고려하고, 파악할수 있는지 상세하게 느낄수 있습니다.

 

· 운영고려설계의 개념은 "운영문제를 최우선고려사항"으로 생각한다는 뜻이다.

개발환경과 매우 다른 운영네트워크가 포함되고, 로그, 모니터링, 운영제어, 보안도 포함된다., 운영담당자의 입장의 설계도 포함된다.

7장 "기반" chapter에서는 우리가 아는 데이타센터 IDC와 클라우드도 포함되어서 설명됩니다. 1판에서는 클라우드에 대한 부분이 없었지만 2반에서는 클라우드 환경에서 대해서도 추가되어서 많이 사용하고 있는 AWS등의 서비스를 이용할때의 고려점도 언급되어 있습니다.

- 네트워크 인터페이스와 이름, 다중네트워크 프로그래밍, 물리 호스트, 가상머신, 컨테이너, 클라우드 내 가상머신, 클라우드 내 컨테이너에 대한 부분이 있는데, 우리 소속이 인프라를 담당하는 부서가 아니라고 한다고 해도, 장애의 최초 보고는 사용자 화면을 이용하는 접점인 개발부서로 처음 오기 때문에 대한 부분도 다른 부서의 영역이 아닌, 원인을 찾는 모든 부서의 영역이 된다고 생각합니다.

8장 "프로세스" 부분은 개발 인스턴스 입장에서 초첨을 맞추는데, 이러한 개발젹인 개발의 효과를 높이고, 구성을 어떻게 하고 로그 기록에 대한 위치, 수준에 대해서 고민하게 됩니다.

9장 "상호연결"을 통해서 인스턴스 들이 함께 연결되어 하나의 시시템이 되어야 하는데, 이러한 방법에 대한 해법을 살펴볼수 있습니다. 

DNS를 활용한 연결, 서버 부하 분산, 가용성등 다양한 관점으로 평소 잘 신경쓰지 않았던 부분을 볼수 있었습니다.

사용자가 많아지만 고민하게 되는 부하분산에 대해서, 소프트웨어, 하드웨어 방식으로 부하를 분산할때 사용되는 프록시 서버, 알고리즘등에 대해서, 하드웨어는 상용장비의 예시를 통해서 처리하는 방법등 생각의 폭을 넓혀줍니다.

10장에서는 "제어 평면" 이라고 되어 있어서 어색했는데, 각종 기능 및 서비스들을 올바른 위치에 놓고, 어느정도 일관된 젠체로 엮는 부분을 말합니다. 책에서 언급하는 점검 목록은 아래와 같은 사항입니다.

 

· 11장 보안 부분에서는 OWASP에서 나온 상위 10개의 개념에 대해서 설명합니다. 보안취약점 검사를 통해서 나온 결과에 대해서 의도를 파악하지 못하고 수정을 하지 말고, 실제 중요한 취약점 공격의 원리를 설명해주고 있어서, 이해가 쉽게 설명되어집니다. AWS클라우드 사용시에 활용하는 방법도 함께 포함되어 있습니다.

 

■ 시스템 전달

· 3부에서는 우리가 운영환경에서 필수적이 요소들로 구성되어 있습니다. 배치(배포), 버전관리에 대해서 다룹니다.

배치는 서비스를 운영환경에 올리는 과정이기 때문에 고려해야 할 사항이 매우 많고, 그 순서와 구성도 고려할게 많습니다

배치를 하면서 기존 캐시의 전략은?, 장애 발생시 롤백에 대한 계획은? 테이블 스키마가 기존에 있는경우, 없는 경우등에 대해서 고려 하다보면 그 난이도는 매우 높아집니다. 또한 이러한 부분은 언어적인 제약이 있는 부분도 있기 때문에 책을 통해서 좋은 방향성 및 지금 배포시스템에 도입이 필요하거나, 주의해서 추가해야 하는 부분을 파악해볼수 있습니다.

버전관리에 대해서는 git, svn같은 형상관리의 버전을 의미하는 것이 아닌, API의 버전과 같은 버전에 대해서 설명합니다.

 

■ 체계적 문제 해결

· 4부에서는 평소 업무에 한번은 경험해보았을만한 다양한 사례연구 및 Agent가 제시됩니다. 

최정점검과 출시, QA지향, 부하테스트, 테스트 간극 등등 저도 평소에 고민하던 부분이라서 현실감있게 다가왔습니다.

· 절차와 조직, 팀의 규모, 서비스의 종료, 시스템 아키텍처에 대한 진화적구성, 마이크로서비스에 대한 조언등 선택과 갈등에 대한 부분은 결국 서비스를 잘 릴리즈 하고, 자원은 안정적으로 효율적으로 사용하기 위한 하나의 큰 소프트웨어 라이프사이클에 대해서 느끼게 해주고

카오스 공학적인 내용을 통해서, 앞으로 새로운 분야도 소개됩니다.

 

 

좋은 책이라는 의미가 많이 와닿은 책이였습니다.

이 책을 보고 느끼는 바가 모두 다를거 같습니다.

아는 만큼 보이고 한줄의 문장이 더 많은 고민을 하게 된다면

조금 더 나은 Release를 하고 있는 개발자, 엔지니어 분들이라고 생각되어 집니다.

스터디를 해도 좋고, 우선 필요한 부분에 대해서 부분 학습을 해도 좋은 책이라고 생각되어 집니다.

 

 

"한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

 


댓글(0) 먼댓글(0) 좋아요(0)
좋아요
공유하기 북마크하기찜하기 thankstoThanksTo
 
 
 
모니터링의 새로운 미래 관측 가능성 - 프로메테우스, 그라파나, 오픈텔레메트리까지 마이크로서비스와 인공지능 중심의 옵저버빌리티 구현
정현석.진미란 지음 / 제이펍 / 2023년 12월
평점 :
장바구니담기


이 책을 처음 보고, 처음 궁금했던 하거나 들었던 생각을 정리해보면 아래와 같습니다.

1. 번역서가 아니다. 왠지 번역서인것 같은데 국내 저자분의 책이라서 조금 더 흥미가 생겼습니다.
2. 표지가 정말 멋지다. (아래 숨어있는 위험요소를 잘 표현한것 같다)
3. 단순히 모니터링에 대해서 관심만 있는데, 이책은 도움이 될것인가?
4. 프로메테우스, 그라파나, 오픈텔레메트리에 대해서 자세히 설명되어져 있는가?
5. 마이크로서비스, 인공지능까지 너무 넒은 범위까지 다루는것은 아닌가?
6. 이 책을 읽으면, 작은 부분이라도 우리가 하는 서비스 모니터링에 바로 도움이 되는 부분이 있을까?

 

이 책을 읽어보면서 해당 궁금증을 하나하나 살펴보려고 합니다.

■ 목차 살펴보기 (본문 보기 전)

· 목차를 구분지어서 생각해보면, 아래와 같이 크게 3단계 구성으로 설명되어집니다.

  모든 분들이 필요하거나, 궁금해 하시는 부분이 다르기 때문에 필요한 부분을 살펴보면 도움이 될것 같습니다.

· 예를들어 오픈소스 모니터링 tool이 소개되는데, 해당 내용은 별도의 단행본으로 출간된 책은 거의 없습니다.

  이러한 부분에 대해서 설치과정부터 주요지표부분은 충분히 많은 가치를 가지는것 같습니다.

· 인공지능 모니터링 부분은 저자분중이 ML쪽 엔지니어의 경험이 있으셔서 현실적인 조언이.

· 1장,2장 부분에서 우리는 서비스가 확장되고, 사용량이 늘었을때 과연 어느지표를 가지고 해당 서버 Spec으로 최대한 튜닝을 해서 사용을 하고 있다고 판단하고, 서버를 scale out하던지, scale up 하는 결정 근거를 세울수 있는 내용으로 구성되어 있고, 오류 및 모니터링에 대한 큰 기준을 가지게 되는 이론적인 내용으로 구성되어 있을것 같습니다.

제가 예상한 구성 및 내용이 맞는지 살펴보고, 처음느낌 그대로 인지 체크해보겠습니다.

 

 

책을 읽어보면서, 위에 가정했던 부분에 대한 고찰

▶ 체크1 : chapter1, chapter2 부분의 내용도 일반적인 내용의 모니터링에 대한 내용이 아닙니다. ^^ chaper1부터 PromQL 에 대한 설명등 등 큰 개념의 "관측가능성 입장의 모니터링", "큰 규모의 서버들"을 고려한 관점으로 설명되어 집니다. 

 

▶ 이책의 레벨은 입문/초급자 수준은 아닙니다. 책의 뒷편에서도 중급자로 표기되어 있습니다. 평소에 책에서 소개되는 기술들에 관심이 있다면 이런 모니터링 책이 나오기 힘든데, 국내 저자분의 다양한 예시 및 설명은 많은 도움이 됩니다. 헙업에서 관련된 부분의 업무에 겹치는 부분이 있으시면, 많은 가이드를 통해서 바로 적용할수 있을것으로 생각됩니다.

■ 관측 가능성

· "관측 가능성" : 책의 제목은 왜 모니터링에 "관측 가능성" 이라는 단어를 넣었고, 명명하였을까? 이 개념을 알아야 이 책에서 설명하려고 하는 가장 중요한 방향성을 이해 할수 있습니다. 해당 개념이 아직은 생소한 개념이기 때문입니다.

· 책에서 정의는 아래와 같이 합니다. -> 시스템에서 외부로 출력되는 값만을 사용해서, 시스템의 내부 상태를 이해하고, 예측하는것

보통 테스트 케이스를 구성할때, 블랙박스 테스트 / 화이트박스 테스트를 진행하는데, 그것과 다른 미리 예측하는 관점의 개념을

관측가능성의 영역이라고 생각하고 개념을 잡으면 됩니다. 

■ 다양한 오픈소스들

· 관측가능성 오픈소스에 대한 책에서 사용한 오픈소스는 아래와 같다.

· 오픈텔레메트리 : 계측을 위한 표존화된 도구, API, SDK 모음

· 로키 : 그라파나의 로그 관리 시스템

· 그라파나 미미르 : 프로메테우스용 오픈소스

· 타노스 : 다수의 프로메테우스를 통합할수 있는 글로벌 뷰 제공

· 예거 : 마이크로서비스 기반 분산 시스템 모니터링과 추적, 프로파일 연계

· 그라파나 템포 : 그라파나의 오픈소스 추적 솔루션

· 엘라스틱 서치 : 로그 관리

· dynatrace APM : 클라우드 네이티브 및 엔터프라이즈 스택을 위한 APM, 처리량, 지연시간을 모니터링

· influxDB / Telegraf / splunk /  new relic / Prometheus /  grafana / 오프서치

 

· 참고 : https://blog.samstdio.com/system-monitoring-tick-stack-1/

 

 

■ 내용 소개

· 프로메테우스의 다양한 사용법이 처음부터 설명되어 집니다.

· 쿠버네티스의 환경이 있다면, ks8까지 테스테 구성을 해보면 좋겠지만, 각자 테스트를 할수 있는 범주안에서 직접 실습을 해볼수 있으면 좋을것 같습니다. 내용이 너무 좋은데, Application을 개발하는 부분이 아니다 보니, 직접 경험해서 확인하는 것과는 많은 경험차이 및 이해하는 부분에 차이가 있을수 있습니다.

 

프로메테우스는 ks8에서 기본으로 사용을 하지만, 별도로 WAS, Spring만 사용하는 일반적인 다른 모니터링에서도 다양하게 사용이 가능합니다. 책은 프로메테우스에 익숙해지고, 제공하는 다양한 기능들을 설명합니다.

로그에서는 오픈텔레메트리를 사용해서 구조회된 로그를 생성하는 방법을 이용합니다.

오픈텔레메트리에 대해서는 https://jennifersoft.com/ko/blog/tech/opentelemetry/ 글을 참고하시면 좋을것 같습니다.

 

실제 사용하지 않은 오픈소스는 어색합니다. 명칭부터 어색하고, 실제 어떠한 목적/기능이 있는지 선뜻 다가오지 가 았습니다.

처음에 주요 기능으로 사용되는 개념을 잡아놓고 책을 보신다면 지면에 나와있는 다양한 정보가 의미있게 다가올것 같습니다.

 

관측 가능성의 구성요소를 3가지로 정의하고 있습니다.

메트릭, 로그, 추적의 요소로 정의하고 있습니다.

  • 메트릭과 로그는 익숙하실수 잇는데, 구성요소 중에 추적이라는 개념은 조금 생소 하실수 있습니다.
  • 로그에 노출된 에러 사항만을 보고 추적하는 방향에서 조금더 예측 가능한 구성으로 구분지어 연관성을 파악합니다.

 

SLI, SLO, SLA등의 서비스 지표에 대한 용어도 언급되어지며,

1장부터 바로 PromQL을 이용해서 필요한 지표를 어떻게 구성할지, 예시가 제공됩니다.

→ 이 부분이 의미하는것은 Prometheus를 책에서 기본으로 사용적으로 설명되어 진다는 의미입니다.

 

모니터링과 관련된 시스템이 구성되어 있다면, 실제 얼마나 잘 사용하고 있는지 돌아보게 되었습니다.

일반적으로 서비스의 오류사항을 확인하는 것을 넘어서, 정보는 많은데 실제 효율적으로 기준을 세우고 활용하고 있는지는 되돌아볼 문제입니다.

 

이 책은 그러한 기준을 넓혀주는데 많은 도움이 됩니다.

에러라고 생각되어지는 부분에 대해서 500, 400 http status말고 어떠한 측면을 어떻게 모니터링하는게 좋을지 제시합니다.

 

아래와 같은 형태로, 사용할수 있는 PromQL을 확인할수 있습니다.

 

 

 

■ 테스트 환경에 진심이 책

· 이책의 장점은 아래그림처럼 다양한 데모 환경을 구성하는 부분입니다.

모니터링을 하기 위해서는 운영환경처럼 동일하지는 않지만, 비슷환 환경의 구성이 필수인데 이점은 정말 좋은 구성입니다.

아래 항목중에 평고 고민되었거나, 체크해보고 싶은 모니터링 항목이 있다면 업무에서도 쉽게 적용이 가능할 것으로 보입니다.

 

상세한 소스 설명이나, 추가적인 데모, SW버전업에 대해서는 https://yohaim.medium.com/을 통해서 업데이트 되니 실습시의 오류도 최소하 할수 있을 것 같습니다.

 

 

 

 

· 후속작이 기대됩니다.^^

 

■ SRE역활을 하거나, 실제 모니터링에 업무를 진행하시는 분들은 이책이 쉬울수 있지만, 처음 책을 보시는 분들은

여기서 나오는 다양한 오픈소스의 역활 및 사용처, 동작방식을 통해서 실제 어떻게 활용을 할지 명확하게 이해하는 것만으로

많은 것을 얻어가는 부분이라고 생각됩니다.

 

실제 업무적으로 바로 사용할수 있는 예시로 구성되어 있어서, 이러한 고민을 하셨던 분은 정말 많은 현실적인 도움을 받을수 있는 내용으로 구성되어 있습니다.



댓글(0) 먼댓글(0) 좋아요(0)
좋아요
공유하기 북마크하기찜하기 thankstoThanksTo
 
 
 
스트리트 코더 - 프로그래밍 세계에서 살아남기 위한 개발자 생존 가이드!
세다트 카파노글루 지음, 이준용 옮김 / 길벗 / 2023년 8월
평점 :
장바구니담기


책의 제목도 그렇고, 표지의  그림도 매우 궁금증을 일으키는 구성입니다.

개발자의 성장은 끝이 없고, 기존의 기술도 심도있는 학습이 필요하고 새로운 기술의 발전도 빠르기 때문에

"개발자 생존 가이드" 이 부분은 어느 개발자 분들이나 추구하는 방향이 아닐가요?

 

이 책에서는 어떠한 내용을 다룰까 궁금합니다.

책에서는 코드적인 내용이 있을까? 마인드 부분을 강조하는 것일까요?

 

·    저자분은 독학으로 개발자가 되었다고 합니다. MS에서 윈도우 핵심부서에서 근무를 하신 이력이 있으시고,
이책은 독학하면서 MS엔지니어가 된 저자의 경험을 바탕으로 수 많은 개발자를 위한 생존 법칙과 노하우를 담고 있습니다.

 

 

 

■ 목차 및 책 소개 살펴보기

·  목차

1장 거리로
2장 실용적인 이론
3장 유용한 안티패턴
4장 맛있는 테스트
5장 보람 있는 리팩터링
6장 조사를 통한 보안
7장 자기 주장이 뚜렷한 최적화
8장 기분 좋은 확장성
9장 버그와의 동거

목차는 이렇게 구성되어 있습니다. 

샘플코드는 C#, .NET으로 구성되어 있는데 코드를 보고 저자분의 의도를 파악하는 부분은 크게 어렵지 않게 소스를 볼수 있습니다.

특정 언어에 대한 소개 가 아니기 때문에 주요 관점을 설명하는 목적으로 사용하고, 이른적이고 내용이 더 많은 구성으로 되어 있습니다.

책의 소개 에 대해서 살펴보니, 아래 출판사의 책 소개글에서 핵심이 잘 소개 되어 있어서 여기서도 소개 하려고 합니다. 

 

아래 내용을 보면, 우리가 별도의 책으로 출간되는 항목들이 보입니다. "알고리즘", "리팩토링", "보안", "프로젝트" 등등 이러한 부분들은

우리가 매우 중요하게 생각하는 부분입니다. 저저의 입장에서 어떠한 부분을 접근해야 하는 경험 및 관점을 살펴볼수 있는 내용이라고

생각됩니다.

 



■ 2장. 실용적인 이론

·  내용을 살펴보면, 해당 내용,항목으로 java, c#, python, go등 모든 언어의 세부 기술을 적을수 있다는 생각이 듭니다. 

즉 거의 모든 언어에서 채택하고 있는 개념에 대해서 설명을 합니다.

예를 들어서, 알고르짐, 빅오에 대해서 간단히 설명하고

문자열, 배열, 리스트, 연결리스트, 큐, 딕셔너리(맵), 해시, 스택 등 우리가 모든 언어에서 사용하는 개념에 대해서 자세히 설명을 합니다.

이러한 부분에 대해서 한번 개념을 잘 잡아놓으면, 언어에 차이없이 쉽게 개념을 파악할수 있습니다.

다음에 설명되어지는 것 또한 모든 언어에서 언급되는 부분입니다. 타입에 대한 부분입니다.

변수에 대한 타입으로 인해서 발생되는 다양한 케이스, null에 대한 고민, 참조타입(메모리 저장방식)등 설명되어지는 부분이 개발 언어을

한번이라도 학습해본 개발자라면 충분히 공감이 되고 중요한 개념이라고 생각되어 집니다.

 

 

■ 3장. 유용한 안티패턴

·  제목이 매우 흥미롭습니다. 디자인 패턴등을 학습하면서, 의도적으로 적용하는 방법은 그렇게 좋아보이지 않는 경우도 발생합니다.

DB에서 의도적인 반정규화가 있는것처럼, 좋은 디자인 패턴에 대한 설명을 한것 반대의 입장을 살펴보는 것도 균형있는 방향성을 가질수 있을것 같습니다. 실제 무슨 디자인패턴은 사용하지 말아라!! 이런 관점을 설명하는 내용은 아닙니다.

 

·  사례로 기준에 구현된 "코드재작성"을 하는 것을 보통 힘들고, 해당 방식으로 진행하지 않고 기존 소스의 로직을 개선하는 방향으로 진행을 한다. 이러한 방식의 장단점은 있지만, 해당 코드를 개선하는 방식으로 진행시 어떻게 진행해야 하는지 하나하나 StepbyStep으로 설명을 합니다.

  • 코드의 경직성에 맞서라
  • 빠르게 옮기고 깨버리자
  • 경계를 존준하라 : 추상화의 경게를 잘 파악해서 웹/비지니스/DB간의 경계를 잘 파악해야 하는 부분이다

  • 공통적인 기능을 분리하라 : 우리가 새롭게 기존 조직을 개발하려고 할때, 공통으로 만드는 공통모듈에 대한 고민은 필수이다.

·  다른 관점

처음부터 다시 작성해야 하는 경우 등에 대해서 코드를 변경하는것이 위험하더면, 처음부터 작성하는 것은 훨씬 더 위험할것이다. 이럴때 어떤한 부분을 고민하고 생각해야할  기준이 제시되고 있다. 라이브러리에 대한 버전 충돌이 일어나는 부분을 고민해볼수 있는 가이드가 제시된다. 

·  새로운 것을 시도하는 입장

아래 입장은 매우 자극적이라고 보실수도 있는데, 무조건 사용하지 말라는 입장이 아니라, 열거형을 사용해라 / 구조체 등 꼭 고려해야 하는 부분을 언급하는 부분으로 내용이 구성되어 있으니 오해는 없었으면 좋겠습니다.

  • 상속을 사용하지 마라
  • 클래스를 사용하지 마라
  • 불량코드를 작성하라
  • 코드 주석을 작성하지 마라

객체 지향에 대해서 많이 알고 있는 SOLID에 대한 저자분의 의견
"P. 105 내용 소개..

약어를 만들기 위해서 억지로 만들기 위해 맞춘 느낌이 든다. ....(중략).. 이런 원칙의 가치를 아무런 확신 없이 그대로 받아들이는 것을 결단코 반대한다."

이런한 내용은 이책에서 잘 이해는 안되지만 무조건 읽어봤던 원칙에 대해서 조금더 현실적인 조언이라고 생각이 됩니다.

 

 

 

■ 4장. 맛있는 테스트

제목부터 아주 흥미로운 주제입니다. 또한 테스트를 언급하고 설명하는 것이 이 책의 완성도를 높여준다고 생각합니다.

우리는 보통 TDD를 이야기 합니다. 그런데 여기서 다루는 항목에서 TDD, BDD와 같은 용어 피하기는 어떠한 다른 시작을 제공하는 것일까요? 테스트가 누구나 필요하다고 생각하지만, 쉽게 접근하지 못하는 부분도 있는데 조금은 현실적인 조언 및 가이드로 구성되어 있지 않을까 생각합니다.

 

 

·  저자분은 어떻게 하는 테스트방법을 권장하고, 알려주려고 하시는 것일까?

수동테스트, 자동테스트 등등 우리가 이론적으로 다 알고 있는 것이다, 코드 리뷰도 어떻게 보면 수동테스트의 일환으로 볼수도 있다. 
아래 그림은 SW경력이 있는 분들이면, 누구나 생각해볼수 있는 flow입니다. 그림만 보아도 자동화된 테스트가 좋다는 것은 쉽게 알수 있습니다. 

 

· 단위테스트라는 말을 많이 사용하는데, 단위라는 기준에 대한 범위를 정하는 것도 어찌보면 단위테스트의 시작점이다.

· 단위테스트 프레임워크를 사용하는 것이 더 좋다는 입장이다. JUnit, NUnit 등등에 대해서 수동으로 테스트 로직을 작성하는 것보다, 다양한 케이스를 한꺼번에 실해야야 하는 입장에서 훨씬 편하게 접근할수 있습니다.

· 자신의 이득을 위해서 테스트를 작성하라. (보여주기 입장이 아닌, 실제 다른 변화를 검증하기 위한 코드로 구성하자)

· 테스트 전문서적을 보면 경계값에 대한 부분에 대한 검증을 많이 강조한다. 조건이 걸려있는 로직에 대해서 테스트를 이책도 강조하고 있다. 입력값 분할을 통해서 모든 범위를 커버하는 케이스를 확보하자.

· 모든 테스트를 작성하려고 하지 마라. 주요 버그는 20%의 기능에서 대부분의 버그 횟수를 커버하는 것은 8:2 파레토 법칙이다. 테스트를 현명하게 하는 방향으로 선택하는 것이 좋다.

· 컴파일러가 코드를 테스트 하도록 코드를 작성하도록 하자. (컴파일시, 오류를 체크하는것이 최고의 테스트 케이스라고 생각된다)

· 유효값을 확인하는 로직에서 중복을 제거하라

· 테스트 이름을 잘 정의하는 것이, 실제 운영코드와 테스트 코드에 모두 좋은 효과를 가지고 온다. (실제 이름이 명확하지 않으면, 그 의도를 파악하는데, 더 시간이 소요되기 때문이다)

 

 

■ 5장. 보람있는 리팩토링

리팩토링은 꼭 필요한 부분이다. 여러명의 개발자의 개발 코드를 조금더 개선하는 것은 기존의 개발자의 코드를 무시하거나, 잘못되었다고 원망하는 입장이 아닌 현재의 코드는 동작되는 것이고 시대의 흐름으로 주변 SW의 버전업, 새로운 기법등이 나와서 수행되는 자연스러운 과정으로 생각되어 질수 있다.

· 리팩토링은 왜 하는지 한번 remind를 해보면 아래와 같이 정의할수 있다.

  1.  반복을 줄이코 코드 재사용을 증가시킨다
  2. 여러분의 정신 모델과 코드를 더 가깝게 한다.
  3. 코드를 더 이해하기 쉽고 유지관리하기 쉽도록 만든다.
  4. 특정 클래스에 버그가 발생하지 않도록 한다.
  5. 중요한 아키텍러 변화를 준비할수 있다.
  6. 코드의 경적된 부분을 없앨수 있다.

· 한번에 큰 아키텍처를 변경을 수행하는 것은 결코 좋은 생각이 아니다. 

· 일반적으로 IDE를 통해서 메소드, 클래서, 공통요소를 추출하거나, rename하는것도 한 부분이지만, 조금더 전문적인 기준이 있어야 한다.

보통 하나의 기능을 담당하는 클래스, 모듈을 변경시에 각자 생각하는 범주가 다르다. 우선 이러한 범주를 설정하고, 작은 범위 단위로 접근하는것이 좋은 이유가 작은것을 검증하면서 확장해 나가는 구성을 가질수 있기 때문이다.

 

 

· 우리는 어떠한 기준으로 리팩토링 절차를 진행해야 할까?

  1. 구성요소를 식별 : 의미적으로 다른 구성요소를 나누는것이 좋다.
  2. 작업량과 위험도를 추정 : 컨트롤러, 뷰, 모델을 이용하는 작업시 업무에서 조금더 높은 위험도를 할당해서 구성하고 판단한다.
  3. 움직이는 바퀴를 갈아끼는 것이라고 하는데, 기존 프로젝트와 신규 프로젝트 2개가 혼재되어서 잘 동작되는 방향으로 진행한다.
  4. 더 쉽게 리팩토링 기법을 활용하자 : 인터페이스, DI 등을 통해서 종석성을 제거하는 방법을 이용한다.
  5. 득보다 실이 많을때는 리팩토링을 하지 않은것을 고려해야 한다.

■ 6장. 조사를 통한 보안

앞장에서 다루는 큰 대분류에서 보안이라는 부분이 빠지면 안되는 중요한 부분이다.

SQL삽입, CSRF, XSS, 오브플로와 같은 개발시 익숙한 키워드 들이 보인다.

· 해당 부분의 내용도 단순히 주의해야 하는 부분에 대해서 간단히 언급만 하는 것이 아니라, 세부 예시를 들어서 설명해주고 

취약점에 대해서 어떠한 경우에 발생하는지 코드적으로 접근하는 부분으로 구성되어 있어서 이해를 쉽게 할수 있습니다.

· 조금 다른 관점으로 시야를 크게 생각할수 있는 항목들이 있스빈다.

  1. 캡차를 사용하지 마라
  2. 캐시를 구현하지 마라
  3. 암호 관련하여서, 고정된 솔트를 사용하지 마라 / UUID는 랜덤이 아니다.

등에 대해서는 조금 더 다른 관점으로 우리가 놓치고 있는 보안취약점의 경험을 알 수 있습니다.

 

■ 그 이후의 내용

· 7,8,9장에서도 SW개발을 개발하는데, 고민해야 하는 부분이 어김없이 설명됩니다.

단순히 해당 시점에 개발이 완료되고 릴리즈 되었다고, 해당 서비스의 개선 및 수정이 없는것은 아니고 

서비스를 이용하는 트래픽 및 사용케이스의 변화에 따라서 고려해야 하는 경우가 설명되어집니다.

자신이 어려움을 경험하고, 비슷한 케이스에 대해서 트러블장애를 경험해보셨으면, 조금 더 현실적인 조언이라고 느낄수 있는 구성입니다.

 

 

7장에서는 최적화를 위해서 하드코어한 최적화 기술 및 성능문제를 해결하기 위한 접근방법의 내용으로 구성됩니다.

 

 

8장에서는 코드의 확장성을 높이는 방법과 병렬화 매커니즘이 성능과 응답성에 미치는 영향도를 다룹니다.

 

9장 마지막 장에서는 버그와 오류처리를 위한 모범사례을 설명하고 오류 복구 코드를 작성하는 기술에 대해서 설명합니다.

 

 

프로그래밍을 하다보면 느낄수 있는 거의 모든 사항이 담겨있다고 생각합니다. 

일반적인 이야기를 하지 않고, 조금 더 현실적인 접근법과 기존에 생각하지 못했던 부분에 대한 언급도 사고의 폭을 넓게 해주는 구성으로 되어 있습니다. 개발을 코드를 작성하고 나서 이후에 발생하고, 고민해야 하는 부분이 잘 정리되어 있어서 다양한 경험을 간접체험 할 수 있고

조금 다른 관점으로 우리를 발전 시킬수 있는 책이라고 생각합니다.

 

"길벗  <개발자 리뷰어> 활동을 위해서 책을 제공받아 작성된 서평입니다."




댓글(0) 먼댓글(0) 좋아요(0)
좋아요
공유하기 북마크하기찜하기 thankstoThanksTo
 
 
 
우아한 타입스크립트 with 리액트 - 배달의민족 개발 사례로 살펴보는 우아한형제들의 타입스크립트와 리액트 활용법
우아한형제들 웹프론트개발그룹 지음, 김민태 감수 / 한빛미디어 / 2023년 10월
평점 :
장바구니담기


책의 제목은 "우아한 타입스크립트 with 리액트" 입니다.

부제는 "배달의민족 개발 사례로 살펴보는 우아한형제들의 타입스크립트와 리액트 활용법" 입니다.

이 책은 타입스트립트 책입니다. 저자분은 특정 1인이 아닌, 우아한 형제들에서 "웹프론트개발그룹" 에서 공동집필을 하였습니다.

총 8분이 공동집필하셨습니다. 정말 좋은 오보딩 가이드 책이 될것 같습니다.

이렇게 회사에서 실제 사용하는 실무코드 및 노하우를 설명해주는것이 개발자 입장에서는 매우 현실적인 조언이 되기 때문입니다.

 

 

■ 책의 구성

· 기본적으로 타입스크립트를 설명합니다. 다만 기본적인 html,css,javascript를 알고 있다면 조금 수월하게 책을 접할수 있습니다.

· React를 알고 있으면, 우형에서 React의 JSX문법활용, Hock, 상태관리를 사용할때, 어떻게 ts를 적용하는지 알려줍니다.
하지만 React를 알지 못하여도, 타입스크립트만 학습해도 문제는 없습니다. (추후에 활용하게 될 기회가 많이 있을것으로 생각합니다)

·  책의 예제 저장소 : https://github.com/woowa-typescript

 

■ 구성되어진 내용

·  기존에 javascript를 조금이라도 알고 계신 개발자 분들이라면, 초반 chapter를 개념도 정리하고 재미있게 읽으실수 있습니다.

·  강타입 / 약타입을 설명할때, 아래와 같이 다른 언어도 함께 예시를 들어주시는 부분이 좋았습니다.

아래와 같이 책에 전반적으로 typescript로 작성시, 또는 javascript로 작성시 다른점,차이점이 직관적으로 예시를 통해서 설명되어지는 부분은 ts의 장점, 차이점을 알아볼수 있어서 학습하고 이해하기에 충분한 예시를 제시합니다.

추가로 java등 다른 언어에 대해서도 다양하게 예시로 활용해서, 다각도로 예시를 들어주는 책인것을 알수 있었습니다.

 

·  typescript의 독자적인 타입은 기존 javascript를 사용했을때 없는 개념이여서 혼돈이 있는 부분입니다.

any, unknown, void, never등의 타입에 대해서 개념을 쉽게 잡을수 있게 설명되어 집니다. 일방적으로 문법적으로 설명하기 보다는

어떠한 경우에 대해서 사용하는지, 이러한 타입에 대한 개념은 ts를 이해하는 가장 기본적인 개념입니다.

여기에 정의된 타입을 잘 이해하고 사용해야, 의도한 타입이 체크되고 활용할수 있습니다.

제네릭에 대한 부분도 함께 고려할수 있습니다.

 

·  타입에 대해서 확장을 하고 기존타입을 사용해서 새로운 타입을 정의할수 있습니다. 

기본적으로 타입스크립트에서는 interface 와 type키둬드를 사용해서 타입을 정의하고, extends, 교차타입, 유니온 타입을 사용하여 타입을 확장합니다. 타입 확장에 대한 예시를 구성할때, 우리가 익숙한 배달의 민족의 예시를 사용해서 설명을 하는 것은 책의 재미를 줍니다.

 

타입을 사용할때 무조건 확장을 반대로 줄이는 것도 필요하다. 타입을 좁히기를 통해 더 정확하고 명시적인 타입 추론을 할수 있게 되고, 복잡한 타입을 작은 범위로 축소하여 타입 안정성을 높일수 있다. 

- 타입가드에 따라 분기 처리, typeof, instanceof, in, is 연산자를 활용해서 다양한 기법을 제시합니다. 

 

 

■ 활용적인 내용

·  6장부터는 ts의 문법보다는 아래와 같은 사항들이 설명되어 집니다. 

타입스크립트도 javascript로 변경이 되어야 합니다. ts로 코드를 작성하였어도 언제, 어떤 방식으로 변환이 되는지 알게 된다면 타입스크립트의 컴파일 하는 과정을 통해서 동작원리를 파악하게 됩니다.

·  실제 비지니스 로직을 수행하기 위해서 API를 호출하게 됩니다. 이러한 부분은 비동기 호출이 필요한 부분으로 처리를 하는데 그러한 방법은 fetch, Axios등을 활용한 실제 데이터를 서버에서 받아와서 처리하는 부분에 대한 내용으로 구성됩니다. 호출도 중요하지만, 실제 받아온 result에 대해서 타입스크립트에서 어떻게 처리하는지에 대한 부분도 매주 중요합니다. 응답값에 대한 Superstruct 활용사례 및 API의 상태관리하는 방법에 대한 내용이 있습니다.

·  react를 사용할때 JSX문법을 사용하는데, jsx에 대해서 어떻게 타입스크립트에 적용하는지 8장에서 언급됩니다.

·  추가로 react에 hock을 사용할때에는 useState, useEffect등등을 어떻게 적용할지, custom hock에 대한 부분이 있습니다.

·  실제 타입스크립트의 프로젝트를 진해할때 어떻게 관리하고 주의해야 하는지 12장에서 설명됩니다. 타입스크립트의 유용하게 활용할수 잇는 개념과 팁이 소개됩니다. 앰비언트 타입 활용을 하고, 실제 우아한 형제들에서 declare 키워드를 활용한 사례도 살펴봅니다.

 

 

■ 누군가 기술적인 고민, 질문등 나와 같은 고민을 우형에서 함께 고민해주는 느낌

·  우형에 고민했던 현실적인 이야기들이 책의 곳곳에 있습니다. 여러가지 "우형 이야기" 중에서 평소에 고민을 해보았던 내용이 있다면 

그리고 답을 아직 찾지 못하였던 부분에 대해서 이책을 통해서 아...나만 고민했던 부분이 아니구나!!
이렇게 결론을 낼수 있고 접근하면 되는구나...!!

이러한 부분이 하나라도 있다면, 정말 이책은 독자분에게 도움이 될것 같습니다. 언급되는 내용이 기본적인 문법적인 부분도 있고 평소에 개발을 할때, 고민이 당연히 되는 다양한 현실적인 이야기를 담겨 있어서 매우 좋았던 부분입니다.

·  5장에서는 조금더 우아한형제에서 사용하는 코드를 경험 할 수 있습니다. 실제 코드 예시를 살펴보면서, 정확한 타이핑을 하지 못해 발생하는 문제를 타입스크립트를 이용해서 해결해봅니다. 추가로 react, react-query 코드를 포함하는 예제를 통해서 실제 활용하는 예제를 경험하면서, 현업에서 시행착오를 줄일수 있게 가이드 합니다.

 

 

"한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

 


댓글(0) 먼댓글(0) 좋아요(1)
좋아요
공유하기 북마크하기찜하기 thankstoThanksTo
 
 
 
핸즈온 머신러닝 - 전2권 - 사이킷런, 케라스, 텐서플로 2로 완벽 이해하는 머신러닝, 딥러닝 이론 & 실무, 3판 O'reilly 오라일리 (한빛미디어)
오렐리앙 제롱 지음, 박해선 옮김 / 한빛미디어 / 2023년 9월
평점 :
장바구니담기


모든 분야에서 Bible처럼 불리우는 책이 있습니다.머신러닝, 딥러닝에 관심이 있거나 업무에 활용하시는 분들은 이책을 들어보셨고 대부분 이책을 통해서 학습을 하시지 않았을까 생각합니다.이번에 같은 이름으로 [3판]이 나왔습니다. 기존 2판과 어떤점이 다른지는 뒤에서 설명드리겠습니다.책의 부제에서도 나와있는것 처럼 사이킷런, 케라스, 텐서플로2을 기술요소를 주로 사용하고 있고, google vertex등을 이용하는 부분도 뒤에 언급드리겠습니다.

책의 두께가 있다보니, 분철을 별도로 하지 않아도 기본적으로 책의 구성이 아래와 같이 되어 있습니다.

 

2판을 가지고 계신 독자분이 있으시면, 3판에서는 어떤 부분이 달라졌는지 가장 궁금하지 않으실까 합니다.

상세 변경 사항 : https://github.com/ageron/handson-ml3/blob/main/CHANGES.md 

아래 글에서도 있듯이, 최근에 별도의 책의 주제로도 출간되는, 그레이디언트 부스팅, 트랜스포머스 등 새로운 기술이 언급되는 부분은

이 책을 통해서, 최신의 기술을 사용하고 학습 할수 있습니다.

 

 

■ 대상독자 / 소개

·  이 책은 머신러닝에 관해 아는것이 거의 없다고 가정하고 내용이 구성됩니다. 그래서 독자 대상은 모든분들이 되실거 같습니다.

·  박해선님의 번역관련 책은 대부분 해당 git에서 쉽게 jupyter 노트북 형태로 제공되어서, 쉽게 동작을 살펴볼수 있습니다.

    https://github.com/rickiepark/handson-ml3

·  1부에서는 <머신러닝>에 대해서 설명하고 주로 사이킷런을 이용합니다.

·  2부에서는 <신경망과 딥러닝>에 대해서 설명하고 주로 텐서플로와 케라스을 이용합니다.

 

 

■ 1부 : 머신러닝에서 다루는 주제

·  기본적인 머신러닝의 개념

·  분류 / 모델훈련 / 서포트 벡터 머신 / 결정 트리 / 앙상블학습과 랜덤 포레스트 / 차원 축소 / 비지도 학습에 대해서 다룹니다.

·  보통 머신러닝의 다양한 기법을 학습하였지만, 실제 업무에서 어떻게 활용할지 모를때 좋은 사례가 제시됩니다.

이것을 기반으로 사용기법의 흐름을 잡고, 적용할 수 있는 기준선이 될것 같습니다. 

 

·  머신러닝의 종류에 대해서 

    - 훈련 지도 학습(지도, 비지도, 준지도, 자기지도, 강화학습)

    - 실시간으로 점진적인 학습을 하는지 아닌지 (온라인 학습과 배치 학습)

    - 사례기반 학습과 모델 기반 학습

에 대해서 항목별로 설명을 합니다. 예전에는 보통 개인적으로 지도, 비지도, 강화학습 보통 3가지 카테고리로 구성해서 설명하였는데 이 책에서는 좀 더 다양한 종류로 분리해서 범주를 소개합니다.

머신러닝의 첫 개념은 데이터를 어떻게 바라보는 관점이 매우 중요한데, 좋은 구성 같습니다.

 

·  머신러닝 수행시, 보통 고민하게 되는 나쁜 데이터 사례에 대해서 정의합니다.

아래의 항목은 머신러닝을 잘 수행했지만, 실제 active의 결과값이 예측치와 다른 경우 주로 고민하게 되는 부분입니다. 아래 사항을 알고 있다면, 시행착오를 줄일수 있다고 생각합니다.

 - 충분하지 않은 양의 훈련 데이터

 - 대표성 없는 훈련 데이터

 - 낮층 품질의 데이터

 - 관련없는 특성

 - 훈련 데이터 과대 적합

 - 훈련 데이터 과소 적합

 

 

# 2장에서는 "머신리닝 프로젝트 처음부터 끝까지" 라는 내용으로 보통 머신러닝의 회귀, 포레스트 특정 기법하는 관점보다는 전체적으로 처음 머신러닝을 업무에 적용해보고 싶을때의 막막함을 해소하고, 서비스에 적용하려고 할때 전체적인 process와 흐름 및 데이터를 수집하고, 가공하고 학습 이후에 무엇을 해야 할지 순차적으로 설명되어 지는 과정으로 되어 있어서 프로젝트를 하시는 경우 따라해야 할 기준선을 제공합니다. 뒤로 갈수록 검증검증, 튜닝, 테스트, 런칭, 모니터링, 유지보수에 대한 항목으로 구성되어 있어서 크게 흐름을 파악하기 좋은 부분입니다. 이론적인 것 뿐만이 아니라, 코드를 통해서 검증하는 예시도 포함되어 있습니다.

 

 

# 3장 "분류" 에서는 가장 보편적으로 사용하는 MNIST (70,000개의 작은 숫자 이미지) 데이터 셋을 통해서 학습합니다.

사이킷런을 통해서 이미지 분류를 진행합니다. 사이킷런의 SGDClassifier클래스를 이용해서 확률적 경사 하강법(SGD) 분류기로 시작해봅니다. 이 분류기는 매우 큰 데이터셋을 분류하는데 효율적으로 처리합니다. cross_val_score()함수를 통해서 모델을 평가합니다.

 

·  모델에 대해서 선형회귀 부터 진행합니다. 모델에 대해서 훈련시키는 방법중에 1) 닫힌상태 방정식 2) 경사 하강법의 경우가 있습니다.

선형회귀을 통하여 정규방식식을 통한 해석적인 방법, 계산복잡도, 경사하강법(GD)를 통해서 최적의 해법을 찾을수 있는 최적화 알고리즘을 이용합니다. 경사하강법은 매우 중요하기 때문에, 이 책에서도 다양하게 설명하고 있습니다. 배치경사 하강법, 확률적 경사 하강법, 미니배치 경사 하강법에 대해서 추가적으로 구성되어 있습니다.

 

·  SVM이라고 불리우는 서포트벡터 머신의 내용은 5장에 설명되어집니다. 선형, 비선형분류, 회귀, 특이치 탐지에서도 사용 할 수 있는 다목적 머신러닝 모델입니다. SVM은 중소규모의 비선형 데이터셋(수백에서, 수천개의 샘플), 특히 분류작업에서 장점을 가집니다.

다양한 분류를 그림을 잘 구성되어 있습니다. SVM을 분류가 아닌 회귀에 적요하는 내용도 설명되어 집니다.

 

·  머선러닝중에 트리는 이해관계자에게 가시적으로 설명이 쉬운 알고리즘은 결정트리가 있다. 분류와 회귀 작업 그리고 다중 출력작업까지가능한 머신러닝 알고리즘 입니다. 또한 매우 복잡한 데이터셋도 학습할수 있는 강력한 알고리즘입니다.

최근에는 자주 사용하는 랜덤 포레스트(7장) 의 기본 구성요소이기도 합니다. 결정트리을 DecisionTreeClassifier를 통해서 훈련합니다.

 

회귀에 대한 문제는 DecisionTreeRegressor를 통해서 실습합니다. 우리가 일반적으로 알고 있는 tree의 의사결정은 아래 그림처럼 결정됩니다.

 

·  차원축소를 통한, 수백만 샘플중에 다양한 특성으로 인한 훈련이 느려지는 현상을 대처하기 위한 방법등이 소개됩니다. 매드폴드 학습,  주성분 분석등이 8장에 구성되어 있고, 9장에서는 비지도 학습 중 군집, k-평균 알고리즘, DBSCAN등의 내용으로 구성되어 있습니다. 

 

 

■ 2부에서는 신경망과 딥러닝에 대한 내용으로 구성되어 있습니다.

· 신경망은 딥러닝의 핵심입니다. 인공지능의 시작인 퍼셉트론에 대한 이론적인 부분, tanh, ReLu함수 둥이 소개됩니다. 

인공 신경망을 만들고, 훈련하고 조금더 복잡한 심층 신경망을 훈련해봅니다. 심층 신경망의 출력층이 멀어질수록 그레이디언트가 점점 작아지거나 커지는 현상에 대해서 해결방법을 알아봅니다. 

·  12장에서 텐서플로의 구조 및 사용법, 타입변환/변수/다른 데이터구조, 사용자 정의, 주로 사용하는 함수에 대해서 설명되어 있습니다.

·  13장에서 대용량 데이터셋을 이용하기 위해서는 텐서플로 자체의 데이터 로드 및 전처리 API인 tf.data를 사용합니다. 멀티스레드와 큐를 사용하여, 여러 파일에서 동시에 읽고, 샘플을 셔플링하거나 배치로 만드는 등의 작업을 수행할수 있습니다. 

프로토콜 버퍼를 이용해서 텐서플로에서 사용하는 다양한 내용이 있습니다.

·  합성곱 신경망은 14장에 소개 됩니다. CNN약어로 사용되는데, 시각분야에 국한되지 않고, 음석인식, 자연어처리 (NLP)와 같은 다른 작업에서도 많이 사용됩니다. 해당 부분은 케라스를 통해서 실습을 진행합니다. 

CNN에 가장 중요한 구성요소인 합성곱 층에 대해서 자세히 설명합니다.

합성층 이후에, 풀링 층에 대해서 설명하고, 케라스로 구현을 합니다. Lenet-5, alexNet, GoogLeNet, VGGNet, ResNet, Xception, SENet 등에 대해서 다양한 합성곱층을 알수 있습니다. 

·  RNN(네트워크 순환 신경망)에 대해서 살펴보고 역전파하여 네트워크를 훈련하는 내용으 15장에 설명되어집니다.

RNN훈련하고, 시계열 예측을 진행합니다.

 

·  대규모 텐서플로우 모델 훈련과 배포를 위해서, 다양한 예시가 제공됩니다.

Docker컨터네너에서 TF서빙 실행하기, REST-API를 이용하는 방법, gRPC API로 TF 서빙에 쿼리하기, 구글클라우드에 버텍스AI를 활용해서 배포하는 실습하는 내용도 있어서, 새로운 내용이 포함되어서 관련 내용이 궁금하셨으면 도움이 많이 됩니다.

매장의 마지막에 연습문제가 제공 되고 있어서, 개념을 다시 잡을수 있고, 3부 부록에서 연습문제 정답도 있지만 부록 B,C,D,E에 있는 내용은 하나의 별도 책으로 낼 정도로 일반 책에서 다루지 않는 내용이 포함되어 있습니다.

 

 

"한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."


댓글(0) 먼댓글(0) 좋아요(0)
좋아요
공유하기 북마크하기찜하기 thankstoThanksTo