이재환의 자바 프로그래밍 입문 - 설치 없이 익히는 《선수 수업》부터 딱 필요한 만큼 핵심 문법과 미니 프로젝트까지 Must Have
이재환 지음 / 골든래빗(주) / 2021년 8월
평점 :
장바구니담기


골든래빗 출판사로부터 책을 제공받아 작성했습니다.

- 첫인상
비록 현재는 개발자가 아닌 인프라 엔지니어의 길을 걷고 있지만, IT 업계로의 첫발을 디딜 당시 가장 먼저 도전했던 언어가 바로 자바였다. 낯선 개념은 둘째치고 멋모르고 등록했던 부트캠프에서 자존감과 멘탈이 와장창 박살 날 정도로 고생을 해서인지 코딩에 울렁증이 생겨버린 원인이 되어버린 언어이기도 하다.

그러다 우연한 기회로 이렇게 자바를 다시 마주할 날이 오다니 감회가 새롭다. 일단 가볍게 책을 훑어보며 느낀 첫인상은 정말 친절하다는 것. 특히 웹 브라우저만 있으면 되는 <선수 수업>부터 왕기초 입문자들을 배려하기 위해 많은 노력했다는 점을 엿볼 수 있다. (설치 과정에서도 많은 낙오자가 발생한다는 사실을 귀신같이 알고 있는 저자)

"반복해서 사용하면서 익숙해지고 흥미가 생기는 게 먼저입니다. 일단 사용해보면서 코딩에 친숙해지고 몇 가지라도 용어를 익힌다면 목표 달성입니다."

세상 스윗하다. 여러모로 고통 받았던 n년 전 과거에도 이런 책이 존재했다면 나도 그리 쉽게 개발자로의 진로를 포기하지 않았을수도 있었을텐데(..?) Anyway, 아래는 자바 울렁증을 극복하기 위해 천천히 따라하며 새롭게 익힌 내용을 요약한 내용 일부이다.

-요약
<별도록 선수수업>
다른 자바 프로그래밍 책과 두드러지는 차별점은 선수 수업 부분이다. 처음 자바에 입문을 했을 때 환경설정과 환경 변수라는 단어부터 머릿속이 아파지는 느낌이 들었는데, 이러한 설정들은 프로그래밍을 시작하는 단계에서는 절대 이해를 할 수 없었기 때문에 무작정 따라 하기만 했던 기억이 난다. 하지만 신기한 것은 이러한 설정 과정은 프로그램을 몇 번 돌려보면 금방 이해하기가 쉬워진다.

그래서 선수 수업 파트를 보며, 환경설정 없이 먼저 프로그램이 돌아가는 과정을 보고, 모든 프로그래밍의 작은 과정 하나하나가 얼마나 중요한지를 먼저 맛보기로 보여줌으로써 처음 입문하는 사람들에게 첫 도약의 부담감을 줄여주는 것 같았다.

리플릿이라는 플랫폼도 가입하기도 쉬우며, 나중에 큰 프로젝트를 진행하면서도 자잘한 작은 테스트 코드 용도로도 사용하기 좋았다. 코드 작성을 진행하는 단계에서도 세세한 print/println에 대한 차이도 명확하게 나와있었으며 중간중간 도움을 주는 명언들도 있었기에 자신감 또한 북돋아 주는 과정이었다. 선수 수업의 책답게 예시 코드에 중략이 없어서 중복되는 코드들을 반복하며 프로그래밍을 선수 수업하기에 적절해 보였다.

<0. 환경설정>
환경설정 챕터를 보았을 때, 정말 기초부터 알려주는 친절함에 가슴이 뭉클해졌다. 사용자 변수와 시스템 변수를 설명해 주는 책이라니! 자바뿐만 아니라 컴퓨터의 기본지식을 알려줌으로써 책을 읽는 입문자는 자신이 배우려는 분야에 자신도 모르게 지식을 넓혀가고 있는 것이다. 그리고 이런 지식들은 앞으로의 프로그래밍에 정말 도움이 될 것이다.

<1. 자바 기초 프로그래밍>
01. hello java world~
전기신호부터 시작하여 이진법까지의 핵심적인 프로그래밍 언어에 대한 지식을 재미있게 알려주며 왜 우리가 코드를 작성하는지에 대한 기본을 잡아준다.

앞서 말한 이진법을 통하여, 바이트에 대한 간결하지만 정확한 설명으로 데이터 처리방식을 제시하고있으며, 이에 이어 왜 자료형이 존재하는지(데이터공간에 대한 자료구조의 기본)에 대해 알기 쉽게 알려주고 있다.

전공기본책이 아니면 알수없지만 프로그래밍을 배워가며 전반적으로 나온는 ‘인코딩’ ‘디코딩’ 같은 단어에 대한 설명들이 빠지지않고 주석으로 나오고 있다. 다양한 자료형을 세세하게 알려주며, ‘형’에 대한 기본 베이스를 굳게 잡아줌으로써 ‘형’의 변환에 대한 연결이 자연스러워진다.

<04. 연산자~>
다양한 연산자의 기호를 다양한 예시를 통해 설명해주고 있다. 명제같은 다양한 비유를 통해 좀더 다가가기 쉬운 설명을 해주고있다.

단단한 기초지식을 생성함과 동시에 중간중간에는 복합 대입 연산자라는 물음표도 던져주면서, 기초를 더 단단하게 다지도록 도와주는 느낌을 받았다. 또한 기초 프로그래밍 과정에서 겪을 수 있는 논리연산자의 주의점을 알려줌으로써 초보자들의 마음을 이해해 주는 친절함이 돋보였다. 콘솔 설명 부분에서는 출력뿐만이 아닌 스캐너 부분에 대한 설명을 계속해서 해주면서 후에 나올 단계에 좀 더 대비하는 것 같았다.

<06. 제어문~>
제어문의 올바른 사용법과, 가장 많이 발생하는 0은 나눌 수 없다는 오류의 처리까지 포괄하는 지식을 알려주며, 단순한 제어가 아닌 실제로 프로그래밍을 제어하는 방법을 알려주는 단계였다.

예시코드에는 다양한 기호를 통해 상세한 설명이 나와있고, 조금이라도 복잡한 부분은 다양한 영역 비유를 통해 이해를 돕고있다.

변수의 다양한 범위를 설명해 주며 ‘주석’을 적극 활용하여 실제 오류코드가 아닌 주석을 풀면 오류가 나는 프로그래밍의 순서를 설명해 주는 것이 인상적이었다.

<총평>
프로그래밍의 'ㅍ'자도 모르는 입문자들을 위한 맞춤 눈높이 교재이다. 단순한 문법 학습으로 끝이 아닌 배운 내용을 활용해 직접 프로그램을 만들어볼 수 있는 구성으로 엮여있어 성취감을 얻을 수 있다.

댓글(0) 먼댓글(0) 좋아요(0)
좋아요
북마크하기찜하기 thankstoThanksTo
 
 
 
클라우드 네이티브를 위한 데이터 센터 네트워크 구축 - 데이터 센터 네트워킹을 위한 아키텍처, 프로토콜, 도구
디네시 G. 더트 지음, 정기훈 옮김 / 한빛미디어 / 2021년 8월
평점 :
장바구니담기


책의 구성

본 도서를 통해 다음 질문에 대한 답을 얻을 수 있다.

CHAPTER 1. 새로운 네트워크 아키텍처의 동기

  • 새로운 애플리케이션의 특징
  • 액세스-애그리게이션-코어 네트워크의 개념
  • 액세스-애그리게이션-코어 네트워크에서 애프리케이션이 실패하는 경우

CHAPTER 2. 클로스: 새로운 세상을 위한 네트워크 토폴로지

  • 클로스 토폴로지의 개념과 액세스-애그-코어 토폴로지와의 차이점
  • 클로스 토폴로지의 특징
  • 데이터센터 네트워킹의 클로스 토폴로지의 결과

CHAPTER 3. 네트워크 분리

  • 네트워크 분리의 개념
  • 네트워크 분리가 중요한 이유
  • 네트워크 분리를 위한 주요 활성 기술
  • 네트워크 분리를 위한 하드웨어 시장의 핵심 주체
  • 분리된 스위치와 기존 스위치의 차이점

CHAPTER 4. 네트워크 운영체제 선택

  • 클라우드 네이티브 NOS의 기본적인 요구사항
  • 오픈플로와 소프트웨어 정의 네트워킹의 개념과 어떤 상황에서 사용할 수 있고 없는지에 대한 내용
  • 분리된 스위치에서 선택 가능한 NOS
  • 클라우드 네이티브 NOS의 요구사항과 여러 모델들과의 비교

CHAPTER 5. 라우팅 프로토콜 선택

  • 라우팅의 동작 방식
  • 라우팅 프로토콜의 종류
  • 클로스 토폴로지에 맞는 라우팅 프로토콜
  • 언넘버드 인터페이스의 개념과 이것이 필요한 이유
  • 적합한 라우팅 프로토콜 선정 방법

CHAPTER 6. 네트워크 가상화

  • 네트워크 가상화란 무엇인가
  • 네트워크 가상화의 용도
  • 네트워크 가상화 외 다른 선택지
  • 네트워크 가상화에서의 제어 평면 선택
  • 브리징과 라우팅에서의 VXLAN의 동작 방식

CHAPTER 7. 컨테이너 네트워킹

  • 리눅스에서 사용 가능한 컨테이너 네트워크 구성
  • 다양한 선택의 제약과 성능 특성

CHAPTER 8. 멀티캐스트 라우팅

  • 멀티캐스트 라우팅의 개념 및 유니캐스트 라우팅과의 차이점
  • 멀티캐스트를 사용하는 이유
  • 모던 데이터 센터의 멀티캐스트 라우팅이 어려운 이유
  • 멀티캐스트의 중앙 라우팅 프로토콜인 프로토콜 독립 멀티캐스트 산재모드(protocol-independent multicast sparse mode)의 동작방식
  • 클로스 토폴로지에 멀티캐스트 라우팅을 배치하기 위한 필요 조건

CHAPTER 9. 데이터 센터 에지에서의 삶

  • 클로스 토폴로지가 외부 네트워크와 연결되기 위한 방법
  • 에지에 라우팅 프로토콜을 배치하는 모범 사례
  • 기업이 하이브리드 클라우드 내의 연결성을 제어하는 방법

CHAPTER 10. 네트워크 자동화

  • 네트워크 자동화에 대한 개념과 필요한 이유
  • 네트워크 자동화를 배우기 위해 프로그래밍 능력이 필요한지에 대한 내용
  • 네트워크 자동화가 어려운 이유
  • 네트워크 자동화의 이점들을 점진적으로 탐구할 수 있는 방법
  • 적합한 네트워크 자동화 도구 선택
  • 자동화된 절차의 올바른 동작을 보장할 수 있는 방법

CHAPTER 11. 네트워크 관측성

  • 관측성의 개념과 신경 써야 하는 이유
  • 네트워크 관측성에서의 도전 과제

CHAPTER 12. 네트워크 디자인 재고

  • 클라우드 네이티브 데이터 센터의 기초가 되는 디자인 원칙

CHAPTER 13. OSPF 배치

  • 데이터 센터에서 OSPF가 유용한 경우
  • OSPF 구성을 위한 주요 디자인 원칙
  • OSPFv2와 v3의 차이점과 사용 방법
  • 현재 라우팅 스택에서 OSPF 구성 방법
    - 컨테이너를 위한 라우팅을 제공하기 위한 OSPF 구성 방법
  • OSPF를 이용한 라우터 소프트웨어 업그레이드 방법

CHAPTER 14. 데이터 센터에서의 BGP

  • ASN, 커뮤니티, 속성, 최적 경로와 같은 BGP 용어의 의미
  • 데이터 센터에서 eBGP 또는 iBGP를 사용해야 하는가
  • 데이터 센터에서 BGP를 사용할 때 ASN 넘버링 스킴이란
  • 데이터 센터에서 사용하기 위한 BGP 타이머 수정 방법

CHAPTER 15. BGP 배치

  • BGP의 핵심 구성 개념
  • 클로스 네트워크에서 BGP를 구성하기 위한 방법
  • 언넘버드 BGP 동작 방식
  • 큐브 라우터와 같은 호스트에서 동작하는 BGP 스피커에서의 BGP 피어 구성 방식
  • 예약된 유지 보수에 맞춰서 네트워크가 정상적으로 종료하기 위한 BGP 구성 방식

CHAPTER 16. 데이터 센터에서의 EVPN

  • EVPN은 무엇이며 왜 널리 사용되는가?
  • EVPN을 배치하기 위한 제어 평면 모델
  • EVPN 지원을 위해 BGP가 구축하는 것
  • EVPN 브리징과 전통적인 802.1Q 브리징의 차이점
  • 이중 연결 호스트 지원 방법

CHAPTER 17. 네트워크 가상화 배치

  • EVPN 브리징과 라우팅을 네트워크에 구성하는 방법
  • 네트워크 가상화를 위한 주요 라우팅 프로토콜 구성 방식

CHAPTER 18. 네트워크 구성 검증

  • 네트워크 케이블링 검증
  • 인터페이스 구성 검증
  • 라우팅 구성 검증
  • 네트워크 가상화 검증
  • 애플리케이션 연결성 검증

느낀점

  • 분명 클라우드 네트워킹 전문가가 '쉽게 알려주는' 실무 기법이라고 쓰여있으나, 네트워크 지식이 부족하거나 나같은(아직 갈 길이 먼 주니어 인프라 엔지니어) 사람에게는 딥하게 느껴지는 부분들이 많았음.
  • 하나하나 이해하며 읽어 나가기엔 속도가 너무 나지 않았기에, 당장 관심이 가는 부분(네트워크 가상화, 컨테이너 네트워크, 네트워크 자동화 등)만 발췌하여 읽은 소감으로는 기존에 어렴풋이 알고 있던 개념을 강화시킬 수 있는 새로운 인사이트를 얻을 수 있었음. 예를 들어 단일 호스트 컨테이너 통신에 브리지를 사용하는 대신 Macvlan을 사용할 수 있다든지.
  • 지금 내 수준으로는 설명이 친절하지 않게 느껴지므로(...) 내공이 더 쌓인 뒤에 다시 봐야 할 책.

대상 독자

  • 네트워크 아키텍트, 네트워크 운영자, 네트워크 애플리케이션 개발자.

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


댓글(0) 먼댓글(0) 좋아요(1)
좋아요
북마크하기찜하기 thankstoThanksTo
 
 
 
파이썬으로 웹 크롤러 만들기 - 초간단 나만의 웹 크롤러로 원하는 데이터를 가져오는 방법, 2판
라이언 미첼 지음, 한선용 옮김 / 한빛미디어 / 2019년 3월
평점 :
장바구니담기


책의 구성


Part 1. 스크레이퍼 제작

  • 웹 스크레이핑의 기본에 대해 다룬다. 파이썬으로 웹 서버에 정보를 요청하는 법, 서버 응답을 처리하는 법, 웹사이트와 자동적으로 통신하는 법이 주요 내용이다.

Chapter 1. 첫 번째 웹 스크레이퍼

  • 웹 브라우저의 도움 없이 데이터 구조를 파악하고 해석하는 방법을 배울 수 있다.
  • 웹 브라우저가 프로세서에 명령을 내려 데이터를 애플리케이션에 보내고 처리하는 것을 파이썬에서는 단 세줄의 코드로 똑같이 동작하게 할 수 있다.
    • 파이썬 표준 라이브러리인 urllib를 사용하면 웹을 통해 데이터를 요청하거나 쿠키를 처리하거나 심지어 헤더나 유저 에이전트 같은 메타데이터를 바꿀 수도 있다.
    • urlopen은 네트워크를 통해 원격의 객체를 읽는다.
    • BeautifulSoup 라이브러리는 잘못된 HTML을 수정하여 쉽게 탐색할 수 있는 XML 형식의 파이썬 객체로 변환한다.
  • 스크레이퍼를 만들 땐 코드의 전반적인 패턴에 대해 생각해야 예외도 처리하고 읽기도 쉽게 만들 수 있다.

Chapter 2. 고급 HTML 분석

  • 복잡한 웹 페이지에서 원하지 않는 콘텐츠를 깎아내서 필요한 정보를 얻는 방법을 학습할 수 있다.
  • BeautifulSoup로 속성을 통해 태그를 검색하는 법, 태그 목록을 다루는 법, 트리 내비게이션을 분석하는 법을 배운다.
  • BeautifulSoup와 함께 쓸 수 있는 정규 표현식을 학습할 수 있다. 복잡해보이기만 했던 정규 표현식을 하나씩 쪼개 보면서 조금 더 명확하게 이해할 수 있다.

Chapter 3. 크롤링 시작하기

  • 웹 크롤러의 핵심은 재귀이다. 즉, URL에서 페이지를 가져오고, 그 페이지를 검사해 다른 URL을 찾고, 다시 그 페이지를 가져오는 작업을 하는 것이다.
  • 단일 도메인 내에서의 이동부터 인터넷 크롤링까지 할 수 있는 기법들을 소개한다.

Chapter 4. 웹 크롤링 모델

  • 확장성이 뛰어난 크롤러를 만들기 위한 패턴을 익힐 수 있다.
  • 여러 도메인, 또는 여러 소스에서 유사한 데이터를 수집할 때는 항상 일반화를 시도해야 한다는 점을 유념하자.
  • 또한 스크레이퍼를 만들 때는 추후 더 많은 데이터 소스가 추가될 것이라고 가정하고, 새 소스를 추가하는 데 필요한 프로그래밍 노력을 최소화하는 방향으로 설계해야 한다.

Chapter 5. 스크레이피

  • 초판 출판 당시에는 파이썬3를 지원하지 않아 책에 싣지 못한 프레임워크인 스크레이피가 2판에 추가되었다.
  • 스크레이피를 설치하고 간단한 스크레이퍼를 작성하여 동작 원리를 익힐 수 있다.

Chapter 6. 데이터 저장

  • 웹 스크레이퍼를 유용하게 활용하기 위한 데이터 저장 및 관리 방법에 대해 알아본다.
  • 모든 애플리케이션에서의 데이터 관리 방법은 총 세가지면 충분하다. 데이터베이스, 파일 스트림, 알림 이메일 보내기.

Part 2. 고급 스크레이핑

  • 원형 그대로의 데이터를 분석해서 그 뒤에 숨은 이야기, 웹사이트에서 종종 자바스크립트 계층이나 로그인 폼, 기타 스크랩을 방해하는 것들 뒤에 숨겨진 내용들을 엿볼 수 있다.

Chapter 7. 문서 읽기

  • 문서를 다루는 법과 텍스트 인코딩에 대해 학습할 수 있다.
  • 특히 자주 마주치는 파일 타입인 텍스트, CSV, PDF, 워드 문서에 대해 다룬다.

Chapter 8. 지저분한 데이터 정리하기

  • 지금까지 익힌 도구와 테크닉 코드 작성 방법을 바꿔서 비정형 데이터 소스에서 문제가 발생하지 않게 막거나, 일단 데이터베이스에 들어온 데이터를 정리하는 방법을 배울 수 있다.

Chapter 9. 자연어 읽고 쓰기

  • 텍스트 분석의 배경에 있는 개념을 이해하면 머신러닝 전반에 걸쳐 큰 도움이 되며, 현실 세계의 문제를 개연성과 알고리즘의 관점에서 모델링하는 더 범용적인 능력을 갖게 된다.
  • 텍스트 본문에 있는 단어를 통계적으로 분석해보기도 하고, NLTK라는 라이브러리 모음을 사용하여 간단한 실습도 진행할 수 있다.

Chapter 10. 폼과 로그인 뚫기

  • POST 메서드에 집중하여 로그인을 해야 얻을 수 있는 정보에 접근하는 방법을 배울 수 있다.

Chapter 11. 자바스크립트 스크레이핑

  • 현재 웹에서 가장 널리 쓰이고 지원이 잘되는 클라이언트 스크립트 언어인 자바스크립트에 대해 얕게나마 이해할 수 있다.
  • 대개 웹사이트의 통계나 추적, 사이트의 작은 부분을 제어, 드롭다운 메뉴를 만드는 용도로 쓰이므로 스크레이프 방법에 영향을 끼치는 경우는 많지 않다. 영향을 끼친다하더라도 셀레니움을 이용하면 이를 거의 무력화할 수 있다.

Chapter 12. API를 통한 크롤링

  • 셀레니움을 쓰지 않고 자바스크립트를 완전히 돌파해서 데이터 소스에 직접 접근하는 방법을 배울 수 있다.
  • 널리 쓰이는 최신 API로 웹의 데이터에 접근하는 방법, 그런 API를 통해 더 빠르고 강력한 웹 스크레이퍼를 만드는 방법을 배운다.

Chapter 13. 이미지 처리와 텍스트 인식

  • OCR(광학 문자 인식)기능이 있는 라이브러리를 이해하고 설치하고, 예제를 통해 간단한 실습까지 진행할 수 있다.

Chapter 14. 스크레이핑 함정 피하기

  • 폼을 전송하고, 지저분한 데이터를 추출해서 정리하고, 자바스크립트를 실행하는 등 웹사이트에서 봇으로 하기 어려운 일들을 해결하는 방법을 알아본다.
  • 내가 만든 봇이 스크레이퍼처럼 보이지 않고(?) 사람처럼 인식되도록 하는데 필요한 정보가 담겨있다.

Chapter 15. 스크레이퍼로 웹사이트 테스트하기

  • 파이썬 기반 웹 스크레이퍼로 웹사이트를 테스트하는 기본적인 방법을 익힌다.

Chapter 16. 병렬 웹 크롤링

  • 컴퓨터 과학의 다른 분야와는 달리, 웹 크롤링은 단순히 사이클을 더 할당한다고 개선되지는 않는다. 하지만 병렬 웹 크롤링이나 병렬 스레드/프로세스 실행이 더 나은 경우도 있는데 이러한 상황에서 사용할 수 있는 기법들을 알아본다.

Chapter 17. 원격 스크레이핑

  • 로컬 컴퓨터라는 제한된 환경을 벗어나 원격으로 스크레이핑을 작동시킬 수 있는 방법을 배울 수 있다.

Chapter 18. 웹 스크레이핑의 합법성과 윤리성

  • 웹 스크레이핑과 관련된 미국 법률에 대해 알아보고, 웹 스크레이핑 상황의 합법성과 윤리에 대해 이해할 수 있다.

느낀점

웹 크롤러를 만들기 위한 정보들은 인터넷에 넘쳐나지만, 나 같은 초보자에게 가장 적절한 것은 순도 높은 정보가 정갈히 정리된 책이라고 생각한다. 그런 점에서 우선 높은 점수를 주고 싶고, 실제로 단순하게만 생각했던 크롤링에 대한 나의 시야가 조금 더 확장된 느낌을 받았다.

아직 실습의 모든 내용을 따라 해보진 못했지만, 업무적으로도 개인적으로도 크롤러를 제작하고 싶단 충동을 느낄 때가 많으니(!!) 필요할 때 꺼내 보며 참고하면 많은 도움이 될 것 같다.

추천 독자

  • 파이썬 문법을 이해하고 있는 초중급자. (문법만 갓 뗀 초보자에게는 솔직히 어렵다.)
  • 파이썬을 이용한 웹 크롤러 제작에 관심이 있고, 시행착오를 줄이고 싶은 사람.

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


댓글(0) 먼댓글(0) 좋아요(0)
좋아요
북마크하기찜하기 thankstoThanksTo
 
 
 
NGINX 쿡북 - 112가지 레시피로 배우는 고성능 부하분산, 보안, 서버 배포와 관리
데릭 디용기 지음, 노승헌 옮김 / 한빛미디어 / 2021년 6월
평점 :
구판절판


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

엔진엑스는 대체로 아파치보다 고속으로 동작하고 메모리나 CPU 사용률이 적으며, OS와 하드웨어에 걸리는 부하가 낮아 인기가 높은 웹서버이다.


이 책은 다양한 엔진엑스 설정 레시피를 통해 엔진엑스가 제공하는 다양한 기능을 설정하고 사용하는 방법을 소개한다. 스텝 바이 스텝으로 따라가며 배우는 방식이 아니기에, 사전처럼 곁에 두고 실무에서 특정 이슈가 발생할 때 꺼내보면 큰 도움이 될 책이다.


그동안은 단순 웹서버나 리버스 프록시 서버 용도로만 엔진엑스를 알고 있었다면, 이번 기회를 통해 엔진엑스 애플리케이션 전송 플랫폼의 강력한 기능을 사용하는 방법 등 다양한 설정법이 있다는 것을 알게 되었다.


구체적으로 아래와 같은 문제 상황이 발생할 때의 해결책을 얻을 수 있다.

1. 엔진엑스 기초

  • 엔진엑스 오픈 소스 버전을 데비안이나 우분투 리눅스 배포판에 설치하기
  • 엔진엑스 오픈소스 버전을 레드햇이나 센트OS 리눅스 배포판에 설치하기
  • 엔진엑스 플러스 설치하기
  • 엔진엑스 설치 상태를 점검하고 버전을 확인하기
  • 엔진엑스 주요 디렉터리 구조와 명령어 이해하기
  • 엔진엑스로 정적 콘텐츠 서비스하기
  • 패킷 손실 없이 설정을 리로드하기

2. 고성능 부하분산

  • 부하를 두 대 이상의 HTTP 서버로 분산하기
  • 부하를 두 대 이상의 TCP 서버로 분산하기
  • 부하를 두 대 이상의 UDP 서버로 분산하기
  • 서로 다른 특성을 갖는 작업이나 사양이 다른 서버로 구성된 서버 풀로 인해 라운드 로빈 방식의 부하분산이 적합하지 않은 경우
  • 엔진엑스 플러스 환경에서 사용자가 특정 업스트림 서버를 사용하도록 고정하기
  • 엔진엑스 플러스 환경에서 사용자가 업스트림 애플리케이션으로부터 획득한 쿠키를 이용해 특정 업스트림 서버를 사용하도록 고정하기
  • 엔진엑스 플러스 환경에서 영구 세션을 세부적으로 제어해 업스트림 서버로 전달하기
  • 서버 유지보수가 필요하거나 서버를 종료해야 하는 상황에서 활성 사용자 세션이 남아있는 엔진엑스 서버를 점진적으로 서비스에서 제외하기
  • 업스트림 서버의 상태를 수동적으로 확인하기
  • 엔진엑스 플러스를 통해 업스트림 서버의 상태를 능동적으로 확인하기
  • 운영 환경에서 실사용자 트래픽을 받기 전에 애플리케이션에서 예열이 필요한 상황

3. 트래픽 관리

  • 사용자 반응을 살펴보기 위해 버전이 2개 이상인 파일이나 애플리케이션으로 사용자를 분기하기
  • GeoIP 데이터베이스를 설치하고 엔진엑스의 관련 내장 변수를 활성화해 엔진엑스가 로그, 요청 프록시, 요청 분기 등을 수행할 때 사용자 위치를 확인하도록 하기
  • 비즈니스 요구사항이나 애플리케이션 요건에 따라 특정 국가의 사용자를 차단하기
  • 사용자 요청이 프록시 서버를 경유해 엔진엑스 서버에 전달됐을 때 실제 사용자 IP 확인하기
  • 사용자 IP 주소와 같이 사전에 정의된 키값에 따라 연결 수 제한하기
  • 사용자 IP 주소와 같이 사전에 정의된 키값을 이용해 요청 빈도 제한하기
  • 서비스 리소스의 부하를 막기 위해 사용자당 다운로드 대역폭 제한하기

4. 대규모 확장 가능한 콘텐츠 캐싱

  • 콘텐츠를 캐시하고 캐시를 어디에 저장할지 결정하기
  • 생성중인 캐시에 대한 요청은 업스트림 서버로 프록시하지 않기
  • 콘텐츠를 어떻게 캐시하고 다시 불러올지 제어하기
  • 캐시를 사용하지 않고 우회하기
  • 사용자 환경에 콘텐츠를 캐시해 성능 높이기
  • 캐시된 콘텐츠를 무효화하기
  • 용량이 큰 파일을 작은 조각으로 나눠 저장해 캐시 효율 높이기

5. 프로그래머빌리티와 자동화

  • 동적인 인프라 환경에서 엔진엑스 플러스를 즉시 재설정하기
  • 애플리케이션으로 들어오는 요청을 기반으로 엔진엑스 플러스가 동적으로 트래픽 관리에 대한 의사결정하기
  • 상용 프로그래밍 언어를 이용해 사용자 정의 확장 기능 사용하기
  • 코드를 통한 엔진엑스 설정 관리를 위해 퍼핏을 사용해 엔진엑스를 설치 및 설정하고 기존 퍼핏 설정을 수행하기
  • 코드를 통한 엔진엑스 설정 관리를 위해 셰프를 사용해 엔진엑스 설치 및 설정하고 기존 셰프 설정을 수행하기
  • 코드를 통한 엔진엑스 설정 관리를 위해 앤서블을 이용해 엔진엑스를 설치 및 설정하고 기존 앤서블 설정을 수행하기
  • 코드를 통한 엔진엑스 설정 관리를 위해 솔트스택을 사용해 엔진엑스를 설치 및 설정하고 기존 솔트스택 설정을 수행하기
  • 콘솔을 통해 변경되는 환경 변수 값들이 엔진엑스 설정에 자동으로 반영되게 하기

6. 인증

  • HTTP 기본 인증을 이용해서 애플리케이션과 콘텐츠를 안전하게 보호하기
  • 서드파티 인증 시스템을 통해 사용자 요청 인증하기
  • 사용자 요청을 업스트림 서버로 보내기 전에 JWT 검증하기
  • 엔진엑스 플러스에서 사용할 JSON 웹 키 생성하기
  • 엔진엑스 플러스에서 JSON 웹 토큰 검증하기
  • 엔진엑스 플러스가 자동으로 JSON 웹 키 세트를 요청하고 캐시하도록 하기
  • 오픈아이디 커넥트 신원 확인 서비스를 제공자를 엔진엑스 플러스에 연동하기

7. 보안 제어

  • 클라이언트의 IP 주소를 사용해 접근 제어하기
  • 본래의 서비스 도메인이 아닌 다른 도메인을 통해 리소스를 제공할 때 브라우저가 원활히 접근하도록 크로스 오리진 리소스 공유(CORS) 정책 지정하기
  • 클라이언트와 엔진엑스 서버 간 트래픽 암호화하기
  • 보다 높은 수준의 클라이언트 측 암호화를 수행하도록 설정하기
  • 엔진엑스와 업스트림 서비스 간 트래픽을 암호화하고 컴프라이언스 법규 준수 및 보안 네트워크 밖에 있는 업스트림 서비스와의 연결을 위한 협상 규칙을 정하기
  • 비밀값을 활용해 location 블록을 보호하기
  • 애플리케이션에서 비밀값을 사용해 보안 링크 생성하기
  • 특정 클라이언트에만 적용되는 기간 제한 링크를 사용해 location 블록 보호하기
  • 사용 기간이 만료되면 파기되는 링크 생성하기
  • HTTP로 수신된 요청을 HTTPS로 리다이렉트하기
  • 엔진엑스 앞에 위치한 계층에서 SSL 오프로딩을 수행하는 상황에서 모든 사용자 요청을 HTTPS로 리다이렉트하기
  • 웹 브라우저가 HTTP로 요청을 보내지 않도록 강제하기
  • 폐쇄형 웹 사이트를 위해 여러 계층의 보안 적용하기
  • 엔진엑스 플러스를 사용해 분산 서비스 거부(DDos) 공격 완화하기
  • 엔진엑스 플러스 앱 프로텍터 모듈을 설치하고 설정하기

8. HTTP/2

  • HTTP/2가 제공하는 기능의 이점 활용하기
  • gRPC 메서드 호출을 종결하고, 분석하고, 전달하고 부하를 분산하기
  • 클라이언트에 콘텐츠를 즉시 전송하기

9. 정교한 스트리밍

  • MP4나 FLV 형식으로 된 디지털 미디어 파일을 스트리밍하기
  • H.264/AAC로 인코딩돼 MP4 형식으로 만들어진 파일을 HTTP 라이브 스트리밍으로 스트리밍하기
  • 어도비의 HDS 형식으로 작게 나뉜 미디어 콘텐츠 지원하기
  • 시청 경험을 해치지 않는 선에서 사용자가 미디어 콘텐츠를 내려받는 네트워크 대역폭을 제한하기

10. 클라우드 환경 배포

  • AWS 환경에서 엔진엑스 서버 설정을 자동화해 스스로 프로비저닝하도록 하기
  • 엔진엑스 앞에 로드밸런서를 두지 않고 고가용성을 보장하기 위해 엔진엑스 페일오버 설정을 만들거나 여러 엔진엑스 노드로 트래픽 분산하기
  • 오픈소스 엔진엑스로 구성된 서버를 오토스케일링하고 부하를 쉽고 균등하게 애플리케이션 서버 간에 분산하기
  • AWS 플랫폼에서 엔진엑스 플러스를 사용한 만큼 지불하는 방식으로 쉽게 사용하기(마켓플레이스)
  • 애저 환경에서 빠르게 서버를 생성하거나 오토스케일링을 위한 스케일 세트에서 사용할 미리 설정된 엔진엑스 가상머신 이미지 생성하기
  • 애저 로드 밸런서에서 연결된 엔진엑스 노드를 부하에 맞춰 늘리거나 줄여 고가용성을 확보하고 동적으로 리소스 사용하기
  • 애저 환경에서 라이선스를 사용한 만큼 지불하는 방식으로 엔진엑스 플러스 운영하기(마켓플레이스)
  • 구글 컴퓨터 엔진과 앱 엔진을 사용하는 서비스 리소스로 부하를 분산하고 요청을 프록히사기 위해 엔진엑스 서버를 구글 컴퓨터 엔진으로 배포하기
  • 빠르게 가상 머신을 생성하거나 인스턴스 그룹에 대한 인스턴스 템플릿을 만들기 위해 구글 컴퓨트 이미지를 생성하기
  • 애플리케이션 간 컨텍스트 스위칭을 하거나 커스텀 도메인을 사용하는 HTTPS를 제공하기 위해 구글 앱 엔진을 위한 프록시 생성하기

11. 컨테이너와 마이크로서비스

  • 수신하는 API 요청을 요구사항에 따라 검증, 인증, 조작해 업스트림 서버로 라우팅하기
  • 이미 구성된 DNS의 SRV 레코드를 활용해 엔진엑스 플러스의 업스트림 서버 설정하기
  • 도커 허브에 등록된 엔진엑스 이미지를 이용해 빠르게 엔진엑스 서버 시작하기
  • 도커 이미지를 만들기 위해 엔진엑스 도커 파일을 생성하기
  • 컨테이너 환경에서 엔진엑스 플러스를 실행하기 위해 엔진엑스 플러스 도커 이미지 만들기
  • 여러 환경에서 동일한 컨테이너 이미지를 사용하도록 엔진엑스 설정에서 환경변수 사용하기
  • 애플리케이션을 쿠버네티스 환경으로 배포하면서 인그레스 컨트롤러가 필요한 상황
  • 프로메테우스로 모니터링 되는 환경에 엔진엑스를 배포하고 엔진엑스 통계 확인하기

12. 고가용성 보장을 위한 설정

  • 고가용성을 보장하는 부하분산 솔루션 구축하기
  • 두 대 이상의 엔진엑스 서버로 부하 분산하기
  • 엔진엑스를 AWS 환경에서 운영하고 있지만 엔진엑스 플러스의 고가용성 기능이 아마존의 IP 주소 할당 방식을 지원하지 않는 상황에서 부하분산하기
  • 고가용성을 제공하도록 구성된 엔진엑스 플러스 계층을 운영할 때 각 엔진엑스 플러스 인스턴스가 동일한 설정으로 운영되도록 동기화하기
  • 엔진엑스 플러스로 구성된 고가용성 서버 간에 공유 메모리 영역 동기화하기

13. 고급 활동 모니터링

  • 엔진엑스에 대한 기본 모니터링 활성화
  • 엔진엑스 플러스 서버를 통해 트래픽에 대한 상세 지표 수집하기
  • 엔진엑스 플러스 상태 대시보드가 제공하는 세부 지표를 API로 접근하기

14. 디버깅과 트러블슈팅

  • 접근 로그에 내장 변수 값 추가하기
  • 엔진엑스 서버 문제를 더 잘 확인할 수 있도록 오류 로깅 설정하기
  • 중앙화된 저장소로 로그를 모으기 위해 엔진엑스 로그를 Syslog 리스너로 전달하기
  • 클라이언트 요청을 완전히 이해하기 위해 엔진엑스 로그와 애플리케이션 로그를 연관 지어 확인하기
  • 보유한 오픈트레이싱 서버를 엔진엑스나 엔진엑스 플러스와 연동하기

15. 성능 튜닝

  • 시험의 일관성과 반복성을 확보하기 위해 로드 드라이버를 사용하고 시험을 자동화하기
  • 클라이언트와 맺은 단일 연결을 통해 받을 수 있는 요청 수를 늘리고 유휴 연결이 유지되는 시간을 증가시키기
  • 성능을 끌어올리기 위해 업스트림 서버와 연결된 설정을 유지하기
  • 업스트림 서버의 응답이 임시 파일에 기록되지 않도록 응답을 메모리상에 버퍼링하기
  • 접근 로그를 버퍼링해 시스템의 부하가 높을 때 엔진엑스 워커 프로세스의 작업이 지연되거나 차단되지 않도록 하기
  • 스파이크성 부하가 발생하거나 대량의 트래픽이 유입되는 사이트를 운영하기 위해 운영체제가 더 많은 연결을 맺도록 튜닝하기

16. 엔진엑스 컨트롤러

  • 엔진엑스 컨트롤러 설치 및 운영을 위한 환경 셋업하기
  • 엔진엑스 컨트롤러를 설치하고 에이전트를 이용해 엔진엑스 플러스 인스턴스 연결하기
  • API를 통해 지금까지 배운 엔진엑스 컨트롤러 설정 절차를 자동화하기
  • 엔진엑스 컨트롤러 ADC 사용 시, 서비스 중인 애플리케이션을 위해 엔진엑스의 웹 애플리케이션 방화벽(WAF) 활성화 하기

17. 실전 운영 팁

  • 부피가 큰 설정 파일을 모듈화된 설정으로 논리적인 그룹을 만들어 정리하기
  • 엔진엑스 서버가 예상치 못한 동작을 할 때 조치하기



댓글(0) 먼댓글(0) 좋아요(0)
좋아요
북마크하기찜하기 thankstoThanksTo
 
 
 
인프라 엔지니어의 교과서 : 요구사항 분석과 설계 - 인프라 구축, 설계가 먼저다! 인프라 엔지니어의 교과서
JIEC 기반엔지니어링사업부 인프라설계연구팀 지음, 이레이 옮김, 김성윤 감수 / 길벗 / 2020년 12월
평점 :
장바구니담기


- 특정 솔루션이나 기술에 특화된 내용이 아닌 인프라 엔지니어로써 생각의 기준이 될 수 있는 기초 지식과 관련 업무 전반 흐름을 습득할 수 있다.

- IT 인프라 개념부터 실제 인프라 설계, 운영시 고려해야 하는 부분들까지 차근차근 설명 되어있어 업무에 많은 도움이 될 것 같다. (예를 들면 어떤 경우에 스케일업이 아닌 스케일아웃 방식을 도입하는 것이 좋은지, 데이터 캐시 영역을 늘려도 더 이상 성능이 좋아지지 않는 지점이 존재한다는 것, 실제 운영 업무시 어떤 부분들을 자동화 할 수 있는지 등)

- 개발과 달리 인프라는 단기간 습득하기 어려운 부분들이 많아(이것이 바로 짬에서 나오는 바이브?) 주니어 엔지니어인 내 입장에선 그간 업무 중에 답답하고 아리송한 순간들이 종종 있었는데, 이 책을 통해 많은 의문들이 해결되었다.

- 당신이 예비 또는 주니어 인프라, 클라우드 엔지니어라면 일독 추천.



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