오늘의 기록
[DDD Start] 아키텍처 개요
도메인 주도 개발 시작하기 책 정리 도메인 주도 개발 시작하기 실제 업무에 도메인 주도 설계(DDD)를 적용할 수 있도록 기본적인 DDD의 핵심 개념을 익히고 구현을 통해 학습할 수 있도록 구성한 DDD 입문서 www.hanbit.co.kr 네 개의 영역 ✅ 표현 사용자의 요청을 받아 응용 영역에 전달하고 응용 영역의 처리 결과를 다시 사용자에게 보여주는 역할 -> 스프링 MVC가 표현 영역을 위한 기술에 해당한다. ✅ 응용 시스템이 사용자에게 제공해야 할 기능을 구현 -> 도메인 로직을 직접 수행하기보다는 도메인 영역에 로직 수행을 위임한다. ✅ 도메인 도메인의 핵심 로직(도메인 모델)을 구현한다. ✅ 인프라스트럭처 구현 기술에 대한 것을 다룬다. 계층 구조 아키텍처 ✅ 계층 구조 네 개의 영역을 구성..
Mockito
Mockito Mock: 진짜 객체와 비슷하게 동작하지만 프로그래머가 직접 그 객체의 행동을 관리하는 객체. Mockito: Mock 객체를 쉽게 만들고 관리하고 검증할 수 있는 방법을 제공한다. Mock 프레임워크 중 가장 많이 사용된다. 단순한 로직의 단위 테스트는 간단하게 할 수 있지만, 만약 애플리케이션이 DB를 사용한다던가 외부 API를 호출한다고 하면, DAO 객체나 외부 API가 어떻게 동작하는지 Mock을 사용해 실제 API 호출 없이 사전에 테스트를 해볼 수 있다. 라이브러리 추가 스프링 부트 2.2+ 프로젝트 생성시 spring-boot-starter-test에서 자동으로 Mockito를 추가해 준다. 스프링 부트를 쓰지 않는다면, 의존성을 직접 추가한다. org.mockito mock..
[JPA] column default value 넣기
목표: JPA를 통해 엔티티를 save 할 때, 특정 필드에 따로 값을 넣지 않아도 default value가 저장되도록 설정하자. 타겟 컬럼: usage_status → 해당 데이터에 대한 사용 여부 (YES or NO) @ColumnDefault @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) @Entity @Table(name = "users") public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "user_id", nullable = false)\ private Long id; @Column(nullable = false) priv..
[DDD] 조용호님 특강: 도메인 주도 설계의 사실과 오해
감사하게도 조용호님의 회사에 오셔서 DDD 관련 특강을 해주셨다. DDD의 철학에 대해 많은 인사이트를 얻을 수 있었는데, 본 글은 이에 대해 빠르게 정리한 내용이다. 강의 소개 DDD는 2003년 “도메인 주도 설계(by 에릭 에반스)” 책으로 등장. 책의 배경: 소프트웨어 복잡성을 줄이고 싶다 -> “어떤” 부분 때문에 복잡한 것 같은데 -> 이를 해소하기 위해 도메인 주도 설계를 도입하자. -> 모두가 이야기하지한 누구도 제대로 이해하지 못한 책 -> 이번 강의는 책을 이해할 수 있는 방법을 이해하는 강의 DDD는 철학이다. 그리고 이를 구현하는 방법은 정말 다양하다. DDD를 구현부터 공부하면 하나의 구현 방법이 맞다고 생각할 수도 있다. DDD의 철학을 먼저 배우고, 이것이 지향하는 방향대로 구..
[SpringMVC] 타임리프 - 기본기능
스프링 MVC 2편 - 백엔드 웹 개발 활용 기술 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 - 인프런 | 강의 웹 애플리케이션을 개발할 때 필요한 모든 웹 기술을 기초부터 이해하고, 완성할 수 있습니다. 스프링 MVC의 핵심 원리와 구조를 이해하고, 더 깊이있는 백엔드 개발자로 성장할 수 있습니다., 원 www.inflearn.com 강의를 들으며 생각 정리 프로젝트 생성 스프링 부트 스타터(https://start.spring.io/) 에서 프로젝트를 생성한다. 간단하게 테스트(애플리케이션 실행 등) 해서 정상 작동하는지 확인한다. +) 롬복의 경우 다음 링크를 참고해서 설치한다. gksdudrb922.tistory.com/65 스프링 - 롬복(lombok) 라이브러리 설치 롬복 라이브러리는 ..
[DDD Start] 도메인 모델 시작하기
도메인 주도 개발 시작하기 책 정리 도메인 주도 개발 시작하기 실제 업무에 도메인 주도 설계(DDD)를 적용할 수 있도록 기본적인 DDD의 핵심 개념을 익히고 구현을 통해 학습할 수 있도록 구성한 DDD 입문서 www.hanbit.co.kr 도메인이란? ✅ 도메인 소프트웨어로 해결하고자 하는 문제 영역 도메인은 하위 도메인으로 나눌 수 있다. ex) 온라인 서점 도메인 -> 주문, 결제, 배송, ... 도메인 전문가와 개발자 간 지식 공유 ✅ 요구사항 개발에 앞서 요구사항을 올바르게 이해하는 것이 중요하다. ✅ 요구사항을 올바르게 이해하려면? 개발자와 도메인 전문가가 직접 대화해야 한다. 도메인 전문가, 관계자, 개발자가 같은 지식을 공유하고 직접 소통할수록 도메인 전문가가 원하는 제품을 만들 가능성이 ..
[Spring] DTO의 사용 범위
DTO DTO(Data Transfer Object)란 계층간 데이터 교환을 위해 사용하는 객체다. MVC 패턴에서 컨트롤러가 뷰와 모델의 데이터를 주고 받을 때 보통 DTO를 사용한다. 도메인 객체(모델)을 뷰에 직접 전달할 수도 있지만, 뷰에 불필요한 민감한 도메인의 정보가 노출될 수도 있고, 도메인이 뷰에 의존하게 되는 경우도 있다. DTO의 범위 모델과 뷰 사이에 DTO를 사용한다는 것은 알겠는데, 일반적으로 사용하는 레이어드 아키텍처 (Controller - Service - Repository)에서 DTO는 어떻게 다뤄야 할까? 조금 더 간단하게 말하자면, 결국 뷰와 같은 화면과, 비즈니스 로직의 데이터 교환은 DTO를 통해 이루어지는데, 도메인 → DTO, DTO → 도메인을 변환하는 작업은..
[Spring] Service - 인터페이스 도입과 버저닝
예전에 프로젝트를 하다 보면 Controller가 Service 구체 클래스를 의존하는 방식을 많이 사용했었는데, 이러한 설계 방식은 Controller가 Service 클래스 단 하나만 의존하기 때문에 다형성이 부족하다. 따라서 객체 지향 설계(DIP)와 향후 다음 버전에 대한 확장성을 위해 Service 계층에 인터페이스를 도입했다. 기존 설계 방식 @RestController @RequiredArgsConstructor public class Controller { private final Service service; // 클래스 직접 주입 } @Service @RequiredArgsConstructor public class Service { private final Repository repo..