231222 TIL |

2023. 12. 22. 19:10· 왕초보일지
목차
  1. 데이터베이스와 인텔리제이 연결
  2. Application 과 데이터베이스 연결

데이터베이스와 인텔리제이 연결

 

이 아이콘을 통해 데이터베이스의 연결정보 입력 (이름, Host, 인증방법, User, password)

조회도 할 수 있고 insert 도 가능, console 에서 쿼리도 가능하다.

 

 

Application 과 데이터베이스 연결

데이터베이스에 맞는 드라이버를 설치해야 한다.

지금은 Postgre 를 사용하므로 Postgre 드라이버를 설치한다.

Postgre 종속성

runtimeOnly("org.postgresql:postgresql") // 컴파일 시점이 아닌, 실행시점에 해당 종속성 필요

 

implementation 과 runtimeonly 차이

 

이것만 해서 끝나는게 아니라 해당 Application 에 DB 의 정보를 주어야 한다. (인텔리제이와 연결시 연결정보를 준 것처럼) * resources 하위의 application.properties 파일에 정보를 입력 (정보는 인텔리내부연결정보참조) 

 

spring.datasource.url={연결정보}
spring.datasource.username={유저이름}
spring.datasource.password={비밀번호}

 

* yml 형식

spring:
  datasource:
    url: {URL}
    username: postgres
    password: {비밀번호}

DB는 보안을 위해 위의 두 가지 방법이 아닌 DB정보를 환경변수로 설정, 보안 소프트웨어 사용

* configuration 의 modify options 내에서 환경변수 설정

SPRING_DATASOURCE_URL={URL}?user={USERNAME}&password={PASSWORD}

 

 

 

ORM (Object-Relational Mapping)

: 객체와 관계형 데이터베이스 간의 매핑

- 별도의 SQL 쿼리 작성할 필요 X

- 객체 활용 -> 재사용성 증대

 

 

JPA (Java Persistence API)

: ORM 의 한 종류

 

🚩우리는 PostgreSQL 을 쓸 건데
JDBC 로 java application 에서 PostgreSQL 에 접근을 하여 각종 SQL 을 사용할 수 있게 해주고
JPA 가 이 JDBC API 를 내부적으로 사용하면서 객체지향적으로 DB를 다룰 수 있도록 하고
이런 JPA 를 더욱 쓰기 편하게 만들어 놓은 라이브러리인 Spring Data JPA 으로 내부적으로 JPA 를 사용한다.

 

 

JDBC (Java Database Connectivity)

= 하나의 인터페이스인 JDBC API + 인터페이스의 DB별 구현체인 JDBC Driver

 

Hibernate

=JPA 인터페이스의 구현체 중 하나

 

 

 

 

테이블과 맵핑되는 객체가 Entity

이 Entity의 인스턴스가 데이터와 맵핑

@Entity등의 어노테이션을  통해 JPA 에서 관리하는 객체로 작동

@Entity
@Table(name = "post") // @Table 생략 가능, 생략 시 클래스 이름으로 자동 맵핑
class Post(
    @Column(name = "title") // DB의 Column 과 맵핑
    var title: String,

    // ... 다른 필드 및 메소드

		@OneToMany(mappedBy = "post")
		val comments: List<Comment> = mutableListOf(),

		@ManyToOne
		@JoinColumn(name = "author_id", nullable = false)
		val author: User,
) {

    @Id // Entity의 Primary Key 지정
    @GeneratedValue(strategy = GenerationType.IDENTITY) // 자동으로 생성되는 식별자
    var id: Long? = null

}

이렇게 정의한 Entity 는 영속성 컨텍스트에 포함되어 있는지, 아닌지에 따라 JPA 가 데이터베이스에 변경사항을 저장하여 영속성을 부여할지, 말지 결정

 

JPA Persistence Context 영속성 컨텍스트

: Entity 가  어떤 산태에 있는지 추적

Transient / Managed / Detached / Removed

이런 상태를 통해 트랜잭션 종료시 최종적으로 DB에 어떤 쿼리를 날릴지 결정,

트랜잭션이 끝나는 시점에 Managed / Removed 상태의 Entity 들의 변경사항이 DB에 반영됨

 

 

트랜잭션을 통한 쓰기 지연, Dirty Checking : ??

 

 

 

 

Course Entity 설정 중 

status 에 open closed 가 아닌 다른 값이 들어가는 것을 방지하기 위해 타입을 enum? 으로 설정

 

enum class 열거 클래스

enum class status {
   OPEN,
   CLOSED
}

여러 개의 값을 열거해서 사용할 수 있도록 정의해 놓은 클래스

특정 그룹안의 구성 요소를 정의하는 값이 필요할 때!

 

'왕초보일지' 카테고리의 다른 글

231227 | Todo Step1  (2) 2023.12.27
231226 | Entity 작성, Service layer 연결  (0) 2023.12.26
231221 TIL |  (2) 2023.12.21
231220 TIL | Spring Service Layer 작성  (1) 2023.12.20
231219 TIL API설계/DTO작성/챌린지반주제  (1) 2023.12.19
  1. 데이터베이스와 인텔리제이 연결
  2. Application 과 데이터베이스 연결
'왕초보일지' 카테고리의 다른 글
  • 231227 | Todo Step1
  • 231226 | Entity 작성, Service layer 연결
  • 231221 TIL |
  • 231220 TIL | Spring Service Layer 작성
다시은
다시은
🔥
다시은
재은로그
다시은
전체
오늘
어제
  • 분류 전체보기 (127)
    • 코딩테스트 (40)
    • Language (2)
      • JAVA (2)
      • Kotlin (0)
      • TypeScript (0)
    • SQL (1)
    • 인프라 (1)
    • 왕초보일지 (77)
    • 회고 (4)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • Kotlin
  • 문자열변환
  • SQL문법
  • mysql
  • googleapis
  • 스프레드시트
  • sql

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.2
다시은
231222 TIL |
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.