묻고 답해요
160만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨토비의 클린 스프링 - 도메인 모델 패턴과 헥사고날 아키텍처 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에 적용시키는것에는 크게 어려움이 없겠지요? ( 아직 보기 전인데 익스프레스 기반 인것같아서요 ,, 개념만 이해하면 구조 잡는것에는 문제가 없겠죠? ) 소개 페이지에 나와있는 메일로 문의를 드려도 문의에 대한 답변을 받을 수 있는지도 궁금합니다. 🙂
-
해결됨Microservice 구현 (with EDA,Hexagonal, DDD)
domain.model.event에 정의되는 객체들에 대한 질문이 있습니다
MSA강의 재밌게 잘 보고 있습니다 👏 강의를 보던 중 카프카 연동을 위해 kafkaadapter와 event 패키지를 정의하고 객체들을 넣고있는데, 저희 회사에서도 겪고 있는 문제가 떠올라서 궁금한게 생겼는데, 프로듀싱하는 서비스와, 컨슘하는 서비스의 프로토콜을 ItemReturned, ItemRented등으로 정의하고 내부 값에서IDName등을 사용한다고 할 때 이 프로토콜 스펙이 변경될 때마다 각 팀별로 객체 정보를 수정한다고 하면, 마치 서비스내에 코드 중복들이 된 상태에서 기능이 변경될때마다 중복된 코드들을 같이 관리하며 싱크를 맞춰줘야하는 작업들과 유사해보이는데, 이에 대해서는 어떻게 풀어나가야 하나요? 즉, 서비스간에 데이터 송수신을 위한 객체들이 중복코드처럼 보이는데 스펙변경이 있을때마다 각 서비스마다 직접 코드 수정을 하는건 한 팀에서 수정을 누락하거나 관리를 놓친 프로젝트에서 수정이 누락되면 문제가 될 수 있을 것 같은데 어떤식으로 풀어나가는지 궁금합니다.
-
해결됨Microservice 설계(with EventStorming,DDD)
VO 관련 궁금한점
VO Money 에서 add(money:Money) 함수에 대해서 궁금합니다.VO는 불변인데 Money를 초기화 해서 값을 재할당 하는건지 어떤식으로 이해하면 좋을지 궁금합니다.
-
해결됨Microservice 설계(with EventStorming,DDD)
VO에 대해서 질문있습니다.
Entity를 설계 하다가 자주 변하지만 응집도가 높은 값들은 어떻게 해야할까요?자주 변하지만 응집도가 높은 값들은 VO를 사용한다.VO로 선언된 값의 수정은 불가능 하지만 생성으로 값을 초기화 한다.그냥 이러한 상황에서는 응집도가 높아도 VO를 고려하지 하지 않는다.수정 기능이 필요하다면 VO가 아닌 Entity를 고려해야 한다?