파이썬으로 배우는 게임 개발 실전편 - 장애물 피하기, 닷잇 액션, 맵 에티터, 탄막 슈팅, 3D 카 레이싱, 게임 런처 등을 만들며 배운다! 파이썬으로 배우는 게임 개발
히로세 츠요시 지음, 김연수 옮김 / 제이펍 / 2020년 11월
평점 :
장바구니담기


본 도서는 파이썬을 활용하여 게임을 개발하는 방법을 다루는 도서로, 입문편에 이어 2번째 도서인 실전편이다. 입문편과 유사한 개요 및 장점은 생략했으니 아래 입문편 리뷰를 참고하시기 바란다.

입문편과의 차이점은 다음과 같다.

  • Python을 어느정도 알고 있어야 한다.
  • 입문편을 익혔다면 1, 3 ~ 5장은 건너 뛰어도 된다.
  • 고난이도(?) 수학이 등장하기 시작한다. (특히 삼각함수)
  • 3차원이 세계에 발을 내딛는다.(유사 3D를 구현)
  • 작지만 효과 넘치는 디테일한 Tip들을 얻을 수 있다.
  • 상용 게임에 가까운 완성도를 추구한다.(런쳐 개발 등)

입문편 리뷰에서 다 언급하지 못한 장점도 몇가지 추가할까 한다.

  • Python을 선택한 것은 신의 한수다. 실전과 취미의 적절한 경계선이라 생각한다. 이 책 본문에도 등장하는 슈팅게임 만들기와 비교해 보면, 대학시절 슈팅게임을 만들어보면서 미사일이 느려서 인라인 어셈과 C++을 사용했던 기억을 떠올리면 난이도도, 코드량도 10배는 향상된 느낌이다.

  • 구성도 내용만큼이나 뛰어나다.

    • 덕후스럽지만 2분의 여성 교수님과 조교님이 진행을 잘 이끄신다.
    • 초반 책의 활용법이 맵핵같이 책을 체계적으로 이해할 수 있도록 도와준다.
    • 특히, 각 장마다 등장하는 컬럼 파트를 빼놓을 수 없는데 게임 개발에 큰 도움이 되는 실전 꿀팁들이 등장한다. 예를 들면 Pycharm과 같은 보다 뛰어난 IDE 활용법, 조이스틱 및 게임패드와의 연동법, 게임 개발 비하인드 스토리, 컴퓨터 게임 인공지능 등이 담겨있다.Pycharm_24p

책은 크게 2개의 파트로 나뉘는데, 타임라인 순으로 배웠던 흔적들을 기록해 보았다.

  • 프롤로그에서 PyGame까지(1 ~ 5장)
    • 입문편과 마찬가지로 초반부에는 Tkinter 모듈을 활용하여 거의 모든 게임에서 활용하는 기본 스킬을 학습한다. 정리해보면 아래와 같다.
      • after() 함수를 이용한 실시간 처리 구현
      • bind() 함수로 이벤트 처리
      • 배경 스크롤 : 움직이며 배경이 변하기 시작한다.
      • 애니메이션 효과 : 캐릭터 움직이기
      • 2차원 List 활용법 : 맵 데이터, 배경 처리
      • 인덱스와 타이머를 활용한 진행흐름 관리

      더불어 실전편답게 아래와 같은 몇가지 기본 기능이 추가되어 소개된다.

      • 바닥(들어갈 수 있는 장소)과 벽(들어갈 수 없는 장소)의 판정 방법
      • 히트체크 : 물체가 접촉했는지 판정하는 방법 (탄환에 맞았는지, 아이템을 주웠는지 등)히트체크_33p
      • 삼각함수 활용법 : 다양한 도형이나 선을 그리는데 활용
    • 기초지식을 배운 후 본격적으로 닷-잇(Dot-Eat) 게임을 만든다. 닷-잇이란 팩맨과 같은 몬스터를 피하며 닷을 먹는 게임이다. 여기서는 “아슬아슬 펭귄 미로”라는 게임을 만든다.닷잇_64p

    앞에서 배운 기본 기술을 활용한다.

    • 미로 맵 데이터
    • 실시간 처리
    • 캐릭터 애니메이션 처리 등의 기술

    추가로 위에서 배우진 않았지만 입문편에서 다룬 스킬도 활용한다.

    • 점수 계산법
    • 적 등장 및 처리

    메인 요소는 아니지만 아래와 같은 완성도를 높히기 위한 세세한 Tip들도 언급되어 있는데 일반 개발 서적에서는 보기 힘든 저자의 오랜 경험에서 묻어나온 일종의 편법(?)들이 흥미로웠다. 짧은 코드로도 다양한 효과를 대신할 수 있기 때문이다.

    • root 연산을 피해 속도를 높이거나 수학적 테크닉을 활용하는 방법
    • 캐릭터를 부드럽게 움직이는 법
    • 타이틀이나 엔딩화면 제작 등

    초반에 다루지 않았거나 입문편에서도 소개되지 않은 새로운 기법들은 다음과 같다.

    • 남은 수명 적용하기 : 기체 수, 체력, 시간 기준
    • 다양한 스테이지 만들기
    • 맵 에디터의 계층화

    • 본격적으로 PyGame을 소개한다. 앞서 배운 Tkinter와 달리 PyGame을 활용하면 몇가지 밑바닥 구현을 안해도 된다. 기본적으로 고속 처리가 가능해지고, 물체 간 겹치는 부분에 대한 처리가 필요없으며, 기본적으로 제공하는 API들이 간결하고 사용하기 편하다. 여기에선 Tkinter 기반에서 벗어나 이미지를 그리거나 상태를 변경시키거나 키-인을 다뤄보며 새롭게 익혀야 할 기능들을 살펴본다.

  • 실전시작! 슈팅게임과 카레이싱
    지금까지와는 차원이 다른 완성도 높은 게임들을 만들어본다. 슈팅 게임의 경우 삼각함수의 활용, 카레이싱 게임의 경우 유사 3D 구현이 대표적으로 배울 수 있는 핵심 기술이다.

    • 슈팅 게임
      미사일을 발사해 적 비행기를 격추시키는 게임을 만들어 본다.
      슈팅_197p

      새롭게 배울 수 있는 기법은 다음과 같다.

      • PyGame으로 고속 스크롤 구현
      • 플레이어 기체 움직이기
      • 탄환 처리 : 여러발 발사하기, 탄막 펼치기(2장에서 배웠던 삼각함수가 여기서 쓰인다.)
      • 적 기체 처리 : 격추 기능, 히트체크, 폭발 연출, 적 종류 늘리기, 보스 만들기
      • 사운드 등 멀티미디어 요소 고품질화
    • 카 레이싱 게임
      유사 3D 화면을 활용하여 자동차 경주하는 게임을 만든다.카레이싱_338p

      새롭게 배울 수 있는 기술들은 아래와 같다.

      • 3D CG의 개념과 유사 3D : 원근법과 도로 그리기, 오르막과 내리막(역시 2장의 삼각함수가 쓰인다.)
      • 도로를 보다 실감나게 : 커브처리, 차선, 주변건물, 다양한 차 뒷모습 표현 등
      • 컴퓨터 경쟁 차량 만들기 및 히트 체크
      • 흐름처리(타이머와 인덱스), 랩 타임(1바퀴 도는데 걸린 시간) 처리, 차종 선택 기능 등
    • Game Center 208X
      앞서 만든 3개의 게임을 골라 실행할 수 있는 기능인 런처(Launcher)를 만든다. 지금까지 만든 것들을 대통합하면서 상용 게임과 맞먹는 완성도를 추구하기 위해 고군분투하는 저자의 노력에 감탄했다.런쳐_498p


입문편과 실전편을 모두 읽고 구현하는데 1달이 넘는 시간이 걸렸다. 직장을 다니기에 퇴근 후 저녁 시간만을 활용했다. Python을 데이터 분석 목적으로 몇년 간 자주 활용했으며, 15년 가까이 다른 프로그래밍 언어를 만들어왔고, 대학때는 작은 게임을 만들어 본 경험이 있는 상태임을 감안할 때 결코 적지 않은 시간이 소요된 셈이다.

만약 이 책의 뛰어난 구성상의 도움이 없었다면, Python이 아닌 다른 언어였다면(C++이나 어셈 같은) 예제 하나를 만드는데만 1달의 시간이 걸렸을 것 같다. 그만큼 이 책은 방대한 내용을 아주 쉽고 생산성 높게 만드는 방법을 전수해 준다.

게임 관련 서적을 많이 통달하진 못했지만 이렇게 읽기 편하고 만들기 쉽고 짧은 시간내에 거의 모든 것을 만들 수 있게 해주는 책이 또 있을까?

개인적으로 정말 재미있는 단계는 지금, 즉, 책을 다 익히고 난 시점 이후이다. 기본기를 익혔으니 게임을 만들고 즐기며 떠올랐던 스스로의 아이디어를 녹이는 일을 시작할 수 있게 되었으니 말이다.

입문편 리뷰에서 소개했듯이 게임 업계의 꿈을 가지고 있거나, 게임 개발을 취미로 익히고 싶거나, Python으로 알고리즘 구현에 익숙해지고 싶은 분들에게 여러번 추천하고 싶다.



댓글(0) 먼댓글(0) 좋아요(2)
좋아요
북마크하기찜하기 thankstoThanksTo
 
 
 
파이썬으로 배우는 게임 개발 입문편 - 퀴즈, 주사위, 제비 뽑기, 미로, 진단 애플리케이션, 블록 낙하 퍼즐, RPG 등을 만들며 배운다! 파이썬으로 배우는 게임 개발
히로세 츠요시 지음, 김연수 옮김 / 제이펍 / 2020년 10월
평점 :
장바구니담기


본 도서는 파이썬을 활용하여 게임을 개발하는 방법을 다룬다. 내용이 방대하기에 굵직한 장점을 먼저 소개하고 타임라인 순으로 읽으며 느꼈던 점들을 소개하는 방식으로 리뷰하려 한다.

  • 살을 버리고 뼈를 취하는 구성
    게임 서적을 읽다 지치는 가장 큰 이유는 방대한 소스코드의 무덤 속에서 길을 잃고 숲을 헤매는 구성 때문일 것이다. 이 책은 핵심 완급조절을 분명히 하는 장점이 있다.

    언리얼이나 유니티 라이브러리는 구현에 상당한 편리함을 가져다 주지만 가려진 밑바닥을 보기 힘들기에 배우고 나면 뭔가 붕 뜬 느낌이 있다. 잘 모르고 가져다 쓰기만 한 라이브러리에 때문에 자신감도 떨어지고 흥미도 떨어진다.

    Tkinter 모듈을 활용하여 밑바닥도 건드려 보고, PyGame 모듈로 군더더기를 날려버리고 핵심에 집중해 보는 등의 완급조절이 일품이었다. 자세한 내용은 아래 세부 설명에서 소개하겠다.

  • 저자의 경력과 실력
    저자는 남코, 닌텐도, 코나미에서 25년 간 게임을 개발, 기획한 실력자이다. 교육기관에서 강의도 담당하고 있어 전달력도 상당하다.

  • 게임을 만들고 싶게 하는 구성
    30 ~ 40 대 아재들은 일본이 주도했던 PC 게임의 추억을 잊지 못할 것이다. PC, 프로그래밍, 게임에 관심이 많았던 아재들이라면 한 번쯤 스스로 게임을 만들어 보겠다는 야망(?)도 있었을 것이다. 이 책은 밑바닥까지 게임을 구현해보기에 자신감을 키워주며 스스로 게임을 만들고 싶다는 욕구를 한 껏 불러 일으킨다.

  • 디테일한 구성과 가독성
    내용 자체로도 훌륭한 책인데 독자들의 가독성을 높혀주는 구성상의 완성도가 일품이라는 장점도 무시할 수 없다. 약간 덕후스럽지만 애니메이션의 두 여자 캐릭터가 학습을 도와주며, 부록편엔 게임 동아리도 등장하여 게임하듯 배울 수 있다.

    각 장마다 등장하는 컬럼에 대한 재미도 쏠쏠하다. 게임 업계에 대한 정보도 가득하고, 저자가 현업에서 부딪혔던 유용한 Tip들도 종종 소개되고 있다.컬럼_59p

책이 어떻게 구성되어있는지 보다 세부적으로 설명하기 위해 실습 예제를 따라해보며 시간의 흐름대로 느꼈던 점들을 아래와 같이 정리해 보았다. 책을 크게 3개의 파트로 나누어 설명해 보겠다.


  • 게임 개발 개요와 파이썬의 기본(1 ~ 4장)
    • 먼저 게임 업계는 어떻게 수익을 얻는지, 크리에이터에는 어떤 직군이 있는지, 게임의 종류와 어떻게 하면 게임 프로그래머로서의 커리어를 쌓을 수 있는지 설명한다. 게임 개발 능력을 키우기 위한 좋은 자극제가 되며 저자의 경험을 녹였기에 이해하기 쉬웠다.

    • 파이썬, 통합 개발 환경(IDLE)을 설치하고 가장 중요한 변수, 리스트, 반복문, 조건문, 함수, import에 대해 간단히 실습해본다. 고작 이 정도 학습하고 뒤에 게임들을 개발할 수 있을까 의구심이 들었는데 오히려 난잡하지 않게 게임 개발에 필요한 사항만 잘 추렸다는 생각을 했다. 게임 개발에 장점이 있다면 시각적 피드백일텐데 Tkinter, PyGame 모듈로 눈으로 보면서 구현하기에 기본에만 충실하면 나머지는 경험과 시간의 몫이 될 수도 있겠다는 생각이 들었다.


  • CUI / GUI / Tkinter(5 ~ 9장)
    • 먼저 CUI(문자열 기반 인터페이스) 게임을 만들어 본다. 복잡한 그래픽 요소를 일단 제쳐두고 게임 기획의 본질을 먼저 익히면서 Python에 친숙해지게 만들어준다. 주사위를 던져 나오는 랜덤한 숫자로 컴퓨터와 대결하여 누가 먼저 결승점에 도착하는지 내기하는 예제도 있는데 게임을 만들 때 필요한 기본 감각을 가장 잘 설명하는 예제라 할 수 있다. 부수적인 것보다는 본질에 대한 감을 익히는데 중요한 과정이라 생각한다.

    • 이어 Tkinter를 활용한 GUI(그래픽 기반 인터페이스) 개발에 돌입한다. Python에서 GUI 기반 프로그래밍에 가장 흔히 사용하는 Tkinter 모듈을 주로 사용한다. PyGame은 게임에 특화된 라이브러리인지라 처음부터 PyGame을 활용하면 라이브러리를 가져다 쓰기만 할 뿐 밑바닥을 구현하기 어렵기에 Tkinter를 활용하여 기본기를 다지는 구성이 기본에 충실하는데 좋은 구성이라는 생각했다.

    • Tkinter의 기본 활용법을 익힌다. 제비뽑기 프로그램을 만들어보며 라벨, 버튼, 캔버스, 텍스트, 멀티 텍스트 필드, 체크박스, 메시지 박스 등을 그리는 방법을 배운다. Visual Studio에서는 주로 버튼을 끌어와 윈도우에 배치하는데 이와 달리 Java 진영과 유사하게 SDK 방식의 직접 코딩으로 컴포넌트를 배치하는 차이점이 있다. 물론 결과는 동일하다. 모든 실습을 마치면 아래와 같은 진단 게임을 완성할 수 있다.진단게임_136p

    • 여기까지의 실습으로는 사실 GUI를 활용한 일반 프로그래밍이지 게임 프로그래밍이라고 하긴 어렵다. 8장에서 게임다운 게임을 처음으로 만들게 되는데 기술적으로 아래와 같은 기법을 실습한다.

      • after() 함수를 이용한 실시간 처리 구현
      • bind() 함수로 이벤트 처리
      • 2차원 리스트를 활용한 미로 배경 정의 실습을 마치면 아래와 같은 미로 게임을 완성할 수 있다.미로게임_168p

  • PyGame / RPG 만들기 / OOP / 부록
    • 밑바닥 구현은 학습에는 도움되지만 노가다가 심하기에 보다 본격적인 게임 구현의 요소에 집중하고자 PyGame을 활용하기 시작한다.

    • 마우스 이벤트 처리, 위치 데이터와 같은 상태 정보 관리, 낙하 알고리즘 구현, 점수 산출을 위한 평가 알고리즘을 구현해보며 블록 낙하 게임을 완성한다.

    • 우습게 보일지 몰라도 처음으로 게임다운 게임이 등장했다. 실제로 즐겨보면 꽤 재밌기까지 하다. 대학 때 동아리에서 슈팅 게임을 만들어 본 적이 있는데 그때 머리 싸매고 간신히 구현했던 요소들이 하나씩 다 등장하고 있다. 핵심 알고리즘에서 평가에 이르기 까지 게임 구현에 가장 중요한 요소들을 구현하고 있어 이 예제가 가장 뼈대 예제라는 생각을 했다. 요즘엔 AI에 푹빠져 강화학습을 학습 중인데 상태, 에이전트, 환경 등의 정보로 활용할만한 기능이 모두 구현되어 있기에 더욱 기본이 탄탄한 예제라는 생각을 할 수 있었다.블록낙하_213p

    • Tkinter에서 PyGame 기반의 구현에 익숙해지도록 PyGame을 살펴본다. Tkinter 실습때와 마찬가지로 이미지도 그려보고 키, 마우스 이벤트 처리도 실습해본다. 더불어 Tkinter에서 취약했던 사운드 출력 같은 멀티미디어 요소를 처리하는 기능도 다룬다.

    • 드디어 이 책의 하이라이트이자 게임의 꽃이라 할 수 있는 RPG를 구현한다. 개인적으로 기본적인 게임은 학창시절에 구현해 본적이 있었기에 그 단계를 뛰어넘는 첫 도전이었으며 가장 흥미로운 장이었다. 블록 낙하게임 기본 기능에서 추가된 RPG 고유의 기능은 아래와 같다.
      • 미로를 던전으로 바꾸기
      • 배경 스크롤 : 움직이며 배경이 변하기 시작한다.
      • 이동신/전투신 제작 및 상호 전환
      • 턴방식 프로그래밍RPG
        11 ~ 12장은 그간 배운 지식을 바탕으로 최대한 스스로 구현해보려고 노력하면 더 좋을 것이다. 그 후 본문의 소스코드와 비교하는 과정을 거친다면 더욱 빠르고 확실한 이해가 가능해진다. 개인적으로 이 방식을 통해 스스로 복잡하게 생각했던 기능들을 게임 모듈에서 일종의 편법(?)으로 얼마나 간단히 처리하는지 아이디어를 얻을 수 있어 놀랐고, 더불어 Python으로 알고리즘을 구현하는데 친숙해지는 소득을 얻을 수 있었다.
    • 마무리로 OOP의 개념을 다룬다. GameCharacter라는 클래스를 상속받은 검사, 닌자 등의 예제를 예로 들며 객체지향의 개념을 다루고 있다. 부록에서는 3가지 업그레이드 예제가 더 등장한다. 복습용으로 좋은 예제들이다.

RPG 게임까지 구현하고 나면 상당한 자신감이 생긴다. 구현하는 과정에서 스스로의 아이디어가 떠오르기도 하고 이를 녹여보는 과정에서 자연스럽게 구현 능력이 향상된다. 아들과 재미있게 게임해보고 싶어 읽은 책인데 소기의 목적을 달성하고 있어 즐겁다.

자신감이 충만해져서일까? 보다 풍부한 예제가 소개되었으면 하는 아쉬움이 있었는데 다행히도 이 책은 시리즈로 구성되어 있다. 이 책은 입문편으로 보다 심화 과정인 실전편의 책이 한 권 더 있어 안도감이 들었다. 리뷰를 쓰는 시점에 실전편의 책을 익히고 있는 중이기에 조만간 실전편 리뷰도 올릴 생각이다.

게임 업계의 꿈을 가지고 있는 이라면 반드시 읽어야 할 필독서이다. 이 책을 통해 게임 전반의 핵심에 해당하는 뼈대 감각을 익히고 업계에 발을 딛는 것과 숲을 보지 못하는 안목으로 이정표 없이 구현에만 급급한 것은 분명 하늘과 땅 차이다.

더불어 게임을 취미로 익히고 싶거나 Python으로 알고리즘 구현에 익숙해지고 싶은 사람에게도 강력히 추천하고 싶다. 스스로의 창의성을 구현하는 방법을 배운다는 것은 배움 이상으로 인생에 쏠쏠한 행복을 가져다 준다.


댓글(0) 먼댓글(0) 좋아요(1)
좋아요
북마크하기찜하기 thankstoThanksTo
 
 
 
그림으로 공부하는 IT 인프라 구조 - 개정판 그림으로 공부하는 시리즈
야마자키 야스시 외 지음, 김완섭 옮김, 오다 케이지 감수 / 제이펍 / 2020년 12월
평점 :
장바구니담기


  • PC는 뜯어봐서 알겠는데, 서버 내부는 어떻게 생겼지?
    서버내부

    이 책은 일단 우리가 평소했던 궁금증을 해소시켜 주는 것에서 시작한다. 인프라 구조를 다루는 책들이 대체로 딱딱하고 어려울 수 밖에 없는 이유는 무엇일까?

    • 우리가 아는 지식에서 출발하지 않는다는 것
    • 극히 편협적인 해당 주제만 다뤄 전체 그림이 그려지지 않는다는 것
      크게 두가지 이유에서 비롯된다고 생각한다.

    그런데 이 책은 달랐다.

    독자가 어떻게 하면 복잡하고 거대한 인프라 구조를 쉽게 이해할 수 있게 도울 수 있을지 저자의 진정성 있는 고민이 느껴지는 대목이 많다. 위 질문과 그림은 누구나 한 번쯤 호기심을 가져봤을 법한 질문인데 우리가 아는 PC의 상식을 통해 서버를 설명하려는 접근법을 잘 활용하고 있다.

    우리가 알고 있던 지식에서 출발하여 미지의 영역을 안내하고자 하는 시도가 기본 바탕이 된다. 더불어 모듈별로 친숙하고 만화같은 그림(캡쳐한 그림들을 아래에 차례차례 소개할 예정이다), 가장 쉬운 예시(편의점 고객과 직원수 간 병목 현상)등의 장치는 더욱 이해력을 높혀준다.

    2장을 살펴보면 우리가 궁금했던 서버실 내부의 전경이나 서버랙 구성도 및 실제 부품들의 사진이 등장하기에 PC와의 기능을 대조해보며 서버나 장비에 친숙해질 수 있다.


  • 가장 많이 쓰는 시스템 구조는?
    이 책의 메인 주제는 3계층형 시스템이다. 우리가 오늘날 가장 많이 사용하는 IT 인프라는 대부분 웹 서비스를 위해 구성되어있고, 이를 지탱하는 가장 흔하고 널리 쓰이는 인프라 구조가 바로 3계층형 시스템으로 웹서버 - AP서버 - DB서버로 구성되어 있다.

    3계층1
    3계층2

    위 2장의 그림이 이 책에서 말하고자 하는 핵심주제이다. 처음에는 약간 까다로울 수 있으나 천천히 살펴보면 이 책을 읽지 않아도 대부분 이해할 수 있을 만큼 도식화가 잘 되어 있다.

    만약 이 책의 핵심인 3 ~ 5장을 읽은 후 그림을 다시 보게되면 매우 쉽게 이해될 것이다. 3장은 3계층형 시스템의 개요를 중심으로 인프라의 전체적인 특성과 3계층 시스템의 현위치, 그리고 가상화 등의 기술 트렌드를 조망한다.

    4장은 직렬/병렬, 동기/비동기, 큐, 베타적제어, 상태, 데이터 구조, 탐색 알고리즘 등의 인프라에서 활용하는 IT 기본지식을 다룬다.

    5장에서는 이들을 응용한 이론을 살펴보는데 캐시, 인터럽트, 폴링, IO, 저널링, 복제, 마스터-워커, 압축, 패러티 검출 등의 기술을 다룬다.


  • 서버, 인프라 담당자를 위한 책인가?
    아니다. 개인적으로 이 책은 프로그래머에게 더 적합한 책이라는 생각이 든다. 클라우드, 도커, 쿠버네티스 기반의 데브옵스 환경에서도 프로그래머는 여전히 인프라에서 자유롭지 못하다는 생각이 든다.

    특히 성능 이슈로 들어가면 더욱 그렇다. 현재 구성된 인프라의 기본을 이해하고 있어야 더욱 고성능의 애플리케이션을 개발할 수 있음은 물론 DB서버와 구조를 알아야 데이터 처리를 어떻게 효율적으로 다룰지 어떤 프로그램과 API를 활용해야 할지 정확한 판단이 가능하다.

    프로젝트를 총괄하는 아키텍트나 관리자에게는 필수 지식이다. 더불어 1장에는 인프라 아키텍처를 집약, 분할, 수직, 수평, 지리 등의 유형별로 살펴보고 있어 관리자에게 도움이 된다.

    전체 환경이나 인프라를 직접적으로 알 필요가 없는 말단 개발자라 할지라도 적어도 왜 이 언어를 사용하게 되었고 어떤 특성의 프로토콜이나 API를 활용하는지 이해하고 숙련도를 높이는데 학습적인 측면에서 능률을 높힐 수 있을 것이라 생각한다.

    3계층3

    위 그림은 3계층 시스템의 축소판인데 웹 개발자 특히 백엔드 개발자가 Httpd 프로세스에서 자유로울 수 있을까? 마찬가지로 AP서버에 해당하는 각종 WAS에서 스레드 지식을 모르고는 비즈니스 로직 등의 개발이 어렵다. 마찬가지로 DB서버의 SGA를 이해하지 못하면 쿼리 튜닝에서 자유롭지 못하다.

    그저 국소적으로 이해하고 끝날 것인지 내부 인프라의 전체 그림을 이해하고 이에 종속적인 부분이 정상적으로 수행되도록 고려하며 개발할 것인지의 차이는 아마도 연봉과 커리어 앞날에 큰 영향을 끼칠 것이라 생각한다.

    한 단계 더 깊이 들어가면 탐색 알고리즘이 등장한다. 이 책이 인프라 서적임에도 불구하고 오히려 인프라 담당자가 더 어려울 수도 있는 부분도 상당 부분 존재한다.

    DB에서 SQL을 수행하며 인덱스를 찾아가는 과정이 인프라 내부까지 연결하여 설명한다.B트리

    이 예시와 같이 이 책의 최고 장점은 조각난 분야별 지식들을 하나의 전체 그림으로 그려가는 과정이라 할 수 있겠다.

    인프라 담당자는 인프라를 지탱하는 IT 지식을 익히며 서비스 성능의 향상을 위한 최적의 인프라를 구성하는 노하우를 쌓을 수 있을 것이고, 마찬가지로 프로그래머도 내부 인프라에 대한 종속적인 지식의 이해를 바탕으로 고성능의 서비스를 제공하는 애플리케이션을 개발할 수 있을 것이다.

    개인적으로 15년 정도 여러 직장을 다니며 풀스택 개발자라고 할 수 있을만큼 여러 기술을 섭렵했는데 이 책을 통해 몰랐던 지식들을 보완하고 나니 인프라 구조 및 IT 서비스에 대한 전체적인 시야를 가질 수 있어 매우 만족스러웠다.


  • 네트워크, 무중단, 성능
    6장은 네트워크를 다룬다. 그저 네트워크의 이론 지식만 열거되었다면 또 무슨 소리인지 충분히 이해하지 못한 채 넘어갈 수 있겠으나 OSI 7계층을 중심으로 각 계층을 하나하나씩 뜯어본다. 뜯다보면 왜 프로그램 언어별로 소켓 통신을 위한 API들이 그런 형식으로 호출되고 설계되는지 쉽게 이해가 된다.네트워크

    7장은 무중단 및 이중화 구성에 대해 다룬다. 가용성을 최대한 확보하여 안정성을 유지하기 위한 구성을 꾀하는데 어느 요소 하나 빠짐없이 모두 한 눈에 정리할 수 있도록 연결되어 있어 매우 유익했다. 하나 하나의 가용성을 다루는 책은 많지만 전체를 조망하는 책은 찾기 힘들다.무중단

    마지막 8장은 성능을 다룬다. 응답, 처리량(Throughput), 병목현상의 개념을 정리한 후 병목 현상을 찾는 방법과 저자들의 실전 사례들이 공유된다.병목현상


다루는 내용이 너무도 방대하여 리뷰를 작성하기까지 많은 고민을 했다. 서두에 어떤 책인지 짧게 소개하고 싶었지만 책의 제목이 내용을 너무도 잘 대변하는데다가, 그림을 기반으로 한 전개로 구성되어 있어 글보다는 그림과 사례로 리뷰를 쓰는 것이 책의 특징을 가장 잘 살리는 방법이라 생각했다.

이 책은 이미 5년 전에 베스트셀러 반열에 올랐던 책이다. 난 그때로 꽤 감명깊게 읽었고 당시 IT의 전반적인 실용적인 눈을 키우는데 이 책으로부터 많은 도움을 받았다.

개정판에서 달라진 점은 이제 대세가 된 클라우드 기반의 지식이 대거 포함되었다는 점과 당시에 유행했으나 지금은 필요하지 않은 구닥다리 일부 설명이 삭제되었다는 점 정도이다. 디자인 측면의 변화도 반가웠는데 완전 풀컬러는 아니지만 구판과는 달리 가독성을 위한 색상 구분이 되고 있어 훨씬 읽기 편했다.

이 책은 인프라 담당자나 개발자는 물론 CEO, 마케팅 혹은 비즈니스를 담당하는 실무자까지 IT 직군에 종사하는 사람이라면 반드시 읽어봐야 할 책이다. 실전에서 IT 지식과 제품들이 어떻게 활용되고 엮이는지 거의 모두 다루고 있기 때문이다.




댓글(0) 먼댓글(0) 좋아요(1)
좋아요
북마크하기찜하기 thankstoThanksTo
 
 
 
프로그래머를 위한 파이썬 - 실전 프로젝트로 배우는 소프트웨어 개발의 원리와 정석
데인 힐라드 지음, 황반석 옮김 / 제이펍 / 2020년 11월
평점 :
장바구니담기


Python의 아래와 같은 개념을 어느정도 알고 계시는지?

  • 설계
  • 관심사 분리, 추상화, 캡슐화
  • 성능
  • 테스트
  • 확장성, 상속, 느슨한 결합
  • 개념은 알고 있지만 믹신, 목업 등 Python에 특화된 용어 혹은 스타일
    제너레이터
    메시지

만약 위 개념들이 생소하거나, 들어는 봤지만 익숙치 않다면 이 책이 많은 도움이 될 것이다. 더불어 키워드를 통해 본 도서의 난이도에 대한 감도 어느정도 잡을 수 있을 것이다.

키워드에 해당하는 내용들을 아주 상세하게 깊숙히 다루는 것은 아니다. 약 250p 정도 되는 다소 가벼운 분량에 키워드별 핵심이 되는 중요한 개념 혹은 코드 몇가지를 개괄적으로 소개한다.

분량이 짧다고 해서 깊이가 결코 가벼운 것은 아니다. 저자의 오랜 실전 경험을 바탕으로 학습 시간 투자 대비 가장 효과적으로 지식을 얻을 수 있도록 구성되어 있다는 인상을 받았다. 즉, 실전에 활용할 수 있는 가성비 좋은 내용들을 한 눈에 조망할 수 있게 구성된 점이 큰 장점이다.

실전에 많은 시간이 투입되었으나 전체적인 프로젝트 숲이 보이지 않는 개발자에게는 이 책이 단시간 내 막혔던 부분을 뚫을 수 있게 도와줄 것이다. 또, 반대로 프로젝트 경험이 많고 이미 위 키워드를 능숙할 정도로 알고 있는 이에게는 깊이 측면에서 약간 부족할 수도 있다.

개인적으로 생각하는 이 책의 최고의 백미는 파트3에 해당하는 실전 프로젝트이다. 위에서 열거한 개념들을 어떻게 실전에 적용할지 한가지 일관된 좋은 예제를 개발한다. 바로 브라우저 즐겨찾기 내용을 등록, 관리할 수 있는 커맨드라인용 북마킹 애플리케이션 Bark이다.Bark깃허브

Bark 설계, 구현 단계를 오롯이 따라하는 것만으로도 프로젝트 한 사이클을 경험할 수 있으므로 충분히 가치가 있는 과정인데, 그보다 더 큰 장점은 이 프로젝트를 구현, 개선해 나가며 위에서 배운 관심사 분리, 추상화, 캡슐화, 인터페이스, 커맨드 패턴, 느슨한 결합 등을 적용하도록 구성되어 있다는 점이다.순환복잡도

일반적으로 설계에 대한 책은 각 관점별로 동떨어진 예제들이 열거되어 있어 실전에 돌입하면 메타지식 간 연결고리가 부실하여 바로 적용하기 어렵기 마련인데 저자는 그런 다른 책들의 비효율적인 부분들을 잘 이해하고 있다는 생각이 들었다. 독자들에게 자신과 같은 시행착오를 거치지 않도록 노력하고 있어 인상적이었다.

그 외 다른 파트의 내용은 다음과 같다.

  • 파트1 : 설계와 소프트웨어의 개요를 다루고 있어 가볍게 읽을 수 있다.
  • 파트2 : 맨 앞에서 소개한 주요 키워드들에 대한 개념의 핵심이 사례별로 잘 소개되고 있다.
  • 파트3 : 바로 위에서 언급했던 파트2 개념의 실전 적용 과정이다.
  • 파트4 : 개발자의 경력을 키우기 위한 조언 및 이후 학습 방향에 대한 조언이 담겨있다.

Python의 입문 과정을 마치고 중급 과정 혹은 실전에 돌입하는 이에게는 이 책이 매우 적합하다고 생각한다. 위에서 소개한 바와 같이 설계의 큰 그림을 정말 빠른 시간내에 익힐 수 있기 때문이다.

정리하자면 관심사 분리, 추상화, 캡슐화, 확장성, 상속, 느슨한 결합 등 뛰어난 설계를 위한 기본 개념부터 성능, 테스트, MVC패턴 등의 실전에 필요한 지식까지 즐겨찾기 관리 프로그램을 만들며 각각의 개념을 상호간에 유기적으로 연결해가며 익힐 수 있기에 효용성 측면에서 매우 높은 점수를 주고 싶은 책이다.




댓글(0) 먼댓글(0) 좋아요(0)
좋아요
북마크하기찜하기 thankstoThanksTo
 
 
 
소프트웨어 스펙의 모든 것 - 프로젝트를 성공으로 이끄는 소프트웨어 스펙(SRS) 작성법
김익환.전규현 지음 / 한빛미디어 / 2021년 1월
평점 :
장바구니담기


개인적으로 프로젝트에 돌입할 때마다 스펙이라는 문서를 읽고 쓸 기회를 접하며, 덕질하는 시간에는 오픈 소스 문서 번역등에 기여해 본 경험이 있기에 언제고 기회가 되면 소프트웨어 스펙 작성법에 대해 진지하게 배우고 고민해봐야 겠다는 생각을 했는데 마침 적합한 책이 등장하여 리뷰를 남긴다.

본 책의 메인 주제인 SRS란 소프트웨어 요구 명세를 의미하며 스펙이라고도 부른다. 구체적인 실체를 알고 싶다면 아래 링크를 클릭하여 저자가 소개하는 템플릿을 다운로드 하여 확인하기 바란다.

SRS Template 다운로드SRS1
SRS2

이 책은 SRS를 작성하는 방법을 다루는 책으로 Who, What, How 등 다각도에서 고민해보며 기업 문화까지 스펙에 녹이고자 노력하는 진솔함이 돋보이는 책이다.

저자는 2000년 초반에 출간된 “대한민국에는 소프트웨어가 없다.” 책의 저자이기도 하다. 당시 대한민국의 찍어내기식 사농공상 문화에 회의를 느꼈기에 책을 읽으며 많은 생각을 하였다.

S/W 중심의 대한민국의 경쟁력 향상을 위해 개발자, 정부, 기업 등에 강한 일침을 가한 내용이 인상적이었는데 20년 가까이 지나 당시의 조언에 실리콘밸리식 문화와 커리어가 가미된 본 도서를 읽게 되니 감회가 새로웠다.

컴퓨터 공학을 전공한 사람이라면 대부분 소프트웨어 공학 만큼 재미없는 전공 과목을 찾기도 어려울 것이다. 코딩을 통해 눈으로 결과를 보는 과정도 없고 실무 경험도 전무한 대학생이 사상 누각 형태로 장님이 코끼리 다리 만지듯 저 위에 떠 있는 실체없는 공학을 이해하고자 노력하는 것은 정말 답답한 노릇이 아닐 수 없다.

문제는 이 현상이 기업에 입사하여 시니어가 되어도 지속된다는 점에 있다. 하나의 프로젝트를 모두 총괄하는 사람이 되어보기 전까지는 이런 총체적인 눈을 필요로 하지 않기 때문이다. 게다가 경험 미숙으로 스펙에 대한 내용이 구체적으로 와 닿을리도 만무하다.

그런 측면에서 본 도서는 스펙을 작성하는 일이 따분함을 넘어서 왜 어려운지, SRS의 실체는 무엇인지 설명하기 위해 많은 지면을 할애한다.

스펙에 대한 회사 구성원의 오해는 어떤 것들이 있는지, 스펙과 유사한 설계 및 요구사항과의 차이점은 무엇인지, 현재 스펙과 관련된 악습과 관행은 무엇인지, 기업 문화가 스펙에 왜 반영되어야 하는지, 스펙을 제대로 작성하지 못해 발생하는 실제 사례들은 어떤 것이 있는지 살펴본다. 2부에서는 실제 사례를 중심으로 SRS를 작성하는 예시도 소개된다.

스펙이 작성하기 어렵다는 것은 저자도 충분히 공감하고 인정하기에 이를 작성하는 딱딱한 매뉴얼에서 벗어나 예시, 차이, 관점의 변화, 기업 문화, 영향 사례를 다각도로 짚어보며 스펙을 최대한 알기 쉽게 설명하고자 노력한 점이 책의 백미이다.

이 책에는 SRS의 작성법 외에 또 다른 가치가 숨어있다. PM, 아키텍트 이상의 관리자에게 필수적인 프로젝트가 실패하는 이유, SRS를 통해 소프트웨어를 최단 시간 내 개발하는 법, 기업 문화와 사람 관리에 대한 방법에도 포커싱을 맞추고 있다.

사실 이 모든 내용들이 올바른 방향으로 선행되어야 의미있는 SRS를 작성할 수 있음을 강조하고 있다. 그저 작성 요령만 갖출것이 아니라 개발문화, 관행, 습관, 프로세스, 원리, 원칙들이 모두 녹아있어야 좋은 SRS를 작성할 수 있다는 의미이다.

SRS의 중요성을 인식하기 위해 책에서 제시하는 여러 예시 중 특히 인상 깊었던 것 2개를 꼽아보려 한다. 하나는 모든 프로젝트 이해관계자를 연결하는 중심이라는 점이다. 이 덕분에 제품이 완성되지 않아도 영업팀은 사전 판매에 돌입할 수 있으며, 인증도 사전에 취득할 수 있게 된다.이해관계자

다음은 1:10:100 규칙에 대한 설명이다. 스펙이 변경될 경우 요구분석 단계에서의 비용이 1이라는 가정하에 유지보수 단계로 넘어갈수록 200배에 가까운 비용이 낭비된다. 시간이 흐를수록 얼마나 큰 비용이 발생하는지 구성원 전부 명확히 인식할 필요가 있으며, 그렇기에 스펙이 정확히 작성되어야 하는 것이 얼마나 중요한지를 보여주는 사례이다.규칙

가장 인상깊었던 파트는 6장(프로세스)과 9장(How) 파트이다. SRS를 작성하는 매우 구체적인 방안과 예시가 소개되고 있으며 코드 리뷰처럼 스펙을 리뷰하는 방법이나 협업의 방향을 다루고 있어 조직의 발전을 위한 방향을 엿볼 수 있다.

더불어 소스코드 및 유닛 테스트를 통한 스펙을 작성하는 실전법이나 인터페이스 개선 및 정의 부분은 수십년 간 경험을 축적한 저자의 내공을 느낄 수 있는 파트였다.

10장 도구 편에는 SRS를 작성하는데 도움이 되는 툴들이 소개되는데 미처 몰랐던 유용한 Tip들이 다양하게 소개되어 있어 실전에 유용하게 사용할 수 있다.

2부에서는 SRS 작성을 위한 구체적인 예시가 등장한다. 1부에서 익힌 감에 현 직장의 문화를 더해 실전처럼 적용해 볼 수 있는 구성이 마음에 들었다. 다만 한가지 아쉬운 점은 하나의 특정 개발 사례를 중심으로 일관성있게 소개되었다면 더욱 템플릿을 이해하기 쉽지 않았을까 싶다.

소프트웨어 공학에 대한 책 중 이론을 설명하거나 번역서는 그래도 자주 접할 수 있다. 하지만 국내 저자가 국내 정서를 반영하여 작성했다는 점, 지극히 실전적이고 구체적인 예시를 든다는 점, 수십년 간의 전문적인 커리어가 반영되었다는 점에서 이 책은 관련 서적 중 매우 귀중한 희소성을 띈다 할 수 있다.

PM, 아키텍트 이상의 관리자에게는 SRS 작성법은 물론 프로젝트의 성공과 올바른 기업 문화의 정착을 위해 필독서일 것이다.

그 외 구성원에게 있어서도 이론으로만 존재했던 소프트웨어 공학의 실체를 느끼고, 개발 및 조직 문화를 이해하며, 프로젝트의 일원으로서 커뮤니케이션 능력을 향상 시키는데 도움이 되므로 어느 정도의 경험이 쌓인 개발자라면 반드시 일독할 것을 권하고 싶다.



소프트웨어, Sw, 스펙, Srs, 사례연구, 기업문화, 프로세스, 도구, 체크리스트, 인터페이스, 프로세스, 프로젝트


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