모니터링의 새로운 미래 관측 가능성 - 프로메테우스, 그라파나, 오픈텔레메트리까지 마이크로서비스와 인공지능 중심의 옵저버빌리티 구현
정현석.진미란 지음 / 제이펍 / 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
 
 
 
인간 vs. AI 정규표현식 문제 풀이 대결 - 24개의 정규표현식 퍼즐로 알아보는 ChatGPT, 코파일럿 활용법
데이비드 머츠 지음, 김모세 옮김 / 제이펍 / 2023년 10월
평점 :
장바구니담기


책의 제목부터 매우 흥미롭습니다. AI와 대결이라니요.

보통 ChatGPT, 코파일럿등 AI를 통해서 가장 개발적으로 처음 접근하는 화두가 정규표현식입니다.

컨셥에 딱 맞죠. 예전에도 어딘가에서 내가 원하는 문자열 형태를 샘플로 여러개 입력을 하면 그에 맞는 정규표현식을 제공하는 사이트가 있을 거라고 생각을 했는데, 생각보다 그런 서비스를 하는 사이트는 없었습니다.

자주 사용은 안하는데, 딱 필요할때가 있는 정규표현식을 이번 기회에 이책을 통해서 좀 더 잘 활용 할수 있을 것 같은 생각이 들었습니다.

 

정규표현식을 대부분의 언어에서 지원을 합니다. grep, sed, AWK, perl 뿐만 아니라, Java, .net. javascript, GO, Rust 등등

생각해보면, 이렇게 다양한 언어에 대해서 공통적으로 적용할 수 있는 기능적인 부분인 정규표현식은 잘 활용하면 더욱 더 강력한 기능을 가지게 됩니다.

 

해당 책의 정규표현식 실습은 python의 re 표준 라이브러리로 실습환경을 구성합니다.

책의 서브 타이틀로도 나와 있는 것처럼, 24개의 퍼즐과 같은 패턴을 가지고 ChatGPT, 코파일럿을 통한 활용법을 학습합니다.
책의 표지가 동양풍의 그림이여서, 저자분이 동양분이신줄 알았는데, 저자분은 "데이비드 머츠" 이십니다.

시작하며에 있는 글 (이 책의 목적 및 다루는 내용에 대해서 가장 잘 요약하고 있는 글입니다.)
AI기반 도구들의 만들어내는 결과는 매우 놀랍다. 하지만 동시에 수많은 실패를 보면서 매우 어리석다는 것도 이해해야 한다.
바로 이것이 이 책의 주요 목적이다. 정규표헌식을 사용한 퍼즐들은 컴퓨터 프로그래밍의 모든 영역 중에서도 인공지능의 특이한 행동을 이해하기에 특히 적합하다. 

 

 

■ 퍼즐에 대해서

·  퍼즐에 대해서 저자분이 생각하는 정규식 풀이와 AI를 활용한 풀이법을 비교하가면서, 대결이라는 컨셥을 진행합니다.

<저자생각> vs <AI생각> 이렇게 2개를 직관적으로 비교하는 방식으로 하나의 주제를 설명하게 됩니다.

 

 

■ 수량자와 특별한 하위 패턴들

·  x로 시작하고 y로 끝나는 모든 단어를 매치하라(퍼즐1)

가장처음 나오는 예시로, 보통 전화번호 및 입력 속성을 체크하기 위해서 가장 보편적으로 사용하는 패턴이다.

단어를 구분짖기 위한 방식등을 포함해서, 해당 요청을 처리할수가 있다.

·  책의 AI코드 추출은 아래와 같이 영어로 chatgpt를 이용해서 결과물을 도출합니다.

 프롬프트 명령어는 한글이 아니라 영어로 입력하게 책이 구성되어 있다. 첫 예시라서 영어가 간단하지만 뒤로 갈수록 입력하는

문장의 길이는 길어집니다. 실제 이정도의 영어를 입력해서 원하는 결과를 도출하게는 어려울것이라고 생각합니다.

그래서 책을 통해서 간접체험하는 것이 반대로 생각하면 더 유용할 것 같습니다.

그리고 실제 ChatGPT에서 제공하는 결과 답변은 책과 다르게 제공 될 수 있으니 참고 하시면 됩니다.

첫 퍼즐에서 저자분은 findall()을 통해서 matching을 하였는데, finditer()에 대한 부분도 적용하면 좋은 가이드를 함께 제공합니다.

 

평균적으로 책에서 코파일럿 보다는 ChatGPT에서 정규식에 대해서는 조금 더 의미있는 도움되는 코드가 제공되는것 같습니다.

 

 

■ 구성 포맷

·  정규표현식을 이용해서 구성 포맷을 파싱할수 있다.

정규표현식을 수행해서, python의 딕셔너리 구성으로 반홤받을수 있다.

dict(re.findall(~~~)) 을 이용하는 방법을 이용하면 된다.

 

·  아래와 같은 시그널을 분석하는 상태시쿼스에서 유효하게 인코딩된 신호들을 식별하는 예시등을 통해서 일반적인

text형태의 구성, 연습에서 탈피하는 예시등이 좋았습니다.

 

■ 흥미로운 주제들

·  chapter4장에서 일반적으로 python에서 제공하는 함수를 정규표현식으로 작성하는 시도을 해봅니다. 

흥미로운 주제인것 같습니다.

≫ str.count() : 긴 문자열 안에 하위 문자열을 검색하는 기능

 포커플레이를 통해서 몇가지 시나리오를 정규표현식을 통한 기능 만들어보기

·  스트레이트, 플러시 카드 패 식별하기

· 포터 카드 패를 포 카드와 매치하기

· 포커 카드패를 풀 하우스와 매치하기

· 포커 카드 패에서 트리플, 원 페어를 매치하기

포커에 대해서 기본적으로 게임 방식을 아시면 조금 더 흥미로운 주제로 생각이 됩니다.

이러한 부분도 정규표현식으로 의도한 결과물을 추출해 볼수 있다는 것은 조금은 다른 관점으로 정규표현식을 접근하고

활용할수 있는 계기를 제공해 줍니다.

 IPv4주소 테스트 하기

조금은 현실적인 정규표현식 예시도 다양하게 연습하고, 실제 어떤것이 정답은 없지만 원하는 결과를 체크할 수 있는

다양한 시도를 저자 관점 & AI부분을 통해서 자기가 이해하고, 사용하기 편한 코드를 도출해 나갈수 있습니다.

 

■ 정규식에 기본적인 시작

·  책의 내용을 처음부터 보기 보다는 뒤에 별도로 구성된 정규표현식의 소개 내용을 먼저 살펴보시고, 책의 내용을 학습한다면

더 나은 효과를 얻으실수 있습니다. 기본적인 내용부터 잘 설명되어져 있습니다.

 


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