(인프런) 김영한님의 스프링 핵심 원리-기본편을 공부하고 리뷰한 글입니다. 1. 주문과 할인 도메인 설계 - 1. 주문 도메인 협력, 역할, 책임 1) 주문 생성: 클라이언트는 주문 서비스에 주문 생성을 요청한다. - 실무에서는 상품이라는 객체를 만들어서 구현하지만 여기서는 간단하게 구현하기 위해 데이터(회원 id, 상품명, 상품가격)로 보낸다. 2) 회원 조회: 할인을 위해서 회원 등급이 필요하다. 그래서 주문 서비스는 회원 저장소에서 회원을 조회한다. (회원의 등급을 알기 위해서) 3) 할인 적용: 주문 서비스는 회원 등급에 따른 할인 여부를 할인 정책에 위임한다. 4) 주문 결과 반환: 주문 서비스는 할인 결과를 포함한 주문 결과를 반환한다. (참고) 실제로는 주문 데이터를 DB에 저장하지만 여기서..
(인프런) 김영한님의 스프링 핵심 원리-기본편을 공부하고 리뷰한 글입니다. 3. 회원 도메인 설계 1. 회원 도메인 협력 관계 2. 회원 클래스 다이어그램 클래스 다이어그램은 프로그램을 실행하지 않고 클래스만 분석해서 볼 수 있는 그림이다. 3. 회원 객체 다이어그램 MemberRepository 역할에 MemoryMemberRepository 를 넣을지 DbMemberRepository를 넣을지는 동적으로 결정되는 것들이다. 서버가 떠서 클라이언트가 실제로 사용하는 인스턴스 객체들을 보기위한 그림이다. 4. 회원 도메인 개발 1. 회원 엔티티 1) 회원 등급 회원 등급은 enum 으로 만든다. class 대신 enum 으로 선언하면 이 객체는 "상수의 집합"이라는 것을 명시한다. package hell..
(인프런) 김영한님의 스프링 핵심 원리-기본편을 공부하고 리뷰한 글입니다. 1. 프로젝트 생성 1. 사전 준비물 - Java 11 설치 - IDE: IntelliJ 설치 2. 스프링 부트 스타터 사이트로 이동해서 스프링 프로젝트 생성 https://start.spring.io/ 1) 프로젝트 선택 Project: Gradle Project Spring Boot: 2.6.7(미정식 버전을 제외한 최신 버전) Language: Java Packaging: Jar Java: 11 2) Project Metadata groupId: hello artifactId: core 3) Dependencies: 선택하지 않는다. 3. Gradle 전체 설정 build.gradle 설정을 변경하면 코끼리 Click 혹은 ..
(인프런) 김영한님의 스프링 핵심 원리-기본편을 공부하고 리뷰한 글입니다. 1. 모든 설계의 역할과 구현을 분리하자(자동차, 공연의 예 떠올리기) 2. 애플리케이션 설계도 유연하게 변경할 수 있도록 만드는 것이 좋은 객체 지향 설계다 3. 이상적으로는 모든 설계에 인터페이스를 부여하자 (실무 고민) - 인터페이스를 도입하면 추상화라는 비용 발생 - 기능을 확장할 가능성이 없다면, 구체 클래스를 직접 사용하고 향후 꼭 필요할 때 리팩토링을 통해 인터페이스를 도입하는 것을 추천 1. 스프링이란? 1. 스프링 생태계 - 필수: 스프링 프레임워크, 스프링 부트 - 선택: 스프링 데이터, 스프링 세션, 스프링 시큐리티, 스프링 Rest Docs, 스프링 배치, 스프링 클라우드 2. 스프링 프레임워크 1) 핵심 기..
1. 상속이란? 1. 클래스의 상속 상위 클래스(부모 클래스), 하위 클래스(자식 클래스) 라고 한다. 상위 클래스가 하위 클래스보다 일반적인 개념이고 하위 클래스는 상위 클래스보다 구체적인 클래스다. 1) 클래스 문법 상속 상속을 구현할 때는 extends 를 사용한다. 'B 클래스가 A 클래스를 상속받는다'를 코드와 그림으로 나타낸 것이다. 2. 상속을 사용하여 고객 관리 프로그램 구현하기 실습 코드는 여기서 1) Customer 클래스 구현하기(Customer.java) 모든 멤버 변수를 반드시 private으로 구현할 필요는 없다. 필요에 따라 멤버 변수나 메서드를 외부에 노출하지 않을 목적일 때 private으로 선언하다. 2) VIPCustomer 클래스 구현하기(VIPCustomer.java..
(인프런) 김영한님의 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술을 공부하고 리뷰한 글입니다. 1. AOP 적용 AOP: Aspect Oriented Programming 공통 관심 사항(cross-cutting concern) vs 핵심 관심 사항(core concern) 분리 1. 시간 측정 AOP 등록 package hello.hellospring.aop; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.springframework.stereotype.Component..
(인프런) 김영한님의 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술을 공부하고 리뷰한 글입니다. 스프링 DB 접근 기술 4가지 방식대로 차례로 진행할 예정이다. 1. 순수 JDBC 2. JDBCTemplate 3. JPA 4. 스프링 데이터 JPA 1. 스프링 데이터 JPA를 이용한 코드 작성 스프링 부트와 JPA만 사용해도 개발 생산성이 정말 많이 증가하고 개발해야할 코드도 확연히 줄어든다. 여기에 스프링 데이터 JPA를 사용하면 기존의 한계를 넘어 리포지토리에 구현 클래스 없이 인터페이스 만으로 개발을 완료할 수 있다. 그리고 반복 개발해온 기본 CRUD 기능도 스프링 데이터 JPA가 모두 제공한다. 스프링 부트와 JPA라는 기반 위에, 스프링 데이터 JPA라는 환상적인 프..
(인프런) 김영한님의 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술을 공부하고 리뷰한 글입니다. 스프링 DB 접근 기술 4가지 방식대로 차례로 진행할 예정이다. 1. 순수 JDBC 2. JDBCTemplate 3. JPA 4. 스프링 데이터 JPA 1. JPA 장점 1. 기존의 반복 코드는 물론이고, 기본적인 SQL도 JPA가 직접 만들어서 실행해준다. 2. SQL과 데이터 중심의 설계에서 객체 중심의 설계로 패러다임을 전환을 할 수 있다. 3. 개발 생산성을 크게 높일 수 있다. 2. JPA를 이용한 코드 작성 1. build.gradle 파일에 JPA, h2 데이터베이스 관련 라이브러리 추가 jdbc를 사용하지 않으므로 아래와 같이 주석 처리하거나 삭제하고 jpa 관련 라이..