FrameWork
-
Spring 기본 6 - 새로운 구조와 할인 정책 적용, 전체 흐름 정리FrameWork/Spring&Spring-boot 2023. 11. 9. 14:20
새로운 구조와 할인 정책 사용 처음으로 돌아가서 정액 할인 정책을 정률%할인 정책으로 변경해보자 FixDiscountPolicy → RateDiscountPolicy 어떤 부분만 변경하면 되겠는가? *AppConfg의 등장으로 애플리케이션이 크게 사용 영역과, 객체를 생성하고 구성(Configuration)하는 영역으로 분리되었다.* 사용, 구성의 분리 할일 정책의 변경 FixDiscountPolicy → RateDiscountPolicy로 변경해도 구성 영역만 영향을 받고, 사용영역은 전혀 영향을 받지않는다. *할인 정책 변경 구성 코드* public DiscountPolicy discountPolicy(){ return new FixDiscountPolicy(); } public DiscountPol..
-
Spring 기본5 - AppConfig 리팩토링FrameWork/Spring&Spring-boot 2023. 11. 9. 13:27
AppConfig 리팩토링 현재 AppConfig를 보면 중복이 있고 역할에 따른 구현이 잘 안보인다. *기대하는 그림* 구성 정보(AppConfig)에는 역할이 있고, 역할에 따른 구현을 어떻게 하는지가 한눈에 보여야 한다. 즉 각 역할들을 들어나게 하는 것이 중요하다. ⌨️ tip) 인델리제이 단축키 Ctrl + Alt + M - Extract Method *리팩토링 전* package com.hello.core; import com.hello.core.discount.FixDiscountPolicy; import com.hello.core.member.MemberService; import com.hello.core.member.MemberServiceImpl; import com.hello.cor..
-
Spring 기본 4 - 관심사의 분리FrameWork/Spring&Spring-boot 2023. 11. 9. 13:01
관심사의 분리 *관심사를 분리하자* 배우는 본인의 역할인 배역을 수행하는 것에만 집중해야 한다. 배우는 상대 배역이 어떤 배우가 되더라도 똑같이 공연할 수 있어야 한다. 공연을 구성하고, 담당 배우를 섭외하고, 역할에 맞는 배우를 지정하는 책임을 담당하는 별도의 *공연 기획자*가 나올시점이다. 공연기획자를 만들고, 배우와 공연 기획자의 책임을 확실히 분리하자. AppConfig 등장 애플리케이션 전체 동작 방식을 구성(config)하기 위해 구현 객체를 생성 하고, 연결 하는 책임을 가지는 별도의 설정 클래스를 만들자 *AppConfig* package com.hello.core; import com.hello.core.discount.FixDiscountPolicy; import com.hello.co..
-
Spring 기본3 - 객체 지향 원리 적용, OCP,DIP 위반의 문제FrameWork/Spring&Spring-boot 2023. 11. 9. 11:21
객체 지향 원리 적용3 새로운 할인 정책 개발 *새로운 할인 정책을 확장해 보자* https://agilemanifesto.org/iso/ko/manifesto.html 애자일 소프트웨어 개발 선언 애자일 소프트웨어 개발 선언 우리는 소프트웨어를 개발하고, 또 다른 사람의 개발을 도와주면서 소프트웨어 개발의 더 나은 방법들을 찾아가고 있다. 이 작업을 통해 우리는 다음을 가치 있게 agilemanifesto.org RateDiscountPolicy추가 새로운 할인 정책 적용과 문제점 *방금 추가한 할인 정책을 적용해 보자 할인 정책을 어플리케이션에 적용해보자 할인 정책을 변경하려면 클라이언트인 OrderServiceImpl 코드를 수정해야 한다. public class OrderServiceImpl im..
-
Spring 기본2 - 주문 할인 도메인 설계FrameWork/Spring&Spring-boot 2023. 11. 7. 18:08
주문과 할인 도메인 설계 주문과 할인 정책 회원은 상품을 주문할 수 있다. 회원은 등급에 따라 할인 정책을 적용할 수 있다. 할인 정책은 모든 VIP는 1000원은 할인해주는 고정 금액 할인을 적용해달라.(나중에 변경 될 수 있다.) 할인 정책은 변경 가능성이 높다. 회사의 할인 정책은 아직 확정되지 않았고, 오픈 직전까지 고민을 미루고 싶다. 최악의 경우 할인을 적용하지 않을 수 도 있다. 주문 도메인 협력,역할,책임 1. 주문생성: 클라이언트는 주문 서비스에 주문 생성을 요청한다. 2. 회원 조회 : 할인을 위해서는 회원 등급이 필요하다. 그래서 주문 서비스는 회우너 저장소에서 회원을 조회한다. 3. 할인 적용 : 주문 서비스는 회원 등급에 따른 할인 여부를 할인 정책에 위임한다. 4. 주문 결과 반..
-
Spring 기본1 - 회원 도메인 설계, SOLID 원칙FrameWork/Spring&Spring-boot 2023. 11. 7. 15:37
회원 도메인 설계 회원 도메인 요구사항 회원가입을 하고 조회할 수 있다. 회원은 일반과 VIP 두 가지 등급이 있다. 회원 데이터는 자체 DB를 구축할 수 있고, 외부 시스템과 연동할 수 있다.(미확정) 회원 도메인 협력 관계(역할) *기획자들도 볼수 있는 그림 회원 저장소라는 레이어를 별도로 만든다. 회원 DB를 자체 구축할 수도 있고 외부 시스템과 연동할 수도 있기 때문이다. 그래서 회원 데이터에 접근하는 계층을 따로 만드는 것이다. 회원 데이터를 어디서 끌어다 쓸지 결정이 되지 않았기때문 일단 메모리를 사용한 회원 저장소를 이용해 개발을 진행하기로 하였다. 메모리 회원 저장소는 test할때도 쓰이고 로컬에서 개발할 때도 쓰이고 할것이다. 이후에 어떤 회원 저장소를 쓸질 결정되면 그 부분만 빠르게 개..
-
Jest - Testing2FrameWork/Jest 2023. 3. 20. 11:19
실제 구현코드 user.service.ts async updateUser(id: number, userUpdateRequestDto: UserUpdateDto) { const userId = await this.usersRepository.findOne({ where: { id } }); if (!userId) { throw new BadRequestException('존재하지 않는 회원번호 입니다.'); } const { name, nickName, memo } = userUpdateRequestDto; const user = this.usersRepository.create({ name, nickName, memo }); return await this.usersRepository.update(id,..
-
Jest - Jest Object1 (jest.spyOn( ))FrameWork/Jest 2023. 3. 10. 15:43
Jest Object jest.spyOn( ) mocking에는 스파이(spy)라는 개념이 있다. 테스트를 작성할 때, 어떤 객에에 속한 함수의 구현을 가짜로 대체하지 않고, 해당 함수의 호출 여부와 어떻게 호출 되었는지만 알아내야 할 때가 있다. 이럴 때, Jest에서 제공하는 jest.spyOn(object,methodName)함수를 사용하면 된다. 실제 구현 함수1 obj.js const calculator = { add: (a, b) => a + b, }; module.exports = calculator; obj.test.js const calculator = require("../../lib/obj"); describe("Jest Object jest.spyOn() ", () => { test..