비즈니스 요구사항과 설계 회원 회원을 가입하고 조회할 수 있다. 회원은 일반과 VIP 두 가지 등급이 있다. 회원 데이터는 자체 DB를 구축할 수 있고,외부 시스템과 연동할 수 있다.(미확정) 주문과 할인 정책 회원은 상품을 주문할 수 있다. 회원 등급에 따라 할인 정책을 적용할 수 있다. 할인 정책은 모든 VIP는 1000원을 할인해주는 고정 금액 할인을 적용해달라.(나중에 변경 될수 있다.) 할인 정책은 변경 가능성이 높다. 회사의 기본 할인 정책을 아직 정하지 못했다. 회원 도메인 설계 회원 클래스 다이어그램 회원 도메인 개발 Member Entity 더보기 회원 등급 package hello.core.member; public enum Grade { BASIC, VIP } 회원 엔티티 packag..
1. SRP (Single Responsibility Principle : 단일 책임 원칙) 정의 : 한 클래스는 오직 하나의 책임만을 가져야 한다. 중요성 : 한 클래스가 여러 책임을 가지게되면, 해당 클래스는 변화의 이유가 여러 가지가 될 수 있다. 이는 유지보수를 복잡하게 만든다. SRP를 지키면 클래스의 변경 이유가 명확해지며, 코드의 가독성이 향상된다. 예제 : "UserManager" 크래스는 사용자 정보를 관리하는 책임만 가져야 하며, 로그 기록이나 UI표시와 같은다른 책임을 가지면 안된다. 2. OCP (Open/Closed Principle : 개방 - 폐쇄 원칙) 정의 : 소프트웨어 엔티티(클래스, 모듈, 함수 등)는 확장에는 열려 있어야 하고, 수정에는 닫혀 있어야 한다. 중요성 : ..
스프링의 시작과 역사 스프링의 역사는 2002년 로드 존슨의 책에서 시작된다. 이 책에서는 EJB의 문제점을 지적하고, EJB 없이도 탁월한 애플리케이션을 개발할 수 있음을 보여준다. 책에는 BeanFactory, ApplicationContext, POJO, 제어의역전, 의존관계 주입 등의 기반 기술에 대한 30,000라인 이상의 예제 코드가 포함되어 있다. 책의 출간 직후 유겐 휠러와 얀 가로프가 로드 존슨에게 오픈 소스 프로젝트 제안을 하면서 스프링 프레임워크의 탄생을 위한 첫 걸음을 내딛게 된다. 스프링 릴리즈 역사 2003년 : 스프링 프레임워크 1.0 (주로 XML 기반 설정) 2006년 : 스프링 프레림워크 2.0 (XML 편의 기능 추가) 2009년 : 스프링 프레임워크 3.0 (자바 코드..
요청 매핑 헨들러 어뎁터 구조(Request Mapping Handler Adapter) HTTP 메시지 컨버터는 스프링 MVC 어디쯤에서 사용되는 것일까? SpirngMVC 구조 모든 비밀은 애노테이션 기반의 컨트롤러, @RequestMapping 을 처리하는 핸들러 어댑터인 RequestMappingHandlerAdapter (요청 매핑 헨들러 어뎁터)에 있다. RequestMappingHandlerAdapter 동작방식 ArgumentResolver Spring MVC에서 ArgumentResolver는 컨트롤러 메서드에서 사용하는 매개변수들을 런타임 시점에 처리하는 기능이다. ArgumentResolver는 컨트롤러 메서드의 매개변수를 분석하고, 그 매개변수에 값을 바인딩할 수 있는 객체를 제공한..
HTTP 응답 - HTTP API, 메시지 바디에 직접 입력(정리) HTTP API를 제공하는 경우에는 HTML이 아니라 데이터를 전달해야 하므로, HTTP 메시지 바디에 JSON 같은 형식으로 데이터를 실어 보낸다. 참고 💡 HTML이나 뷰 템플릿을 사용해도 HTTP 응답 메시지 바디에 HTML 데이터가 담겨서 전달된다. 여기서 설명하는 내용은 정적 리소스나 뷰 템플릿을 거치지 않고, 직접 HTTP 응답 메시지를 전달하는 경우를 말한다. @Slf4j @Controller //@RestController public class ResponseBodyController { @GetMapping("/response-body-string-v1") public void responseBodyV1(HttpServ..
HTTP 응답 - 정적 리소스, 뷰 템플릿 (정리) 정적 리소스 예) 웹 브라우저에 정적인 HTML, css, js를 제공할 때는, 정적 리소스를 사용한다. 뷰 템플릿 사용 예) 웹 브라우저에 동적인 HTML을 제공할 때는 뷰 템플릿을 사용한다. HTTP 메시지 사용 HTTP API를 제공하는 경우에는 HTML이 아니라 데이터를 전달해야 하므로, HTTP 메시지 바디에 JSON 같은 형식으로 데이터를 실어 보낸다. 정적 리소스 스프링 부트는 클래스패스의 다음 디렉토리에 있는 정적 리소스를 제공한다. /static , /public , /resources , /META-INF/resources src/main/resources 는 리소스를 보관하는 곳이고, 또 classPass의 시작 경로이다. 따라서 다..
과거 서블릿에서 현재까지 사용하는 HTTP API에서 사용하는 JSON형식 조회 requestBodyJsonV1 @Slf4j @Controller public class RequestBodyJsonController { private ObjectMapper objectMapper = new ObjectMapper(); @PostMapping("/request-body-json-v1") public void requestBodyJsonV1(HttpServletRequest request, HttpServletResponse response) throws IOException { ServletInputStream inputStream = request.getInputStream(); String messag..
HTTP 요청 메시지 - 단순 텍스트 HTTP API에서는 주로 HTTP message body에 데이터를 직접 담아 요청한다. 이때 데이터 형식으로는 JSON, XML, TEXT 등이 사용되며, 특히 JSON 형식이 가장 일반적으로 사용된다. 이 방식은 주로 POST, PUT, PATCH 등의 HTTP 메서드에서 사용된다. 요청 파라미터와는 달리 HTTP 메시지 바디를 통해 데이터가 직접 전달되는 경우에는 @RequestParam, @ModelAttribute와 같은 어노테이션을 사용할 수 없습니다. (다만 HTML Form 형식으로 전달되는 경우는 요청 파라미터로 인정된다.) 가장 간단한 형태로 HTTP message body에 텍스트 메시지를 담아 보내고, 이를 읽어 보려면 InputStream을 ..