본문 바로가기

책터디

2. 웹 최적화 웹 최적화란? 최고의 웹 성능을 만드는 최적화 조건을 갖추는 것 프론트엔드 최적화 스크립트를 병합하여 브라우저의 호출 개수를 줄임 스크립트 크기를 최소화해 바이트 자체를 줄임 스크립트를 gzip 등으로 압축하여 전달 WebP 등으로 브라우저 이미지 형식을 최적화 이미지 손실, 무손실 압축 Cache-Control 응답 헤더를 통해 브라우저 캐시를 충실히 사용 도메인 수를 줄여 DNS 조회를 최소화 DNS 정보 미리 읽어오기 CSS를 HTML 상단에, 자바스크립트를 HTML의 하단에 위치시키기 페이지 미리 읽어오기 타사 스크립트가 웹 성능을 방해하지 않도록 조정 백엔드 최적화 DNS 응답이 빨라지도록 서버 증설 DNS 응답을 빠르게 할 수 있도록 DNS 정보를 최대한 캐싱 웹 서버가 있는 데이터 센터와 네..
04. 부자연스러움을 해결하는 도메인 서비스 서비스란? 소프트웨어 개발에서 말하는 서비스는 클라이언트를 위해 무언가를 해주는 객체를 말한다. 도메인 주도 설계에서 말하는 서비스 도메인을 위한 서비스 애플리케이션을 위한 서비스 도메인 서비스란? 시스템에는 값 객체나 엔티티로 구현하기 어색한 행동도 있다. 도메인 서비스는 이런 어색함을 해결해주는 객체다. 도메인 서비스는 자신의 행동을 바꿀 수 있는 인스턴스만의 값을 갖지 않는다는 점에서 값 객체나 엔티티와 다르다 도메인 서비스의 사용 생각 없이 모든 처리 코드를 도메인 서비스로 옮기면 다른 도메인 객체는 그저 데이터를 저장할 뿐, 별다른 정보를 제공할 수 없는 객체가 되는 결과는 낳는다. 물론 도메인 서비스로 옮기지 않으면 어색한 행위도 있다. 어떤 행위를 값 객체나 엔티티에 구현할지 아니면 도메인 ..
03. 코드 구성하기 계층으로 구성하기 soon |-- domain ||-- Account ||-- Activity ||-- AccountService ||-- AccountRepository |-- persistence ||-- AccountRepositoryImpl |-- web ||-- AccountController 이 패키지 구조는 최적의 구조가 아니다. 애플리케이션의 기능 조각이나 특성을 구분 짓는 패키지 경계가 없다. 애플리케이션이 어떤 유스케이스들을 제공하는지 파악할 수 없다. 패키지 구조를 통해서는 우리가 목표로 하는 아키텍처를 파악할 수 없다. 기능으로 구성하기 soon |-- account ||-- Account ||-- AccountController ||-- AccountRepository ||-- A..
03.생애주기를 갖는 객체 - 엔티티 엔티티란 ? 엔티티 : 도메인 모델을 구현한 도메인 객체를 의미한다. 값 객체 : 도메인 모델을 구현한 도메인 객체 엔티티와 값 객체의 차이는 동일성을 통해 식별이 가능한지 아닌지에 있다. 속성으로 구별되지 않는 객체 예 : 사용자 사용자는 속성이 아닌 동일성(identity)으로 식별된다. 엔티티의 성질 엔티티는 속성이 아닌 동일성으로 식별되는 객체다. 가변이다. 속성이 같아도 구분할 수 있다. 통일성을 통해 구별된다. 가변이다. 엔티티는 가변성을 갖는 객체다. 값 객체는 불변성을 갖기 때문에 교환(대입)해 수정했지만, 엔티티는 수정을 위해 객체를 교환하지 않는다. 엔티티의 속성을 수정하려면 객체의 행동을 통해 수정하면 된다. 단, 모든 속성이 반드시 가변일 필요는 없다. 속성이 같아도 구분할 수 있다..
02. 시스템 특유의 값을 나타내기 위한 '값 객체' 값 객체란? 시스템 특유의 값을 표현하기 위해 정의하는 객체 객체이기도 하고 동시에 값이기도 하다. 시스템 특유의 값을 나타내는 객체다. 값의 성질과 값 객체 구현 값의 성질 변하지 않는다. 주고받을 수 있다. 등가성을 비교할 수 있다. 값 객체는 시스템 특유의 값에 대한 표현이며, 값의 한 종류다. 값의 성질은 값 객체에도 그대로 적용된다. 불변하는 값의 장점 상태가 변화하지 않게 하는 프로그램을 단순하게 만들 가능성이 있는 제약이다. 물론 상태가 변하지 않는 객체의 단점도 있다. 그중 대표적인 것은 객체의 일부 값만 바꾸고 싶을 때도 객체를 아예 새로 생성해야 한다는 점이다. 이 점은 상태가 변할 수 있는 객체에 비해 성능 면에서 불리하기 때문에 아주 심각한 상황이 아니고서는 값 객체라도 상태를 바꿀..
01. 도메인 주도 설계란? 도메인 주도 설계란 무엇인가? 개발자가 소프트웨어를 개발하면서 가치 있는 지식과 그렇지 않은 지식을 잘 구분하려면 어떤 능력이 필요한가? > 먼저 소프트웨어 이용자의 세계를 이해해야 한다. 소프트웨어 이용자에게 무엇이 중요한 지식인지는 바로 이 이용자의 세계에 따라 달라진다. > 유용한 소프트웨어를 만들려면 이용자의 문제가 무엇인지 파악하고, 이를 해결할 수 있는 최선의 수단을 생각해야 한다. 도메인 주도 설계는 이러한 고찰을 반복하는 설계를 통해 이용자의 세계와 소프트웨어 구현을 연결 짓는 것이 목적이다. 도메인 지식에 초점을 맞춘 설계 기법 도메인 주도 설계 : 도메인 지식에 초점을 맞춘 설계 기법이다. 도메인 == '영역' 도메인에 속하는 개념과 사건을 이해하고, 그중에서 문제 해결에 유용한 것을 ..
들어가며. 도메인 주도 설계는 개발자에게 있어 엔지니어링에 대한 관점을 완전히 바꾸에 되는 큰 깨달음이다. 도메인 주도 설계의 개념 : 비즈니스상의 문제를 해결하기 위해 비즈니스를 이해하고, 비즈니스를 표현하는 것이다.
02. 의존성 역전하기 단일 책임 원칙 컴포넌트를 변경하는 이유는 오직 하나뿐이여야 한다. '책임' 은 사실 '오로지 한 가지 일만 하는 것' 보다는 '변경할 이유' 로 해석해야 한다. 의존성 역전 원칙 계층형 아키텍처에서 계층 간 의존성은 항상 다음 계층인 아래 방향을 가리킨다. 단일 책임 원칙을 적용할 때 상위 계층들이 하위 계층들에 비해 변경할 이유가 더 많다. 그러므로 영속성 계층에 대한 도메인 계층의 의존성 때문에 영속성 계층을 변경할 때마다 잠재적으로 도메인 계층도 변경해야 한다. 그러나 도메인 코드는 애플리케이션에서 가장 중요한 코드다. 영속성 코드가 바뀐다고 해서 도메인 코드까지 바꾸고 싶지는 않다. 그러면 어떻게 의존성을 제거할 것인가? 의존성 역전 원칙 (Dependency Inversion Principle..