ArchUnit 슬라이스 순환 의존성 검증으로 아키텍처를 코드로 강제한다

아키텍처 규칙은 대부분 문서에만 있다. “슬라이스 사이에는 순환 의존을 두지 않는다”고 적어 놓고, 코드 리뷰에서 걸러 내기를 기대한다. 그런데 리뷰어가 놓치면 그대로 들어가고, 한 번 들어간 순환 의존은 시간이 지날수록 걷어 내기 어려워진다 결론부터 말하면 이런 규칙은 테스트 코드로 강제할…

Instancio 랜덤 데이터 테스트 픽스처로 고정값을 걷어낸다

테스트 픽스처를 열어 보면 이런 코드가 있다 닉네임은 KimWhat이고 비밀번호는 verysecret이다. 이 값이 무슨 의미인지는 아무도 설명하지 않는다. 그냥 형식 검증을 통과할 만한 길이로 아무렇게나 정한 값이다. 그런데 이 값은 검증 코드에도 그대로 박혀 있다 이 테스트가 통과한다고 해서 비밀번호…

스프링 커스텀 스테레오타입 애노테이션으로 반복 설정을 묶는다

애플리케이션 서비스 클래스를 하나 열어 보면 이런 상태가 되어 있다 네 줄 모두 이 클래스가 무슨 일을 하는지에 대한 설명이 아니다. 스프링 빈으로 등록하고, 트랜잭션을 걸고, 파라미터 검증을 켜고, 생성자를 만들어 달라는 지시다. 애플리케이션 서비스를 새로 만들 때마다 이 네…

헥사고날 아키텍처 내부는 애플리케이션 컴포넌트로 나눈다

헥사고날 아키텍처를 배우고 나면 안과 밖의 경계는 선명해진다. 어댑터는 밖에, 도메인은 안에. 포트로만 소통한다. 그런데 정작 실무에서 막히는 지점은 그 다음이다. 회원 하나만 있을 때는 헥사곤 하나로 충분했는데, 강사가 들어오고 강의가 들어오면 헥사곤 안쪽이 금세 뒤엉킨다. 여기서 자연스럽게 떠오르는 발상이…

워드프레스 서버 이관 비용 절감은 수익이 0일 때 유일하게 확실한 개선이었다

블로그를 만들었다. 글을 89편 썼고 이미지를 1,116개 올렸다. 애드센스를 붙였고 ads.txt도 정확히 등록했고 광고 슬롯은 페이지마다 아홉 개씩(지금은 세 개씩) 정상적으로 렌더링되고 있었다. 수익은 붙지 않았다 😭 붙지 않은 것은 수익뿐이고, 청구서는 매달 정확하게 붙었다. Cloudways를 통해 빌린 DigitalOcean 서버…

헥사고날 아키텍처의 포트는 엔티티가 아니라 의도로 나눈다

Member 엔티티가 있으니 MemberService 하나, MemberController 하나. 스프링을 배우면 대부분 이 구조로 시작한다. 처음에는 편하다. 문제는 N개월 뒤에 온다. MemberService는 메서드 열다섯 개짜리 클래스가 되고, 그것을 주입받은 코드만 봐서는 무슨 목적으로 쓰는지 알 수 없다. 헥사고날 아키텍처는 이 지점에서 다른…

MSA 서버 비용 절감은 추정이 아니라 실측에서 시작한다

공모전 준비 중에 서버 비용이 문제가 됐다. 개발 기간에는 start.sh랑 stop.sh로 작업할 때만 켜고 껐더니 청구서가 상시 가동의 절반 이하로 나왔는데, 이제 공모전 출품도 해야 하고 서비스 운영이나 포트폴리오 용도로 쓰려면 결국 24시간 켜둬야 한다. 이대로라면 원래 비용인 월 15만 원이 그대로…

Kafka 컨슈머 설계 판단 기준, 5가지 질문으로 끝낸다

Kafka를 처음 붙일 때 대부분 프로듀서부터 본다. KafkaTemplate을 주입받고 send()를 호출하면 메시지가 나간다. 여기까지는 반나절이면 끝난다. 문제는 컨슈머다. 그룹 ID를 어떻게 나눌지, 키를 줄지, 커밋을 자동으로 할지 수동으로 할지, 실패한 메시지를 어떻게 할지를 전부 정해야 한다. 이 결정을 미루고 기본값으로…