Spring 55

DataSource 예제 - DriverManager

DataSource 예제인 DriverManager를 만들어보자. 실제 커넥션을 각각 가져와 준다. package hello.jdbc.connection; import lombok.extern.slf4j.Slf4j; import org.junit.jupiter.api.Test; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import static hello.jdbc.connection.ConnectionConst.*; @Slf4j public class ConnectionTest { @Test void driverManager() throws SQLException { Connection c..

Spring/SpringDB 2022.06.14

DataSource 이해

커넥션을 얻는 방법은 앞서 학습한 JDBC DriverManager 를 직접 사용하거나, 커넥션 풀을 사용하는 등 다양한 방법이 존재한다. 커넥션을 획득하는 다양한 방법 DriverManager를 통해 커넥션 획득 우리가 앞서 JDBC로 개발한 애플리케이션 처럼 DriverManager 를 통해서 커넥션을 획득하다가, 커넥션 풀을 사용하는 방법으로 변경하려면 어떻게 해야할까? DriverManager를 통해 커넥션 획득하다가 커넥션 풀로 변경시 문제 예를 들어서 애플리케이션 로직에서 DriverManager 를 사용해서 커넥션을 획득하다가 HikariCP 같은커넥션 풀을 사용하도록 변경하면 커넥션을 획득하는 애플리케이션 코드도 함께 변경해야 한다. 의존관계가 DriverManager 에서 HikariCP..

Spring/SpringDB 2022.06.14

JDBC 개발 - 등록

JDBC를 사용해서 회원 Member 데이터를 데이터베이스에 관리하는 기능을 개발해보자 H2 데이터베이스 설정 마지막에 있는 테이블과 샘플 데이터 만들기를 통해 member 테이블을 미리 만들어 둔다. schema.sql drop table member if exists cascade; create table member ( member_id varchar(10), money integer not null default 0, primary key (member_id) ); domain 패키지를 만들고 Member class를 만들어준다. package hello.jdbc.domain; import lombok.Data; @Data public class Member { private String memb..

Spring/SpringDB 2022.06.14

스프링부트 개념정리 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

스프링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