묻고 답해요
169만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결토비의 클린 스프링 - 도메인 모델 패턴과 헥사고날 아키텍처 Part 1
토비님이 생각하시는 복잡한 도메인은 무엇이라고 생각하시나요?
안녕하세요. 토비님강의가 마치 의도하신 것 처럼 시니어 개발자님과 함께 개발하면서 의논하는 느낌으로 진행되어서 재밌게 잘 수강하고 있습니다.강의 내용에서 DDD는 도메인이 복잡해진 순간에 택해야 한다. 라는 말씀을 해주셨는데요.문득, "토비님이 생각하시는 도메인이 복잡해진 순간은 어떤 순간일까? 나름의 기준이 있으신걸까?" 하는 생각이 들었습니다.개인적으로 저는 어떻게 생각할까 라고 고민을 해봤는데요. 1) 도메인을 설명하기 위해서 개발자가 코드를 살펴봐야 하는 순간2) 각 도메인 간의 결합도가 고객의 유스케이스를 해결하기 위해 다양하게 결합되어야 하는 경우이 두 가지가 떠올랐는데, 토비님의 견해가 궁금해서 질문드려봅니다!늘 양질의 강의를 제공해주셔서 감사드립니다. (_ _)
-
미해결토비의 클린 스프링 - 도메인 모델 패턴과 헥사고날 아키텍처 Part 1
Email Pattern 테스트 검증 관련 질문이 있습니다.
안녕하세요 토비님, 강의 너무 잘 듣고 있습니다.이메일 패턴 테스트 관련해서 궁금한 부분이 생겨 질문을 드립니다.해당 강의를 기준으로 기존 : Member 엔티티에서 패턴 검증변경 후 : Email 값객체에서 패턴 검증 변경 후 단계에서 Email 값 객체에 패턴 검증하는 로직이 들어갔기에 해당 로직에 대한 테스트는 EmailTest 에 들어가야 하지 않는가? 라는 생각이 들어요.해당 부분에 대해 의견을 여쭙고 싶습니다.감사합니다.
-
해결됨토비의 클린 스프링 - 도메인 모델 패턴과 헥사고날 아키텍처 Part 1
Mybatis같은 sql mapper를 사용시..
안녕하세요 토비님! 강의 너무 잘듣고 있습니다. 애그리거트 쪽 강의를 들으면서 문득 든 생각을 질문드립니다.현재 사내에서 하고 있는 프로젝트는 JPA를 전혀사용하지 않고 Mybatis만을 사용하고 있는데요 이런 경우에도 에그리거트라던가 헥사고날 아키텍쳐를 적용하면서 진행하는게 충분히 가능할까요? 그게 아니라면 기존에 적용하고 있는 흔히 말하는 레이어드 아키텍쳐 및 트랜잭션 스크립트 방식으로 진행하는게 더 나은 방법일까요?혹시라도 수준 떨어지는 질문이라면 사과드립니다.감사합니다.
-
해결됨토비의 클린 스프링 - 도메인 모델 패턴과 헥사고날 아키텍처 Part 1
mise도 사용하시나요?
안녕하세요, 토비님.5강 개발 환경 구성(2)에서 sdk man을 소개해주셨는데요,저는 처음 보는 서비스라 찾아보니 최근에는 편의성 등을 이유로 mise를 많이들 사용하는 것 같더라구요. 강의에서는 mise 대신 sdk man을 사용하신 이유가 궁금합니다, 아무래도 java만 다루는 강의다보니 sdk man을 선택하신 걸까요?토비님께서도 실무나 개인적으로는 mise를 사용하시는지 혹은 다른 서비스를 사용하시는지도 궁금합니다.
-
미해결토비의 클린 스프링 - 도메인 모델 패턴과 헥사고날 아키텍처 Part 1
`Objects.requireNonNull()`을 계속 사용하시는 이유가 궁금합니다.
15강에서 스프링의 @NonNull 지원과 SpotBugs를 통해서 null 안정성을 확보하신 내용을 봤습니다. 그런데 계속해서 Objects.requireNonNull() 을 사용하시는 것을 보고 의문이 들었습니다. 이미 Member 객체의 null 안정성은 확보된 것이 아닌가요?굳이 Objects.requireNonNull() 을 계속 남기시는 이유를 생각해봤는데, 애노테이션+도구의 조합과 함께 코드적으로 null 안정성을 확보하고 싶으신 것으로 이해했습니다. (해당 도구가 사라져도 코드 수준의 안정성은 남아있기 때문에, 코드를 수정할 필요는 없어지니까요!) null 검증에 대해서만큼은 코드가 장황해지는 비용보다 추후의 변경에 대한 비용이 더 크다고 생각하시는 것 같은데, 제 이해가 맞을까요?
-
미해결토비의 클린 스프링 - 도메인 모델 패턴과 헥사고날 아키텍처 Part 1
MemberRepositoryTest 중 Member table이 생성이 안됨
토비님 지금 강의 '엔티티 식별자와 JPA 엔티티' 섹션을 수강하던 중 MemberRepositoryTest에서 맴버 생성 테스트를 진행하는데 저는 Member 테이블이 생성이 안되어서 오류가 터지네요![Table "MEMBER" not found (this database is empty)토비님께서는 별 다른 설정 안하시고 해도 성공적으로 돌아갔는데 이유를 알 수 있을까요??
-
미해결토비의 클린 스프링 - 도메인 모델 패턴과 헥사고날 아키텍처 Part 1
compose.yml 파일 질문
안녕하세요 토비님처음 프로젝트를 실행하면 compose.yml 파일이services: mysql: image: 'mysql:latest' environment: - 'MYSQL_DATABASE=mydatabase' - 'MYSQL_PASSWORD=secret' - 'MYSQL_ROOT_PASSWORD=verysecret' - 'MYSQL_USER=myuser' ports: - '3306' 이렇게 설정되어있는데 저기서 데이터베이스 이름이나 user 정보를 변경하면 빌드가 되지않습니다.저 상태 그대로 놔두면 빌드는 되는데 인텔리제이의 데이터베이스 탭을 이용해서 접근해보면 splearn(제경우에는 이름을 변경하지 못했으니 아마 mydatabase) 데이터베이스가 생성되지 않고 Server Objects라는 폴더 하나만 존재합니다
-
미해결토비의 클린 스프링 - 도메인 모델 패턴과 헥사고날 아키텍처 Part 1
iterm 설정 문의
안녕하세요. 강의 잘 보고 있습니다.다름이 아니라 cat .sdkmanrc로 file을 출력할 때 줄 번호와 같이 이쁘게 정돈되어 출력되는 것을 보고 기능을 찾아보고 있는데 무엇인지 잘 모르겠어서 질문 글에서 여쭤봅니다.
-
미해결Microservice 구현 (with EDA,Hexagonal, DDD)
Aggregate 하위에 꼬리를 무는 Entity 는?
헥사고날 아키텍처를 구현하면 먼저 Domain 부분을 구현하는것으로 아는데요,A class, B class, C class가 있다고 한다면.A class 에는 B의 List를, B에서는 C의 List를 가지고 있다고 합시다.그러면 이런 상황에서는 A를 조회하게 되면 B를 여러개 가져오는것을 막기위해 JPA에서는 LazyLoading을 사용할텐데 문제는 Domain 개발 단계에서 JPA를 사용하지 않고 하는 경우에는 어떻게 개발을 하는지 궁금합니다. 즉, 하나의 Aggregate 를 중심으로 Entity가 계층적으로 줄줄이 이어진 경우가 있는지, 그렇다면 이를 어떻게 해결하는지 말입니다. Aggregate 하나 조회하면 저~기 최하위 계층 데이터까지 다 가져오는게 좀 이상한거 같아서요.무조건 JPA를 사용한다고 생각하면 좋으나, 이를 나중에 다른 ORM으로 변경을 해도 문제가 없게 하는게 헥사고널의 취지라고 생각하다보니 이런 질문을 드립니다.
-
미해결Microservice 구현 (with EDA,Hexagonal, DDD)
헥사곤 아키텍쳐 관련하여 문의드립니다.
안녕하세요, 강의 내용 중에 궁금한 점이 있어 질문드립니다.궁금한점이 제가 아는 헥사곤 아키텍쳐는 위와 같이, 입력포트는 인터페이스, 유스케이스는 입력포트의 구현체이고, 포트는 애플리케이션 코어와 외부 세계 사이의 경계점이라고 알고 있는데, 본 강의에서는 반대로 되어 있는데요, 혹시 경계를 유스케이스로 정하신 특별한 이유가 있으신지 궁금합니다.
-
미해결Microservice 설계(with EventStorming,DDD)
다른 BC 또는 마이크로서비스 담당 정보를 어떻게 이용하나요?
컨텍스트 매핑 강의를 듣는 중입니다.대여를 처리하려면 도서 정보, 회원 정보도 필요합니다.다른 BC 또는 마이크로서비스가 관리하는 정보를 어떻게 이용하나요?- 대여할 도서(도서 정보 필요)- 대여할 사용자(회원 정보 필요)
-
미해결Microservice 구현 (with EDA,Hexagonal, DDD)
VO 클래스의 불변 필드 선언을 하지 않으신 이유?
안녕하세요. 먼저 좋은 강의 감사합니다.다름이 아니라, 강의자님께서 작성해주신 코드를 보면 모든 VO 클래스의 필드가 final 로 선언되어 있지는 않은 것으로 보입니다.이와 같이 처리하신 이유가 단순히 강의 편의성을 위한 것인지, 혹은 다른 의도가 있는 것인지 궁금합니다. 제가 생각하기엔 아래와 같이 처리되어야 할 것 같습니다. (대여 서비스의 Item 클래스 예시)/** * 도서 항목 VO */ @Getter @Access(AccessType.FIELD) @NoArgsConstructor(force = true, access = AccessLevel.PROTECTED) @RequiredArgsConstructor @Embeddable public class Item { private final Integer no; //도서번호 private final String title; //도서제목 /** * 테스트용 * @return */ public static Item sample() { return new Item(10, "노인과 바다"); } } 추가로, RentalItem 은 엔티티로 재정의하셨다고 했는데, 코드상으로는 @Entity 없이 VO 처럼 취급되는 것 같습니다. 해당 부분까지 답변주시면 큰 도움될 것 같습니다.감사합니다.
-
해결됨Microservice 구현 (with EDA,Hexagonal, DDD)
RentalCard 의 calculateLateFee 메서드 구현이 잘못된 것 같습니다.
안녕하세요.calculateLateFee 메서드에 작성해주신 코드 중 아래 부분에 오류가 있는 것이 아닌지 확인 부탁드립니다.private void calculateLateFee(RentalItem rentalItem, LocalDate returnDate) { if (returnDate.compareTo(rentalItem.getOverdueDate()) > 0) { int point = Period.between(rentalItem.getOverdueDate(), returnDate).getDays() * 10; this.lateFee.addPoint(point); //문제 } }아래처럼 수정되어야 하는 것이 아닌지 질문드립니다.private void calculateLateFee(RentalItem rentalItem, LocalDate returnDate) { if (returnDate.compareTo(rentalItem.getOverdueDate()) > 0) { int point = Period.between(rentalItem.getOverdueDate(), returnDate).getDays() * 10; this.setLateFee(this.lateFee.addPoint(point)); //수정 } }감사합니다.
-
미해결클론코딩에서 알려주지 않는 것들 (보안, DDD, 마이크로서비스) 2편
로그인 기능 구현 (Application Layer 실습) 에서의 질문
안녕하세요 질문이 있습니다.로그인 기능 구현 (Application Layer 실습) 강의에서 9:10초쯤에 스프링에서 디비객체를 도메인객체로 자동으로? 변환해주는게 있다고 하셨는데요. 어떠한 기능일까요? 알려주시면 감사하겠습니다.
-
미해결
도메인 주도 개발 시작하기, 오프라인 선점 잠금 질문
도메인 주도 설계 책을 읽는 중에 오프라인 선점 잠금 부분에서 이해가 안되는 부분이 있어서 해당 책을 읽어보셨거나 구현을 해보신 분 중에 알고 계신 분 있으신가요?책에 나온 건 처음 세션 얻는 유저(A)가 접근했을 때, LockId를 LockManager로 생성하면 해당 반환된 LockId를 얻는 것까진 나와있는데 도메인이랑 엮어서 타임아웃 전 유저(B)가 LockId를 얻는 방법이 없더라고요. 해당 도메인 엔티티 내에 lock 관련 필드를 하나 만들고 A의 첫 번째 조회 트랜잭션이 끝나기 전에 저장한 다음 B가 그 데이터에 접근할 때, 얻는 방법 밖에 생각이 안나는데 해당 방법이 맞을까요?
-
미해결Microservice 구현 (with EDA,Hexagonal, DDD)
UserCase가 많은데... 이유?
UserCase가 많은데...그러니까 일반적인 Layered Architecture에서는 Service 기능으로, 현재 결국에는 RentalCard 관련해서 작업을 하니까 RentarCardService라는 interface파일에 모든 기능을 넣어서 사용할 수 가 있는데 현재 헥사고날 공부하면서 UseCase는 InqueryUsecase를 제외하고 기능 하나에 usecase하나로 작성이 되었더라고요. 이 이유와 이로 인한 장점이 무잇인지 잘 모르겠습니다.설명 부탁드립니다!
-
미해결Microservice 구현 (with EDA,Hexagonal, DDD)
음성 부분이 너무 깨지는데...
이런 부분은 빨리 보안해 주셔야 하지 않을까요?중간 내용이 알아 들을수 없어서 너무 답답 합니다.싼강의도 아니고... 만들어 진지 좀 된거 같은데 빠른 보안이 필요해 보입니다.그리고 인프런은 이런부분은 한번은 검증해야 하지 않나요.
-
미해결Microservice 구현 (with EDA,Hexagonal, DDD)
CQRS 질문 드립니다.
강사님 안녕하세요. 강의를 다 듣고 배운 내용을 개인 프로젝트를 통해 구현하는중입니다.제가 CQRS에 대한 오해가 있는 것 같아 질문 드립니다. CQRS는 도메인을 도메인 답게 유지하기 위해 비지니스 로직에 query가 침투하는 것을 막는다.즉 command, query를 역할에 따라 분리한다.라고 이해했는데요. 그렇다면, command만 수행하는 서버, query만 수행하는 서버로 분리하는게 맞을까요?로직상 command를 통해 데이터를 저장 혹은 업데이트하려고 하면, db에서 해당 데이터에 대한 조회가 필수적이라고 생각하는데 이러한 조회도 command의 한 종류라고 생각하면 되는걸까요?
-
미해결Microservice 구현 (with EDA,Hexagonal, DDD)
강의 음성 및 영상
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. [내부영역:응용서비스 구현(어플리케이션 헥사곤)-InputPort구현,아우터 포트 정의]강의에서 음성이 불명확하고, 코드 포커스로 확대하신것같은데 잘린부분(클래스 명, 어노테이션 등)이 많아요
-
해결됨클론코딩에서 알려주지 않는 것들 (보안, DDD, 마이크로서비스) 2편
바로 실무에 적용할 수 있는 내용일까요?
안녕하세요 선생님. 급한 마음에 강의를 구매하며 이렇게 문의글도 남기네요. 저는 이제 막 입사 반년 정도 된 주니어 백엔드 개발자 입니다. 회사에 별다른 사수는 없고 php만 쓰던 분들 몇분 계시는데 저 혼자 nestjs를 사용하고있고 레거시코드를 전부 nestjs로 바꾸라고해서 이 강의까지 오게되었습니다. 회사에서는 DDD가 뭔지는 잘 모르지만 요즘 좋다고하니 그걸로 해서 레거시코드를 다 변환하라고하는데 저는 DDD를 잘 알지못하는 상태이고물어볼 선임도 없고 마땅한 강의도 이것밖에 보이질 않아서요,,이 강의를 보면서 nest에 적용시키는것에는 크게 어려움이 없겠지요? ( 아직 보기 전인데 익스프레스 기반 인것같아서요 ,, 개념만 이해하면 구조 잡는것에는 문제가 없겠죠? ) 소개 페이지에 나와있는 메일로 문의를 드려도 문의에 대한 답변을 받을 수 있는지도 궁금합니다. 🙂