[Info]Tags categorized posts and contents patterns..

[AJAX] Ajax Code E xamples.. [Book] About the book.. [CSS] CSS Code E xamples.. [DB] Sql Code E xamples.. [DEV] All development stor...

레이블이 마틴 파울러인 게시물을 표시합니다. 모든 게시물 표시
레이블이 마틴 파울러인 게시물을 표시합니다. 모든 게시물 표시

2016년 11월 9일 수요일

[Book] NoSQL: 빅 데이터 세상으로 떠나는 간결한 안내서..

출처 : Outsider's Dev Story https://blog.outsider.ne.kr/

NoSQL: 빅 데이터 세상으로 떠나는 간결한 안내서 - 8점
프라모드 사달게이 & 마틴 파울러 지음
윤성준 옮김
인사이트

이 책의 작년에 아마존에서 SQL쪽 베스트셀러 중 하나였던 NoSQL Distilled: A Brief Guide to the Emerging World of Polyglot Persistence의 번역서로 이름도 유명한 마틴 파울러가 프라모드 사달게이와 공저로 쓴 책이다.

이 책은 200페이지 정도로 데이터베이스 책 치고는 별로 두껍지 않은 분량을 가지고 있는데 책의 초반에 저자들이 언급했듯이 NoSQL을 사용할 지 고민할 때 판단의 근거가 될 수 있는 개념을 최대한 간결하게 제공하는데 그 목적이 있다. 그래서 NoSQL이 가진 개념들이나 고려사항들을 설명하고 있고 각 NoSQL 데이터베이스의 자세한 사용방법등은 별로 다루고 있지 않다. 물론 각 종류별 특성을 설명하면서 간략히 사용방법을 소개하기는 하지만 이는 NoSQL의 데이터베이스 종류별(키-밸류, 그래프, 도큐먼트 등)로 개념을 설명하기 위한 것일 뿐이므로 실제로 사용하려면 관련 책을 다시 보아야 할 것이다.(아마 각각의 데이터베이스에 대한 책이 이 책의 분량을 뛰어넘을 것이다.)

즉, 이 책은 NoSQL에 대해서 아직 잘 몰라서 어떤 NoSQL을 선택해야 할지 모르거나 NoSQL에 대해서 공부해 보고 싶을 때 처음 보기에 딱 좋은 책이다. NoSQL은 RDBMS와 대비되는 개념으로 하나의 이름으로 묶어서 사용하고는 있지만 사실 이 안에는 전혀 다른 특성을 가진 키-밸류 스토어, 그래프, 도큐먼트 디비등이 모두 포함되어 있으므로 하나의 NoSQL을 사용해 봤다고 다른 종류의 NoSQL을 쉽게 사용할 수 있는 것이 아니다. 그래서 처음 NoSQL을 공부하려면 기존에 RDBMS를 공부했을 때와는 많이 다른 새로운 개념들로 혼란을 겪게 되는게 그런 혼란을 줄여주고 NoSQL에 대한 전체적인 그림을 이해하는데 상당히 도움이 되는 책이고 설명도 상당히 잘 되어 있고 번역품질도 좋은 편이다. 이미 NoSQL을 어느 정도 사용하고 있다면 이 책이 별로 도움이 될지는 모르겠지만 NoSQL 중 하나정도만 다뤄보고 다른 NoSQL에 대해서는 거의 모르거나 NoSQL을 처음 공부하기에는 개념잡기가 아주 좋은 책이다. 개념의 설명도 잘 되어 있고 고민해 보아야 할 부분에 대한 힌트도 많이 주는 편이다. 이 책에도 나와있듯이 NoSQL은 아직 역사가 짧기 때문에 많은 유즈케이스가 존재하지 않고 RDBMS에서의 경험만으로는 적용하기 어려운 많은 개념이 포함되어 있는데 이런 부분에 대한 자료도 많지 않고 공부하려고 해도 너무 많은 내용을 보아야 하는데 이 책이 그런 부분에 대한 길잡이를 해줄만 하다. NoSQL에 대해서는 예전에 정리했던 NoSQL에 대해서라는 글도 참고할만 하다.(어느새 저 정리를 한지가 3년이나...)

책의 내용

1부 "기본 개념"에서는 NoSQL에 공통적으로 적용될 만한 기본적인 개념들을 설명하고 있다. 기존의 RDBMS 구조에서 왜 NoSQL이 필요했고 그래서 NoSQL은 어떤 기능에 초점을 맞추고 있는지를 쉽고 명확하게 설명한다. 이 책에서는 NoSQL을 특정 기술이 아니라 하나의 동향으로 보고 있고 NoSQL이 필요한 가장 큰 이유를 클러스터가 필요한 규모의 데이터 크기와 성능 요건하에서의 데이터 접근 처리와 좀 더 편리한 데이터 조작 방식을 통한 애플리케이션 개발 생산성 향샹으로 보고 있다.
NoSQL 데이터베이스에 대한 흔한 이야기 중 하나는 NoSQL 데이터베이스에는 스키마가 없기 때문에 애플리케이션 운영 중에도 데이터 구조를 바꾸기 쉽다는 것이다. 우리는 동의하지 않는다. 무스키마 데이터베이스 역시 암묵적 스키마를 가지고 있으며 데이터 구조를 바꿀 때 이 규칙을 수정해야 한다.
처음에는 NoSQL의 데이터 모델이 가지는 기본적인 개념을 설명하면서 관계형 데이터베이스가 튜플 중심인데 반해 집합지향이라는 개념을 설명한다.(모든 NoSQL이 집합지향인 것은 아니다.) 집합 지향은 어플리케이션 데이터 모델을 개발할 때 데이터를 어떻게 접근할 지를 고민해 보아야 하고 관계형 데이터베이스도 복잡한 관계를 처리하는데 아주 뛰어난 것은 아니라는 것을 유념하라고 하고 있다. 그리고 스키마가 없기 때문에 균일하지 않은 데이터를 처리하기 쉽지만 데이터를 확인하려면 어플리케이션 코드를 봐야한다는 문제도 있다.
이어서 NoSQL의 특징인 클러스터링을 설명하고 있다. 샤딩으로 수평적 확장을 할때의 장점과 발상할 수 있는 문제 및 해결방법등을 제시하고 샤딩에 비해서 마스터-슬레이브 복제를 할 때는 또 어떤 다른 점이 있는지를 설명하고 있다.
흔히 듣는 주장중 하나가 NoSQL 데이터베이스는 트랜잭션을 지원하지 않으므로 일관성도 지원하지 않는다는 것이다. 이런 주장은 일반적으로 틀렸다고 할 수 있는데 많은 중요사항을 얼버무려 넘겼기 때문이다. 이에 대한 첫재 해명은 트랜잭션이 없다는 것은 보통 일부 NoSL 데이터베시으 특히 집합 지향 데이터베이스에만 해당하는 것이다. 둘째, 집합 지향 데이터베이스는 원자적 업데이트를 지원하지만 한 집합에 대해서만 지원한다.
클러스터를 이용할 때는 일관성이 항상 문제되는데 이를 어떻게 해결하고 접근해야 하는지에 대한 범용적인 개념을 설명하는데 어려운 개념이지만 이해하기가 참 좋다. 그리고 중요한 개념중 하나인 결과적 일관성(eventual consistency) 즉, 특정 시점에는 노드에 복제 일관성 불일치가 있을 수 있지만 결국에는 모든 노드가 같은 값으로 업데이트 된다는 개념을 설명하고 있다.

2부 "적용"에서는 NoSQL의 종류별로 좀더 구체적으로 설명하고 있다. 키-값 저장소, 문서 데이터베이스, 칼럼 패밀리 데이터 저장소, 그래프 데이터베이스를 차례차례 설명하면서 어떤 특성을 가지고 있고 어떤 장단점이 있는지를 설명해서 상황에 따라 어떤 종류를 사용해야 할지 판단해야 할 근거를 제공한다. 각 종류마다 적절한 사용처와 사용하지 말아야 할 경우를 제시하는 것도 고민할 때 꽤 유용할 꺼라 생각한다.
2부의 뒷부분에서는 스키마를 변경해야 하거나 레거시 시스템에 적용해야 하는 등의 실제로 일어날 수 있는 상황에 대해서 설명하고 있고 NoSQL외에 다른 데이터 처리 방법등에 대해서 소개하고 있는데 이 뒷부분은 크게 중요하지는 않아 보인다.(몇페이지 되지도 않는다.)

2016년 2월 24일 수요일

[Book] Refactoring - 기존 코드의 디자인을 개선하는 방법..

출처 : Outsider's Dev Story https://blog.outsider.ne.kr/

Refactoring - 10점
Martin Fowler 지음, 윤성준.조재박 옮김/대청(대청미디어)

마치 TDD처럼 언젠가는 해야지 하면서 맘속에만 있고 현실로는 적용해보지 못하던 리팩토링을 좀 알기 위해서 집어든 책이다. 나는 자바를 사용하고는 있고 최근에는 MVC Model 2니 해서 클래스의 사용을 좀 높이고 있기는 하지만 자바가 객체지향언어임에도 불구하고 나는 여전히 절차식 프로그래밍을 하고 있다.

단순히 재사용성을 위해서 클래스를 사용하고 있을뿐 전혀 객체지향이라고 할 수 없는 개발을 하고 있고 이런 거는 대부분 마찬가지일 것이다. 항상 코드를 더 좋게 만들고자 하는 마음은 있지만 현실적으로는 적용하기가 쉽지 않고 그에 대한 지식을 쌓는 것도 만만치 않다.

이 책의 저자인 마틴 파울러는 리팩토링에 흠뻑 빠져 있는 것을 느낄 수 있으며 초기에 아주 간단한 리팩토링의 예제를 보여주고는 리팩토링이 무엇이며 어떻게 해야 하는 가를 설명하면서 개발자들이 리팩토링을 하려고 할때의 고민들은 하나하나 설명해 주고 있다.

이 책에서 마틴 파울러가 설명하고 있는 리팩토링에 대한 개념중 가장 맘에 드는 것은 리팩토링을 하면 언제든 더 좋은 디자인으로 바꿀 수 있다는 것이다. 항상 초기 설계할때 좋은 설계, 좋은 디자인을 하는 것은 매우 중요하지만 우리 모두 현실적으로 이것이 쉽지 않은 것임을 알고 항상 설계와 디자인은 개발과정에서 수없이 바뀌게 마련이다. 하지만 리팩토링을 잘 할수 있는 사람은 이에 대한 걱정이 없다는 것이다. 일단 코드를 짜고 잘못된 부분이 있거나 의도하지 않은 방향으로 갔으면 언제든지 리펙토링으로 더 좋은 디자인으로 코드를 수정할 수 있다는 것이다.

간단한 개념 설명뒤에는 대부분의 책 내용을 실제 리팩토링을 할 수 있는 예재로 보여주고 있다. 자바를 기준으로 예제를 보여주고 있기 때문에 자바개발자라면 어느정도 이해할 수 있을 것이고 개념은 좀 어렵더라도 해당 리팩토링 예제에만 집중할 수 있도록 간단하게 예제를 작성해 놓았기 때문에 그렇게 다다가기가 어렵지는 않을꺼라고 생각한다. 각 리팩토링을 단위별로 뽑아내어서 설명하고 있다. Extract Method, Move Method등 하나하나 단위화 하여서 처음 배우는 사람이 최대한 접근하는 것이 쉽도록 제공하고 있다.

물론 다 읽고 난 후에도 이런것은 적용하는 것이 쉽지 않다고 생각하고 있다. 리팩토링을 하려면 어떤 부분을 리팩토링해야 되는지 알아야 하고 그 부분을 찾으려면 어떻게 리팩토링해야 하는지 확실히 알고 있어야 하는데 현실에서의 코드는 여기에 나와있는 예제처럼 명확치 않을 것이 확실하기 때문에 쉽지 않다. 여기 나오는 수십개의 예제를 다 외우고 있을 수도 없고 외우고 있다고 하더라도 이걸 현실에서 적용하려면 단순히 외운것 만으로는 할 수 없고 실제 경험적으로 알고 있어야 한다. 책을 옆에 두고 있다고 하더라도 적용하기는 보통의 노력으로는 쉽지 않을 것이다.

하지만 나에겐 이게 크게 가치있어 보인다. 리팩토링은 그만큼 매력적으로 보이고 아직 OOP를 제대로 알지 못하는 나에게도 이 책을 보면서 객체지향이 어떤것인지 약간은 개념을 잡을 수 있었다. (이걸로 객체지향을 알게 되었다면 웃긴 일이겠지만... ㅋ) 마틴 파울러가 얘기하는 것 중에서 메소드를 추출할 때 주석단위로 추출해서 메소드명을 명확히 하여서 주석자체가 필요없게 한다는 것은 꽤나 멋진 아이디어라고 생각했고 내가 추구하는 개발방향하고도 맞아떨어진다고 생각한다.

결국 이런 개념을 현실로 적용하려면 아주 간단한 거부터 적용하기 시작하는게 최고라고 생각한다. 그리고 물론 여기서 리팩토링을 한다는것 더 괜찮은 객체지향코드로 바꾼다는 것이기 때문에 리팩토링을 하기 전에 객체지향부터 확실히 이해해야 될듯하다. 그걸 제대로 이해못하면 객체지향 자체가 어렵기 때문에.... 하나하나 붙잡고 지속적으로 노력해서 경험을 통해서 감을 잡는 수밖에 없을듯 하다. 그래도 마틴파울러가 어떤걸 어떻게 바꾸어야 하는지는 다 적어놨으니....