전체 글 563

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

RedirectAttributes

이제 저장이 잘 되었으면 상품 상세 화면에 "저장되었습니다."라는 메시지를 보여주게 해보자. addItemV5에 있던 PostMapping는 주석처리 해주고 V6를 만들어 주자. // @PostMapping("/add") public String addItemV5(Item item) { itemRepository.save(item); return "redirect:/basic/items/" + item.getId(); } @PostMapping("/add") public String addItemV6(Item item, RedirectAttributes redirectAttributes) { Item savedItem = itemRepository.save(item); redirectAttributes...

Spring/SpringMVC 2022.05.05

PRG Post/Redirect/Get

상품 등록 처리 컨트롤러는 심각한 문제가 있는데, (addItemV1 ~ addItemV4) 상품 등록을 완료하고 웹 브라우저의 새로고침 버튼을 클릭하면 어떻게 될까? v4에서는 상품 저장하고 뷰를 보여 주었다. 상품 등록을 해서 새로고침을 하면 계속해서 상품 ID가 올라간다. 이상하다. @PostMapping("/add") public String addItemV4(Item item) { itemRepository.save(item); return "basic/item"; } 화면의 흐름은 아래와 같다. POST 등록 후 새로 고침 웹 브라우저의 새로 고침은 마지막에 서버에 전송한 데이터를 다시 전송하는 형식이다. 상품 등록 폼에서 데이터를 입력하고 저장을 선택하면 POST / add + 상품 데이터를..

Spring/SpringMVC 2022.05.05

상품 수정

수정에 필요한 정보를 조회하고, 수정용 폼 뷰를 호출해보자. basic 폴더에 넣어주고 수정을 해주자. th:value 값을 넣어주자. // BasicItemController Class @GetMapping("/{itemId}/edit") public String editForm(@PathVariable Long itemId, Model model) { Item item = itemRepository.findById(itemId); model.addAttribute("item", item); return "basic/editForm"; } 상품 수정이 잘 된다. edit도 GetMapping / PostMapping 둘 다 만들어 준다. @GetMapping("/{itemId}/edit") public..

Spring/SpringMVC 2022.05.04

상품 등록 처리 - @ModelAttribute

상품 등록 폼을 만들어 보자. 서버에 데이터를 전달해야 하는데 POST - HTML Form content-type: application/x-www-form-urlencoded 메시지 바디에 쿼리 파리미터 형식으로 전달 itemName=itemA&price=10000&quantity=10 예) 회원 가입, 상품 주문, HTML Form 사용 요청 파라미터 형식을 처리해야 해서 @RequestParam을 사용하자. BasicItemController의 save 부분을 만들어 보자. // BasicItemController Class @PostMapping("/add") public String save // BasicItemController Class @PostMapping("/add") // 파라미터..

Spring/SpringMVC 2022.05.04

상품 상세, 상품 등록 폼 뷰 & 컨트롤러

컨트롤러도 만들어주자. @GetMapping("/{itemId}") public String item(@PathVariable long itemId, Model model) { Item item = itemRepository.findById(itemId); model.addAttribute("item", item); return "basic/item"; } 뷰는 아래와 같이 th:value를 넣어주고 작성 해준다. 상품 상세 상품 ID 상품명 가격 수량 상품 수정 목록으로 리터럴 표현식 써주고 템플릿 부분에서 (itemId=${item.id}) 이 부분이 {itemId}로 치환이 된다. 상품 수정 item.html의 전체 코드는 아래와 같다. 상품 상세 상품 ID 상품명 가격 수량 상품 수정 목록으로 속..

Spring/SpringMVC 2022.05.03

스프링MVC 프로젝트 - 도메인 개발 & 상품 서비스 HTML

계속해서 만들던 대로 프로젝트를 여기서 생성하자. 실행해보면 잘 나온다. // ItemServiceApplication package hello.itemservice; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class ItemServiceApplication { public static void main(String[] args) { SpringApplication.run(ItemServiceApplication.class, args); } } 이제 welcome page를 추가..

Spring/SpringMVC 2022.05.03