본문 바로가기

Engineering WIKI/Book27

[일래스틱 스택 6 입문] 1장. 일래스틱 소개 일래스틱서치 개념 및 사용 이유 일래스틱서치는 실시간 분산 검색 및 분석 엔진으로, 수평적으로 확장할 수 있다. 또한 일래스틱 스택의 핵심으로, 중앙에서 데이터를 저장해 다양한 문제를 해결하거나 예상치 못한 상황을 발견해 적절한 조치를 취할 수 있다. 일래스틱서치를 데이터 저장소로 사용하면 얻을 수 있는 주요 이점 스키마리스와 도큐먼트 지향 검색 분석 풍부한 클라이언트 라이브러리와 REST API 지원 운영 및 확장 용이 거의 실시간 (Near Real Time) 신속성 결함 허용성 (Fault tolerant) 스키마리스 및 도큐먼트 지향 데이터 구조에 엄격한 기준이 없고, 다양한 JSON 도큐먼트를 저장할 수 있으며, 관계형 데이터베이스의 행, 열과 달리 일래스틱서치에서 일급객체로 취급된다. 엄청난 .. 2023. 8. 22.
리팩토링 2판 - Chapter 11 (API 리팩터링) 11.1 질의 함수와 변경 함수 분리하기 우리는 외부에서 관찰할 수 있는 겉보기 부수효과(observerable side effect)가 전혀 없이 값을 반환해주는 함수를 추구해야 한다. (...중략...) 겉보기 부수효과가 있는 함수와 없는 함수는 명확히 구분하는 것이 좋다. (...중략...) 이를 명령-질의 분리(command-query sepration)라 하는데 p.413 명령 - 질의 분리는 꽤나 유용한 행동지침입니다. 결과 값을 가져오는 것과 객체 내부 상태 변경을 한 번에 하고 있으면 사용하는 입장에서는 결과를 예측하기 어려워집니다... 그래서 두 개의 함수로 분리시키는 것이 유지보수에 좋습니다. 11.3 플래그 인수 제거하기 함수의 인자로 boolean 값을 넘기는 관례는 피해야 합니다... 2022. 10. 20.
리팩토링 2판 - Chapter 10 (조건부 로직 간소화) 조건문이 복잡해지는 경우 다루기가 굉장히 까다로워지는데 이것을 해결하기 위한 다양한 방법들을 제안합니다. 10.3 중첩 조건문을 보호 구문으로 바꾸기 함수 중간에 guard 로 로직을 중단하는 게 의도를 더 드러낼 수 있는 경우가 있습니다. Swift에서는 명시적으로 guard라는 구문이 있어서 편리하게 사용할 수 있는데, 언어 레벨에서 구문을 지원하기 때문에 많은 개발자들이 더 활발하게 사용하게 되는 것 같습니다. 중첩 조건문을 보호 구문으로 바꾸기 리팩터링의 핵심은 의도를 부각하는데 있다. 나는 if-then-else 구조를 사용할 때 if절과 else절에 똑같은 무게를 두어, 코드를 읽는 이에게 양 갈래가 똑같이 중요하다는 뜻을 전달한다. 이와 달리, 보호 구문은 "이건 이 함수의 핵심이 아니다. .. 2022. 10. 20.
리팩토링 2판 - Chapter 9 (데이터 조직화) 이번에는 데이터 구조에 집중한 리팩토링을 다룹니다. 9.2 필드 이름 바꾸기 데이터 구조는 무슨 일이 벌어지는지를 이해하는 열쇠다. p.334 image_credit — Educative 데이터 구조는 단순히 값을 담아두는 공간이 아니라 프로그램을 더 잘 이해할 수 있도록 유도하는 역할을 해줍니다. 데이터 구조를 잘 선택하는 것만으로도 프로그램의 이해도를 높일 수 있다고 합니다. 알고리즘 문제를 풀다 보면 큐나 스택을 적절히 고르는 것만으로 문제가 쉽게 해결되는 것을 경험한 적이 있는데 실무에서도 동일하게 적용될 수 있을 것으로 기대됩니다. 데이터 구조가 중요한 만큼 반드시 깔끔하게 관리해야 한다. 다른 요소와 마찬가지로 개발을 진행할수록 데이터를 더 잘 이해하게 된다. 따라서 그 깊어진 이해를 프로그램.. 2022. 10. 20.
리팩토링 2판 - Chapter 8 (기능이동) Chapter 8: 기능이동 지금까지는 프로그램 요소를 생성 혹은 제거하거나 이름을 변경하는 리팩터링을 다뤘다. 여기에 더해 요소를 다른 컨텍스트(클래스나 모듈 등)로 옮기는 일 역시 리팩터링의 중요한 축이다. p.277 적절한 위치에 기능이 있는 것도 가독성을 증가시키고 이해를 잘 할 수 있도록 도와준다는 내용입니다. 좋은 소프트웨어 설계의 핵심은 모듈화가 얼마나 잘 되어 있느냐를 뜻하는 모듈성(modularity)이다. 모듈성이란 프로그램의 어딘가를 수정하려 할 때 해당 기능과 깊이 관련된 작은 부분만 이해해도 가능하게 해주는 능력이다. p.278 모듈성이 중요하다는 것은 알고 있었지만 개발하면서 해당 부분에 대한 이해도가 높아지면 적극적으로 모듈성을 개선할 수 있다는 생각은 잘 하지 못하고 있었습니.. 2022. 10. 20.
리팩토링 2판 - Chapter 7 (캡슐화) 모듈을 분리하는 가장 중요한 기준은 아마도 시스템에서 각 모듈이 자신을 제외한 다른 부분에 드러내지 않아야 할 비밀을 얼마나 잘 숨기느냐에 있을 것이다. p.235 클래스는 본래 정보를 숨기는 용도로 설계되었다. p.235 7.1 레코드 캡슐화하기 저장하는 용도로는 레코드보다 객체를 선호하는 편이다. p.236 객체를 사용하면 어떻게 저장했는지를 숨긴 채 세 가지 값을 각각의 메서드로 제공할 수 있다. 사용자는 무엇이 저장된 값이고 무엇이 계산된 값인지 알 필요가 없다. p.237 덩치 큰 데이터 구조를 다룰수록 쓰기 부분에 집중한다. p.243 setter 부분에서 데이터의 변화가 일어나기 때문에 가변 데이터라면 쓰기 부분에 집중해야 한다. 데이터 구조의 읽기 전용 프락시를 반환하는 방법도 있다. 클라.. 2022. 10. 20.