파이썬을 활용한 머신러닝 쿡북 - 전처리에서 딥러닝까지, 판다스와 사이킷런 중심의 실전 문제 해결 200선
크리스 알본 지음, 박해선 옮김 / 한빛미디어 / 2019년 9월
평점 :
구판절판



책을 선택할 때 기준이 여러가지가 있을 수 있지만 저자가 그 중 하나라는 점은 당연하다. 개발서적의 경우는 어떨까? 우리나라 개발서적 시장이 그리 넓진 않기 때문에 아직 저자만을 기준으로 잡기에는 절대적인 수가 부족하지만, 역자로 범위를 넓히면 좀 더 많아진다. 역자 박해선을 검색에 입력해보면 “박해선 github”가 바로 이름 다음에 뜬다.

역자의 github repo로 바로 연결이 되는데, 물론 흔한 이름이 아니긴 하지만 그만큼 이분에 대한 개발자들의 신뢰가 높다고 볼 수 있다(물론 1차적으로 중요한 건 저자이고 역자도 자신의 블로그에서 간단하게 저자에 대한 신뢰를 드러낸다).

책의 목차를 살펴보면 조금이라도 이쪽 업무에 관심이 있거나 경험이 있는 사람들이 알아차릴 수 있는, 다른 ML 책들과 차별화되는 점이 있는데, 8장까지는 데이터 전처리만을 다룬다는 점이다. 흔히 이쪽 분야에 대한 기본적인 소개글을 읽으면 전처리의 중요성을 강조하지만 대부분의 책들은 데이터를 라이브러리가 제공하는 데이터(e.g. MNIST, iris 등)만 사용하기 때문에 실무를 해보지 않으면 전처리의 중요성이나 어려움을 실제로 이해하기는 쉽지 않다. 반면에 이 책은 데이터의 형식(text, json, DB, …)이나 데이터 타입(수치, 텍스트, 날짜, 시간, 이미지, …)등에 따라 데이터를 로드하고 여러가지 필터링을 적용하는 방법을 설명하는 데만 거의 40%의 분량을 할애하고 있다.

전처리의 중요성은 실무를 해본 사람들은 누구나 공감하는 일이지만, 일단 데이터를 수집하는 거 자체가 큰 일이므로, 크롤링을 예로 들면 큰 회사에서는 전담 부서가 따로 있고, 데이터 크롤링과 사내 다른 부서들이 사용할 수 있게 API등을 제공하는 작업만으로도 항상 일이 넘친다. 두 번째로 이 책에서도 자세히 보여주지만 데이터를 원하는 형태로 가공하는 작업도 쉽지 않다. 개인적으로 지금은 다른 일을 하고 있지만 예전에 NLP 부서에서 데이터를 가져와 동료들에게 넘겨주는 작업을 했는데, 프로젝트에 따라 다르지만, 필요할 때는 계약직으로 데이터를 교정하는 분들만 2~3명을 고용해 1차로 처리를 하고 다시 프로그램에서 자동으로 처리를 하기도 했다. 이렇게 하는 이유는 실제 사용하는 데이터는 MNIST나 iris같이 사용하기 편하게 분류가 되어 있지도 않고, 예외 처리를 해줘야 하는 경우가 질과 양 모두 많기 때문이다. 대부분의 책은 여기까지 설명만 하고 어떤 작업이 실제로 필요한 지는 많이 보여주지 않는데, 이 책은 이런 부분을 굉장히 자세하게 보여주기 때문에 굉장히 큰 장점을 갖는다. 물론 실무를 한다면 책의 내용을 그대로 적용할 수는 없겠지만(만약 실무를 하는데 어떤 책의 내용을 그대로 사용해서 처리가 가능하다면 최소한 난이도가 높거나 중요성이 높은 업무는 아닐 가능성이 높다), 적어도 어디서 어떻게 시작해야 할지 막막하지는 않을 것이다.

이 분야에 관심을 갖거나 실무를 하는 사람이라면 누구에게나 자신있게 권할 수 있는 매우 좋은 책이다. 마지막으로 사소한 부분이지만 전부 컬러로 되어 있다는 점도 매우 좋다. terminal에서도 colorscheme이 있어야 읽기 편하듯이 가독성이 훨씬 높다.

Ref

역자의 세심한 배려를 느낄수 있는데, github의 ipynb file은 주소의 github.com 부분을 colab.research.google.com/github으로 바꾸면 colab에서 실행시킬 수 있다. 그런데 역자가 아예 이 link까지 만들어놔서 그냥 click만으로 바로 colab에서 코드를 볼 수 있다. e.g. https://colab.research.google.com/github/rickiepark/machine-learning-with-python-cookbook/blob/master/01.ipynb



댓글(0) 먼댓글(0) 좋아요(1)
좋아요
공유하기 북마크하기찜하기 thankstoThanksTo
 
 
 
처음 시작하는 딥러닝 - 수학 이론과 알고리즘부터 CNN, RNN 구현까지 한 권으로 해결하기
세스 와이드먼 지음, 심효섭 옮김 / 한빛미디어 / 2020년 8월
평점 :
장바구니담기



저자는 딥러닝을 잘 설명하기 위해 일반적인 문장으로 설명을 하고, 시각화를 통해 동작 과정을 보여주고, 수식으로 원리를 나타내고, 의사코드로 알고리즘 구현과정을 보여줘야 한다고 생각해서 이 책에 이런 방식을 썼다고 한다. 이걸 주요한 강점으로 내세우는 듯 싶은데, 수식은 저자의 방향성에 따라 싣는 경우도 있고 아닌 경우도 있지만, 네트워크 시각화와 의사코드 혹은 소스코드(일반적으로 당연히 파이썬)는 당연히 모든 딥러닝 책이 갖고 있는 부분이다.

그럼 이 책이 다른 책과 다른 점은 무엇일까? 우선 다이어그램이 다르다. 일반적으로 딥러닝 책에서 사용하는 다이어그램은 여러 개의 원이 빽빽하게 연결되어 여러 개의 층으로 레이어를 이루는 모습을 표현한다. 저자는 이런 다이어그램이 신경망의 일반적인 구분을 하는 데는 도움이 되지만, 어떤 연산이 일어나는지 등 신경망 자체를 이해하는 데는 아무 도움이 되지 않는다고 생각해서, 1장에서 하나의 함수의 입출력을 표현하는 하나의 상자로 시작해 합성함수를 거쳐 딥러닝을 이루는 여러 함수의 레이어별 입출력을 표현한다.

두 번째로는 시각화 수식 코드 3가지 설명을 계속 반복하면서 발전시킨다는 점이다. 간단한 1차 함수를 통해 자신의 설명 방법을 소개하고 각 장을 거치면서 이걸 조금씩 덧붙여서 최종 설명을 향해 나아가기 때문에, 같은 방법 속에서 내용을 심화해 나가는 점이 개인적으로는 마음에 들었고 독자가 이해하는 데 도움이 될거란 생각이 들었다.

마지막으로 자체적인 파이썬 라이브러리를 구축하는데, 여기 사용된 소스 코드 내용이 파이썬 기초를 익히기에 좋다. 많은 사람들이 딥러닝에 관심을 갖고 시작을 하면서 파이썬은 정말 빠르게 훑고만 지나가는 경우가 많아, 딥러닝 커뮤니티에 올라오는 질문을 보면 파이썬 자체에 관련된 부분은 전혀 이해하지 못해 문제를 해결하지 못하는 경우도 종종 봤다. 이런 사람들에겐 여기 나온 라이브러리 코드를 따라가며 설명하는 부분이 초급을 벗어나는 데 도움이 될 만하다.

1장부터 모든 내용이 연결되며 앞의 내용이 이해가 되지 않으면 뒤쪽은 읽기가 힘들어 각 장마다 독립성이 떨어진다는 점이 있긴 하지만 이건 독자의 스타일에 따라 꼭 단점이라고 보기는 힘들고, 그냥 참고만 하면 될 거 같다. 전체적으로 기초를 쌓기에 좋은 책이란 생각이다.

Etc

Colab

예제 코드를 따라하기 위해서 아무 것도 설치하지 않고 간단하게 colab에서 모든 걸 이용할 수 있다. 예를 들어 예제 코드 중 마지막인 https://github.com/flourscent/DLFS_code/blob/master/07_PyTorch/Code.ipynb를 colab에서 실행한다면 우선 https://colab.research.google.com/github/flourscent/DLFS_code/blob/master/07_PyTorch/Code.ipynb 이런 식으로 주소를 변경해서 colab에서 파일을 연다. 그 후 필요한 라이브러리를 설치해줘야 하는데, 다음과 같이 pip로 pytorch 설치를 하고, 이 책에서 제공하는 별도의 라이브러리 lincoln을 사용하기 위해 github repo도 받은 후

file을 여는 두 곳의 경로만 수정하면 된다.

여기까지 수정하면 전체를 실행할 수 있으며, 실행 결과 마지막 셀은 다음과 같다.

https://colab.research.google.com/github/flourscent/DLFS_code/blob/master/01_foundations/Code.ipynb (별도 수정 없이 그대로 실행 가능)

https://colab.research.google.com/github/flourscent/DLFS_code/blob/master/02_fundamentals/Code.ipynb (별도 수정 없이 그대로 실행 가능)

https://colab.research.google.com/github/flourscent/DLFS_code/blob/master/03_dlfs/Code.ipynb (별도 수정 없이 그대로 실행 가능)

https://colab.research.google.com/github/flourscent/DLFS_code/blob/master/04_extensions/Code.ipynb (repository clone, lincoln 경로 수정 및 최초 실행 시 주석 해제 필요)

https://colab.research.google.com/github/flourscent/DLFS_code/blob/master/05_convolutions/Code.ipynb (별도 수정 없이 그대로 실행 가능)

https://colab.research.google.com/github/flourscent/DLFS_code/blob/master/05_convolutions/Numpy_Convolution_Demos.ipynb (repository clone, lincoln 경로 수정 및 최초 실행 시 주석 해제 필요)

https://colab.research.google.com/github/flourscent/DLFS_code/blob/master/06_rnns/Autograd_Simple.ipynb (별도 수정 없이 그대로 실행 가능)

https://colab.research.google.com/github/flourscent/DLFS_code/blob/master/06_rnns/RNN_DLFS.ipynb (repository clone, lincoln 및 input.txt 경로 수정 필요)

Ref.



댓글(0) 먼댓글(0) 좋아요(0)
좋아요
공유하기 북마크하기찜하기 thankstoThanksTo
 
 
 
파이썬 증권 데이터 분석 - 파이썬 입문, 웹 스크레이핑, 트레이딩 전략, 자동 매매, 딥러닝을 이용한 주가 예측까지
김황후 지음 / 한빛미디어 / 2020년 7월
평점 :
장바구니담기


PART 1 파이썬 데이터 분석 기본

CHAPTER 1 증권 데이터 분석에 앞서

파이썬으로 증권 데이터를 분석하는 책이라는 목적을 명확히 한다. 일반적인 프로그래밍 책과 달리 증권의 역사와 투자 기법 등으로 시작하면서 놀랍게도 저자의 계좌를 공개한다. 고민이 많았을 거 같지만 이 책을 보는 사람들에겐 무엇보다 확실한 동기 부여 및 객관적인 성과 지표로 판단할 수 있을 거 같다.

CHAPTER 2 파이썬 프로그래밍

2장부터 비로소 여러가지 설치 방법을 알려주면서 보통의 프로그래밍 서적과 같은 모습을 보여준다. 다만 약간 다른 점이 있는데 32비트 윈도우용 설치 방법을 별도로 설명하는데, 국내 증권사의 API를 사용하기 위해 어쩔 수 없이 필요한 부분이다. 이후로는 기본적인 파이썬 문법 설명을 하고, 마지막에 requests와 matplotlib의 아주 기초적인 사용법을 보여준다.

CHAPTER 3 팬더스를 활용한 데이터 분석

야후 파이낸스 등을 사용해 여러가지 주가 분석과 관련된 예제를 사용한다는 점을 제외하면 pandas의 사용법을 알려주는 다른 책들과 큰 차이는 없다.

 CHAPTER 4 웹 스크레이핑을 사용한 데이터 분석

html 문법을 간단히 설명하고 beautifulsoup를 사용해 데이터를 가져와 분석하는 방법을 보여준다. 캔들 차트 등 역시 주가 분석에 관련된 부분만을 설명한다.

PART 2 파이썬 데이터 분석 응용

CHAPTER 5 시세 DB 구축 및 시세 조회 API 개발

분석을 위해 가져온 데이터를 MariaDB에 입력하고 조회하는 방법을 알려준다. 이번 장에서도 내용은 주가 분석에 관계되었으나 pymysql을 이용해 MariaDB를 사용하는 방법이 핵심이기 때문에 일반적인 DB 프로그래밍을 위해서만 봐도 좋은 내용이며, MariaDB가 MySQL 개발자가 만든 DB이기 때문에 거의 그대로 MySQL을 사용할 때도 활용할 수 있어 여러 모로 유용한 장이다.

CHAPTER 6 트레이딩 전략과 구현

여러가지 투자 방법을 코드로 구현한다. 이전까지는 모두 이번 장부터 하는 작업을 돕기 위한 보조적인 방법을 배우고 구현한 것이고, 이 책의 진정한 목표는 여기부터 시작한다. 현대 포트폴리오 이론, 샤프 지수, 볼린더 밴드 지표, 이동 평균, 스토캐스틱, 모멘텀등 여러가지 다양한 기법을 간단히 설명하고 구현 코드를 보여준다. 금융, 주식 쪽으로는 아는 바가 없어 자세히는 모르겠지만, 아마도 기본적이며 대표적인 몇 가지 기법을 가져와서 설명하는 걸로 보인다.

CHAPTER 7 장고 웹 서버 구축 및 자동화

장고 서버와 슬랙 API를 사용하는 방법과 백트레이더 라이브러리로 백테스트를 하는 방법을 설명한다. 백테스트라는 건 과거의 데이터를 기반으로 사용하는 전략이 효과적인지 검증하는 방법인데, 과거 데이터가 기반이기 때문에 테스트 결과가 좋게 나온다고 해서 실제로 꼭 성공한다는 보장은 없다. 하지만 과거 데이터가 많을수록 성공에 가까울 확률이 높아지기는 한다. 저자의 설명에 따르면 벡테스트용 라이브러리가 여러가지가 있으나, 백트레이더가 문서화가 잘 되어 있고 다른 라이브러리보다 사용하기 쉬워서 선택했다고 한다. 상대적 강도 지수 RSI와 커틀러 RSI라는 방법을 이용해 엔씨소프트 주식을 매매했을 때의 테스트 결과를 코드로 구현한다.

CHAPTER 8 변동성 돌파 전략과 자동매매

크레온 플러스라는 대신증권 API와 pywinauto, selenium 여러가지 파이썬 라이브러리를 이용해 ETF 종목을 자동으로 거래하는 코드를 작성한다. ETF 정보 스크래핑, 매수 목표가 계산, 이동 평균값 조회, 주식 매수/매도를 모두 코드로 구현하고 작업 스케쥴러에 등록해 특정 시간에 작업을 자동으로 반복해서 실행시키며 변동성 돌파 전략을 구현한다. 역시 앞선 장들과 마찬가지로 금융에 관계된 부분을 제외하면 selenium을 이용하는 웹 스크래핑이나, pywinauto를 이용한 자동화 작업 등은 일반적인 업무에서도 매우 유용한 라이브러리이다.

CHAPTER 9 딥러닝을 이용한 주가 예측

경사 하강법을 포함해 기초적인 딥러닝에 대한 설명을 하고, 텐서플로우의 Keras API로 RNN으로 삼성전자의 다음 날 주가를 예측하는 코드를 작성하는데, 앞선 장들에 비해 설명이 조금 단순하다는 생각이 든다. 아마 저자가 아직 이 부분은 앞선 장들에 비해 공부나 연구를 진행중이지 않나 싶다.

400페이지가 넘는 책이지만 워낙 방대한 내용을 다루기 때문에 하나하나 자세하게 설명한다는 생각이 들지 않는다. 아마 초보자라면 각 장마다 쏟아지는 새로운 내용에 압도당할 지도 모르겠다. 하지만 금융과 프로그래밍 어느 한쪽이라도 경험이 있는 사람이라면 저자가 이 많은 내용을 익히기 위해 얼마나 많은 노력을 했을까 하는 생각이 먼저 들꺼라고 조심스레 장담한다. 또한 앞서 계속 말했듯이 금융에 대한 내용을 제외하고 나면 굉장히 많은 유용한 라이브러리의 사용방법을 실제 코드와 함께 볼 수 있기 때문에 금융이 아니라도 여러가지 업무에 적용하는데 큰 도움이 될 거라 생각한다.

Ref



댓글(0) 먼댓글(0) 좋아요(2)
좋아요
공유하기 북마크하기찜하기 thankstoThanksTo
 
 
 
클라우드 네이티브 - 클라우드 네이티브 애플리케이션을 설계, 개발, 운영하는 핵심 가이드
보리스 숄.트렌트 스완슨.피터 야우쇼베츠 지음, 정원천 옮김 / 한빛미디어 / 2020년 6월
평점 :
장바구니담기


총평

클라우드가 보편화된 시대에 클라우드에 적합한 어플리케이션/아키텍쳐를 이용하기 위한 거의 모든 사항을 담아놓은 듯한 책이다. 모든 사항을 자세하게 설명하는 건 불가능하기 때문에 때로는 소개에 그치는 경우도 있지만, 중요한 사항을 잘 설명하고 있다. 클라우드 네이티브에 필요한 핵심 요소로 마이크로서비스, CI/CD, DevOps, 컨테이너를 들 수 있고 이 책에서 여러 페이지에 걸쳐 설명하고 있는데, 사실 클라우드 네이티브 어플리케이션이 아니더라도 이미 여러가지 문제를 해결하기 위해 사용하던 중요한 기술들이다. 각각의 기술을 더 깊게 살펴봐야 할 때는 당연히 전문 서적을 더 봐야겠지만, 혹시 모르는 기술이 있거나, 전체적인 조망이 필요하다면 이 책은 정말 큰 도움이 된다.

Ch1. 클라우드 네이티브 소개

기본 개념 및 가정 소개. 분산 시스템에서 하지 말아야 할 가정(e.g. 네트워크가 안정적이고 지연이 없다)과 NoSQL을 통해 널리 알려진 CAP 이론, 12요소 앱 https://12factor.net, SLA 등을 설명한다. 다른 건 다 알고 있었지만 12요소 앱은 처음 들었는데, 하나 하나 따로 보면 무심코 지나치더라도 생각해보면 중요한 항목들을 모아서 잘 정리했음을 알 수 있었다. 평소에 생각하던 logging의 중요성을 별도의 항목으로 한게 특히 마음에 들었다.

Ch2. 기본지식

도커와 쿠버네티스로 대표되는 컨테이너 기술로 시작한다. 특성상 컨테이너가 기본적으로 필요한 사항이기도 하지만 의도적으로 기본지식의 첫 번째로 배치하지 않았을까 생각이 들었다. 도커와 쿠버네티스의 기본적인 용어나 기초적인 이해를 위한 설명을 한다.

서버리스 컴퓨팅과 함수 항목은 하나로 묶어서 이야기해도 될 거 같다. 서버리스 컴퓨팅에 대한 설명은 한 페이지도 되지 않아서 조금 부족한 느낌이 있지만, 함수 부분에서 FaaS (Function as a Service)를 이야기하며 그 부족함을 약간이나마 채워준다.

마지막으로는 마이크로서비스의 장단점을 논한다. 이미 흐름은 MSA가 최선인 듯한 분위기로 넘어갔으나, 사실 하나의 서비스 파악은 용이해도 전체 서비스 파악은 오히려 어려워질 수도 있다는 점(네트워크로 호출하면서 오히려 전체 시스템의 흐름이 복잡해질 수 있음, 로깅/디버깅/테스트/모니터링의 어려움 등), 을 감안하면 적절한 수준에서 서비스를 나눠야 하는데, 분야를 막론하고 “적절함"은 항상 정해진 기준이 없고 상황에 따라 가변적이라는 점에서 쉽게 결정할 수 없는 문제이다.

Ch3. 클라우드 네이티브 어플리케이션 설계

기초에 해당하는 키워드는 다음과 같다. 자동화 모니터링 문서화 점진적인 변화 장애대비 보안 신뢰성 가용성 확장성 비용. 경험상 자동화와 모니터링은 비교적 잘 하기 쉬운 부분이고, 문서화와 점진적인 변화는 대부분의 기업에서 제대로 되지 않을 가능성이 높고, 나머지 항목은 비용에 영향을 받는 경우가 많다.

그 다음으로 클라우드 네이티브 어플리케이션과 전통적인 아키텍쳐의 차이점을 보여주는 데 가장 큰 차이점은 상태가 어플리케이션 외부에 존재한다는 점이며, 이로 인해 마치 함수형 프로그래밍과 같이 확장이 용이하지만 데이터의 흐름은 이해하기 어려운 문제가 생긴다.

API 문서화는 개인적으로 가장 중요한 부분 중 하나라고 생각하는데, swagger를 이용해 API 문서화를 자동화하는게 보편화되었지만, 여전히 이런 자동 생성된 API 문서는 실제 사용할 때 종종 어떻게 동작하는지 이해하기 어려운 경우가 있어서 이것만으로 만족하면 안된다고 생각한다.

이후로는 서비스 커뮤니케이션 — 프로토콜, 멱등성, pub/sub, 동기/비동기, 게이트웨이, 서비스 메시 등 시스템 디자인에 필요한 여러가지 항목이 나오고 마지막으로 아키텍쳐 예제를 통해 몇 가지 간단한 아키텍쳐 다이어그램과 기본적인 사항을 알려준다.

Ch4. 데이터 다루기

데이터 스토리지 시스템의 종류에 대해 설명하는 걸로 시작한다. 저장 유형에 따른 분류(오브젝트, 파일, 분산파일시스템 등)와 키밸류, 문서, 관계형, 그래프, 컬럼, 시계열 뿐만 아니라, 스트림/큐, 블록체인까지 같이 이야기한다. 이렇게 다양한 데이터 시스템을 선택하는 기준을 기능/비기능 요구 사항에 따라 20가지 넘게 제시하는데, 개인적으로는 언제나 시작은 99% 관계형 DB로 하고 서비스 성숙도 및 사용자 증가에 따라 필요시 다른 형태로 바꾸는 게 맞다고 본다.

클라우드를 설명하는 책이기 때문에 데이터도 분산 저장하게 되는데, 이 때 가장 어려운 문제는 일관성과 무결성을 제공하는 일이다. 로그나 트랜잭션을 수행해 이런 문제를 해결할 수 있다. 데이터를 수집하면 이걸 분석해야 서비스 향상을 위한 자료로 사용할 수 있는데 이를 위해 ETL 및 데이터 레이크도 사용할 수 있다. 어플리케이션 확장을 위해 데이터 복제를 해야 하므로 데이터 샤딩으로 부하를 분산하기도 하고, 응답속도 향상을 위해 캐싱이나 CDN을 이용할 수도 있다.

Ch5. 데브옵스

인프라의 발전이나, 클라우드 사용이 증가하면서 많은 부분이 자동화되었지만 여전히 설정이나 운영 측면에서 사람의 손이 많이 간다. 그래서 기술 서적이지만 사람, 협업, 공유의 중요성을 강조하면서 이번 장을 시작한다.

두번째는 테스팅인데, 아마 여기 나오는 모든 테스팅 종류를 실천은 고사하고 모두 아는 사람도 드물지 않을까 하는 생각이 들었다. 유닛, 서비스, UI, 젭슨, 성능, 부하, 보안, 침투, A/B, 인수, 이용성, 설정, 스모크, 통합, 카오스, 퍼지, 카나리 테스트.

이외에도 개발 도구와 환경, CI/CD, 모니터링, 설정 관리 등 서비스 운영에 필요한 거의 모든 부분을 설명한다.

Ch6. 모범사례

기존 모놀리스 아키텍쳐를 이전할 때 고려할 점, 장애와 보안에 대해 생각할 점, 데이터 관리와 성능 및 확장성을 위해 필요한 점, 서버리스 아키텍쳐에서 알아둘 점, 운영, 로깅, 모니터링, 알림, 서비스 커뮤니케이션(서비스나 클라이언트, DB와의 통신 등), 컨테이너까지 각 항목 별로 점검하고 참고할만한 사항을 알려준다. 이 장은 일종의 팁 모음과도 같단 생각이 들었다.

Ch7. 이식성

본문의 설명처럼 고객의 요구에 따라 특정 클라우드 서비스를 이용하는 경우뿐만 아니라 자사의 인프라가 변경되는 경우에도 어플리케이션을 다시 배포할 필요가 발생한다. 그러므로 이식성은 아키텍쳐만큼이나 중요한 요구 사항이다. 특정 벤더에 종속되는 상황을 피하기 위해서는 당연히 유연하게 이식이 가능해야 하는데, 이런 기능 구현을 위해서는 시간과 비용 및 복잡도가 증가하기 때문에 다른 아키텍쳐 요구 사항을 고려할 때처럼 트레이드 오프를 고려해야 한다.

어플리케이션 이식성과 마찬가지로, 아니, 더 중요한 정도로 데이터 이식성도 고려해야 하는데, 데이터가 클수록 이전도 어렵기 때문에 아마존의 경우 이미 몇 년 전에 스노우볼이라는 물리 디스크를 통한 데이터 이전을 지원하는 서비스를 발표하기도 했다.

이식성에서 가장 중요한 건 표준화된 인터페이스를 사용하는 부분인데, 이런 표준화된 인터페이스가 존재하면 훨씬 용이하게 이식을 할 수 있겠지만 실제로는 모든 상황을 만족하는 경우는 존재하지 않기때문에, 특정 벤더에 종속된 부분은 직접 구현해야만 한다. 이런 이식성 관련 도구들 중 인프라 관리를 추상화하기 위해 하시코프의 테라폼을 이용할 수 있는데, 대부분은 동일하지만 결국 특정 벤더에 관련된 부분이 없을 수는 없다. 스토리지 추상화를 위해 MinIO를 이용해 AWS, Azure, Google Cloud 및 로컬 파일시스템을 이용할 수 있다(고 한다. 이건 처음 들어봄).

여기서 다시 쿠버네티스가 나오는데, 클라우드 공급자 인프라를 추상화하기 위해 사용이 가능하다. 쿠버네티스가 사실상의 표준이 되면서 거의 모든 클라우드에서 관리형 쿠버네티스 서비스를 제공하기 때문에 가장 효율적이면서 동시에 거의 유일한 인프라 추상화 방법이다.


댓글(0) 먼댓글(0) 좋아요(0)
좋아요
공유하기 북마크하기찜하기 thankstoThanksTo
 
 
 
Head First Go - 명확한 예제로 효율적인 학습법을 제시하는 Go 입문서 Head First 시리즈
제이 맥가브렌 지음, 권민재 옮김 / 한빛미디어 / 2020년 3월
평점 :
장바구니담기


예전에 Go에 관심을 갖고 잠시 해봤던 적이 있었지만 곧 그만뒀다. 이유가 약간 어이없지만, 내가 보기엔 코드가 못생겨서였다(특히 함수의 시작이 대문자인게 맘에 안 들었음). 계속 Python을 사용했고, 몇 년 사이 Python의 위상은 예전과 비교할 수 없을만큼 높아졌고 tiobe에서 상위권으로 진입했다. Go는 그에 비하면 아직도 마이너한 언어이지만 Docker와 Kubernetes를 필두로 한 Go로 작성한 프로그램들이 점점 입지를 다지면서(http://www.ciokorea.com/slideshow/22991) 역시 급성장하고 있다.

과거를 돌이켜보면 원래 C로 사회 생활을 시작했기에 처음에 Python을 봤을 때는 indent로 block을 구분하는 Python이 굉장히 이상해보였던 기억이 난다. 마찬가지로 나에겐 Go의 못생긴 syntax도 혹시 몇 년 후에는 오히려 괜찮아보이지 않을까? 하는 생각으로 이 책을 읽기 시작했다.

1장에도 나오는데 https://play.golang.org/에서 간단한 건 바로 실행할 수 있지만, 그냥 GoLand를 설치해서 따라해보기로 했다. mac에서는 brew install go 로 설치(/usr/local/Cellar/go/1.14.2_1)할 수 있고, GoLand를 사용하는 경우 자체적으로 설치(~/sdk/go1.14.2)할 수도 있다. 1장을 시작으로 2장의 조건, 반복문까지는 전형적인 프로그래밍 초보자용 책의 내용으로 Go의 문법을 다루며 아마 대부분의 사람들이 문제 없이 따라할만 하다.

아마 최초의 장벽은 3장 함수에 포함된 포인터일 거고(예전에는 C가 대부분 프로그래밍 기초 수업에서 사용하는 언어였고 포인터 부분부터 좌절을 맛보기 시작한다), 일단 여기를 잘 넘어가면 4장 패키지, 5장 배열, 6장 슬라이스, 7장 맵, 8장 구조체, 9장 사용자 정의 타입까지는 다시 큰 어려움 없이 배울 수 있다.

10장 캡슐화와 임베딩, 11장 인터페이스에 가면 여기부터는 언어 문법뿐만 아니라 프로그래밍 패러다임에 관계된 부분을 차차 알아야 하기 때문에 두 번째 장벽으로 볼 수 있다. 이 부분은 나에게도 신선하게 다가왔는데, class는 없고 struct가 있는 건 알고 있었지만, interface가 있는 건 몰랐고(duck typing), 또 function과 method의 자체적인 구분을 가지고 있는 부분도 새로웠다(go에 대해 아무 것도 몰랐을 때 어떻게 이런 형태를 구현하지? 했던 의문이 9~11장을 읽으면서 해소).

아마 마지막 관문은 13장 고루틴과 채널일텐데, 내용 자체는 따라가기 어렵지 않지만 멀티태스킹이나 동시성/병렬성에 대한 부분이 초보자에게는 어려울 수 있다. 12장 실패 복구하기나 14장 자동 테스트는 go가 비교적 최신 언어라는 점을 보여주는 편리한 부분이고, 15장 웹 앱, 16장 HTML 템플릿은 책을 정리하면서 종합적으로 보여준다.

go에 대한 인상

system programming을 할 수 있도록 목표를 잡았다는 점은 알고 있었는데 그 때문인지 한 마디로 하면 “advanced C”라고 하고 싶다. 포인터나 클래스 없이 구조체가 있다는 점도 그렇고, 언어의 여러가지 모습이 C를 하던 시절을 생각나게 한다.

그런데 책을 읽으면서 “advanced”된 여러가지 요소가 Go에 대한 흥미를 불러일으켰는데, 가장 큰 부분은 duck typing을 통해 클래스를 안 쓰고 구조체를 통해 OOP를 구현하고 있다는 부분이었다. 개인적으로는 OOP보다 절차식 프로그래밍이 훨씬 직관적이라 생각하기도 하고, OOP = class라고 잘못 생각하는 사람들도 있지만, 사실 클래스는 OOP의 필수 요소가 아니란 점에서 go와 같은 언어 설계가 맘에 들었고, 배우고 싶단 생각이 들었다.

이외에도 여러가지 도구들 (go run, go fmt, go install, go doc 등)도 최근의 언어들은 많이 지원하는 부분이지만, 편리한 도구가 늘어나는 건 당연히 좋은 일이기 때문에 역시 맘에 들었다.

처음 go를 봤을 때 가장 싫어했던 부분인 대문자로 함수/메소드가 시작하는 부분도 대문자/소문자로 외부 노출 여부를 결정한다는 점에서 간단하면서 괜찮다는 쪽으로 생각이 바뀌었다.

Head First Go에 대한 인상

이번에 책을 보면서 예전에는 head first 시리즈가 내용이 좋긴 하지만 조금 스타일이 맞지 않는다고 생각해서 거의 보질 않았는데 오랜만에 이번 책을 보면서 처음 배우는 사람들에게는 확실히 일반적인 프로그래밍 책보다 이런 스타일이 훨씬 쉽고 친숙하게 느껴지겠다는 생각이 들었고, 앞으로 다른 언어에 대한 책도 head first 시리즈를 살펴봐야겠단 생각을 했다.

무엇보다도 go에 대한 나의 예전 생각을 이번에 바꿨다는 점에서 개인적으로는 굉장히 오래 기억에 남을만한 책이 될 거 같단 생각이 든다.

Etc

  1. 약간 의외였지만, 이 벤치마크 글에 따르면 Go를 performance 때문에 선택할 이유는 없다. https://www.quora.com/Will-the-emergence-of-Golang-threat-the-popularity-of-C-Java
  2. 책이 아니라 리디북스 프로그램 관련 문제가 있다. 책의 판형이 조금 달라서 그런지 모르겠지만 맥북 모니터에서는 오른쪽 페이지들이 약간 잘려서 보인다. 리디북스 앱이 스크린캡쳐를 막아놔서 스크린샷 첨부를 하지는 못했지만 외부모니터에서는(가로 1920) 제대로 보이고, 맥북 모니터에서는 그렇지 않았다.



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