본문 바로가기

Development/Spring Boot

(23)
[Spring Boot] 주문과 할인 도메인 설계 (3-1) 주문과 할인 도메인 개발 1- 강의 내용 요약 해당 강의의 요구사항을 요약하자면 클라이언트가 주문을 넣어. 그러면 회원 아이디, 상품명, 가격이 넘어가는데 주문 서비스에서 이를 받아 주문 내역을 넘겨줘. 근데 중요한건 회원이 VIP 등급이라면 할인 정책이 적용될수도 있는데 이게 정율일지 정액일지는 몰라. 2- 구현 핵심 포인트는 역할과 구현체를 분리하는 것인데. (여러번 강조되지만 기능의 교체나 확장을 용이하게하기 위함) 여기서 보면 주문 구현체는 주문 생성만 행하고 있고, 할인정책 구현체는 할인 정책만 넘겨주고 있기에 단일 책임 원칙(SRP)가 매우 잘지켜지고 있음. 예시 코드의 전제조건은 'VIP는 정액법으로 1,000원을 할인한다.'인데, 이게 아닌 정율법으로 바뀐다하여도 주문 구현체를 수정할 필요가 없기에. 즉, 각 구현..
[Spring Boot] 주문과 할인 도메인 설계 (3) 1- 요구사항 미확정 요구사항 - 할인 정책은 변경 가능성이 높음. 회사의 기본 할인 정책을 아직 정하지 못하였으며, 오픈 직전까지 고민을 미루고 싶음. - 최악의 경우 할인을 적용하지 않을수도 있음. 2- 메모 이전 회원 도메인 설계와 마찬가지이다. 미확정된 요구사항은 추상화(역할)과 구체화(구현)을 분리하여 나중에 어떠한 것을 택하게 된다 하여도 교체가 용이하도록 개발이 가능하다.
[Spring Boot] 비즈니스 요구사항과 설계 (2-2) 회원 도메인 실행 및 테스트 1- 코드와 다이어그램 - 클래스 다이어그램: 정적 다이어그램 - 객체 다이어그램: 동적 다이어그램 (왜냐 실제 동작해야 알 수 있기 때문.) 2- 테스트 프레임워크 - 출력 찍어서 확인하려면 모든걸 다 실행해야하는 번거로움 발생 - 이에 JUNIT 사용! - Assertions에서 테스트 (비교 등)을 위한 메서드들이 주어지는데 [ org.assertj.core.api ]에서 주어지는 것에 좋은 API들이 많음 - GIVEN - WHEN - THEN 패턴 3- 강의. 현재까지 코드의 설계상 문제는 무엇일까요? - 정답 듣기 전 하늘 생각 OCP 법칙이 지켜지지 않는다는 것. 요구사항에 따라가자면 회원 저장소는 아직 어떻게할지 미확정임. 그래서 우선 개발하는 단계에서는 자바 메모리를 활용한 회원 저장소로..
[Spring Boot] 비즈니스 요구사항과 설계 (2-1) 회원 도메인 구현 1- 구현 - 클래스 다이어그램을 기반으로 구현 2- 이론 (1) 다형성(polimorphism) : 하나의 객체가 여러 타입을 가질 수 있는 것을 의미함 다형성 구현 방법 - 오버로딩: 동일 메서드명에 parameter만 다르게하여 메서드를 구현하는 것 - 오버라이딩: 쉽게 이야기하자면 메서드를 재정의하는 것. 주로 상속과 인터페이스에서 사용됨. - 함수형 인터페이스: 한 개의 추상 메서드를 가지고 있는 것을 함수형 인터페이스라 하며, 이는 Enum에서 큰 빛을 발휘한다고 함 (함수형 인터페이스 내용 보충 필요) 3- 이외 팁 - 이번 예제에서 회원 저장소에 대해 미확정이다라는 요구사항이 있기에 자바 메모리를 활용해 회원 정보를 저장함 - 이때 HashMap을 사용하여 저장했는데, 실무에서 동시성 문제..
[Spring Boot] 비즈니스 요구사항과 설계 (2) 강의 순서상 스프링 프레임워크와 관련된 내용 없이 객체지향에 대한 학습이 먼저 이루어짐. 회원 도메인 설계 회원 도메인 요구사항 회원 가입 및 조회 가능 회원은 일반과 VIP 두 가지 등급이 있음 자체 DB를 구축할 수 있고 외부 시스템과 연동할 수 있음 (미확정) 이 저장소는 미확정이기에, '회원저장소'라는 역할의 인터페이스 생성 구현체의 예시는 세 가지의 경우가 존재할 수 있음 (1) 메모리 회원 저장소 (2) DB 회원 저장소 (3) 외부 시스템 연동 회원 저장소 앞서 이야기했듯 회원 저장소는 미확정임. 그렇기에 개발에서 테스트하고 쓸 수 있도록 자바를 활용한 메모리 회원 저장소로 일단 구현 수행. 회원저장소 역할의 인터페이스를 만들면 나중에 확정시 구현체를 갈아끼우기 용이해짐. ~ Impl : 이..
[Spring Boot] 비즈니스 요구사항과 설계 (1) 요구사항 요구사항에는 경우의 상황이 있음 기능 확정 기능 미확정 (예시) 회원 데이터는 자체 DB 구축할수도 있고, 외부 시스템과 연동할 수도 있음 할인 정책의 변경 가능성은 높음. 회사의 기본 할인 정책을 아직 정하지 못했고, 오픈 직전까지 고민을 미루고 싶음. 최악의 경우 할인을 적용하지 않을 수 있음. 나중에 변경될 수 있는 기능 할인 정책은 모든 VIP는 1천원을 할인해주는 고정 금액 할인 적용 (나중에 변경될 수 있음) - 미확정된 내용들이 결정될때까지 기다릴 수 없음. - 그렇기에 앞서 학습한 객체 지향 설계 방법 ( 역할과 구현의 분리 )을 통해 문제 해결이 가능함. 즉, 인터페이스를 통한 설계.
[Spring Boot] 프로젝트 생성하기 1- 프로젝트 생성 https://start.spring.io - 위 링크를 통해 스프링 부트 프로젝트를 간편하게 생성할 수 있음 - SNAPSHOT이나 Mn 버전은 정식 릴리즈된 버전이 아님 (강의에서는 2.3.3 버전을 사용했으나, 강의를 듣는 현 시점에서는 2.7.2가 정식 릴리즈된 최신 버전이기에 해당 버전 사용) - Project Metadata : Artifact - 프로젝트 빌드명 - Dependenies 설정시 라이브러리들을 불러오나, 위 캡처본과 같이 둘 경우 코어 라이브러리만 가져옴 - 원하는 설정 후 하단에 Generate 클릭하면 설정된 zip 파일을 받아올 수 있음 - 압축 해제 후 IntelliJ로 오픈. 이때 build.gradle을 클릭해 오픈해야 함. 1-2. build.g..