처음 처음 | 이전 이전 | 1 | 2 | 3 |다음 다음 | 마지막 마지막
알고리즘 트레이닝 : 프로그래밍 대회 입문 가이드 프로그래밍 인사이트 Programming Insight
안티 라크소넨 지음, 조승현.김진현 옮김 / 인사이트 / 2019년 5월
평점 :
구판절판



인사이트에서 진행하는 신간 리뷰어로 선정되어서 책을 읽게 되었다. 


C++ 이지만 이해할 수 있다.


대부분의 알고리즘 책들이 그렇듯이 이 책도 C++ 코드로 설명이 되어있다. 프로그래밍 경진대회에서 가장 높은 비율로 많이 사용되는 언어인데 효율적이며 표준 라이브러리에 많은 양의 자료 구조와 알고리즘이 포함되어 있기 때문이라고 한다. 나같은 경우는 java 만 주로 하고 C++ 은 대학때 이후로 안했지만 책을 이해하는데에는 어려움이 없었다. 우선 소스코드가 길지 않고 문법상 큰 차이가 없다. 그리고 코드에 대한 설명이 글과 그림을 통해서 자세히 설명이 되어있다. 오히려 다른 언어(나같은 경우는 java)를 사용해서 C++ 로 구현된 코드를 변경해 보면서 공부를 하면 더 도움이 된다. 


프로그래밍 기법에 대한 설명


알고리즘 문제를 풀기 위해서는 문제에 대한 이해도 필요하지만 이해한 내용을 코드로 옮기는 능력도 필요하다. 연필로 종이에 써가면서 문제 푸는 방법은 알았는데 이걸 코드로 옮기지 못하면 못푼거나 마찬가지 이다. 이때에 필요한 것들이 프로그래밍 기법이다. 자주 나오는 몇가지 들이 있는데 알고 있으면 정말 많은 도움이 된다. 그중에 하나로 나도 전에 알고리즘 시험볼때 자주 썼던 건데 바로 나머지 연산이다. 


전에 나머지 연산을 위와 같은 방법으로 사용할 때에는 그냥 모르고 사용을 했다. 그냥 공식을 외운거였다. 그런데 고맙게도 이 책에서 설명을 해준 덕분에 이해를 할 수 있었다. 이런 기법들은 있는지도 모를 뿐더러 찾기도 어렵다. 하지만 모르는 순간 다푼 문제가 시간초과를 겪거나 자릿수가 너무 많아져서 에러가 나는 경험을 하게 된다. 그래서 이책에서 알려주는 몇가지 기법들은 문제를 푸는데 꿀팁처럼 도움이 된다. 


문제에 대한 자세한 설명


나는 문제풀때 가장 어려웠던 분야가 동적계획법(DP:Dynamic Programming)이었다. 점화식을 구하면 50줄도 안되는 코드만 써도 문제가 풀리지만 그걸 도출해내지 못하면 그냥 포기해야 했다. 그런데 고맙게도 이 책에서 이렇게 자세히 설명을 해주면서 알려주고 있다. 어떤 책들은 그냥 말로만 설명해주고 끝나는 경우가 있는데 이 책에서는 그림과 공식을 설명해 주고 어떻게 도출되는지 과정도 설명을 해주고 있다.



그리고 다른 챕터들도 마찬가지 이지만 처음에는 트리, 동적계획법, 정수, 행렬등 기본적인 개념을 설명을 해주기 때문에 문제의 유형에 대해서도 파악을 할 수 있다. 


수학에 대한 작은 부록



책 마지막 부분에는 이렇게 수학공식과 기본적인 내용이 담겨져 있다. 페이지 수는 그렇게 많지는 않다. 하지만 내가 생각하기에는 그 내용이 고등학교 정석책 기준으로 상당한 분량을 차지할거라 생각이 된다. 가끔 문제를 풀다 보면 분명 중,고등학교 때에 배운건데 기억이 나지않을때가 있다. 그 공식만 알면 풀릴것 같은 문제인데 도저히 생각이 안날때가 있다. 이 부록을 통해서 조금이나마 그런 내용들을 기억 속에서 되살리는데 도움이 될거라 생각된다. 



결론

내가 이 책을 읽으면서 들었던 느낌은 "어! 이 책 제법 재미있네!" 였다. 읽으면서도 왠지 노트를 꺼내서 연필로 코드를 짜봐야 할것 같고 맞는지 틀린지 실행을 해봐야 할것 같은 느낌이 들었다. 위에서도 말했듯이 실제로 C++ 로 설명된 코드를 Java 로 옮겨보면서 책을 읽어가고 있다. 길지않는 챕터에 핵심과 요점들이 가득 담겨 있어서 나는 정말 만족하면서 읽고 있다. 물론 이건 사람마다 차이가 있을 수는 있다. 하지만 분명한건 어느 정도 코드를 작성할 수 있고 이해할 수 있는 사람이 알고리즘 책을 추천해 달라고 한다면 이 책을 추천해주고 싶다. 




댓글(0) 먼댓글(0) 좋아요(0)
좋아요
북마크하기찜하기 thankstoThanksTo
 
 
 
실전 스프링 부트 워크북 - 마이크로서비스 빌드. 메시지와 DB 핸들링. 테스트. 플러그인까지
펠리페 구티에레스 지음, 이일웅 옮김 / 한빛미디어 / 2017년 6월
평점 :
절판


회사에서 Spring boot를 사용하기 시작한지는 한 1~2년 정도 된것 같다. 쓴다기 보다는 Spring 사이트에 있는 소스들을 가져다 붙이는 수준이었다. 체계적으로 공부해본적은 없고 눈앞에 닥치면 찾아서 하다보니 부족한 점이 많이 느껴졌다. 이번에 받은 이 "실전 스프링 부트 워크북"은 그런 부족한 점을 채워줄수 있는 좋은 가이드가 되었다. 


Chapter 1에서 부터 4까지는 Spring Boot를 실습하기 위한 준비 단계정도로 볼수 있다. 기본적인 이론과 설명들, 프로젝트 구성에 대해서 소개를 해주고 있다. 그리고 Chapter 5부터 본격적으로 Spring Boot를 가지고 Web 어플리케이션을 만들기 시작한다. 


특히 Chapter 6 을 보면 Spring Boot Test 에 대해서 설명을 하고 있는데 책을 읽을 당시 회사에서 Spring Boot Test에 대한 내용을 한참 구글링 하던 시기였다. 내가 개발중인 코드에 대한 Controller Test case를 어떻게 작성을 해야 하나 고민을 하던 중이었는데 책의 내용들이 내게 많은 도움이 되었다. 아마도 이 책이 없었으면 코드가 뭐가 뭔지도 모를 코드들을 가져다가 썼을것이다. 


그리고 이 책의 좋은 점이 실제 작성된 코드에 대해서 중요한 부분에 대한 설명들이 많이 있다는 점이다. 다른 Spring 관련 책들도 소스 코드에 대한 설명들이 있기는 하지만 너무 추상적이거나 어렵게 설명한 책들이 많다. 하지만 이책에서는 적어도 내 기준에는 각각의 소스 코드에 대한 설명들이 이해하기가 쉬웠다. 그리고 개발관련 서적의 딱딱함이 덜 하다는 느낌이 들었다. 


기본적인 Spring Boot 에 대한 설명부터 시작해서 security, 메세징등 기본적으로 알아야 할 기능들은 잘 설명해 놓은 책이다. 물론 이거 한권으로 Spring Boot에 대한 모든 기능을 마스터 할수는 없지만 기본기를 다지기에는 아주 좋은 책이라고 생각이 든다. 단지 아쉬운 점은 이 책에도 중간중간 언급이 되어있지만 지금 사용하고 있는 Spring Boot 최신 버전과는 약간 차이가 있을 수 있다는 점이다. 책에서는 1.3.3 Release 버전을 사용하고 있는데 현재 Spring Boot 최신 버전을 1.4를 넘어 1.5, 2.0을 바라보고 있다. 이부분에 대한 것만 제외 한다면 Spring Boot에 관심 있는 분들에게 한번쯤 읽어보라고 추천해주고 싶다. 


http://blusky10.tistory.com/291



댓글(0) 먼댓글(0) 좋아요(0)
좋아요
북마크하기찜하기 thankstoThanksTo
 
 
 
기적의 아빠육아 - 직장인 아빠의 실현 가능한 육아법
황성한 지음 / 한빛라이프 / 2017년 4월
평점 :
절판



한빛 리더스 책 선택할 때 보통은 컴퓨터 관련 책을 주로 선택했었는데 이번에는 다른 주제를 선택했다. 

예전에 아이가 없을 때에는 전혀 생각해보지도 않았고 관심조차 없었던 주제.

육아

눈 깜짝할 사이에 5살이 되어버린 지후를 보면서 과연 나는 좋은 아빠인가라는 생각을 가끔 해본다. 내 기준으로 아이를 바라보면서 많이 혼내고 야단치고 하는 나의 모습이 부끄러워서 도움을 얻고자 이 책을 선택했다. 

이 책을 지은 저자는 일반적인 직장인지만 육아 관련해서 상당히 유명한 분인것 같다. 실제로 난 처음 알았지만. 아이 둘을 키우면서 육아 블로그(http://blog.naver.com/seanian)를 운영하고 거기에 담긴 육아 관련 노하우를 이 책에 담았다. 바쁜 직장에 다니는 와중에 짧은 시간동안 밀도 높게 아이와 놀아주기위해서 어떻게 해야 하는지, 말하자면 꿀팁 같은 내용들이 이 책에 담겨있다. 


책의 구성이나 디자인은 아기자기 하고 눈에 띄는 색깔들을 맣이 사용해서 글이 쉽게쉽게 들어온다. 


이러한 실제 상황을 재현한 동화 같은 그림들은 내가 상황을 재현하는데에 도움이 될것 같다. 아무래도 아빠인 내가 이해하기에는 텍스트보다는 그림이 더 빠르니깐. 그리고 챕터마다 있는 짧막한 질문에 대한 답변들도 육아 초보인 나에게 많은 생각과 이해를 가져다 주었다. 


여러가지 내용들이 있지만 그중 주요 키워드를 꼽아보자면 "놀이", "독서", "영어" 로 볼 수 있다. 그중에서 나는 "놀이" 에 관련된 내용이 크게 와닿았다. 

놀이

아이가 아빠와 같이 놀이를 할때 다음과 같은 효과가 있다고 한다. 

1. 신체를 건강하게 발달시킨다.

2. 사회적 능력을 발달시킨다.

3. 의사소통 능력을 길러준다.

4. 마음을 어루만져준다.

5. 창의력을 발달시키고 학습능력을 키워준다. 

무엇보다도 엄마보다는 힘이 쎈 아빠가 아이의 놀이에 동참 함으로써 얻어지는 효과는 정말 많고 비교적 적은 노력으로도 큰 효과를 얻을 수 있다고 한다. 가성비가 높다고 해야할까. 하지만 이건 어디까지나 아이와 소통하면서 놀이에 동참할 경우에 그렇다. 보통 아빠들의 경우 아이와 같이 놀게되면 어느새 놀이를 가르치고 있다. 같이 노느게 아니라 노는 방법, 규칙을 가르치려고 한다. 

나의 기억을 돌이켜보면 축구공을 가지고 운동장을 간다. 아이에게 공은 공일 뿐이다. 축구공이든 농구공이든 아직은 다르지 않다. 하지만 나는 어느새 축구공을 발로 차야 한다고 가르치고 있다. 어느샌가 축구공은 농구골대에 넣어서는 안되는 공이 되어버린다. 이 책을 읽기 전에는 몰랐던 나의 행동의 잘못된 점이 새삼 부끄럽게 느껴졌다. 

아이가 느끼는 놀이는 특별한것이 아니다. 그저 같이 있어주고 같은 눈높이에서 바라보고 들어주기만 해도 아이는 나에게 행복한 웃음을 짓는다는 것을 항상 새겨둬야 한다. 

놀이 이외에도 독서나 영어에 대해서 도움을 받을 수 있는 내용들이 많이 있다. 읽고 나서 보면 그리 대단한 일도 아닌 작은 일들인데 난 왜 실천을 하지 못했을까 라는 생각이 든다. 몸이 힘들어서, 바뻐서, 시간이 없어서, 이런 핑계를 대며 미루고 미루는 순간 어느새 아이는 훌쩍 자라 있을것이다. 

내가 생각하는것보다 많은 것을 바라지 않는 아이에게 조그만한 것부터 실천해 줄수 있는 아빠가 될수 있기를 이 책을 읽으면서 다짐해 본다. 


http://blusky10.tistory.com/273


댓글(0) 먼댓글(0) 좋아요(0)
좋아요
북마크하기찜하기 thankstoThanksTo
 
 
 
Hello Coding 그림으로 개념을 이해하는 알고리즘 Hello Coding
아디트야 바르가바 지음, 김도형 옮김 / 한빛미디어 / 2017년 4월
평점 :
장바구니담기




알고리즘에 대한 관심이 많아지면서 서점에는 관련 서적들이 쏟아져 나왔다. 나도 전공이 컴퓨터 공학인지라 관심있게 보는 분야 중 하나이다. 그런데 볼 때마다 느낀점은 좀더 쉽게 설명해줄 수는 없을까라는 아쉬움이었다. 물론 책을 쓴 저자는 쉽게 쓰려고 노력을 했겠지만 내가 이해할 수 가 없어서 좀더 쉬운책을 찾아보게 되었다. 한빛미디어 "나는 리뷰어다" 로 선정되어서 이 책을 받게 되었는데 책 표지부터 상당히 맘에 들었다. 알고리즘 관련 책인데 고리타분한 딱딱한 디자인이 아니어서 쉽지 않은 내용을 쉽게 설명을 했을것 같은 느낌이 들었다. 




책 내용을 살펴보면 우선 그림이 많다. 설명도 설명이지만 그림을 활용해서 쉽게 이해할 수 있도록 내용을 구성해 놨다. 그림 느낌이 약간Head first 시리즈에서 봤던 그림체라는 생각이 잠깐 들었다. 책 내용에 색깔도 있어서 책을 읽는데 지루하지가 않았다. 프로그래밍 책 하면 코드와 글자로 구성이 되어있으면서 온통 검정색 글씨로 도배가 되어있는데 이 책은 그렇지 않았다. 책을 읽는데 부담도 없고 그림책 읽는 듯한 느낌이 들었다. 



그리고 컴퓨터 서적에 각 챕터마다 빠지지 않는 요약과 연습문제가 있다. 각 챕터에서 설명했던 내용들을 간단하고 쉽게 정리를 해두었다. 그리고 내용을 반복할수 있도록 연습문제도 포함되어있다. 연습문제라고 해서 그렇게 어렵지는 않고 공부했던 내용을 잘 생각해보면 충분히 풀수 있는 수준이다. 문제의 정답은 책 마지막 부분에 있다. 



마지막 챕터에서는 이 책에서 자세히 설명하지 않은 다른 알고리즘들에 대해서 간단히 소개를 해주고 있다. 그래서 추가적으로 공부해야 할 것이 무엇인지, 아니면 내가 관심있어 하는 알고리즘이 어떤 알고리즘인지에 대한 방향성을 부여해줄 수 있다. 

https://github.com/egonSchiele/grokking_algorithms

책에서 설명된 github 에 가면 알고리즘의 소스코드를 확인해 볼 수 있다. 스스로 직접 코딩을 해보는 것이 가장 좋은 방법이지만 참고할 자료가 있다는것도 충분히 도움이 된다. 책으로 읽었던 내용을 코드를 봄으로써 좀더 이해가 빨라질 수 있기 때문이다. 처음에는 python으로 코드가 되어있다고 했었는데 직접 들어가 보면 python, ruby, java, javascript 등 다양한 언어로 코드가 작성되어있다. 내가 직접 코드를 작성해보고 비교해보는것도 좋은 학습 방법이 될수 있을것 같다.

알고리즘에 대한 설명을 마치 동화책처럼 내용을 만들어서 쉽게 이해하고 접근할수 있도록 해주는 책이다. 처음 알고리즘을 공부하는 사람이 기초를 잡기 위해서 한번쯤 읽어본다면 많은 도움이 될것 같다. 

"Hello Coding 그림으로 개념을 이해하는 알고리즘" 의 자세한 내용은 한빛미디어 홈페이지에서 확인할 수 있다.




댓글(0) 먼댓글(0) 좋아요(0)
좋아요
북마크하기찜하기 thankstoThanksTo
 
 
 
마이크로서비스 아키텍처 구축 - 대용량 시스템의 효율적인 분산 설계 기법
샘 뉴먼 지음, 정성권 옮김 / 한빛미디어 / 2017년 3월
평점 :
구판절판




  내가 마이크로 서비스 라는 말을 처음 들었던 것은 재작년이었던 것 같다. 회사에서 업무 때문에 처음 접하게 되었던 이 용어는 좀처럼 이해하기가 쉽지 않았다. 그리고 마이크로 서비스라는것 자체가 아직은 먼 이야기라고 생각이 되었다. 그때만 해도 "말이 쉽지. 이게 되겠어?" 라는 의심이 더 컸던것 같다. 하지만 최근에는 많은 서비스 들이 기존의 물리적 인프라 위에서 서비스를 제공하는게 아니라 클라우드 상에서 서비스를 제공하는 일이 많아 지면서 마이크로 서비스 아키텍처라는게 더 힘을 받고 있는것 같다.  


마이크로서비스


마이크로서비스란 작고 자율적으로 협업하는 서비스를 의미한다.


  단어의 뜻 자체는 그렇게 어렵지 않다. 말 그대로 "Mirco(작은단위)" + "Service",  작은 단위의 서비스를 말한다. 각각의 서비스들은 하나의 독립된 주체이며 전체는 각각의 서비스들의 집합라고 생각하면 될것 같다. 하지만 이렇게 시스템을 구성하기에는 그렇게 쉬운 일은 아니다. 이 책에서는 이렇게 쉽지 않은 마이크로서비스 아키텍처에 대해서 알아야할 이론적인 내용에 대해서 설명해주고 있다. 마이크로 서비스에 대한 정의부터 시작해서 모델링, 통합, 분해, 배포, 테스팅, 모니터링, 보안에 이르기 까지 전체적인 그림을 그릴 수 있는 내용을 담고 있다. 


  많은 내용을 담고 있지만 그중에서도 몇가지 눈여겨 본 대목을 뽑아봤다. 




  하나의 시스템을 설계 하는데에 아키텍트의 역할은 정말 중요하다. 위에 글처럼 아키텍트가 결정한 방향의 파급력은 프로젝트 내에서 정말 어마어마 하다. 방향 한번 잘못잡았다가 프로젝트가 산으로 가는 경우도 정말 많다. 그만큼 아키텍트는 의사결정에 있어서 신중해야 하고 많은 것들을 고려해야 하는 역할을 가졌다. 그리고 설계와 함께 개발에 대해서도 어느정도 이해를 하고 있어야 한다. 수채화를 그리는데 밑그림만 다 그렸다고 그림이 완성된것은 아니다. 밑그림 위에 알맞은 색깔을 칠한 후에야 그림이 완성되는 것이다. 그렇기 때문에 아키텍트가 그린 그림을 구현하는 개발 담당자들과의 협업이 그만 큼 중요하다. 가끔 이 역할 관계가 갑을관계처럼 엮이는 경우가 있다. 아키텍트가 설계를 하면 마치 그것이 마치 불변의 법인것 처럼 행동하고 잘못된것을 지적하거나 의문점을 제시하면 받아들이지 않는 사람들이 있다.  그리고 프로젝트의 인프라와 기간, 인력등을 고려하지 않고 이상만을 추구해서 설계를 하는 아키텍트들도 있다. 그리고 나서 안되면 개발자를 탓한다. 이런 상황을 겪어보다 보니 위에 나온 내용을 읽으면서 절로 고개가 끄덕여 졌다. 


  마이크로서비스 아키텍처 상에서는 각각의 기능들이 서로 다른 기능들을 이용하기 위해서는 통신을 해야 한다. 그렇다 보니 서비스간 호출에 대한 정의도 해야하고 보안 또한 중요하다. 아무래도 내부 호출보다는 외부 프로토콜을 이용한 호출이다보니 보안에 취약할 수 밖에 없다. 취약하다기 보다는 더 신경을 써야 한다. 서비스에 대한 호출이 정당한지, 아니면 권한과 역할에 대한 정보를 제대로 가지고 있는지 확인해야 할 정보들이 많다. 그래서 게이트웨이를 쓰고 인증토큰을 발행하고 정보를 암호화 하는 절차들이 필요하다. 전체적인 아키텍처 그림이 위하고 항상 같을수는 없지만 기본적인 틀은 아마 비슷할 것이라고 생각이 된다. 

  나도 현재 마이크로서비스로 구성하지는 않았지만 비슷하게 서비스를 구성하면서 보안에 관련된 검증을 받았었다. 생각지도 않은 곳에서 사용자 정보가 노출이 되고 쉽게 다른 사람의 정보를 수정/삭제 할수 있다는 것을 직접 체험을 했고 그것을 보완하면서 많은 것을 배웠다. 아마도 저 그림이 눈에 들어온 것은 그것때문이었던것 같다. 


  마이크로서비스 아키텍처는 실버불릿은 아니다.


  항상 모든것은 지나치면 오히려 독이 된다. 마이크로서비스가 최근들어 주목을 받고 있긴 하지만 모든 곳에 다 적용할 수 있는 만능은 아니다. 오히려 모놀리스 아키텍처의 구조를 가져가는게 더 알맞은 프로젝트들도 있다. 무작정 하게 되면 오히려 독이 될 수 있다. 마이크로서비스 아키텍처를 적용하기 위해서는 이 구조가 가진 장점들을 잘 살리고 단점들을 잘 보완 할 수 있는 설계를 할 수 있어야 하고 많은 것들을 고려해야 한다. 


  책을 읽으면서 대학교 전공 서적같은 느낌이 들었다. 지금은 번역서를 읽어서 그렇지만 영문 원서였으면 아마도 예전에 대학다닐때 운영체제 전공과목을 들었을 때와 더 비슷한 느낌이 들었을것 같다. 그만큼 많은 내용이 담겨 있고 어려운 내용들이다. 단순히 한권의 책을 읽었다고 해서 마스터 될 영역은 분명 아니다. 하지만 각각의 포인트에서 생각해야 할 점들을 잘 설명해주고있다. 좀 아쉬운점은 번역서이다 보니 번역투의 표현들이 눈에 띄었다. 약간은 매끄럽지 않다고나 할가. 그리고 설명에 대한 그림들이 좀 부족한것 같다. 글로 설명하기가 어려운 내용들을 그림으로 표현해서 설명을 했을때 이해가 더 쉽듯이 책에서 설명하고 있는 내용들을 좀더 그림으로 풀어줬으면 더 좋았을 것 같다는 생각이 들었다. 


http://blusky10.tistory.com/260


댓글(0) 먼댓글(0) 좋아요(0)
좋아요
북마크하기찜하기 thankstoThanksTo
 
 
 
처음 처음 | 이전 이전 | 1 | 2 | 3 |다음 다음 | 마지막 마지막