728x90
728x90
한빛미디어 서평단 두 번째 서적이다! 이번에는 저번과는 달리 관심이 있었던 AWS 구축에 관련된 책이었다. 평소 관심이 있어서 그런지 색상부터 매우 영롱하게 느껴진다. 책의 구성은 총 6파트로 나뉘고 제목처럼 14가지의 패턴으로 구성되어 있다. 책 구성 Part 1. 웹 시스템 패턴1. 이벤트 사이트 패턴2. 기업 웹사이트 패턴3. 성능을 중시하는 인트라 웹 패턴4. 가용성을 중시한 인트라 웹 Part 2. 스토리지 시스템 패턴5. 백업 패턴6. 파일 서버 Part 3. 데이터 분석 시스템 패턴7. 구조화된 데이터 분석 패턴8. 비구조화된 데이터 분석 패턴9. AI와 IoT Part 4. 애플리케이션 쾌속 개발 패턴10. 서버 애플리케이션 쾌속 개발 패턴11. 모바일 앱 쾌속 개발 Part 5. 클라우드..
특정 디자인 패턴을 정리하기 이전에 기본적으로 디자인 패턴이 뭔지 알아야 할 것이다. 디자인 패턴이란? 객체 지향 설계는 소프트웨어로 해결하고자 하는 문제를 다루면서, 동시에 재설계 없이 또는 재설계를 최소화하면서 요구 사항의 변화를 수용할 수 있도록 만들어 준다. 객체 지향 설계를 하다 보면, 이전과 비슷한 상황에서 사용했던 설계를 재사용하는 경우가 발생한다. 이런 설계는 특정 상황에 맞는 해결책을 빠르게 찾을 수 있도록 도와주는데, 이렇게 반복적으로 사용되는 설계는 클래스, 객체의 구성, 객체 간 메시지 흐름에서 일정 패턴을 갖는다. 이런 패턴을 습득함으로써 다음과 같은 이득을 얻을 수 있다. 상황에 맞는 올바른 설계를 더 빠르게 적용할 수 있다. 각 패턴의 장단점을 통해서 설계를 선택하는데 도움을 ..
(이번 장은 잘 이해하지 못하는 부분이 많았다. 2회독 3회독을 하면서 이 부분이 점점 익숙해지기를 바란다..) 싱글톤(singleton)이란 인스턴스를 오직 하나만 생성할 수 있는 클래스를 말한다. 싱글턴의 대표적인 예는 함수와 같은 무상태(stateless) 객체나 (설계상 유일해야하는) 시스템 컴포넌트가 있다. 클래스를 싱글턴으로 만들면 이를 사용하는 클라이언트를 테스트하기가 어려워질 수 있다. 싱글턴 인스턴스를 가짜(mock) 구현으로 대체할 수 없기 때문이다. 싱글턴을 만드는 방식은 보통 둘 중 하나이다. 두 방식 모두 생성자는 private로 감춰두고, 유일한 인스턴스에 접근하는 수단으로 public static 멤버를 하나 만든다. 첫번째 방법. public static 멤버가 final 필..
자바로 개발을 하다보면 객체를 복사할 일이 있다. 이럴 때 나오는 개념이 얕은 복사(Shallow Copy)와 깊은 복사(Deep Copy) 개념인데, 두 개념의 차이를 간단하게 말하면 얕은 복사는 객체의 참조값(주소값)을 복사하고, 깊은 복사는 객체의 실제 값(value)를 복사한다. 1. 얕은 복사(Shallow Copy) 객체를 복사할 때, 해당 객체만 복사하여 새 객체를 생성한다. 복사된 객체의 인스턴스 변수는 원본 객체의 인스턴스 변수와 같은 메모리 주소를 참조한다. 따라서, 해당 메모리 주소의 값이 변경되면 원본 객체 및 복사 객체의 인스턴스 변수 값은 같이 변경된다. 2. 깊은 복사(Deep Copy) 객체를 복사 할 때, 해당 객체와 인스턴스 변수까지 복사하는 방식. 전부를 복사하여 새 주..
아이템 1에서 언급한 정적 팩터리와 생성자에게는 선택적 매개변수가 많을 때 적절히 대응하기 어렵다는 공통적인 제약사항이 있다. 식품 포장의 영양정보를 포함하는 클래스를 생각해보자. 영양정보는 1회 내용량, 총 n회 제공량, 1회 제공량당 칼로리같은 필수 항목 몇개와 총 지방, 트랜스지방, 포화지방, 콜레스테롤, 나트륨 등 총 20개가 넘는 선택 항목으로 이뤄진다. 그런데 대부분 제품은 이 선택 항목 중 대다수의 값이 0이다. 이런 클래스용 생성자 혹은 정적 팩터리는 어떤 모습일까? 프로그래머들은 이럴 때 점층적 생성자 패턴(telescoping constructor pattern)을 즐겨 사용했다. 필수 매개변수만 받는 생성자, 필수 매개변수와 선택 매개변수 1개를 받는 생성자, 선택 매개변수를 2개까지..
25장. 테스트 주도 개발 패턴 우선 기본적인 전략에 관한 질문에 답해야 한다. 테스트한다는 것을 무엇을 뜻하는가? 테스트를 언제 해야 하는가? 테스트할 로직을 어떻게 고를 것인가? 테스트할 데이터를 어떻게 고를 것인가? (위에 처럼 글로 정리를 안해서 그렇지 위와 같은 문제점에 혼자서 답을 얻기 힘들었기 때문에 이 책을 읽고있는게 아닌가 하다) | 테스트(명사) | 자동화된 테스트를 만들어라! 테스트하다(test)는 '평가하다'라는 뜻의 동사다. 그 어떤 소프트웨어 엔지니어도, 아무리 작은 변화라도 테스트하지 않고 릴리즈하지는 않는다. 변화를 테스트할 수 있다고 해도, 실제로 변화를 테스트하는 것은 '테스트를 갖고 있다'는 것과는 같지 않다. | 격리된 테스트 | 테스트를 실행하는 것이 어떤 식으로 영..