Spring/SpringBoot 28

Spring Boot으로 웹출시 - thymeleaf를 이용한 화면 작성

여기서 진행한다. Serving Web Content with Spring MVC title을 참고하여 만들어 주었다. Thymeleaf Spring Web Spring Boot DevTools 세 개의 Dependencies를 ADD해주고 project를 generate 해주자. GreetingController 패키지를 만들어주고 class를 작성해준다. package com.example.mythymeleaf.controller; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; import..

Spring/SpringBoot 2022.05.30

Spring Boot으로 웹 출시까지

여기서 프로젝트를 시작해보자. 그리고 Building Restful Web Service 사이트에서 튜토리얼을 진행 해준다. Greeting Class package com.godcoder.myrest; public class Greeting { private final long id; private final String content; public Greeting(long id, String content) { this.id = id; this.content = content; } public long getId() { return id; } public String getContent() { return content; } } GreetingController Class package com.god..

Spring/SpringBoot 2022.05.30

DispatcherServlet & ApplicationContext & 응답(Response)하는 방법

tistory 참고하면서 공부하자. FrontController 패턴 최초 앞단에서 request 요청을 받아서 필요한 클래스에 넘겨준다. 왜? web.xml에 다 정의하기가 힘들어서 이때 새로운 요청이 생기기 때문에 request와 response가 새롭게 new가 될 수 있다. 아래의 RequestDispatcher가 필요함. 기존의 있는 request와 response를 지우지 않고 그대로 들고와서 다시 요청을 하는 방법이 있다. => RequestDispatcher RequestDispatcher 필요한 클래스 요청이 도달했을 때 FrontController에 도착한 request와 response를 그대로 유지시켜준다. 결론적으로 RequestDispatcher을 이용해야 데이터를 들고 페이지..

Spring/SpringBoot 2022.05.06

서블릿 객체의 생명주기 & web.xml

서블릿 컨테이너(톰캣) 톰캣은 자바 코드를 통해 최초의 요청을 받을 때 스레드를 받는다. -> 서블릿 객체를 만든다.(필요한 데이터 가져옴) 스레드는 동시접근을 허용하게 해준다. 스프링은 클라이언트가 요청을 했을 때 서블릿 컨테이너가 동작을 무조건 한다. (URI 요청을 하기 때문에) 최초 요청이 오면 메모리 로딩을 해서 서블릿 객체를 하나 만들고 실행을 한다. 그리고 스레드가 20개이면 두번째 요청부터 스무번째 요청까지 쭉 요청이 되고 21번째 부터 no가 요청이 될 것이다. 그리고 마지막으로 최종적으로 만들어지는 것이 Request 객체와 Response 객체이다.(톰캣이 들고 있는 객체) web은 Request와 Response의 여행이다. Request와 Response가 종료가 되면 여행은 끝나..

Spring/SpringBoot 2022.05.06

Tomcat

웹서버 Tomcat 아파치는 요청한 파일을 응답해주는 것이다. 톰캣은 요청한 파일중에 자바파일 코드가 요청이 되면 그걸 컴파일해서 html 파일로 번역해서 돌려주는 애가 톰캣이다. response 할 때는(요청할 때) 보통 웹 브라우저로 요청을 하는데 .JSP 파일을 찾아서 돌려주기만 하면 웹서버이다. 대신에 웹 브라우저는 html css js 를 모두 세가지(동영상 파일 ex) avi )를 받는다. https://www.youtube.com/watch?v=fBcL6hPckyA&list=PL93mKxaRDidG_OIfRQ4nztPQ13y74lCYg&index=9

Spring/SpringBoot 2022.05.06

ORM & 영속성 컨텍스트 & OOP 관점 모델링 & HTTP

ㅇORM Object Relational Mapping : 오브젝트를 데이터베이스에 연결하는 방법론 자바에서 클래스를 만들어서 실행을 하면 데이터베이스에 자동으로 생성되게 하는 기법이 ORM이다. ORM 데이터를 자바 오브젝트로 바꾸고 연결된 세션을 끊고 연결된 커넥션을 끊고하는 모든 일련의 과정을 함수 하나로 제공해준다. CRUD로 기본적으로 반복되는 작업들을 단순하게 도와준다. 영속성 컨텍스트 영속성: 데이터 -> 영구적으로 저장! DB -> MySQL로 컨텍스트: context 자바가 처리하는 모든 메타데이터 정보를 영속성 컨텍스트가 들고있다.결론은 자바와 DB 둘다 영속성 컨텍스트를 통해서 데이터가 서로에게 전달이 된다. 영속성 컨텍스트에 있는 일들은 모두 자동으로 처리가 된다. JPA는 DB와..

Spring/SpringBoot 2022.05.06

MessageConverter & JPA

자바 Object 파이썬 Object 서로 호환하게 해주는게 JSON MessageConverter가 자동으로 번역해서 던져준다. 자바에서는 Jackson 라이브러리가 자바 Object가 JSON으로 변경해준다. @ResponseBody => Buffered writer @RequestBody => Buffered Reader JPA JPA는 Java Persistence API이다. 데이터 베이스가 종료되도 영구히 데이터를 기록할 수 있는 환경을 제공해주는걸 JPA라 한다. 즉 자바 (Java) 프로그램을 영구적으로 (Persistence) 저장할 때 인터페이스 (API) 가 JPA이다. JPA는 ORM 기술이다. JPA는 반복적인 CRUD 작업을 생략하게 해준다. JPA는 영속성 컨텍스트를 가지고 있..

Spring/SpringBoot 2022.05.06

스프링부트 개념정리 with JPA - 스프링의 핵심 & 필터

1. 스프링이란? 스프링은 프레임워크 & 오픈소스 프레임워크는 틀이다. 틀을 벗어나는 개발을 하면 안된다. 그리고 오픈소스이다. => 공개되어있고 내부를 뜯어 고칠 수 있다. 기여도 할 수 있다 IoC 컨테이너를 가진다. Inversion of Control 제어의 역전이다. 주도권이 스프링에게 있다. Class -> 설계도! Object -> 실체화가 가능한 것!(아직 실체화 안된 것) Instance -> 실체화가 된 것(세상에 튀어나온 것) 가구 => 의자 / 침대 => Object 의자의 주소관리는 어떻게 한다? DI를 지원한다. 스캔을 하면 딱 한번만 메모리에 뜨고 한번 뜬 의자를 공유해서 사용할 수 있다. IoC와 DI를 하면 굉장히 프로그램일 짜는게 편하게 된다. 엄청나게 많은 필터를 가지고..

Spring/SpringBoot 2022.05.06

도메인 분석 설계 - 엔티티 설계시 주의점

엔티티 설계시에는 가급적 Setter을 사용안하는게 좋다. 그리고 모든 연관관계는 지연로딩으로 설정을 해줘야 한다. 즉시로딩( EAGER )은 예측이 어렵고, 어떤 SQL이 실행될지 추적하기 어렵다. 특히 JPQL을 실행할 때 N+1 문제가 자주 발생한다. 실무에서 모든 연관관계는 지연로딩( LAZY )으로 설정해야 한다. 연관된 엔티티를 함께 DB에서 조회해야 하면, fetch join 또는 엔티티 그래프 기능을 사용한다. @XToOne(OneToOne, ManyToOne) 관계는 기본이 즉시로딩이므로 직접 지연로딩으로 설정해야 한다. 최악의 경우를 살펴보자. 아래에서 Member Order 연관 Order OrderItem이 연관 이렇게 다 연관이 되어있다 하자. 하나를 가져오면 다 연관되어 있는 애..

Spring/SpringBoot 2022.04.05

도메인 분석 설계 - 엔티티 클래스 개발2

Item 폴더안에 Category Class를 만들고 // Category Class package jpabook.jpashop.domain.item; import lombok.Getter; import lombok.Setter; import javax.persistence.*; import java.util.ArrayList; import java.util.List; import static javax.persistence.FetchType.*; @Entity @Getter @Setter public class Category { @Id @GeneratedValue @Column(name = "category_id") private Long id; private String name; // Catego..

Spring/SpringBoot 2022.04.02