[IT] 데이터로 전문가처럼 말하기

2022. 9. 27. 18:06 | Posted by 꿈꾸는코난

< 데이터로 전문가처럼 말하기 > | 칼 올친 지음 | 이한호 옮김 | 한빛미디어

 

현대는 데이터의 시대라고 해도 무방할 정도로 많은 데이터가 생성되고 관리되고 있다. 하지만 무조건 많은 데이타를 생성하고 저장만하는 것은 큰 의미가 없을 것이다. 저장된 데이터를 제대로 분석하고 이를 효율적으로 표현하는 것이 더 중요한 시기가 되었다. 물론 많은 사람들이 엑셀이나 파워포인트 등으로 다양한 표와 차트를 통해 데이터를 표현하고 있다. 하지만 더 중요한 부분은 표와 차트를 구성하는 세부 요소 및 의미에 대해 좀 더 명확히 이해하는 것이다. 화려하게 표현하는 것이 중요한 것이 아니라 제대로 표현할 방법과 요소를 이용하는 것이 더 중요하다는 의미로 볼 수 있다.

이런 측면에서 이 책은 기존 데이터를 분석하고 어떻게 표현하는 것이 좋은지에 대한 가이드를 제시해 준다. 특히 데이터 기반 커뮤니케이션을 통해 의사결정에 영향을 미치고 조직의 목표를 달성하는 방법을 알려준다. 또한 데이터를 다룰 때 중요한 부분을 제시하고 이를 실무에 적용하여 곤란한 상황을 쉽게 극복할 수 있도록 하는 방법을 제시한다. 이를 위해 특정 툴에 대한 설명보다는 기초적인 데이터 작업 능력 배양과 언제, 어떻게, 어디에 데이터를 사용할 수 있는지에 대한 가이드를 제공한다.

 

이 책은 크게 3부분으로 구성되어 있다. 1부에서는 커뮤니케이션과 데이터를, 2부에서는 데이터 시각화 요소를, 3부에서는 실무에서 데이터 커뮤니케이션을 활용하는 방법에 대해 설명한다. 데이터에 대한 언급을 하면서 커뮤니케이션이 나와서 조금 어리둥절할 수도 있다. 하지만 데이터를 분석하여 시각화한다는 것은 누군가에서 그 내용을 보여주거나 설명하는 과정이다. 이는 자신이 만든 데이터를 통해 다른 사람과 커뮤니케이션하는 것을 의미하며, 또한 상대방인 원하는 것을 제공해 줄 수 있어야 한다는 것이다. 이를 위해서는 커뮤니케이션의 개념을 이해하고 어떻게 표현해야 하는지를 이해하는 것이 꼭 필요하다고 볼 수 있다.

 


1부에서는 주로 커뮤니케이션에 대한 개념과 데이터에 대한 개념 및 데이터의 형식, 그리고 올바른 데이터가 무엇인지에 대해 설명한다. 1부를 통해 이 책이 설명하고자 하는 시각화가 필요한 기본 개념을 알 수 있게 된다. 2부에서는 본격적으로 데이터 시각화 요소에 대해 설명한다. 다양한 형태로 데이터를 표현하는 방법과 다양한 데이타를 표현하는 개념에 대해 소개한다. 또한 시각적 요소로서 색깔과 크기, 참조선 등에 대해 언급을 하며, 제목, 텍스트, 범례, 도해 등 우리가 일상적으로 사용하는 개념을 제대로 사용할 수 있도록 한다.  3부에서는 효과적으로 데이터 기반 커뮤니케이션을 할 수 있는 전략에 대해 소개하며 특히 주로 사용하는 표 및 그림, 정적인 표현 및 동적인 표현, 중앙 집중형 및 분산형 데이터형 등 전략적으로 어떤 표현법을 사용해야 하는지 언급한다. 최종적으로 부서별 목적에 맞도록 데이터를 어떻게 가공하고 표현해야 하는지 설명하면서 마무리된다.

데이터 시각화에 대한 자료 및 책이 다양하게 나와 있는 것 같다. 하지만 이 책만큼 이해하기 쉬우면서도 개념을 정확히 잡을 수 있는 자료나 책은 흔치 않는 것 같다. 주로 내, 외부에서 발표를 하는 업무를 담당하지 않더라도 자신이 가지고 있는 데이터를 효율적으로 표현하고 다른 사람을 좀 더 잘 설득하고자 한다면 이 책을 꼭 한번 읽어보면 좋을 것 같다는 생각이 든다.



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

[IT] 피, 땀, 리셋

2022. 8. 16. 14:26 | Posted by 꿈꾸는코난

< 피, 땀, 리셋 > | 제이슨 슈라이어 지음 | 권혜정 옮김 | 한빛미디어

 

IT쪽 일을 하고 있다보니 다양한 분야에 대한 기사나 내용을 종종 접하게 된다. 성장가도를달리는 유명 업체에 대한 내용도 많지만 그에 못지 않게 게임업체에 대한 이야기도 종종 언급되는 것 같다. 특히 게임업체에 만연한 살인적인 근무환경, 그리고 고용안정성 등 특히 타 IT 업종보다 문제가 많은 듯한 느낌을 받았다. 이러한 내용을 보면서 여전히 게임업계는 예전의 근무환경에서 벗어나지 못했다는 생각이 들고(물론 일반 IT 업종도 비슷한 경우가 있지만 업종을 통틀어 그렇게 심각하지는 않는 것 같다) 왜 우리나라에서만 이런 행태가 계속적으로 유지되는 것인지 의문점이 들었다.

이 책은 내가 가진 이런 의문점을 한번에 (슬프게) 날려주는 내용을 포함하고 있다. 성공 가도를 달리는 게임 산업 속 가려져 있던 이름없는 영웅들의 삶이라는 주제를 가지고 있다. 게임을 잘 하지 않아서 그런지, 실제 이름없는 영웅이라서 그런지 모르겠지만 책에 나오는 인물들의 이름 중에서 아는 사람이 거의 없었던 것 같다. 물론 게임 업체도 대부분 생소한 업체들이 었다. 하지만 게임업체 속 근무 형태나 게임이 개발 되는 현장의 모습, 그리고 게임이 개발된 후 배포시 기업간의 관계 등은 우리나라 현실과 꼭 닯아 있다는 생각이 들었다. 게임업체에 만연한 크런치모드, 개발된 게임이 흥행에 실패했을 때 개발 업체에 소속된 개발자들의 해고, 지금은 좀 다르겠지만 게임 유통사의 갑질(?) 등 우리나라와 별반 다를 것 없는 환경을 잘 볼 수 있었다.

<피, 땀, 리셋>은 저자의 전작 <피, 땀, 픽셀>에서 게임을 성공적으로 완성하는 모습을 그려낸 것에 반해 피땀 어린 게임과 회사가 제대로 출시되기도 전에, 또는 시장에서 인정받기도 전에 날아가 버리는 이야기를 다루고 있다. 이 책은 총 9장에 걸쳐 다양한 인물과 게임 개발 과정, 그리고 폐업에 대한 이야기를 풀어놓는다. 다양한 인물과 개발업체가 나오지만 자세히 보면 서로 핵심 인물과 핵심 업체를 고리로  서로 연결되어 있다는 것을 잘 알 수 있었다. 또한 개발자와 무관하게 게임이 개발되는 혹독한 현실과 한순간에 몸담았던 업체가 사라지거나 일부가 해고되는 현실을 잘 그려내고 있다. 문제는 이 과정이 상식적이지 않게 이루어진다는 것이고 더 큰 문제는 이러한 현실이 개선되지 않고 이어진다는 것이다.

 


이 책에서는 다양한 질문을 제시한다. 게임 업체에서는 왜 직업 안정성을 유지하기 어려운가, 정리해고 및 제작사 폐업이 끊임없이 이어지는가, 게임 개발자의 삶과 다음 행보는 어떻게 이어지는가 등 게임 업체와 게임 개발자에 대한 다양한 모습을 제시하고 있다. 물론 이 책의 주된 내용은 게임 제작사가 망했을 때 일어나는 다양한 일들을 설명해주고 있으며, 그 속에서 개발자들이 자신의 삶을 어떻게 이어가는지(타 업체 이직, 업종 전환 등)를 잘 보여주고 있다는 생각이 들었다.

 


이런 상황속에서도 한줄기 희망적인 내용은 포함되어 있다. 해고되거나 회사가 망한 개발자는 다양한 선택에 빠지게 된다. 자신이 직접 개발사를 만들어서 원하는 게임을 개발할 수도 있고, 다른 곳에 가서 취업한 후 게임 개발을 계속 할 수도 있고, 안정적인 새로운 일자리를 찾을 수도 있다. 마치 게임을 하는 동안 원하지 않는 방향으로 게임이 진행될 때 리셋을 누르고 게임을 다시 시작하거나 끝까지 게임을 이어나가는 것과 유사한 것 같다. 물론 아예 게임을 끄고 그 게임을 하지 않는 것도 선택 중의 하나일 것이다. 하지만 한가지 차이느, 인생은 리셋을 한다고 해도 모든 것이 초기화되지 않는다는 것이다. 리셋하기 전까지 본인이 경험한 다양한 경험치를 기반으로 다시 시작할 수도, 새로운 일을 시작할 수도 있다는 점이다. 

게임업계의 현실을 좀 더 적나라하게 볼 수 있는 계기가 된 것 같다. 우리나라뿐만 아니라 다른 나라도 게임업계의 현실을 비슷하다는 느낌이 들었다. 또한 그 업계에서 일하는 개발자들은 나름 자부심과 열정을 가지고 노력하고 있다는 생각도 든다. 코로나19 환경에서 게임업체가 유래없는 호황을 누리고 있는 것 같다. 하지만 실제 개발업체의 환경은 얼마나 개선되었는지는 의문이다. 게임을 하는 게이머들에게 즐거움을 주는 것처럼 게임개발업체에 소속된 인원들도 즐겁게 게임을 개발할 수 있는 여건을 마련하는 것이 필요한 것 같다.

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

< 똑똑한 코드 작성을 위한 실전 알고리즘 > | 조이 하이네만 지음

| 윤대석 옮김 | 한빛미디어

 

개발을 하는 사람이라면 어느 시점부터 알고리즘에 관심을 가지게 되는 것 같다. 어느 순간 자신이 주먹구구식으로 개발을 해 왔다는 것을 느낄때 쯤 알고리즘을 익히면서 보다 깔끔하고 빠른 알고리즘을 적용하는 것에 신경을 많이 쓰는 것 같다. 하지만 시중에 다양한 알고리즘 관련 책들이 나와 있긴 하지만 대부분 개념적인 설명에 머물고 있는 것 같다. 그렇지 않다면 알고리즘이 psedo 알고리즘으로 되어 있어서 제대로 분석하기 어려운 경우도 많은 것 같다.

이 책은 그런 면에서 다른 책들과는 차이점을 보이는 것 같다. 일단 복잡한 수식이나 개념을 글보다는 그림과 예제로 설명한다. 또한 설명하고자 하는 알고리즘도 python 코드로 되어 있어서 python에 어느정도 익숙한 사람이라면 보다 쉽게 알고리즘을 이해할 수 있는 것 같다.  이 책을 접하는 사람은 적어도 프로그래밍을 조금이라도 해 본 사람일 것이다. 전혀 프로그래밍을 해보지 않은 사람이 이런 종류의 책에 크게 관심을 가지지는 않을 것 같다. 다만 이 책에서 설명하는 알고리즘을 좀 더 잘 이해하기 위해서는 어느정도 python 언어에 대한 경험이 있는 것이 좋을 것 같다는 생각이 든다.

책의 시작은 알고리즘에 대한 개념부터 시작한다. 한마디로 알고리즘은 예측 가능한 시간에 정확한 결과를 반화하는, 컴퓨터 프로그램으로 구현된 단계별 문제 해결 방법이라고 볼 수 있다. 여기서 중요한 키워드는 예측 가능한 시간과 정확한 결과, 단계별 문제 해결 방법인 것 같다. 알고리즘에 대해 설명하면서 다양한 문제 해결에 대한 예시를 1장에서 설명한다. 특히 시간 복잡도와 공간 복잡도에 대한 부분을 제대로 이해하고 넘어가야 할 부분이다. 2장에서는 알고리즘 분석에 대해 다룬다. 빅오 표현법을 사용해 알고리즘 성능을 분류하는 방법과 다양한 성능 등급에 대해 설명하고, 정렬 알고리즘을 통해 알고리즘 성능 분석 예를 제시하고 있다. 

3장부터는 실제 다양한 문제에 대한 알고리즘을 다룬다. 해싱, 힙, 정렬, 이진트리, 그래프 등 개발을 하다보면 적어도 한번쯤은 접하게 되는 영역에 대해 자세히 설명하고 있다. 이미 언급한 대로 각각의 알고리즘을 설명할때마다 그림과 예제가 있기 때문에 보다 직관적으로 알고리즘을 이해할 수 있는 것 같다.

 


이 책은 개발자가 본다면 가장 도움이 될만한 책이다. 하지만 전문 개발자가 아니더라도 프로그래밍 언어를 사용한 경험이 있는 사람이라면 이 책에서 언급하는 알고리즘을 어느정도 이해가능하다고 생각한다. 이를 통해 본인이 적용하고자 하는 영역에 알고리즘적인 개념을 추가해서 구현할 수 있지 않을까 생각한다. 알고리즘이란 개발자만의 영역이 아니라 어떤 문제를 해결하기 위한 논리적인 개념으로 볼 수 있을 것 같다. 즉 알고리즘의 개념 중  단계별 문제 해결 방법이 주된 요소 중의 하나라고 생각한다.  단계별 문제 해결 방법은 프로그래밍 언어로 구현할 수도 있고, 수식으로 표현할 수도 있고, 문장으로 표현할 수도 있을 것 같다. 이를 통해 문제 해결을 위한 단계를 차근차근 밟아가는 것이라고 생각한다. 이런 면에서 본다면 이 책은 문제 해결을 위한 알고리즘을 체계적으로 이해할 수 있도록 도와주는 유익한 책이라고 생각한다.


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

[IT] 구글 엔지니어는 이렇게 일한다

2022. 5. 27. 13:51 | Posted by 꿈꾸는코난

< 구글 엔지니어는 이렇게 일한다 > | 타이터스 윈터스, 톰 맨쉬렉, 하이럼 라이트 큐레이션 |

개앞맵시 옮김 | 한빛미디어

 

우리나라 개발환경도 많이 개선되고 있는 것 같다. 예전 주먹구구식 개발환경에서 체계를 갖추고 개발문화와 시스템을 제대로 갖춘 회사가 많이 늘어나고 있다. 하지만 개발은 하나의 문화이고 경영진이든 관리자가 그 문화를 이해하지 못한다면 언제든 허물어질 수 있는 위험성을 안고 있다고 생각한다. 그리고 문화를 갖추지 못한 조직인 그 문화를 만들어 가는 과정도 오랜 시간이 필요한 작업으로 볼 수 있다. 문화라는 단어에서 엿볼 수 있듯이 누군가가  시작한다고 완성되는 것이 아니라 오랜 시간동안 그 조직에 녹아들고 서로 공감을 해야 완성되는 체계라고 볼 수 있다.

그러나 이러한 문화를 제대로 이해하기도 힘들지만 새로운 조직에서 접목하기도 어려운 것도 현실이다. 일단 이러한 문화에 대해 제대로 된 정보를 접하기도 어렵고 문서화된 자료를 구한다고 하더라도 실제 조직에 적용하는 것은 또 다른 문제라고 볼 수 있다. 이런 측면에서 이 책은 개발문화에 대한 이해와 이미 체계를 갖추고 조직에서 활용하고 있는 실제 사례를 접할 수 있다는 점에서 매우 유용한 자료를 제공한다고 볼 수 있다. 책의 분량만 봐도 간단히 소개하는 정도가 아님을 알 수 있다. 약 700여 페이지에 걸쳐 구글  엔지니어들이 일하는 방법을 소프트웨어 엔지니어링 관점에서 잘 소개하고 있다.

프로그래밍과 달리 소프트웨어 엔지니어링은 시간의 흐름에 발맞추어 한 조직이 코드를 구축하고 유지보수하는 데 이용하는 모든 도구와 프로세스를 포괄한 것이다. 즉 당장의 아웃풋이 아니라 향후 지속가능한 개발과 체계를 염두에 두고 다방면으로 고려한 것을 말하는 것이다. 소프트웨어 조직은 시간과 변경, 규모와 성장, 트레이드오프와 비용 등에 대한 기본 원칙을 지키면서 설계, 아키텍처 잡기, 코드 작성을 해야하는 것이다. 이 책은 크게 소프트웨어 엔지니어링에 대한 전제, 문화, 프로세스, 도구에 관련된 4개의 파트로 구분되어 있다. 그리고 각각의 파트에서 세부적인 주제를 다루고 있다.

파트 1에서는 소프트웨어 엔지니어링에 대한 개념 개념을 다룬다. 시간과 변경에 관련된 사항과 규모 확장 및 효율성에 대한 부분, 그리고 트레이드 오프와 비용에 대한 주제를 다루고 있다. 특히 소프트웨어 엔지니어링과 프로그래밍에 대한 관점과 차이점에 대해 자세히 설명한다. 파트 2에서는 문화에 대한 소개를 한다. 팀워크 및 지식 공유의 중요성 및 실제 사례, 팀을 이끌어 가는 방법과 성장하는 조직을 이끄는 방법, 그리고 생산성을 측정하는 방법까지 개발 문화에 관련된 전반적인 내용을 언급하고 있다.

파트 3에서는 프로세스에 대해 소개한다. 개인적으로 볼 때 가장 중요한 파트이지 않을까 생각한다. 스타일 가이드와 규칙의 중요성, 그리고 코드 리뷰를 통한 장점과 사례, 그리고 리뷰 유형을 설명한다. 또한 문서의 중요성과 다양한 작성 방법과 테스트에 대한 전반적인 내용을 다루고 있다. 파트 4에서는 도구를 다룬다. 버전 관리 및 브랜치 관리에 대한 도구와 방법을 보여주면서 빌드 시스템과 빌드 철학에 대해 잘 보여주고 있다. 또한 구글에서 사용하는 코드 리뷰 도구과 정적 분석 및 의존성 관리의 중요성에 대해 언급한다.

이 책은 각각의 파트, 또는 각 파트에 포함된 각각의 장이 독립적적으로 유용한 정보를 제공하고 있는 것 같다. 따라서 책의 내용을 처음부터 읽지 않더라도 본인이 꼭 필요로 하는 파트나 장만 읽어보더라도 많은 도움이 될 것 같다는 생각이 든다. 또한 개발 문화에 대한 지식이 없거나 경험하지 못한 상태라면 이 책을 통해 바람직한 개발 문화와 그 개발 문화를 만들어 가는 방법에 대한 좋은 가이드를 얻을 수 있을 것이라고 생각한다. 또한 이미 개발 문화가 갖춰져 있다고 하더라도 구글의 개발 문화를 접목해서 보다 개선된 개발 문화를 가질 수 있지 않을까 기대도 해 본다.

책의 내용을 방대하지만 그만큼 많은 유용한 정보를 담고 있다고 생각한다. 특히 구글이란 조직에서 실제로 적용해서 사용하고 있는 실제 사례이기 때문에 이론적으로만 치우친 다른 참고 자료보다 훨씬 현실적으로 도움이 될 수 있다고 생각한다. 개발 문화 또는 체계를 갖추고자 하는 조직이라는 꼭 한번 읽어볼만한 책이지 않을까 생각한다.


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

[IT] 동시성 프로그래밍

2022. 4. 21. 17:11 | Posted by 꿈꾸는코난

< 동시성 프로그래밍 > | 다카노 유키 지음 | 김모세 옮김 | 한빛미디어

 

일반 서버 개발자라면 한번쯤은 concurrent programming을 해본 경험이 있을 것이다. C 언어를 사용하든 Java 언어를 사용하든 Python 언어를  사용하든 multi-process 또는 multi-thread 개념을 지원하기 때문에 이를 이용해서 concurrent programming에 대한 개념과 동작에 대해 어느 정도 이해하고 있는 사람이 많을 것 같다. 하지만 thread나 process를 생성하고 실행하는 함수를 활용해서 프로그래밍하는 것과 그 개념을 제대로 이해하고 프로그래밍하는 것에는 큰 차이가 있다. 이 책은 이런 관점에서 제대로 된 concurrent programming에 대한 개념을 설명하고 다양한 언어로 된 샘플 코드를 제시하고 설명하고 있다.

이 책은 총 8장으로 구성되어 있다. 먼저 concurrent programming에 대한 개념과 기술을 소개하고 concurrent programming이 중요한 이유에 대해 설명한다. 또한 concurrent programming을 위한 어셈블리, C, Rust 언어에 대한 기본 개념과 문법 등을 설명한다. 개인적으로 Rust 언어에 대한 개발 경험은 없지만 대략 문법적인 구조를 이해하고 샘플 코드에 설명되어 있는 설명만 읽어도 대략적인 코드에 대해 이해할 수 있었던 것 같다. 따라서 Rust 언어에 대해 잘 모르더라도 큰 부담을 가지지 말고 책을 계속 읽어나가면 될 것 같다.

그 다음부터는 동기화 처리에 대한 주요 알고리즘 및 기술에 구조에 대해 설명한다. 특히 atomic 연산과 mutex, semaphore 등 동기화 처리에 필수적인 개념에 대해 자세히 설명하고 있다. 이 동기화는 기본적으로 race condition이라고 하는 concurrent programming에서 할상 발생할 수 있는 현상을 제어하기 위해 필요하며 추가적으로 deadlock에 대한 개념과 이를 회피하기 위한 알고리즘에 대해 설명한다.

그 다음 장 부터는 세부적인 주제별로 자세히 설명한다. 비동기 프로그램을 구현하기 위한 다양한 방법을 설명하고, 멀티태스크의 개념과 전략, STM(Software Transactional Memory)에 대한 설명과 공평성을 보장하는 lock에 대해 설명한다. 마지막 장에서는 동시 계산 모델에 대해 설명하면서 액터 모델과 파이 계산, 람다 계산 등의 개념을 소개하면서 자유변수 및 변환, 간략화에 대한 소개를 한다. 가장 어려웠던 부분 중의 하나였던 것 같고 아직도 그 개념을 정확히 이해하기는 어려웠던 것 같다. concurrent programming에 대한 개념을 이해하고 활용하고자 할때 8장은 건너뛰어도 괜찮지 않을까 생각한다.

전반적으로 개념 소개 및 필요한 이유, 그리고 샘플 예제가 잘 소개되어 있어서 이해하는 데 별 문제는 없었다고 생각한다. concurrent programming에 대해 이 정도로 다양한 기술과 개념이 한권에 담겨 있는 책은 잘 보지 못한 것 같다. 또한 샘플도 잘 설명되어 있어서 실제 실행시켜 보면서 그 개념을 파악할 수 있도록 구성되어 더 좋았던 것 같다.

한편으로는 몇가지 아쉬움이 있는 부분도 존재한다. 일단 각 예제에 대해 설명까지만 하고 실제 실행 결과를 보여주지 않아 실제 실행해 보기전까지는 그 결과를 예측하기 어렵다는 것이다. 책에 충분히 설명이 있긴 하지만 그래도 실행 결과를 보여줬더라면 조금 더 이해하기 좋지 않았을까 생각한다. 다른 한편으로는 번역에 대한 아쉬움이다. 거의 같은 페이지에서 일부는 한글로 일부는 영문으로 번역된 부분이 있다. 좀 더 일관성있게 번역되었더라면 더 좋지 않았을까 생각한다(이 책의 원 저자가 일본인이기 때문에 원본이 그랬을 수도 있다. 하지만 번역하면서 그런 부분까지 손봤더라면 하는 아쉬움은 있다). 이 부분은 120 페이지의 "다음 그림은 RW락의 읽기락과 뮤텍스락의 실행속도를 비교한 것이다"와 121 페이지의 "다음 그림은 RW락의 Write락과 mutex락의 실행속도를 비교한 것이다"이다.

추가적으로 몇몇 오타가 있는 것 같다.
54 페이지 : 중간 예제에서 "enum Rule" 은 "enum Role"로 수정되어야 한다.
58 페이지 : 코드 설명하는 부분 3에서 "뒤에 기술한 -> 32"는 "뒤에 기술한 -> u32"로 수정되어야 할 것 같다.
120 페이지는 위에 언급한 부분 참조
178 페이지 : 반복서버(interactive server)는 그냥 인터렉티브 서버로 그대로 적는 것이 좋을 것 같다.

하지만 전반적으로 책을 읽고 이해하는 데에는 문제가 없기 때문에 concurrent programming에 대한 개념을 이해하고 활용하고자 한다면 충분히 기본 도서로 사용할 수 있을 것 같다.


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

[IT] 처음 배우는 딥러닝 챗봇

2022. 3. 29. 18:14 | Posted by 꿈꾸는코난

< 처음 배우는 딥러닝 챗봇 > | 조경래 지음 | 한빛미디어

 

요즘 워낙 인공지능이 대세이다 보니 관련한 다양한 서적이 출간되고 있는 것 같다. 관심을 가지고 여러 책을 읽어봤었는데 대부분 복잡한 수학적 개념부터 시작하기 때문에 상당히 읽기 어려웠던 기억이 난다. 물론 간단한 샘플로 같이 설명하고 있지만 테스트 환경 구성도 어렵고 시간도 많이 걸리는 듯한 느낌을 받았다. 제대로 배운다면 수학적인 지식을 기반으로 기본 개념을 이해하고 환경을 구성하는 것이 맞겠지만 실제 테스트에 들어가기 전에 지치는 듯한 느낌을 강하게 받았던 생각이 든다.

이 책은 다른 책들과는 조금 다른 느낌인 것 같다. 일단 복잡한 인공지능 개념이나 수식은 최대한 배제되어 있고, 많은 부분 직접 확인할 수 샘플로 구성되어 있다. 테스트를 위한 샘플도 python으로 조금만 개발해본 사람이라면 별다른 어려움없이 자신이 사용하던 환경 그대로 테스트가 가능하다. 따라서 일단 기본적인 개념 이해와 동작 확인을 쉽게 할 수 있기 때문에 훨씬 수월하게 책을 읽어갈 수 있었던 것 같다.

 


책은 총 11개의 챕터로 구성되어 있다.  1장과 2장에서는 챗봇에 대한 이해와 챗봇의 활용사례를 설명하고, 파이썬에 대한 기본적인 소개를 하고 있다. 챗봇과 파이썬에 대한 기본적인 지식이 있다면 이 부분을 건너뛰어도 되겠지만 그렇더라도 개념을 확인하는 차원에서 빠르게 읽고 넘어가면 좋을 것 같다. 3장부터 5장까지는 한글문장 처리를 위한 개념과 라이브러리, 그리고 실제 사용 예제를 설명한다. 학교 다닐 때 한글 형태소 분석을 하는 연구실이 있었는데 이 책에서 설명하는 라이브러리 사용만으로 한글 형태소 분리 및 텍스트 유사도까지 쉽게 구현할 수 있어서 상당히 흥미로운 것 같다. 이 부분까지가 기본적인 한글 문장 분석으로 볼 수 있을 것 같다.

6장과 7장에서는 챗봇 엔진에 필요한 딥러닝 모델과 챗봇 학습툴 만드는 과정을 설명한다. 한글 문장 분석을 위한 딥러닝 분류 모델을 만드는 방법과 문장 분류를 위한 CNN 모델에 대한 설명, 그리고 개체명 인식을 위한 양방향 LSTM 모델까지 다양한 개념과 어떻게 python으로 구현할 수 있는지 샘플을 이용하여 잘 설명하고 있다. 또한 챗봇 학습툴을 만들기 위해 mysql을 이용한 데이타베이스 연동, 학습데이타 생성 및 관련한 데이타베이스 작업 등을  설명한다. 특히 mysql에 대해 제대로 알지 못하더라도 기본적인 명령어와 문법을 설명하고 있기 때문에 쉽게 따라할 수 있다.

8장부터 11장까지는 7장까지 학습한 내용을 기반으로 챗봇 엔진과 챗봇 API을 만드는 과정을 설명한다. 그리고 이를 응용하여 카카오톡 챗봇과 네이버톡톡 챗봇을 만드는 과정을 설명한다. 특히 카카오톡 챗봇과 네이버톡톡 챗봇을 만들기 위해 회원가입부터 API를 사용하는 방법까지 자세히 설명하고 있기 때문에 쉽게 따라하고 결과를 확인할 수 있는 것 같다.

챗봇은 chatter와 robot의 합성으로 대화하는 로봇으로 정의할 수 있다. 이미 다양한 고객센터에서 텍스트나 음성으로 고객을 응대하고 있고 그 영역이 점점 넓어지고 있다고 할 수 있다. 이 책에서 설명하는 내용을 차근차근 따라한다면 챗봇의 동작방식과 제작 방식을 쉽게 이해하고 실제 경험할 수 있을 것 같다. 그리고 자신만의 챗봇을 만들어 새로운 영역에 적용해 볼 수도 있지 않을까 생각한다.

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

< 리버스 엔지니어링 기드라 실전 가이드 > | 나카지마 쇼타 외 3인 지음 |

이창선, 임재용 옮김 | 한빛미디어

 

리버스 엔지니어링은 하드웨어나 소프트웨어를 분석하여 그 구성이나 기능을 밝혀내는 기술이다. 특히 이 책에서 설명하는 소프트웨어 리버스 엔지니어링은 소스 코드가 없는 환경에서 타깃 프로그램을 분석하는 사용하는 기술을 지칭한다. 따라서 이 책은 컴퓨터를 처음 접하거나 소프트웨어에 대한 개념이 부족한 사람의 경우 이해하기가 상당히 어려운 부분이 있을 수 있다. 물론 설명이 자세히 잘 되어 있고 따라하기 쉽도록 되어 있기 때문에 동일한 분석 결과를 볼 수는 있겠지만 개념을 이해하지 못한다면 분석 결과도 이해하기 어려울 것 같다.

이 책은 미국 국가안보국(NSA)이 소프트웨어 리버스 엔지니어링 도구로 공개한 기드라에 설명한다. 기드라는 디스어셈블러 뿐만 아니라 고기능 디컴파일러를 무료로 사용할 수 있기 때문에 리버스 엔지니어링에 접근하고자 하는 사람들이 기존보다 훨씬  수월하게 사용할 수 있다. 또한 기드라는 많은 아키텍처나 실행화일 형식을 제공하고 있기 때문에 악성코드 분석이나 펌웨어 분석, 취약점 진단 등 다양한 분야에 활용될 수 있다.

생소한 용어와 복잡한 개념이 계속 언급되지만 그래도 처음 접하는 사람을 위해서 기드라 설치 및 환경 구축하는 방법으로 책이 시작된다. 그리고 가장 기본이 되는 리버스 엔지니어링에 대한 개념과 프로그램의 실행 구조, 실행 파일 형식에 대해서도 자세히 설명하고 있다. 물론 기본적인 지식이 있어야 개념을 제대로 이해할 수 있겠지만 책의 내용을 읽어보는 것으로도 개념을 어느정도는 이해할 수 있지 않을까 생각한다.

2장에서는 기드라에 대한 사용방법에 대해 언급하며, 3장에서 실제 리버스 엔지니어링에 대한 분석 과정을 자세히 설명한다. 4장 이후에는 기드라 확장 모듈 및 ELF 크랙미 분석, 윈도우 백도어 분석, 윈도우 패커 분석, 윈도우 멀웨어 분석, 안드로이드 앱 분석 등 다양한 파일을 분석하는 방법 및 분석 결과에 대해 설명하고 있다. 모든 분석 방법 및 분석 결과에 대해 사용 방법을 기반으로 분석 방법을 자세히 제시하고 있으며, 다양한 예제를 통해 내부 구조를 파악하는 방법을 잘 보여주고 있다.

약 900 페이지에 달하는 방대한 분량이지만 기드라 사용 방법과 파일 분석 방법에 대해 자세하게 설명하고 있기 때문에 천천히 따라 하다 보면 원하는 결과를 볼 수 있을 것이라고 생각한다. 비록 초보자를 위한 책은 아니지만 리버스 엔지니어링과 멀웨어 분석에 관심이 있다면 충분히 책에서 언급하는 내용을 따라서 개념을 습득하고 기초 지식을 쌓아가는데는 문제가 없을 것으로 본다.

리버스 엔지니어링에 대한 다양한 책이 나와 있다. 하지만 대부분 개념적인 설명에 머물거나 특정 타겟에 맞춘 형태로 되어 있는 경우가 대부분이다. 하지만 이 책은 기본 개념부터 출발해서 다양한 샘플을 실제로 분석하는 과정을 제시함으로서 관심있는 사람이라면 충분히 따라서 실습하고 원하는 결과를 얻을 수 있도록 구성되어 있는 것 같다. 또한 번역도 매끄럽게 되어 있어서 문장을 이해하는데 어려움도 없기 때문에 내용을 이애하는데 있어서도 별 문제가 없다고 생각한다.

리버스 엔지니어링과 멀웨어 분석에 관심이 있다면 한번쯤 이 책으로 출발해 보는 것도 좋을 것 같다.

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

[IT] 머신러인을 활용한 웹 최적화

2021. 12. 24. 11:02 | Posted by 꿈꾸는코난

< 머신 러닝을 이용한 웹 최적화 > | 아스카 슈헤이 지음 | 김연수 옮김 | 한빛미디어

 

임의의 사용자가 접속하는 웹은 사전에 사용자의 선호도나 성향을 분석하기 어렵다. 많은 웹 페이지들이 고객의 성향에 맞춘 정보를 노출하기 위해 다양한 노력을 기울이고 있다. 특히 전자상거래 또는 OTT 서버스 등이 고객의 클릭을 유도하거나 고객 맞춤형 정보를 제공하기 위해 특별한 노력을 기울이고 있다.

웹 설계자나 개발자가 아무리 노력을 해도 사용자를 100% 이해하고 만들수는 없을 것이다. 하지만 사용자의 행동을 관찰하고 분석한다면 좀 더 사용자에게 맞는 최적화를 진행할 수 있을 것이다. 이를 위해 필요한 도구가 머신러닝과 통계이다.

기존 다양한 노력은 통계 기반으로 최적화를 진행해 왔다고 생각한다. 물론 수치로 표현할 수 있는 통계를 통계 최적화를 할 수는 있지만 다양한 상황을 분석하기 위해서는 머신러닝을 접목하는 것이 필요한 기술적인 요소일 수 있다.

이 책은 크게 8개의 장으로 구성된다. 1장에서는 베이즈 통계를 이용한 가설 검증을 시작하는 형태로 A/B 테스트를 설명한다. A/B 테스트는 웹 최적화를 위해 많이 사용하는 방법 중의 하나이다. 이 장을 통해 확률분포와 베이즈 정리, 다양한 분포에 대해 이해를 높일 수 있다.

2장에서는 확률적 프로그래밍에 대해 설명한다. 데이터가 생성되는 과정을 통계 모델의 형태로 기술하면구체적인 문제를 추상화하고, 다른 대상 및 컴퓨터와 공유할 수 있게 된다. 이 통계 모델을 확률적 프로그래밍 언어(PPL)로 기술하면 컴퓨터를 통해 사후 분포를 추론해 다양한 통계량을 계산하고 출력할 수 있다. 확률적 프로그래밍이란 통계 모델을 소스 코드로 기술해서 자동으로 추론을 수행하는 구조를 의미한다.

3장에서는 조합 테스트에 대해 설명한다. 다양한 요소가 조합되어 이루어진 웹사이트에서 하나의 요소를 업데이트한 디자인뿐만 아니라 여러 요소를 변경한 
디자인에 대해 테스트할 경우가 종종 있다. 이 경우 실험을 어떻게 설계하고 데이터를 분석할 수 있는지 소개한다.

이 이외에도 메타휴리스틱, 슬롯 머신 알고리즘, 조합 슬롯머신, 베이즈 최적화, 앞으로의 웹 최적화 등 다양한 주제에 대해 설명한다. 웹 최적화를 위해서 서로 다른 알고리즘을 사용해서 다양한 문제에 대한 방안을 분석할 수 있다. 특히 웹 최적화를 바탕으로 설명한 알고리즘과 기술들이 다른 영역에서도 사용 가능하다는 것을 일부 보여주고 있다. 물론 몇가지 조건이 있지만 그 조건만 만족한다면 다양한 영역에서 최적화 문제를 분석할 수 있을 것으로 본다.

이론적인 설명과 함께 수식이 제시되고 python을 이용한 테스트를 보여준다. 물론 appendix에 수식 이해를 위해 필요한 행렬 연산 기초와 톰슨 샘플링에 대해 설명하면서 이해를 높이고자 하지만 전반적인 수식의 이해를 어려운 것 같다. 하지만 수식을 이해하지 못한다고 해서 그 배경이나 개념을 이해하기 어려운 것은 아닌 것 같다.

웹 최적화를 고민하고 방안을 검토 중이라면 이 책에서 셜명하는 다양한 방법론들이 많은 도움이 될 것이라고 생각한다.


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

[IT] 소프트웨어 스펙의 모든 것

2021. 11. 21. 19:35 | Posted by 꿈꾸는코난

< 소프트웨어 스펙의 모든 것 > | 김익환, 전규현 지음 | 한빛미디어

 

많은 소프웨어 개발 프로젝트가 다양한 이유로 실패한다는 것은 이미 알려진 사실이다. 프로젝트를 시작할 때 인원과 일정과 비용을 항상 산정해서 시작하지만 대부분 일정과 비용이 예상과 많이 달라지게 되어 예상했던 일정을 넘기거나 추가적인 인원이 프로젝트에 투입되게 된다(물론 프로젝트 막바지에 개발자가 추가된다고 하더라도 일정 단축이 된다는 보장은 하기 어렵다). 어떤 이유때문에 개발 프로젝트가 실패하게 될까?

문제가 발생하는 많은 프로젝트는 제대로 된 스펙이 작성되지 않은 채 프로젝트가 시작되는 경우가 많다. 일반적으로 소프트웨어라고 표현하는 개발 프로젝트는 그 성격상 언제나 변경 가능하다고 생각하기 때문에 스펙 작성을 소홀히 하는 경향이 있다. 그 결과 뒤늦은 스펙 변경으로 인해 전체 프로젝트에 심각한 영향을 끼치는 경우가 종종 눈에 띈다.

스펙을 제대로 작성하는 역량은 소프트웨어 개발에서 가장 어려운 능력이며 소질있는 개발자도 오랜 경험과 노력으로 터득해야 하는 기술이다. 하지만 많은 사람들이 스펙의 중요성에 대해 무시하는 경향이 있다. 대부분은 스펙에 대한 오해에서 비롯된다. 스펙을 적는 것이 좋다는 것은 알지만 어러 사정으로 못 적는다던지 소프트웨어를 만들어보기 전까지는 천재도 그 내용을 다 알 수 없다는 등이다. 특히 스펙을 작성할 시간이 없다는 얘기를 종종하곤 한다. 하지만 이미 언급했던이 대부분 오해에서 비롯한 사항이며 도리어 제대로 된 스펙없이 소프웨어 개발을 시작하는 것이 프로젝트를 위험에 빠뜨린다는 것을 알아야 한다.

소프트웨어 스펙을 개발자만을 위한 문서가 아니다. 소프트웨어 스펙은 모든 프로젝트 이해관계자를 연결하는 프로젝트의 중심이 되어야 한다. 고객, 마케팅, 영업팀에게는 어떤 제품이 만들어질지 미리 알 수 있도록 하며, 프로젝트 관리자에게는 스펙이 관리를 위한 기준이 된다. 개발팀은 스펙을 통해 개발해야 할 제품이 무엇인지를 정확히 안다. 이 외의 모든 인원이 이 스펙을 통해 미리 필요한 준비를 수행하고 처리할 수 있는 기준이 된다.

소프트웨어 개발에서 스펙이 중요한 만큼 제대로된 스펙 작성이 필요하다. 이 책에서는 SRS(Software Requirement Specification) 관점에서 스펙 작성을 설명한다. 종종 스펙과 요구사항을 혼동하는 것을 보게 된다. 요구사항은 일반적으로 고객이나 이해관계자가 요구하는 것이다. 하지만 스펙은 쓰는 사람에 따라 의미가 조금씩 다르다. 따라서 요구사항은 몇줄에 불과할 수 있지만 그 요구상에 매핑되는 스펙은 수 페이지 또는 수십 페이지가 될 수도 있다.

스펙의 중요성은 이 책의 분량만 봐도 알 수 있다. 총 2부로 구성되어 있는데 1부 "소프트웨어 스펙이란?" 부분이 전체의 2/3를 차지한다. 그만큼 스펙의 개념을 이해하는 것이 중요하다는 것을 보여준다. 2부 "SRS 작성법"은 1/3 정도를 차지하는데 실제 SRS 예제를 기반으로 작성해야 하는 항목에 대해 자세히 설명하고 있다.

소프트웨어 스펙의 중요성은 아무리 강조해도 지나치지 않는 것 같다. 그만큼 중요하지만 많은 사람들이 소홀하게  생각하는 것도 사실이다. 프로젝트의 성공을 위해서라도 제대로 된 스펙 작성에 대한 중요성과 작성법을 익힐 필요가 있다고 생각한다. 프로젝트 관리자뿐만 아니라 개발자, 그리고 회사의 구성원 모두 스펙의 중요성을 인식하고 프로젝트의 출발점으로 삼는 인식 전환이 필요한 것 같다. 많은 회사의 구성원들이 이 책을 읽고 스펙에 대한 중요성을 다시 인식하고 개발자는 제대로 된 스펙을 작성할 수 있는 개념과 기술을 터득하면 좋을 것 같다.

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

[IT] 제대로 배우는 수학적 최적화

2021. 10. 22. 08:40 | Posted by 꿈꾸는코난

< 제대로 배우는 수학적 최적화 > | 우메타니 슌지 지음 | 김모세 옮김 | 한빛미디어

 

수학적 최적화는 주어진 제약조건 하에서 목적 함수값을 최소 또는 최대로 만드는 최적화 문제를 현실 사회에서 의사결정이나 문제 해결을 실현하는 수단이다. 특히 최근 산업이나 학술 영역에서 다양한 문제를 최적화 문제로 모델화하고 이를 수학적으로 풀수 있음을 인식하고 있다. 이미 다양한 최적화 솔루션이 공개되고 있으며, 현실 문제 해결을 위한 유용한 도구로 수학적 최적화 이외의 분야에서도 빠르게 보급되고 있다.

이미 다양한 최적화 솔루션이 나와 있는데 굳이 수학적 최적화를 따로 공부해야 할까? 현실 세계에서 수집된 다양한 데이타에 근거한 최적화 문제를 해결하기 위해서는 보다 효율적인 알고리즘 개발이 필요하다. 따라서 최적화 솔루션을  사용하더라도 자신이 처리해야 할 최적화 문제를 모델링하고 최적화 문제에 대한 기본적인 알고리즘, 그리고 사고방식을 제대로 이해하는 것은 필요하다고 볼 수 있다.

이 책은 알고리즘과 데이타구조, 미적분, 선형 대수 등에 대한 기본 지식을 전제로 하고 있다. 따라서 기본 지식이 부족하다면 최적화 문제를 풀기 위해 제시하는 함수와 그 함수를 풀기 위한 과정을 이해하는 것은 쉽지 않다. 다만 증명과정을 정확히 이해하지 못하더라도 어떤 방법으로 최적화 문제를 푸는지에 대한 감은 익힐 수 있기 때문에 너무 어렵게 접근할 필요는 없을 것 같다.

솔직히 9페이지에 나오는 기호 목록을 보면 과연 이책을 제대로 이해할 수 있을까하는 걱정이 앞서기도 한다. 하지만 1장에 나오는 수학적 최적화 입문을 읽어 보면 이 책에서 할려고 하는 것이 무엇인지 대략 이해할 수 있다. 대표적인 최적화 문제 형태와 그 최적화 문제를 해결하기 위한 알고리즘에 대한 전반적인 부분을 소개한다. 이를 통해 대략적인 방향을 잡을 수 있다.

 

 


각 장을 시작하기 전에 그 장에서 설명하고자 하는 것을 간략하게 설명하고 있다. 2장 선형계획에서는 선형 계획 문제의 개념과 선형 계획 문제의 대표 알고리즘인 단체법, 그리고 완화 문제와 쌍대 문제를 설명한다. 3장 비선형 계획에서는 범용적인 알고리즘 개발이 어렵기 때문에 비선형 계획 문제의 특징을 설명하고 제약 없는 최적화 문제와 제약 있는 최적화 문제에 대한 대표적인 알고리즘을 설명한다. 4장 정수 계획과 조합 최적화에서는 산업이나 학술 등 폭넓은 분야에서 현실 문제를 정식화할 수 있는 범용적인 최적화 문제로서 복잡한 계산에 대한 어려움에 기반한 기본적인 사고 방식을 설명한다. 몇몇 특수한 문제에 대한 알고리즘을 설명하고 임의의 문제 사례에 대해 근사 알고리즘과 휴리스틱에 대해 설명하고 있다.

책의 대부분이 수식과 최적화 문제를 해결하기 위한 증명 과정으로 이루어져 있다고 해도 과언이 아니다. 하지만 제시된 최적화 문제는 우리가 일상 생활에서 자주 접하는 문제들로 제시되어 있기 때문에 현실과 무관한 증명이 나열된 것은 아니기 때문에 조금은 더 집중할 수 있는 것 같다.

책의 초반에 저자는 6개월 정도의 진도를 기준으로 학습을 진행하기에는 분량이 너무 많을 수 있다고 언급하고 있다. 나 자신도 증명에 대한 부분은 대부분 이해하지 못하고 넘어간 것 같다. 저자 말대로 여유를 가지고 문제 하나하나에 대한 증명을 천천히 따라가면서 공부하듯이 다시 시작해봐야 할 것 같다.

 

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

이전 1 2 3 4 다음