Spring 55

HTTP 응답 데이터 - 단순 텍스트, HTML / API JSON

HTTP 응답 메시지는 주로 단순 텍스트 응답 앞에서 살펴봄 ( writer.println("ok"); ) HTML 응답 HTML API - MessageBody-JSON 응답 HTML 응답하는 거를 알아보자. package hello.setvlet.basic.response; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException;..

Spring/SpringMVC 2022.04.22

HTTP 요청 데이터 - 개요

HTTP 요청 메시지를 통해서 클라이언트에서 서버로 데이터를 전달하는 방법을 알아보자. 3가지 방법이 있다. GET - 쿼리 파라미터 / url*?username=hello&age=20 메시지 바디 없이, URL의 쿼리 파라미터에 데이터를 포함해서 전달 예) 검색, 필터, 페이징등에서 많이 사용하는 방식 POST - HTML Form content-type: application/x-www-form-urlencoded 메시지 바디에 쿼리 파라미터 형식으로 전달 username=hello&age = 20 예) 회원 가입, 상품 주문, HTML Form 사용 HTTP message body HTTP API(REST API)에서 주로 사용, JSON, XML, TEXT 데이터 형식은 주로 JSON 사용 POS..

Spring/SpringMVC 2022.04.21

서블릿 - 프로젝트 생성

서블릿 컨테이너 스프링MVC-웹애플리케이션이해 톰캣처럼 서블릿을 지원하는 WAS를 서블릿 컨테이너라고 함 서블릿 컨테이너는 서블릿 객체를 생성, 초기화, 호출, 종료하는 생명주기 관리 서블릿 객체는 싱글톤으로 관리 고객의 요청이 올 때 마다 계속 객체를 생성하는 것은 비효율 최초 로딩 시점에 서블릿 객체를 미리 만들어두고 재활용 모든 고객 요청은 동일한 서블릿 객체 인스턴스에 접근 공유 변수 사용 주의 서블릿으로 변환 되어서 사용 JSP도 서블릿으로 변환 되어서 사용 동시 요청을 위한 멀티 쓰레드 처리 지원 서블릿은 스프링이 필요없다. 하지만 여기서는 스프링 부트를 이용해서 프로젝트를 생성해보자.(스프링 부트는 톰캣 서버(WAS 서버)를 내장하고 있어서 편리하게 이용을 할 수..

Spring/SpringMVC 2022.04.21

스프링 부트 설정 - JPA, DB

application.properties는 삭제하고 application.yml파일을 만들자. application.yml 파일 spring: datasource: url: jdbc:h2:tcp://localhost/~/querydsl username: sa password: driver-class-name: org.h2.Driver jpa: hibernate: # 애플리케이션 로딩 시점에 테이블을 다 drop하고 다시 생성 # 만약 create-drop을 하면 다시 다 날리고 테이블 만든다음 애플리케이션 내릴때 테이블도 다 날린다. # 끝나고 테이블 볼수 있는게 없어서 그냥 create로 설정 ddl-auto: create properties: hibernate: # query 이쁘게 보기 # show..

Spring/QueryDSL 2022.04.19

@EntityGraph

JPA의 fetchjoin 기술(지연로딩개념 : LAZY)을 명확히 이해한 다음에 @EntityGraph로 넘어오자. 먼저 MemberRepositoryTest를 작성하면 member1은 teamA를 참조하고 member2는 teamB를 참조한다. @Test public void findMemberLazy() { //given //member1 -> teamA //member2 -> teamB Team teamA = new Team("teamA"); Team teamB = new Team("teamB"); teamRepository.save(teamA); teamRepository.save(teamB); Member member1 = new Member("member1", 10, teamA); Membe..

공통 인터페이스 설정 & 적용

MemberRepository는 아래와 같고 testcase로 가보자. package study.datajpa.repository; import org.springframework.data.jpa.repository.JpaRepository; import study.datajpa.entity.Member; public interface MemberRepository extends JpaRepository { } MemberRepositoryTest에서 System.out.println("memberRepository = " + memberRepository.getClass()); 찍어보면 package study.datajpa.repository; import org.assertj.core.api.Ass..

공통 인터페이스 기반 - 순수 JPA 기반 레포지토리 만들기

일단 순수하게 JPA 기반을 레포지토리를 한번 만들어보자. 저장 변경 - > 변경감지 사용 삭제 전체 조회 단건 조회 카운트 => JPA에서 수정은 변경가지 기능을 사용하면 되고 트랜잭션 안에서 엔티티 조회한 다음 데이터 변경하고 트랜잭션 종료 시점에 변경 감지 기능이 작동해서 변경된 엔티티를 감지하고 UPDATE SQL을 실행한다. 기본적인 CRUD를 만들어본다. JPA가 제공하는 JPQL이라는 기술을 사용하자(객체를 대상으로 하는 쿼리) SQL로 번역이 된 다음에 실제 db에서 데이터를 가져와서 반환을 해준다. delete, findById, Optional, count을 사용해서 만들어준다. package study.datajpa.repository; import org.springframewor..

스프링 핵심 원리 이해1 - 주문과 할인 도메인 실행과 테스트

OrderApp class를 먼저 만들어 준다. // OrderApp class package hello.core; import hello.core.member.Grade; import hello.core.member.Member; import hello.core.member.MemberService; import hello.core.member.MemberServiceImpl; import hello.core.order.Order; import hello.core.order.OrderService; import hello.core.order.OrderServiceImpl; public class OrderApp { public static void main(String[] args) { MemberSe..

Spring/SpringCore 2022.03.24

스프링 핵심 원리 이해1 - 주문과 할인 도메인 개발

hello.core 밑에 discount 패키지를 만들고 DiscountPolicy라는 interface를 만든다. // DiscountPolicy interface package hello.core.discount; import hello.core.member.Member; public interface DiscountPolicy { /** * @return 할인 대상 금액 */ int discount(Member member, int price); } 이거에 대한 구현체도 만들어 준다. // FixDiscountPolicy package hello.core.discount; import hello.core.member.Grade; import hello.core.member.Member; public..

Spring/SpringCore 2022.03.24

스프링 핵심 원리 이해1 - 주문과 할인 도메인 설계

주문과 할인 정책 회원은 상품을 주문할 수 있다. 회원 등급에 따라 할인 정책을 적용할 수 있다. 할인 정책은 모든 VIP는 1000원을 할인해주는 고정 금액 할인을 적용해달라. (나중에 변경 될 수 있다.) 할인 정책은 변경 가능성이 높다. 회사의 기본 할인 정책을 아직 정하지 못했고, 오픈 직전까지 고민을 미루고 싶다. 최악의 경우 할인을 적용하지 않을 수 도 있다. (미확정) 클라이언트가 주문 서비스에 제일 먼저 요청을 한다. 예제에서는 상품이라는 item대신 상품명 / 상품 가격을 넘겨주었다. 주문 서비스는 단순히 주문 결과 객체를 만들고 난 후 클라이언트에게 보내는것까지만 적용(실제 DB에 저장하는 것은 생략) 1. 주문 생성: 클라이언트는 주문 서비스에 주문 생성을 요청한다. // Findby..

Spring/SpringCore 2022.03.24