전체 글 24

12장 아키텍처 스타일 결정하기

12 아키텍처 스타일 결정하기 지금까지 육각형 아키텍처를 사용해서 웹 어플리케이션을 만드는 방법을 살펴봤다. 그렇다면 언제 육각형 아키텍처 스타일을 사용해야 할까? 도메인이 왕이다 육각형 아키텍처 스타일을 사용할지 첫번째 지표 : 도메인 코드가 애플리케이션에서 가장 중요한 것인가? 육각형 아키텍처 스타일은 결국 영속성 관심사나 외부 시스템에 대한 의존성 등의 변화로부터 자유롭게 도메인 코드를 개발 할 수 있다는 것 외부의 영향을 받지 않고 도메인 코드를 자유롭게 발전시킬 수 있다는 것은 육각형 아키텍처 스타일이 내세우는 가장 중요한 가치 이것이 육각형 아키텍처 스타일이 도메인 주도 설계 방식과 정말 잘 어울리는 이유 DDD에서는 도메인이 개발을 주도하고 도메인 외 다른 기술들을 생각할 필요가 없게 되면 ..

6장 영속성 어댑터 구현하기

06 영속성 어댑터 구현하기 데이터베이스 주도 설계를 피하기 위해 영속성 계층을 앱 계층의 플러그인으로 만들어보자. 의존성 역전 앱은 영속성 기능 사용하기 위해 포트 호출. 이 포트는 영속성 어댑터에 의해 구현.(DIP) 육각형 아키텍처에서 영속성 어댑터는 앱에서 호출하기 때문에 아웃고잉 어댑터 포트는 앱과 영속성 사이의 간접적 계층 영속성 문제에 신경쓰지 않고 도메인 코드 개발 영속성 계층에 코드 의존성을 없앤다 영속성 코드를 변경하더라도 코어 코드에 영향이 없다 DIP로 인해 정적인 상황에서는 의존성이 역전되었지만 동적인 타임에는 여전히 앱이 영속성 코드에 의존하고 있다. 하지만 인터페이스 계약을 만족하는 한 영속성 코드 수정은 문제가 없다. 영속성 어댑터의 책임 영속성 어댑터가 일반적으로 하는 일...

2장 의존성 역전하기

02 의존성 역전하기 2장에서는 1장의 계층형 아키텍처의 문제점에 대한 대안에 대해 얘기한다. 단일 책임 원칙 Single Responsibility Principle(SRP) 하나의 컴포넌트는 오로의 한가지 일만 해야 하고, 그것을 올바르게 수행해야 한다. 라고 알고있지만 사실 실제 정의는 컴포넌트를 변경하는 이유는 오직 하나뿐이어야 한다. http://www.butunclebob.com/ArticleS.UncleBob.PrinciplesOfOod 아키텍처에서 가지는 의미 : 다른 이유로 변경된다면 이 컴포넌트는 안 변한다. 그런데... SRP를 따르다보니 변경할 이유가 컴포넌트 간의 의존성을 통해 너무 쉽게 전파된다. E에 비해 A는 의존성 때문에 변경할 확률이 높다. 시간이 갈수록 바꿀건 많아지는데..

ArchUnit을 이용한 패키지 의존성 테스트하기

ArchUnit을 이용한 패키지 의존성 테스트하기 최근 클린아키텍처 스터디를 하면서 헥사코날 아키텍처를 테스트 하는 것에 대한 논의가 있었다. 여러 논의가 오갔고 이상적인 것은 테스트를 자동화하는 것이었다. 책에 나온 ArchUnit 으로 해당 테스트를 자동화 하는 것을 찾아보았다. ArchUnit https://www.archunit.org/ ArchUnit is a free, simple and extensible library for checking the architecture of your Java code using any plain Java unit test framework. Maven & JUnit5 com.tngtech.archunit archunit-junit5 0.23.1 test ..

기타 2022.03.30

DSM을 이용하여 IntelliJ 에서 패키지 간 의존성 확인하기

DSM(Dependency Structure Matrix) 프로젝트를 진행 할 때 정적으로 아키텍처를 점검해야 하는 경우가 종종 있다. 이때 여러 툴을 사용하는데 DSM을 사용하면 모듈간의 의존성을 한눈에 확인할 수 있다. DSM 이란? DSM은 모듈간의 관계를 2차원 매트릭에 나타낸 테이블. 테이블을 통해서 모듈간의 의존관계 / 의존강도 / 순환사이클 등을 확인할 수 있다. DSM 보는 방법 위 모듈에서 왼쪽 모듈에 X번 의존한다 A는 C에 의존한다. C는 A/B에 의존한다. 열과 행을 포개었을때 둘 다 값이 있으면 순환의존이다 C -> A -> C 포개었을 때 둘다 값이 있다는 뜻은 서로 간에 의존이 있다는 뜻이기 때문에 순환 의존관계이다. 의존 숫자가 유독 높다면 의존이 너무 많이 몰려있다는 뜻이다..

기타 2022.03.30

JPA 동시성 문제

DB의 동시성 문제 read -> write 시 동시에 한 레코드에 두 개 이상의 트랜잭션이 접근하면 일관성이 깨지게 된다 이를 해결 하는 방법은 격리성 레벨을 시리얼로 하거나 Lock을 건다 Lock 비관적 Lock 특정 레코드에 lock을 걸어서 트랜잭션이 끝날때까지 다른 트랜잭션이 접근을 못하게 한다. https://isntyet.github.io/jpa/JPA-%EB%B9%84%EA%B4%80%EC%A0%81-%EC%9E%A0%EA%B8%88(Pessimistic-Lock)/ 효율성이 떨어지는 단점 낙관적 Lock 엔티티에 버전 필드를 만들어서 여러 트랜잭션이 동시에 접근은 가능하지만 이미 다른 트랜잭션이 값을 변경한 경우 내가 다시 업데이트를 하려고 하면 익셉션 발생하게 됨. https://is..

기타 2021.07.20

WIN-ACME 사용법(Windows에서 Letsencrypt 인증서 생성하기)

사전 작업80 port openhttps://www.win-acme.com/ 에서 win-acme 다운로드openssl 설치https://code.google.com/archive/p/openssl-for-windows/downloads인증서 생성 방법wacs 실행  참고로 위 화면은 너무 많은 인증서를 만들면서 거부된 결과임. 해당 화면 뜨면 7일동안 인증서 발급 금지되니 조심할 것.D:\win-acme\keys 폴더에 pem 파일 두개 생성됨.pem → pkcs12 변경windows cmd 에서 아래와 같이 입력D:\win-acme\keys>openssl pkcs12 -export -out keystore.p12 -in xxx.com-chain.pem -inkey xxx.com-key.pemLoadi..

기타 2019.12.10