소개
유튜브 제미니의 개발실무를 운영하고 있습니다.
강의
전체1수강평
- 잘 들었습니다, 감사합니다
남도일
2024.09.24
1
- 짧지만 유익한 내용 감사합니다
착한남자
2024.07.17
1
게시글
질문&답변
2024.07.12
Business Logic!
외부에서 주입받도록 분리한 로직들 이 의미하는 부분이 어떤 로직을 말하시는 건지 애매한 것 같습니다! 외부 라이브러리나, 외부 통신을 위한 클라이언트를 의미하시는 걸까요? 그렇다면 Data Access Layer 에 해당합니다!
- 0
- 2
- 173
질문&답변
2024.05.18
Business Layer 인자 처리
1. 클라이언트로부터 전달되는 presentation layer 에서 바로 전달받는 것을 기대하셨는지 2. 아니면 리팩토링 전과 같이 payRequest 로 controller에서 전달 받은 뒤 다른 layer (business 혹은 presentation) 에서 dto 로 변경한 뒤 businessPay() 메서드를 호출하여 인자를 입력해주는 것을 기대하셨는지 3. 아니면 다른 방법으로 진행이 되는지 2번입니다! PayRequest 가 Presentation Layer 에 있는 상황에서, Business, Implement Layer 에 파라미터로 넘어온다는 것 자체가 레이어를 지키는 규칙을 위반하는 '레이어 역류' 에 해당 되버리기 때문입니다. 그래서 흐름 상으로 보면 외부 랑 가장 가까운 Presentation Layer 에서 PayRequest 를 받고 Presentation Layer 에서 Business Layer 로 가기전에 Business, Implement Layer 의 객체로 변환을 하고 넘겨준다고 이해하시면 될 것 같습니다. 제 유튜브에도 있을 것 같은데 저도 못 찾겠네요;; 관련해서는 예전에 제가 발표했던 내용을 참고해 보시면 좋을 것 같습니다! https://youtu.be/RVO02Z1dLF8?si=Wj4ZhsYESDE2T5xS&t=508 질문 감사드립니다!
- 1
- 2
- 211
질문&답변
2024.04.07
모듈에 대한 단방향 의존
제가 생각하는 구조는 1번 코드와 2번 코드 모두 아닙니다. 이 강의 설명 기준에서는 API 모듈 이 자체적으로 디비 접근 의존성을 갖지 않고 DB 모듈 을 사용하는게 핵심입니다. 그렇기에 인터페이스 없이 API 모듈이 DB 모듈을 의존하고 있는 형태가 전부 입니다. (강의 중간에 인터페이스를 맞춘다 는 얘기는 메소드 시그니처 를 맞춘다는 의미로 이해하시면 됩니다.) 그래서 대략 이러한 구조라고 보시면 될 것 같습니다. // Payments-API 모듈 //// 의존성 implementation(project(":storage:db-core")) //// 코드 class PaymentAppender(val paymentRepository: PaymentRepository){ fun append(user: User, payment: NewPayment): Payment { // ... 중략 } } // db-core 모듈 //// 의존성 implementation(project("...:spring-boot-starter-data-jpa")) /** * 의존성이 변경된다면 * implementation(project("...:hyper-persistence")) **/ //// 코드 class PaymentRepository( val paymentJpaRepository: PaymentJpaRepository /** * 의존성이 변경된다면 * val paymentHyperRepository: PaymentHyperRepository **/ ){ fun newPayment(paymentPersist: PaymentPersist): PaymentPersistResult { val saved = paymentJpaRepository.save(paymentCommand.toEntity()) /** * 의존성이 변경된다면 * val saved = paymentHyperRepository.insert(paymentCommand.toEntity()) **/ return saved.toResult() } } PaymentDB, PaymentDB2 가 별도 모듈이 있는게 아니라, DB-Core 안에서 변경을 대응하는 관점입니다. -- 소프트웨어는 단계적으로 진화해야 하기 때문에 이 강의에서는 초반 단계 정도의 기본적으로 생각해 볼거리를 중심으로 설명하고 있으므로 완전한 예제가 적절히 나오지 않습니다. 초반 단계 프로젝트 구조는 https://github.com/team-dodn/spring-boot-kotlin-template 를 참고하시면 됩니다. 실제 더 진화한 인터페이스(코드 상에서 쓰는 Interface 를 의미)와 구현 방향성 관련해서는 직접적으로 설명 및 표현하고 있지 않지만, 좀 더 진화된 기준의 구조를 참고하시려면 아래 영상의 후반 부 모듈 구조에 대한 걸 참고하시면 좋을 것 같습니다. https://youtu.be/RVO02Z1dLF8?si=FQdWoLdoBntwTfFS 또 이 아래 영상에서도 참고하실 부분이 있을 것 같습니다 https://youtu.be/p5ZMF2bpE6A?si=EE4JB5X2h6HS4F18 질문 남겨주셔서 감사합니다 :D
- 0
- 2
- 397