Spring 112

주문과 할인 도메인 실행 / 테스트

1. java main메소드로 실행 / 테스트 memberService를 통해 새로운 회원을 가입시킴 orderService를 통해 새로운 주문을 생성하여 order에게 넘겨준다. 주문서비스 구현체에서 멤버 등급을 확인해 할인 금액까지 알려줌 테스트 성공! 2. Junit으로 테스트 멤버 서비스를 통해 새로운 회원을 join시킴 주문 서비스를 통해 새로운 주문 생성 Assertions의 assertThat메소드를 사용하여 할인 가격이 1000원이 맞는지 검증 새로 join된 회원의 등급이 vip이므로 할인가격은 1000원이어야함. 테스트 성공! 3. 전체 테스트 성공!

Spring/Spring Core 2021.03.04

주문과 할인 도메인 설계 / 개발

주문과 할인 도메인 설계 설계 주문과 할인 정책 회원은 상품을 주문할 수 있다. 회원 등급에 따라 할인 정책을 적용할 수 있다. 할인 정책은 모든 VIP는 1000원을 할인해주는 고정 금액 할인을 적용해달라. (나중에 변경 될 수 있 다.) 할인 정책은 변경 가능성이 높다. 회사의 기본 할인 정책을 아직 정하지 못했고, 오픈 직전까지 고민을 미루고 싶다. 최악의 경우 할인을 적용하지 않을 수 도 있다. (미확정) 주문 생성: 클라이언트는 주문 서비스에 주문 생성을 요청한다. 회원 조회: 할인을 위해서는 회원 등급이 필요하다. 그래서 주문 서비스는 회원 저장소에서 회원을 조회 한다. 할인 적용: 주문 서비스는 회원 등급에 따른 할인 여부를 할인 정책에 위임한다. 주문 결과 반환: 주문 서비스는 할인 결과를..

Spring/Spring Core 2021.03.03

회원 도메인 실행과 테스트

1. 자바 코드로 테스트 해보기 join이 정상적으로 수행되어 메모리저장소에 저장된 것을 확인할 수 있다. spring관련 코드 X 오로지 java로만 테스트 하지만 애플리케이션 로직 main으로만 테스트하는 것은 한계가 있음. 스프링 입문에서 다루었던 Junit으로 다시 테스트 해보자 2. Junit 사용해서 테스트 Assertions의 assertThat메소드를 사용해 findMember를 통해 찾은 정보와 member 객체의 정보를 비교한다. 테스트 성공 회원 도메인 설계의 문제점 이 코드의 설계상 문제점 다른 저장소로 변경할 때 OCP 원칙을 잘 준수할까요? DIP를 잘 지키고 있을까요? 의존관계가 인터페이스 뿐만 아니라 구현까지 모두 의존하는 문제점이 있음 MemberRepository(인터페이..

Spring/Spring Core 2021.03.03

회원 도메인 설계와 개발

회원 도메인 요구사항 회원을 가입하고 조회할 수 있다. 회원은 일반과 VIP 두 가지 등급이 있다. 회원 데이터는 자체 DB를 구축할 수도 있고, 외부 시스템과 연동할 수도 있다.(미확정) 회원 저장소 인터페이스를 만들어 놓고 각각의 구현체를 만들어 갈아끼우는 형식으로 진행 클래스 다이어그램은 실제 서버를 실행하지 않고 클래스만 분석해서 나타낸 그림 ==> 정적 구현체인 MemoryMemberRepository / DbMemberRepository 중 어떤 걸 선택할지는 동적으로 선택해야함. MemberRepository memberRepository = new MemoryMemberRepository(); 로 결정하는 것을 의미 따라서 이것만으로 판단하기는 어려움 그래서 객체 다이어그램을 통해 실제 어..

Spring/Spring Core 2021.03.02

비지니스 요구사항과 설계

비지니스 요구사항과 설계 회원 회원을 가입하고 조회할 수 있다. 회원은 일반과 VIP 두 가지 등급이 있다. 회원 데이터는 자체 DB를 구축할 수 있고, 외부 시스템과 연동할 수 있다.(미확정) 주문과 할인 정책 회원은 상품을 주문할 수 있다. 회원 등급에 따라 할인 정책을 적용할 수 있다. 할인 정책은 모든 VIP는 1000원을 할인해주는 고정 금액 할인을 적용해달라.(차후에 변경 될 수 있음.) 할인 정책은 변경 가능성이 높다. 회사의 기본 할인 정책을 아직 정하지 못했고, 오픈 직전까지 고민을 미루고 싶다. 최악의 경우 할인을 적용하지 않을 수 도 있다.(미확정) 요구사항을 보면 회원 데이터, 할인 정책 같은 부분은 지금 결정하기 어려운 부분이다. 그렇다고 이런 정책이 결정될 때까지 개발을 무기한 ..

Spring/Spring Core 2021.03.02

들어가며

앞서 스프링 입문을 통해 스프링이 어떤 것이며, 스프링 컨테이너 / 스프링 빈/ 의존성 주입 등을 간략히 알아보았다. 이제는 스프링의 세부적인 내용과 왜 스프링을 사용해야하는지에 대해 알아보려한다. 먼저, 비지니스 로직을 설계하고 이를 순수 JAVA만으로 구현할 것이다. 그 후, 비지니스 로직에 변경이 필요할 때 순수 JAVA만을 사용한 다형성으로 객체지향설계 원칙인 SOLID를 지킬 수 있는지를 확인해보고 스프링이 왜 필요한지에 대한 근본적인 이유에 대해 알아 볼 것이다. 또한, 간략히 다루어보았던 Spring Bean, Spring Container, DI등에 대해 자세히 다루어 보려고 한다.

Spring/Spring Core 2021.03.02

객체 지향 설계와 스프링

⭐다시 스프링으로 스프링은 다음 기술로 다형성 + OCP / DIP를 가능하게 지원 DI(Dependency Injection) : 의존관계, 의존성 주입 DI 컨테이너 제공 클라이언트 코드의 변경 없이 기능 확장 쉽게 부품을 교체하듯이 개발 모든 설계에 역활과 구현을 분리 애플리케이션 설계도 공연을 설계 하듯 배역만 만들어두고, 배우는 언제든지 유연하게 변경할 수 있게 만드는 것이 좋은 객체 지향 설계이다. 이상적으로는 모든 설계에 인터페이스를 부여하는 것 어떤 DB를 쓸지 정해지지 않았더라도 인터페이스를 사용하면 구현만 하여 교체할 수 있다. 하부 구현 기술들에 대한 선택을 최대한 미룰 수 있는 장점이 있다. ex) 할인 정책들이 정해지지 않았다고 판매 로직에 대한 개발이 중단되면 안된다. 인터페이스..

Spring/Spring Core 2021.03.01

좋은 객체 지향 프로그래밍이란?

객체 지향 특징 추상하 캡슐화 상속 다형성 객체 지향 프로그래밍 객체 지향 프로그래밍은 컴퓨터 프로그램을 명렁어의 목록으로 보는 시각에서 벗어나 여러 개의 독립된 단위, 즉 "객체"들의 모임으로 파악하고자 하는 것이다. 각각의 객체는 메시지를 주고받고, 데이터를 처리할 수 있다.(협력) 객체 지향 프로그래밍은 프로그램을 유연하고 변경이 용이하게 만들기 때문에 대규모 소프트웨어 개발에 많이 사용된다. 유연하고, 변경이 용이?? 레고 블럭 조립하듯이 키보드, 마우스 갈아 끼우듯이 컴퓨터 부품 갈아 끼우듯이 컴포넌트를 쉽고 유연하게 변경하면서 개발할 수 있는 방법 ⭐그것이 바로 다형성(Polymorphism)⭐ 다형성을 통해서 무한한 확장이 가능해진다. 클라이언트에 영향을 주지 않고 새로운 기능을 제공할 수 ..

Spring/Spring Core 2021.03.01

스프링의 탄생 배경과 스프링

2000년대 초반의 상황 EJB(Enterprise Java Beans) ==> 자바진영의 표준기술 거의 종합선물세트 당시에 보급이 잘되고, 기술영업이 잘되었음. 컨테이너 기술, 설정에 의한 트랜잭션 관리, 분산 처리 기술 등 고급기술에 대한 지원이 잘되었음. 당시에 entity bean(orm기술==> 쿼리를 쓰지않고 자바객체를 db에 넣는 기술)도 가지고 있었음. but 엄청 비쌌음. 한대의 서버를 구성하려면 수천만원이 들었음(지금은 spring, tomcat등으로 무료로 구성가능) EJB지옥 엄청 어렵고, 복잡하고, 느림.(이론적으로는 최고 but, 개발자들에게는 엄청난 고통) interface를 모두 구현해야했고, EJB에 의존적으로 개발해야했음. 이로인해 코드도 지저분해지고 life cycle관..

Spring/Spring Core 2021.02.28

AOP 적용

공통 관심 사항(cross-cutting concern) vs 핵심 관심 사항(core concern) 분리 1. 공통 로직 만들기 (시간 측정) @Aspect 애노테이션을 통해 AOP로 사용하겠다는 의미 @Around 애노테이션을 통해 타켓을 지정해 줄 수있는데 특정 클래스를 지정해줄 수 도 있다. 위에서는 hellospring패키지 안의 모든 클래스에 적용해주었다. joinPoint.proceed() : 다음 메소드 진행 joinPoint.toString()을 통하여 어떤 메소드를 call하는지 확인 2. AOP등록 스프링 빈으로 등록(@Bean) 컴포넌트 스캔(@Component) 스프링 빈에 등록해서 쓰는 것을 선호하는 경향임. 우리는 컴포넌트 스캔으로 진행 3. 실행 spring을 실행시키고 l..

반응형