자바스크립트는 모든 곳에 존재한다 - 그래프QL, 리액트, 리액트 네이티브, 일렉트론으로 크로스플랫폼 앱 만들기
애덤 스콧 지음, 임지순 옮김 / 한빛미디어 / 2021년 2월
평점 :
장바구니담기



영문 제목이 아주 자극적이라서 바로 선택했다. Javascript Everywhere라는 영문 제목을 가졌는데, 마치 그루비룸의 시그니처 사운드 처럼 매우 자극적이다. 크게 보면 웹, 데스크탑, 앱 플랫폼이 있다고 볼 수 있는데, 자바스크립트를 사용해 모든 플랫폼에 맞는 앱을 만들 수 있다는 것을 보여주고 체험하게 해주는 책이다.

되게 재밌게 쭉 읽었던 것 같다. 일단 이 책을 읽기 위해서는 웃기게도, 약간의 자바스크립트 지식이 선행되어야 한다. 자바스크립트를 아예 모르면 하기 힘들 것 같긴 하다.

이 책의 구성은 짤막한 개념 소개 이후 바로 예제코드를 제시한다. 책에 나오는 예제코드대로 쭉 진행하다보면 어느새 괜찮은 서비스 하나를 뚝딱 만들고 있다. 일단 처음에는 Node.js를 사용하는 환경을 세팅하고 Express, Apollo를 사용해 Graphql 백엔드 서버를 구축한다. 이후에는 Mongodb를 사용해 데이터베이스를 구축하고 JWT와 bcrypt를 사용해 로그인과 인증을 구현한다.



GraphQL을 처음 배웠는데 되게 신기하고 재밌는 것 같다. 기존의 RESTful API만 많이 써본 나로는 되게 생소한 내용이긴 했다. 자체적으로 GraphQL playground가 있어서 postman처럼 패킷 확인해볼 수 있도록 제공도 해주고 API문서도 자동으로 깔끔하게 잘 만들어준다. 

이후에는 바로 React를 사용해서 웹을 먼저 구현한다. 나는 웹 수업을 듣긴 해서 기초적인 HTML이랑 CSS, PHP정도는 다룰 수 있었지만 React와 js는 아무 지식도 없었다. 이 책을 통해서 자바스크립트를 쭉 해보긴 했는데 아직도 여전히 좀 불편하긴 하다. 동적 타이핑 언어라서 그런지 파라미터나 멤버 같은게 제대로 안보인다. 그래서 오타내도 잘 돌아가는 상황이 자주 발생했다. 되게 웃기다.

아무튼 그렇게 웹으로 서비스를 만들고 나서는 일렉트론을 사용해 만들었던 웹을 데스크탑 앱으로 바꾸는 작업을 한다. 진짜 따라하기만 해도 뭔가 뚝딱뚝딱 보이는것을 만드니까 되게 좋은 경험을 하게 되는 것 같다.

이후에는 리액트 네이티브를 사용해서 앱을 만든다. 일렉트론 처럼 만든 것을 그대로 포팅하는 것은 아니고 별도의 네이티브 앱을 만든다. GraphQL을 사용해서 백엔드는 동일하게 사용한다.

이 책을 다 읽고 나면 자바스크립트를 사용해서 백엔드 서버, 웹, 앱, 데스크탑 앱을 다 만들어 볼 수 있다. 정말 좋은 경험인 것 같다. 이 책을 읽고나면 웹 서비스 프로젝트 한번 해보고 싶어진다 ㅎㅎ


* 이 책은 한빛미디어의 나는 리뷰어다 이벤트를 통해 제공 받았습니다.


댓글(0) 먼댓글(0) 좋아요(0)
좋아요
북마크하기찜하기 thankstoThanksTo
 
 
 
게임 정보학 : 게임을 개척하는 인공지능 - 게임 기획/개발자를 위한 필수 교양서
이토 타케시 외 지음, 김성훈 옮김 / 길벗 / 2020년 10월
평점 :
장바구니담기


길벗에서 개발자 리뷰어를 모집하길래 살펴보다가 게임과 관련된 책이 있길래 기쁜 마음으로 신청했다. 이 책은 게임 정보학을 다루는 책인데, 내용이 상당히 흥미롭다.



게임을 학문적으로 정의한다면 어떻게 정의할 수 있을까. 학문적으로라는 말이 좀 어렵긴 하다. 게임이라는 것이 Computer science적으로 어떤 것인가. 이것에 대한 정리와 구체적인 구분으로 부터 시작된다.

예를 들어서 플레이 하는 인원에 따라 게임을 분류한다. 또한 게임에서 모든 정보와 상태들을 알 수 있다면 그것은 완전 정보 게임으로 분류하며 그렇지 않은 게임은 불완전 정보 게임이다. 여기서 내가 요즘 자주 접했던 키워드가 나오는데, deterministic game이다. deterministic은 난수나 혹은 외부요인에 의해 게임에 우연성이 없는 게임을 말한다. non-deterministic game은 우연성이 있는 게임이겠다. 학문적으로 게임을 접근해서 그런지 이렇게 게임을 정의하는게 재밌다.

게임 정보학은 초창기에 체스를 중심으로 연구가 되었다고 한다. 체스는 2인 완전정보 확정 제로섬 게임으로 분류할 수 있다. 체스를 플레이 하는 인공지능을 만들고 싶다. 그러면 어떻게 만들면 될까 라는 생각을 해볼 수 있다. 학문적으로 접근한다면 기존에 다른 완전정보 제로섬 게임에 대한 알고리즘이 있는지 살펴볼 수 있겠다. 체스는 제로섬 게임이기 때문에 다른 제로섬 게임을 플레이하는 인공지능 알고리즘을 찾아보고 적용해볼 수 있기 때문이다. 틱텍토가 2인 완전정보 확정 제로섬 게임중에 하나인데, 이는 탐색범위가 넓지 않아 게임트리를 만들어서 해결할 수 있다. 하지만 체스를 게임트리로 탐색하기에는 너무 많은 경우의 수를 가지고 있다. 이는 게임트리의 Limitation이 되겠다. 그러면 이를 해결하기 위해 뭐를 해야 할까 고민해볼 수 있다. 이렇게 기존의 연구에서 한계점을 보고 새로운 방법을 제안하거나 그 한계점을 보완한 새로운 연구를 하는 것이다. 그래서 휴리스틱(경험적으로)하게 가지수를 줄이는 탐색 알고리즘이 등장한 것이다. 미니맥스 알고리즘이라던지 알파베타 가지치기 등등 학문적인 연구에 의해 등장했다. 상당히 재밌다.



이후에는 게임 인공지능을 중심적으로 설명하는데, 수식과 적당한 그림과 도표들이 아주 읽는데 수월해서 좋았다. 진짜 뒤에 나오는 몬테카를로 공식 보면 진짜 강화학습 논문 보는 것 같다. 쉽게 풀어주고 설명해줘서 이해하는데 도움이 되었다. 그렇지만 훑어봤기 때문에 깊은 이해는 생기지 않는다..;;

컴퓨터 과학 분야에서 게임과 관련된 논문이라면 한국게임학회나 한국컴퓨터그래픽스학회나 컴퓨터 그래픽스 관련 학회가 있다. 이런 논문들 살펴보면 공학 기술을 사용한 논문이라면 수식들이 빼놓지 않고 등장한다. 그리고 학술적으로 많이 사용하는 단어들이 많이 있는데, 이 책에서 그런 것들을 조금 알려준다. 나름 나쁘지 않고 200여 페이지라 나름 읽기도 수월해서 한번 읽어보기 좋은 책인 것 같다.

컴퓨터공학을 전공하는 친구들에게 학술적으로 게임을 접근할 수 있다는 것을 알려주기 좋은 책인 것 같다.


댓글(0) 먼댓글(0) 좋아요(0)
좋아요
북마크하기찜하기 thankstoThanksTo
 
 
 
밑바닥부터 시작하는 딥러닝 3 - 파이썬으로 직접 구현하며 배우는 딥러닝 프레임워크 밑바닥부터 시작하는 딥러닝 3
사이토 고키 지음, 개앞맵시 옮김 / 한빛미디어 / 2020년 11월
평점 :
장바구니담기


오늘은 밑바닥부터 시작하는 딥러닝 3을 리뷰하려고 한다. 밑바닥 시리즈는 딥러닝을 공부하는 사람이라면 무조건 읽어본다는 시리즈이다. 그만큼 진짜 밑바닥부터 시작하기 때문에 하나하나씩 다 구현해가면서 딥러닝의 원리를 이해할 수 있기 때문이다. 이번에도 좋은 기회에 밑바닥 딥러닝 3판을 얻게 되었다.





1판은 딥러닝 기초, CNN, 2판은 RNN, LSTM이었다면 3판은 "pytorch 비스무리한거 만들기" 라고 볼 수 있다. 직접 딥러닝 프레임워크를 만드는 것을 다룬다.

딥러닝 프레임워크중에 가장 유명한 것은 아무래도 텐서플로우와 파이토치를 들 수 있는데, 텐서플로우 2.0 버전부터는 파이토치스러운 API로 디자인이 변경되었다.

그래서 이 책에서도 파이토치 스러운 디자인으로 직접 딥러닝 프레임워크를 만든다. 이름은 DeZero. 책의 도입부분에 이 책에서 만들 프레임워크에 대해서 소개해준다.


파이토치같은 딥러닝 프레임워크가 주목받았던 큰 원인은 Autograd 있을 것이다. Autograd는 미분을 자동으로 수행해주는 것이다. 미분이 자동이라는 말은, 특정 수식에 대한 미분을 프레임워크 차원에서 미분식을 구해준다는 것이다. 그래서 직접 미분식을 프로그래밍하지 않아도 된다. 딥러닝에서는 기본적으로 미분을 적극 활용하기 때문에 프레임워크단에서 지원하는게 아주 끝내주는거다.



프레임워크를 만들때 변수에 해당하는 값, 함수, 연산자 등등을 직접 만들게 되는데 여기에서 파이썬에서 발생할 수 있는 메모리 관리 같은 부분도 꼼꼼히 챙겨준다. 크으.. 정말 좋은 책이다. 이 책은 총 60단계의 스탭을 통해 프레임워크를 만들어간다. 5개의 고지가 있는데, 한 고지를 넘어갈때마다 정말 도전해볼만하며 재미있는 책인 것 같다. 하지만 이 책을 제대로 따라가려면 밑바닥 딥러닝1권을 따라해봤거나 파이토치를 써본적이 있거나 딥러닝에 대한 지식을 기본적으로 알고 있어야 보기에 힘들지 않다.

아무튼 매우 흥미롭고 재미있는 책이다.


댓글(0) 먼댓글(0) 좋아요(0)
좋아요
북마크하기찜하기 thankstoThanksTo
 
 
 
게임 엔진 블랙 북 : 울펜슈타인 3D 게임 엔진 블랙 북
파비앙 상글라르 지음, 박재호 옮김 / 한빛미디어 / 2020년 10월
평점 :
장바구니담기


굉장히 호기심이 생기고 읽어보고 싶게 생긴 책인 게임 엔진 블랙북: 울펜슈타인3D를 읽었다. 한빛미디어에서 이런 Geek한 책도 번역하는구나 싶다. 울펜슈타인을 직접 해보지는 않았지만 어떤 게임인지 대충 알고 있었다. 소스코드가 깃허브에 공개되어 있어서 한번 볼려고 했었는데 그만 둔 기억이 있다.

표지는 좀 오바스럽긴 하다. 하지만 이 책에 들어있는 내용은 진짜 엄청나다..!

처음 엄청 놀랐던 부분이다. 이 책의 초반부분 챕터에서는 울펜슈타인이 개발되었던 당시 하드웨어 사양에 대해서 이야기하고 어떤 문제가 있는지, 어떤 식으로 구현되었는지가 설명하고 다음 챕터에서 울펜슈타인에서는 이런 하드웨어적인 한계를 어떻게 소프트웨어적으로 해결했는지를 이어서 설명한다.

이때 당시 CPU는 80386이었고, 램은 1메가였다고 한다. 그마저도 OS와 각종 드라이버들을 로드하고나면 640kb정도 밖에 되지 않는 아주 작은 램이었다. 그래서 이때 당시에 존재했던 XMS와 EMS라는 메모리 기술을 사용해 이를 극복할 수 있었다고 한다. 이 기술에 대한 내용과 어떻게 동작하는지 설명하고 있는 부분이다.

이것은 메모리 파편화를 막기 위해 직접 만든 메모리 메니저와 페이지 메니저에 해당하는 내용이다. 저자가 친절하게 하나씩 뜯어보고 이해할 수 있는 그림을 활용해 설명해주고 있다. 이런 그림들이 큰그림을 그리는데 아주 많이 도움되었다.

나도 OS수업을 들으면서 힙 메모리를 미리 할당해서 링크드 리스트로 관리하는 프로그램을 만들어 본 적이 있었다. 그래서 이 부분을 보면서 참 그생각이 많이 나서 이해하는에 아주 도움이 되었다. 이런게 진짜 이렇게 쓰였다는게 참 신기했다.


이부분은 진짜 미쳤다고 생각되는 부분인데, 이때 CPU에는 부동소수점을 연산할 하드웨어가 없었다고 한다. 그래서 int의 bit들을 shift해서 16:16으로 부동소수점 연산을 하는게 진짜 신기했다. float대신에 fixed라는 것을 만들어서 연산하는게 진짜 대박이었다.


이밖에도 사운드카드나 괴랄한 VGA등을 고려한 여러가지 테크닉들이 많이 들어있었다. 이런것들을 보면 진짜 재밌다. 이렇게 고군분투 하는 것이 진정한 프로그래머가 아닐까 싶다. 다 읽고 보니 Github에 있는 소스코드를 보면서 이 책을 보면 매우매우 좋을 것 같다.

* 이 책은 한빛미디어의 '나는리뷰어다' 이벤트로 제공받았습니다.



댓글(0) 먼댓글(0) 좋아요(1)
좋아요
북마크하기찜하기 thankstoThanksTo
 
 
 
파이썬 웹 프로그래밍 실전편 - Django(장고)를 활용한 쉽고 빠른 웹 개발, 개정판 파이썬 웹 프로그래밍
김석훈 지음 / 한빛미디어 / 2019년 11월
평점 :
장바구니담기


파이썬 플라스크 웹서버를 사용해서 아주 간단한 RESTful API 서버를 만든 적이 있다. 이번에는 장고도 한번 배워보고 싶어서 좋은 기회에 책을 받아 볼 수 있었다.

책은 프로젝트를 하나 잡고 그것을 구현하는데 집중하고 있다. 생각보다 되게 프로젝트 기반의 책이었다.

나는 사실 장고는 한번도 해본 적이 없어서 장고 기본 사용법 부터 시작해서 응용하는 사용법까지 배워야 하는데, 사실 그러기에는 쉽지 않는 책인 것 같다.

이 책은 제목 그대로 실전편이다. 기본편은 다른 책이 있다. 빨간색 버전 책이다. 장고 기초가 없고 웹에 대한 지식이 없는 분들은 이 책 보다는 파이썬 웹프로그래밍이라는 빨간 책이 있다. 그것을 보는게 더 좋을 것 같다.

그래도 시간날때마다 하나씩 만들어보면서 하기는 정말 좋은 책인 것 같다.


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