목록전체 글 (44)
효습
6.1 표현 영역과 응용 영역 도메인 영역을 잘 구현하지 않으면 사용자의 요구를 충족하는 제대로 된 소프트웨어를 만들지 못한다. 도메인이 제 기능을 하려면 사용자와 도메인을 연결해 주는 매개체가 필요하다. 표현 영역과 응용 영역이 이에 해당한다. 표현 영역은 사용자의 요청을 해석한다. 요청을 받은 표현 영역은 URI , 요청 파라미터,쿠키,헤더 등을 이용해서 사용자가 실행하고 싶은 기능을 판별하고 그 기능을 제공하는 응용 서비스를 실행한다. 실제 사용자가 원하는 기능을 제공하는 것은 응용 영역에 위치한 서비스다. 응용 서비스는 기능을 실행하는 데 필요한 값을 메서드 인자로 받고 실행 결과를 리턴한다. 응용 서비스의 메서드가 요구하는 파라미터와 표현 영역이 사용자로부터 전달받은 데이터는 형식이 일치하지 않..
5.1 시작에 앞서 CQRS는 명령(Command) 모델과 조회(Query)모델을 분리하는 패턴이다. 명령 모델은 상태를 변경하는 기능을 구현할 때 사용한다. 조회 모델은 데이터를 조회하는 기능을 구현할 때 사용한다. 도메인 모델은 주로 명령 모델로 사용된다. 반면 5장의 정렬,페이징,검색 조건 지정과 같은 기능은 조회 기능에서 사용된다. 5.2 검색을 위한 스펙 검색 조건이 고정되어 있고 단순하면 특정 조건으로 조회하는 기능을 만들면 된다. 다양한 검색 조건을 조합해야할 때 , 필요한 조합마다 find 메서드를 정의할 수도 있지만 조합이 증가할수록 정의해야할 find 메서드도 함께 증가한다. → 검색 조건을 다양한게 조합해야 할 때 사용할 수 있는 것이 스펙(Spectations)다. 스펙은 애그리거트..
4.1 JPA 를 이용한 리포지터리 구현 애그리거트를 어떤 저장소에 저장하느냐에 따라 리포지터리를 구현하는 방법이 다르다. 데이터 보관소로 RDBMS를 사용할 때, 객체 기반의 도메인 모델과 관계형 데이터 모델 간의 매핑을 처리하는 기술로 ORM 만한 것이 없다. 4.1.1 모듈 위치 리포지터리 인터페이스는 애그리거트와 같이 도메인 영역에 속하고, 리포지터리를 구현한 클래스는 인프라스트럭처에 속한다. 팀 표준에 따라 리포지터리 구현 클래스를 domain.impl과 같은 패키지에 위치시킬 수도 있는데 이것은 리포지터리 인터페이스와 구현체를 분리하기 위한 타협안 같은 것이지 좋은 설계 원칙을 따르는 것은 아니다. 가능하면 리포지터리 구현 클래스를 인프라스트럭처 영역에 위치시켜서 인프라스트럭처에 대한 의존을 ..
3.1 애그리거트 백 개 이상의 테이블을 한 장의 ERD에 모두 표시하면 개별 테이블 간의 관계를 파악하느라 큰 틀에서 데이터 구조를 이해하는 데 어려움을 겪게 되는 것처럼, 도메인 객체 모델이 복잡해지면 개별 구성요소 위주로 모델을 이해하게 되고 전반적인 구조나 큰 수준에서 도메인 간의 관계를 파악하기 어려워진다. 주요 도메인 요소 간의 관계를 파악하기 어렵다는 것은 코드를 변경하고 확장하는 것이 어려워진다는 것을 의미한다. 복잡한 도메인을 이해하고 관리하기 쉬운 단위로 만들려면 상위 수준에서 모델을 조망할 수 있는 방법이 필요한데, 그 방법이 애그리거트다 애그리거트는 모델을 이해하는 데 도움을 줄 뿐만 아니라 일관성을 관리하는 기준도 된다. 애그리거트를 사용하면 복잡한 도메인을 단순한 구조로 만들어주..
2.1 네 개의 영역 표현 영역은 사용자의 요청을 받아 응용 영역에 전달하고 응용 영역의 처리 결과를 다시 사용자에게 보여주는 역할을 한다 웹 애플리케이션에서 표현 영역의 사용자는 웹 브라우저를 사용하는 사람일 수도 있고 , 외부 시스템일 수도 있다 응용 서비스는 로직을 직접 수행하기보다는 도메인 모델에 로직 수행을 위임한다 도메인 영역은 도메인 모델을 구현하며 도메인 모델은 핵심 로직을 구현한다 인프라스트럭처 영역은 구현 기술에 대한 것을 다룬다 논리적인 개념을 표현하기보다는 실제 구현을 다룬다 도메인 영역, 응용 영역,표현 영역은 구현 기술을 사용한 코드를 직접 만들지 않는다. 대신 인프라스트럭처 영역에서 제공하는 기능을 사용해서 필요한 기능을 개발한다 2.2 계층 구조 아키텍처 전체적인 아키텍처는 ..
1.1 도메인이란? 도메인이란 소프트웨어로 해결하고자 하는 문제 영역이다 한 도메인은 다시 하위 도메인으로 나눌 수 있다 특정 도메인을 위한 소프트웨어라고 해서 도메인이 제공해야할 모든 기능을 직접 구현하는 것은 아니다. 도메인마다 고정된 하위 도메인이 존재하는 것은 아니다 하위 도메인을 어떻게 구성할지 여부는 상황에 따라 달라진다. 1.2 도메인 전문가와 개발자 간 지식 공유 요구사항을 올바르게 이해하려면 개발자와 전문가가 직접 대화해야한다. 개발자와 전문가 사이에 내용을 전파하는 전달자가 많을수록 정보가 왜곡디고 손실이 발생하게 되며, 개발자는 최초에 전문가가 요구한 것도 다른 무언가를 만들게 될 수 있다 1.3 도메인 모델 도메인 모델은 기본적으로 특정 도메인을 개념적으로 표현한 것이다 도메인을 이..
Docker Network 도커를 이용하면 웹 서버가 컨테이너에 설치됨 이 컨테이너가 설치된 운영체제를 도커 호스트라고 함 하나의 도커 호스트에는 여러개의 컨테이너가 만들어질 수 있음 컨테이너와 호스트 모두 독립적인 실행환경이기때문에 각자의 독립적인 포트와 파일시스템을 가지고 있음 호스트와 컨테이너가 연결이 되어있지 않는 상태에서 웹 브라우저로 웹서버로 접속을 하면? -> 접속이 안됨 그럼 어떻게 하면 되냐? 호스트의 80번 포트와 컨테이너의 80번 포트를 연결해주면 됨 컨테이너를 실행하는 명령어를 아래로 바꿈 앞의 80은 호스트의 포트이고 뒤에 80은 컨테이너의 포트임 이렇게 연결된 포트로 신호를 전달하는 것을 port forwarding이라고 함 // docker run httpd 에서 docker ..
원티드 8월 챌린지를 듣고 정리한 내용입니다. Docker 공식 문서 https://docs.docker.com/get-started/overview/ Docker overview docs.docker.com Docker란 무엇일까? 컨테이너 기반 가상화 도구 애플리케이션을 컨테이너라는 단위로 격리하고 실행하고 배포하는 기술 open platform 이다. 어플리케이션을 인프라에서 분리해준다. 인프라를 어플리케이션을 관리하는 것 처럼 관리 할 수 있다. Container란 무엇일까? 컨테이너 기반 가상화 도구 리눅스 컨테이너 기술인 LXC(Linux Containers) 기반 호스트 운영체제 위에 여러 개의 격리된 환경을 생성 애플리케이션을 컨테이너라는 단위로 격리하여 실행하고 배포하는 기술 다양한 운영..
빈 스코프란? 스프링 빈은 기본적으로 싱글톤 스코프로 생성된다. 스코프는 번역 그대로 빈이 존재할 수 있는 범위를 뜻한다. 스코프는 다음과 같은 다양한 스코프를 지원한다. 싱글톤 : 기본 스코프, 스프링 컨테이너의 시작과 종료까지 유지되는 가장 넓은 범위의 스코프이다. 프로토타입: 스프링 컨테이너는 프로토타입 빈의 생성과 의존관계 주입까지만 관여하고 더는 관리하지 않는 매우 짧은 범위의 스코프이다. 종료 메서드 호출이 안됨 웹 관련 스코프 request: 웹 요청이 들어오고 나갈때 까지 유지되는 스코프이다. session: 웹 세션이 생성되고, 종료될 때 까지 유지되는 스코프이다. application: 웹의 서블릿 컨텍스와 같은 범위로 유지되는 스코프이다. 프로토타입 스코프 싱글톤 스코프의 빈을 조회하..
빈 생명주기 콜백 시작 데이터베이스 커넥션 풀이나 , 네트워크 소켓처럼 애플리케이션 시작 시점에 필요한 연결을 미리 해두고, 애플리케이션 종료 시점에 연결을 모두 종료하는 작업을 진행하려면, 객체의 초기화와 종료 작업이 필요하다. 간단하게 외부 네트워크에 미리 연결하는 객체를 하나 생성한다고 가정해보자 실제로 네트워크에 연결하는 것은 아니고, 단순히 문자만 출력하도록 했다. 이 NetworkClient 는 애플리케이션 시작 시점에 connect() 를 호출해서 연결을 맺어두어야하고, 애플리케이션이 종료되면 disConnect() 를 호출해서 연결을 끊어야 한다. public class BeanLifeCycleTest { @Test public void lifeCycleTest(){ Configurable..