전체 글

전체 글

    도메인 주도 설계 첫걸음 - 8장 : 아키텍처 패턴 (계층형 /CQRS / 포트와 어댑터)

    8. 아키텍처 패턴 코드베이스가 처리해야 할 다양한 관심사로 인해 비즈니스 로직이 다양한 구성요소에 흩어지기 쉬움 사용자 인터페이스 / DB에 의해 구현 혹은 다양한 구성요소에 중복 관심사 구현 시, 엄격히 구성하지 않는다면 코드베이스의 변경에 대한 제약 계층형 아키텍처 고전적 아키텍처 : PL(Presentation layer) + BLL(Business logic) + DAL(Data access) 프로젠테이션 계층 사용자와 상호작용 하기 위한 인터페이스 구현 ex) GUI/CLI/연동 API/메시지 브로커 이벤트 구독/이벤트 발행 프로그램의 퍼블릭 인터페이스 비즈니스 로직 계층 소프트웨어의 중심 액티브 레코드 또는 도메인 모델과 같은 비즈니스 로직 패턴 적용 엔티티 / 규칙 / 프로세스 데이터 접근..

    도메인 주도 설계 첫걸음 - 7장 : 이벤트 소싱

    7. 시간 차원의 모델링 이벤트 소싱 도메인 모델 패턴 : 도메인 모델 패턴과 동일한 전술적 패턴(밸류 오브젝트, 애그리게이트, 도메인 이벤트)을 사용 차이점 : 애그리게이트의 상태를 저장하는 방식이 다름 이벤트 소싱 도메인 모델 : 이벤트 소싱 패턴을 사용하여 애그리게이트 상태 관리 애그리게이트의 상태를 유지하는 것이 아닌 각 모델에 대한 변경사항에 대한 도메인 이벤트 생성, 애그리게이트 데이터에 대한 원천 데이터로 사용 이벤트 소싱 현재 상태만 저장되어 있다면, 그 이전에 어떤 일이 발생했는지 분석 불가 이벤트 소싱 패턴 : 데이터 모델에 시간 차원을 도입 이벤트 소싱 기반 시스템은 애그리게이트의 수명주기의 모든 변경사항 이벤트 유지 상태에 대해 도메인 이벤트로부터 쉽게 프로젝션 가능 프로젝션 : 쓰..

    도메인 주도 설계 첫걸음 - 6장 : 복잡한 비즈니스 로직 다루기

    6. 복잡한 비즈니스 로직 다루기 도메인 모델 에릭 에반스의 비즈니스 도메인 도메인의 하위 모델과 코드를 연결하기 위해(복잡한 비즈니스 로직) 사용 애그리게이트, VO, repository 흔히 전술적 도메인 주도 설계라고 얘기하지만, 저자는 그냥 해당 패턴을 도메인 모델로 칭하고 애그리게이트와 VO는 구성요소라고 설명한다. 구현 도메인 모델은 행동과 데이터를 모두 포함하는 객체 모델 복잡성 도메인 비즈니스 로직이 이미 본질적으로 복잡하기에 모델링에 사용되는 객체가 모델에 우발적 복잡서을 추가해선 X 이러한 모델 객체는 Plain Old Object라고 한다. 인프라 구성 요소 및 프레임워크에 의지/협업 X, 비즈니스 로직 구현하는 객체 VO(Value Object) 복합적인 값에 의해 식별되는 객체 c..

    도메인 주도 설계 첫걸음 - 5장 : 간단한 비즈니스 로직 구현

    5. 간단한 비즈니스 로직 구현 트랜잭션 스크립트 패턴 프레젠테이션으로부터 단일 요청을 처리하는 여러 프로시저를 모아, 비즈니스 로직을 구현 (시스템의 퍼블릭 인터페이스 - 마틴 파울러) 트랜잭션 스크립트 패턴 : 프로시저를 기반으로 시스템의 비즈니스 로직을 구성, 각 프로시저는 퍼블릭 인터페이스를 통해 시스템 사용자가 실행하는 작업 구현 각 프로시저는 간단하고 쉬운 절차지향 스크립트로 구현 각 프로시저는 트랜잭션 동작을 통해 각 작업이 성공/실패할 수 있고, 유효하지 않은 상태를 만들면 안된다. DB.StartTransaction(); var job = DB.LoadNextJob(); var json = LoadFile(job.Source); var xml = ConvertJsonToXml(json);..

    RealMySQL 5.1 - 트랜잭션

    트랜잭션 in MySQL Transaction: 논리적인 작업 set 자체가 100% 적용되거나 (Commit) 아무것도 적용되지 않아야 (Rollback) 함을 보장해주는것 꼭 여러개의 변경작업을 수행할때만 의미있는 개념이 아님 MyISAM vs. InnoDB의 Transaction 차이 Insert 과정에서 모두 PK 중복으로 에러가 발생됌 하지만, MyISAM 테이블에서는 1,2는 INSERT 된 상태 (Partial Update) -> 정합성 맞추는데 많은 어려움 발생 그래서 애플리케이션 단에서 IF/ELSE, 데이터 확인 등으로 직접 Rollback까지 준비해야함 InnoDB에서는 되게 간단하게 구현 가능 트랜잭션 실행시 주의사항 프로그램 코드에서 트랙잭션의 범위를 최소화하는 것이 중요 책에 나..

    도메인 주도 설계 첫걸음 - 3장, 4장

    03. 도메인 복잡성 관리 도메인에 대한 모든 이해관계자가 의사소통에 사용할 수 있는 유비쿼터스 언어를 개발하는 것이 중요 내부 동작과 기본원칙에 대한 도메인 전문가의 멘탈 모델을 반영해야 함 그러나 조직 규모에 따라 멘탈 모델은 일관성이 없을 수 있음 일관성 없는 모델 본 책에서는 lead(리드)라는 용어가 마케팅 부서와 영업 부서에서 다른 의미로 사용되는 예시를 보여준다. 마케팅 부서 리드 : 누군가가 제품 중 하나에 관심이 있다는 이벤트(알림) 영업 부서 리드 : 영업 프로세스의 전체 수명주기 (장기적 진행 과정) 따라서 두 부서의 도메인 전문가 사이에는 '리드'의 멘탈 모델은 차이가 존재 이는 실제로 다른 부서의 사람들 사이에서 의사소통이 어려울 수 있지만, 사람들이 서로 상호작용하면서 정확한 의..

    RealMySQL 4.4 - MySQL 로그 파일(log file)

    4.4. MySQL 로그 파일 에러 로그 파일 실행 도중 발생하는 에러/경고 메시지를 담은 로그 파일 생성 경로: my.cnf의 log_error에 정의 되어있는 경로에 생성 에러 로그 파일에 기록되는 다양한 메시지 유형: 설정 파일 변경 혹은 비정상적 종료 이후 재시작인 경우 예. 설정 변경이 있을 경우, 해당 로그를 통해 설정이 의도대로 설정이 되어있는지 확인 비정상적 종료 이후 트랜잭션 복구 시 발생한 경우 복구에 실패할 경우를 대비하여 에러 로그 확인 필요 해당 에러 로그를 보면서 innodb_force_recovery 파라미터 설정 필요 쿼리 처리 도중 에러가 발생한 경우 클라이언트 앱에서 정상적으로 연결 종료를 하지 못한 경우 이 로그를 확인하여 앱의 접속 종료 로직을 검토할 수 있음 max_..

    RealMySQL 4.3 - MyISAM 스토리지 엔진 아키텍처

    4.3. MyISAM 스토리지 엔진 아키텍처 키 캐시 키캐시 (InnoDB의 버퍼풀): 인덱스만을 대상으로 작동 인덱스의 디스크 쓰기 작업에 대한 버퍼링 역활 키 캐시 hit rate = 100 - (key_reads / key_read_requests * 100) Default 키캐시는 제한된 메모리가 존재 (예. 32비트 OS: 4GB) 제한된 메모리 보다 더 할당하고 싶으면 Default 키캐시 외 별도의 키캐시를 설정해야함 예: key_buffer_size: 4GB, kbuf_board.key_buffer_size: 2GB 추가 키캐시는 어떤 인덱스를 캐시할지 설정 필요 예: CACHE INDEX db1.board, db2.board IN kbuf_board 운영체제의 캐시 및 버퍼 MyISAM ..