스프링 부트, 확장!

준비중..

스프링 부트, 확장!

댓글 기능 및 소셜 로그인!

21 JPA와 데이터베이스

# JPA와 데이터베이스 ## 미션 --- 데이터 CRUD 시, JPA가 수행하는 SQL 쿼리를 로그로 확인하시오. ![클라우드스터딩-스프링-부트-JPA-SQL-쿼리-로그-확인](https://i.imgur.com/ecI8YPR.png) ## 개념 --- #### ⭐️ 데이터베이스와 JPA 리뷰 데이터베이스(이하 DB)란 정보를 저장하는 창고다. 사용자의 구매 내역과 리뷰 등의 정보들. 다 DB에 저장되어 있다. DB를 사용하여 데이터를 다루려면 SQL 문법을 알아야 하는데, 문제는 서버와 DB의 사용 언어가 다르다는 것이다. 이를 돕는 도구가 바로 JPA다. 이를 사용하면 보다 편리하게 DB와 소통 가능하다. JPA가 등장하기 이전에는 직접 SQL을 작성하여 JDBC라는 라이브러리를 사용하여 소통했었다. 최근에는 잘 사용하지 않는다. 왜냐? JPA를 사용하는게 더 효율적이기 때문이다. JPA로 데이터를 가져오는 코드가 1줄로 끝난다고 할 때, JDBC는 100줄이 필요하다. ![클라우드스터딩-스프링-부트-JPA-역할](https://i.imgur.com/W7nE0qH.png) #### ⭐️ application.yaml 설정 파일 스프링 부트 프로젝트는 application.properties(또는 application.yaml)를 통해 다양한 설정이 가능하다. 몇 가지 설정을 추가하여 JPA가 수행하는 SQL 코드. 이를 로그로 확인해보자. ## 튜토리얼 --- #### ⭐️ 어플리케이션 설정 1) JPA가 수행하는 SQL 보기: "resources/application.yaml" ``` # 주의! 들여쓰기 민감! spring: # DB 설정 h2: console: enabled: true # JPA 설정 jpa: show-sql: true # JPA 동작 시, 내부 SQL 출력! properties: hibernate.format_sql: true # 보기 좋게 출력! ``` #### ⭐️ 테이블 생성 확인 2) 서버 시작 시, 테이블 생성 로그 ![클라우드스터딩-스프링부트-JPA-create-table](https://i.imgur.com/Rlgsi3e.png) #### ⭐️ 레코드 생성 확인 3) 새글 작성 ![클라우드스터딩-스프링부트-JPA-새글-작성](https://i.imgur.com/u5dJYeW.png) 4) 새글을 저장하는 SQL 로그 ![클라우드스터딩-스프링부트-JPA-insert-into](https://i.imgur.com/csZ5WQ8.png) 5) "localhost:8080/h2-console"에 접속, 실제 article 테이블의 내용 ![클라우드스터딩-스프링부트-JPA-h2-database-select-테이블-확인](https://i.imgur.com/Y31vrRs.png) #### ⭐️ 레코드 조회 확인 6) 글 상세 조회 ![클라우드스터딩-스프링부트-JPA-select-쿼리](https://i.imgur.com/wUxEtTT.png) 7) 상세 조회 시, SQL 로그: "localhost:8080/articles/1" ![클라우드스터딩-스프링부트-JPA-select-쿼리](https://i.imgur.com/M3KJNYp.png) #### ⭐️ 레코드 수정 확인 8) 레코드 수정 시, SQL 로그 ![클라우드스터딩-스프링부트-JPA-update-쿼리](https://i.imgur.com/SNO0VTU.png) #### ⭐️ 레코드 삭제 확인 9) 레코드 삭제 시, SQL 로그 ![클라우드스터딩-스프링부트-JPA-delete-쿼리](https://i.imgur.com/mVg3IWw.png) ## 훈련하기 --- - "h2-console"에 접속! 직접 SQL을 작성하여, 데이터를 CRUD 하시오. - SQL의 DDL, DML, DCL을 조사하여 설명하시오. ## 면접 준비 --- - JPA 무엇? 왜씀? - DB의 테이블과 레코드, 그리고 컬럼이란? - CRUD를 위한 SQL 문법은? - insert 수행 시 '?'의 의미?