새로운 할인 정책 개발 고정 금액(1000원) 할인 방식 -> VIP일 경우 10% 할인 1. RateDicountPolicy.class public class RateDiscountPolicy implements DiscountPolicy{ private int discountPercent = 10; @Override public int discount(Member member, int price) { if(member.getGrade() == Grade.VIP) { return price * discountPercent / 100; } else { return 0; } } } ctrl + shift + T => 테스트 자동 생성 2. RateDiscountPolicyTest class RateDisc..
전체 글
JAVA프로젝트 생성 -> initailizr 설정 (의존성 추가 안 함) Application 정상적으로 실행되는지 run 확인 비즈니스 요구 사항과 설계 회원 회원을 가입하고 조회할 수 있다. 회원은 일반과 VIP 두 가지 등급이 있다. 회원 데이터는 자체 DB를 구축할 수 있고, 외부 시스템과 연동할 수 있다. (미확정) -> 외주를 주는 경우 등 -> 역할(인터페이스)과 구현 구분하면 됨 주문과 할인 정책 회원은 상품을 주문할 수 있다. 회원 등급에 따라 할인 정책을 적용할 수 있다. 할인 정책은 모든 VIP는 1000원을 할인해주는 고정 금액 할인을 적용해 달라. (나중에 변경될 수 있다.) 할인 정책은 변경 가능성이 높다. 회사의 기본 할인 정책을 아직 정하지 못했고, 오픈 직전까지 고민을 미루고 싶..
Spring Framework Spring Boot 스프링이라는 단어는 문맥에 따라 다르게 사용된다. 스프링 DI 컨테이너 기술 스프링 프레임워크 스프링 부트, 스프링 프레임워크 등을 모두 포함한 스프링 생태계 스프링 프레임워크가 만들어진 이유 -> 핵심 컨셉 스프링은 자바 언어 기반의 프레임워크이다. -> 자바 언어의 가장 큰 특징은 객체 지향 언어 스프링은 객체 지향 언어가 가진 강력한 특징을 살려내는 프레임워크이다. -> 좋은 객체지향 애플리케이션을 개발할 수 있게 도와주는 프레임워크 좋은 객체지향 프로그래밍 객체지향 프로그래밍 여러 개의 독립된 단위, 즉 '객체'들의 모임 각각의 객체는 메시지를 주고받고 데이터를 처리할 수 있다. (협력) 객체지향 프로그래밍은 프로그램을 유연하고 변경을 용이하게 ..
캐시 기본 동작 캐시가 없을 때 데이터가 변경되지 않아도 계속 네트워크를 통해서 데이터를 다운로드 받아야 한다. 인터넷 네트워크는 매우 느리고 비싸다. 브라우저 로딩 속도가 느리다. 느린 사용자 경험 캐시 적용 첫 번째 요청을 했을 때 응답 결과를 캐시에 저장한다. 이후 들어온 요청에 대해서는 캐시 유효 시간을 검증하고 데이터를 캐시에서 조회한다. 캐시 덕분에 캐시 가능 시간동안 네트워크를 사용하지 않아도 된다. 비싼 네트워크 사용량을 줄일 수 있다. 브라우저 로딩 속도가 매우 빠르다. 빠른 사용자 경험 캐시 시간 초과 캐시 유효 시간이 초과하면, 서버를 통해 데이터를 다시 조회하고, 캐시를 갱신한다. 이때 다시 네트워크 다운로드가 발생한다. 검증 헤더와 조건부 요청1 (Last-Modified & if..
Http 헤더 용도 Http 전송에 필요한 모든 부가정보 ex) 메시지 바디 내용, 메시지 바디 크기, 압축, 인증, 요청 클라이언트, 서버 정보, 캐시 관리 정보... 필요시 임의의 헤더 추가 가능 ex) hello: world Http 표준 1999년 RFC2616 -> 폐기됨 2014년 RFC7230~7235 등장 RFC723x 변화 Entity -> 표현(Representation) 표현 = 표현 메타데이터 + 표현 데이터 HTTP BODY (RFC7230) 메시지 본문(body)를 통해 표현 데이터 전달 메시지 본문 = payload 표현은 요청이나 응답에서 전달할 실제 데이터 표현 헤더는 표현 데이터를 해석할 수 있는 정보 제공 ex) 데이터 유형(JSON, html, xml...), 데이터 ..
200 200 OK 201 Created: 요청 성공해서 새로운 리소스가 생성됨 202 Accepted: 요청이 접수되었으나 처리가 완료되지 않았음 204 No Content: 서버가 요청을 성공적으로 수행했지만, 응답 페이로드 본문에 보낼 데이터가 없음 ex) 웹 문서 편집기에서 save 버튼 눌렀을 때 거의 200, 201 정도만 사용함 300 요청을 완료하기 위해 유저 에이전트(클라이언트 프로그램 - 웹 브라우저)의 추가 조치 필요 리다이렉션 웹 브라우저는 3xx 응답의 결과에 Location 헤더가 있으면, Location 위치로 자동 이동 (리다이렉트) 리다이렉션의 종류 영구 리다이렉션 (301, 308) 일시적인 리다이렉션 (302, 307, 303) 리소스의 URI가 일시적으로 변경 따라서 ..
클라이언트 -> 서버로 데이터 전송 쿼리 파라미터를 통한 데이터 전송 GET으로 주로 사용 주로 정렬 필터(검색어)를 쓸 때 사용 메시지 바디를 통한 데이터 전송 Post, Put, Patch 회원가입, 상품 주문, 리소스 등록, 리소스 변경 등 정적 데이터 조회 이미지, 정적 텍스트 문서 불러올 때 조회는 get 사용 정적 데이터는 일반적으로 쿼리 파라미터 없이 리소스 경로로 단순하게 조회 가능 동적 데이터 조회 주로 검색, 게시판 목록에서 정렬 필터(검색어) 조회 조건을 줄여주는 필터, 조회 결과를 정렬하는 정렬 조건에 주로 사용 조회는 get 사용 get은 쿼리 파라미터를 사용해서 데이터를 전달 HTML Form 데이터 전송 (POST) Form 태그를 이용해 POST 전송 - 저장 메시지 바디에 ..
http API 설계 API URI 설계 uri 설계에서 가장 중요한 것은 리소스 식별! 리소스란? 회원을 등록하고 수정하고 조회하는 게 리소스가 아니다. 회원이라는 개념 자체가 리소스다. 리소스 식별 회원을 등록하고 수정, 조회하는 것을 모두 배제하고 회원이라는 리소스만 식별하면 된다. -> 회원이라는 리소스를 uri에 매핑 ex) read-member-by-id -> /members/{id} (조회) /members/{id} (등록) /members/{id} (삭제)... 계층 구조상 상위를 컬렉션으로 보고 복수단어 사용 권장 URI는 리소스만 식별 리소스와 해당 리소스를 대상으로 하는 행위를 분리 리소스(명사): 회원 행위(동사): 조회, 등록, 삭제, 변경... 행위(메소드)는 http 메소드로 ..