[나만의 블로그] DB 연결
🌵 ORM
ORM 관계형 데이터 베이스의 한 종류로, 무결성 특징이 있다.
Object Relational Mapping
무결성 자체가 어렵게 느껴질 수 있다.
무결성, 하면 2단어를 떠올리면, 이해가 쉽다. 정확성, 일관성!
DB에 저장되는 데이터와 실제 데이터가 일치하는지
데이터가 일정하게 유지 되는지를 의미한다.
ORM은 SQL 쿼리를 자동으로 생성해주므로 직접 작성하지 않아도 된다.
userRepository.save(userDTO.toEntity());
위 코드를 실행하면 view - controller 상에서 전달받은 DTO를 Entity 로 변환해 user 테이블에 저장되지만, 실제 repository 코드인 아래를 보면 save 함수는 없다. 있는 함수는 getUserById와 modifiedUserById 뿐이다.
@Repository
public interface UserRepository extends JpaRepository<UserEntity, Long> {
@Query(value = "select * from user where user_email = :id", nativeQuery = true)
UserEntity getUserById(@Param("id") String id);
@Modifying
@Query(value = "update user set user_name = :name where user_email = :id", nativeQuery = true)
void modifiedUserById(@Param("name") String name, @Param("id") String id);
}
그렇기 때문에 SQL문을 사용하지 않으므로 코드의 가독성을 높이고 개발자의 편의성을 증대할 수 있다.
객체 <-> ORM <-> 관계형 데이터 베이스
데이터 베이스를 프로그래밍 언어의 객체 관점으로 바라볼 수 있어서 객체 지향 프로그래밍 언어를 이용해 프로그램을 개발할 때 편리하다.
하지만, 복잡한 프로젝트를 수행할 때는 ORM만으로 서비스를 구현하기 어렵다. 그리고 제대로 알고 사용하지 않을 경우, 개발자가 원하는 데이터를 추출해오지 못할 수 있다.
🌵 JPA
Java Persistence API
스프링부트에서 데이터 처리할 때 사용되는 ORM 기술 표준의 인터페이스 모음이다.
📜 build.gradle
dependencies {
// db connection(mysql)
implementation 'mysql:mysql-connector-java'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
runtimeOnly("com.mysql:mysql-connector-java")
}
📜 application.properties
# jdbc driver
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/[DataBace이름]?serverTimezone=Asia/Seoul
spring.datasource.username=root
spring.datasource.password=[비밀번호]
# JPA
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=update
spring.jpa.properties.hibernate.format_sql=true
sql이 실행될때마다 console에 보이게끔 설정했다.


데이터 베이스 이름을 studyspring만들어주었다.
sql문으로 DB생성하는 문법은 다음과 같다.
CREATE DATABASE studyspring;
[ctrl] + Enter 로 sql문을 실행할 수 있다.
🌵 데이터베이스 연결 확인
📜 database .properties
spring.datasource.url=jdbc:mysql://localhost:3306/[DataBace이름]?serverTimezone=Asia/Seoul
spring.datasource.username=root
spring.datasource.password=[비밀번호]
연결 확인을 위해 필요한 정보만 database.properies에 모아뒀다.
📜 Test/DatabaseConfigTest.java
package com.example.demo;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.jdbc.AutoConfigureTestDatabase;
import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest;
import org.springframework.test.context.TestPropertySource;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.SQLException;
@DataJpaTest
@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)
@TestPropertySource("classpath:database.properties") // Use the properties file
public class DatabaseConfigTest {
@Autowired
private DataSource dataSource;
@Test
public void testConnection() throws SQLException {
try (Connection connection = dataSource.getConnection()) {
System.out.println("DB Connection => " + connection);
}
}
}

'Java > Springboot' 카테고리의 다른 글
[나만의 블로그] spring 회원가입 (0) | 2023.11.24 |
---|---|
[나만의 블로그] 프로젝트 계획 (1) | 2023.11.24 |