728x90
스프링 데이터 JPA
2. 핵심 개념 이해
본격적인 스프링 데이터 JPA 활용법을 학습하기에 앞서, ORM과 JPA에 대한 이론적인 배경을 학습합니다
포스팅 참조 정보
GitHub
공부한 내용은 GitHub에 공부용 Organizations에 정리 하고 있습니다
해당 포스팅에 대한 내용의 GitHub 주소
실습 내용이나 자세한 소스코드는 GitHub에 있습니다
포스팅 내용은 간략하게 추린 핵심 내용만 포스팅되어 있습니다
https://github.com/freespringlecture/spring-data-jpa-study/tree/chap02-01-rdbms_java
해당 포스팅 참고 인프런 강의
실습 환경
- Java Version: Java 11
- SpringBoot Version: 2.1.2.RELEASE
1. 관계형 데이터베이스와 자바
Persistence(영속성)이란 어떤 정보를 어딘가에 저장하고 애플리케이션을 껐다가 켜도 그 데이터는 유지가 됨
JDBC
(관계형) 데이터베이스와 자바의 연결 고리
JDBC
- DataSource / DriverManager
- Connection
- PreparedStatement
SQL
- DDL
- DML
무엇이 문제인가?
- SQL을 실행하는 비용이 비싸다.
- SQL이 데이터베이스 마다 다르다.
- 스키마를 바꿨더니 코드가 너무 많이 바뀌네…
- 반복적인 코드가 너무 많아.
- 당장은 필요가 없는데 언제 쓸 줄 모르니까 미리 다 읽어와야 하나…
Docker 명령어 설명
옵션
-e
: 환경변수-d
: daemon 명-name
: docker 프로세스 명-i
: 인터렉티브 모드-t
: target 이 되는 containerbash
: 실행할 명령어
명령어
docker ps
: docker 프로세스 보기docker ps -a
: 동작하지 않는 docker container 까지 보기docker rm: docker
: 컨테이너 삭제docker stop
:docker container stop
docker start
:docker container start
Docker PostgreSQL 설치 및 실행
1. 설치
docker run -p 5432:5432 -e POSTGRES_PASSWORD=pass -e POSTGRES_USER=freelife -e POSTGRES_DB=springboot --name postgres_boot -d postgres
2. 접속
docker exec -i -t postgres_boot bash
3. postgres 유저 전환
su - postgres
4. postgres psql 실행
psql
에 접속할 데이터베이스 이름
psql -U freelife springboot
5. 조회
데이터베이스 조회
\list
테이블 조회
\dt
쿼리
SELECT * FROM account;
SQL
- DDL: 스키마 추가, 수정, 삭제
- DML: 데이터 추가, 수정, 삭제
JDBC 드라이버 의존성 추가
JDBC는 Java안에 기본으로 포함되어있음 드라이버만 설치하면됨
PostgreSQL 용 드라이버 의존성 추가
<dependencies>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>RELEASE</version>
</dependency>
</dependencies>
문제점
- 클래스와 맵핑되는 테이블을 생성하는 것이 번거로움
- 테이블에서 가져온 데이터를 도메인 객체로 맵핑하는 과정도 번거로움
- connection을 만드는 비용이 비싸다 또한 마음대로 만들 수 없다
- DBCP라고 부르는 Connection Pool 오픈소스를 사용해 POOL로 관리를 한다
- Spring Boot는 Hikari라는 툴을 사용
- 빈이 connection 객체를 미리 만들어 놓고 POOL에서 필요할 때 마다 하나씩 받아서 씀
- SQL이 표준이 있지만 DB마다 다름 DB를 교체하면 SQL을 다시 작성해야됨
- 반복적인 코드가 많음
- 언젠가 쓸지몰라서 미리 다 읽어오는 경우가 있음
테스트 로직 구현
접근할때는 try with resource
라는 Java8부터 도입된 문법을 사용
DDL로 테이블 생성후, DML로 데이터를 Insert
public class Application {
public static void main(String[] args) throws SQLException {
String url = "jdbc:postgresql://localhost:5432/springdata";
String username = "freelife";
String password = "pass";
try(Connection connection = DriverManager.getConnection(url, username, password)){
System.out.println("Connection created: "+ connection);
String sql = "CREATE TABLE ACCOUNT (id int, username varchar(255), password varchar(255));";
sql = "INSERT INTO ACCOUNT VALUES(1, 'freelife', 'pass');";
try(PreparedStatement statement = connection.prepareStatement(sql)){
statement.execute();
}
}
}
}
728x90
'개발강의정리 > Spring' 카테고리의 다른 글
[스프링 데이터 JPA] 2-3. ORM 패러다임 불일치 (0) | 2019.11.22 |
---|---|
[스프링 데이터 JPA] 2-2. ORM 개요 (0) | 2019.11.22 |
[스프링 데이터 JPA] 1-1. 소개 (0) | 2019.11.22 |
[스프링 부트 개념과 활용] 4-10. 스프링 데이터 7부: 데이터베이스 초기화 (0) | 2019.11.22 |
[스프링 부트 개념과 활용] 4-10. 스프링 데이터 6부: Spring-Data-JPA 연동 (0) | 2019.11.21 |
댓글