Spring Boot jpa로 오라클 DB 연결하기

박준우·2025년 7월 31일
0

개발세팅

목록 보기
2/3

1. application.yml 파일 만들기

application.yml 파일은 스프링 부트의 환경설정을 위한 파일로, 데이터베이스 접속 정보, 포트번호, JPA 설정 등 프로그램 실행에 필요한 환경 변수, 값, 옵션을 한 곳에 모아 코드와 분리해서 편리하게 관리하는 파일이다.

참고로 위치는 src/main/resource 패키지에 저장하면 된다.

spring:
  datasource:
    url: jdbc:oracle:thin:@//localhost:1521/ORCLPDB1
    username: system
    password: 999999
    driver-class-name: oracle.jdbc.OracleDriver

  jpa:
    database-platform: org.hibernate.dialect.OracleDialect
    hibernate:
      ddl-auto: update
    show-sql: true

여기서 직접 설정을 변경해야 하는 항목은 다음과 같다.

url: localhost(서비스명), 1521(포트번호), ORCLPDB1(데이터베이스명)
username: 로그인 아이디
password: 로그인 비밀번호

필자는 미리 DB와 계정을 만들었기 때문에 그것을 사용하였다.

2. application.properties 수정하기

src/main/resource 폴터에 존재하는 application.properties의 내용에 아래 내용을 추가한다.

spring.application.name=korean

spring.datasource.url=jdbc:oracle:thin:@localhost:1521:orcl
spring.datasource.username=system
spring.datasource.password=99999
spring.datasource.driver-class-name=oracle.jdbc.OracleDriver

spring.jpa.database-platform=org.hibernate.dialect.OracleDialect
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true

여기서 직접 설정을 변경해야 하는 항목은 다음과 같다.
1. username: 유저 아이디
2. password: 비밀번호
3. url: localhost(서비스명), 1521(포트번호), orcl(SID/인스턴스명)
4. spring.application.name: 프로젝트명

SID/인스턴스란? DB서버당 1개만 존재하는 이름이다. 이를 아래처럼 검색하면 나오는 결과를예제의 orcl 자리에 대체하여 넣으면 된다. 보통 xe로 잘못 표기되어 에러가 난다.

SELECT instance_name FROM v$instance;

3. UserRepository 인터페이스 생성

public interface UserRepository extends JpaRepository<User, Long>
{

}

여기서 User는 아까 테이블을 선언했던 클래스 명이다. 이 인터페이스에 JpaRepository를 상속하면, 아래와 같은 CRUD 함수들을 만들지 않고도 사용할 수 있다.

    userRepository.save(user);         // 저장/수정
	userRepository.findAll();          // 전체 조회
	userRepository.findById(1L);       // ID로 단건 조회
	userRepository.deleteById(1L);     // 삭제
	userRepository.count();            // 전체 개수 조회

4. DbTestRunner 테스트 파일 만들기

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;
import webBoard.korean.dto.User;
import webBoard.korean.repository.UserRepository;

@Component // 이 클래스를 bean 으로 등록하여 사용하기 위해 사용
public class DbTestRunner implements CommandLineRunner {
    @Autowired//new userRepository를 DI컨테이너에서 불러온다.
    private UserRepository userRepository;

    @Override
    public void run(String... args) throws Exception {
        // 저장
        User user = new User();
        user.setName("테스트");
        user.setEmail("test@example.com");
        userRepository.save(user);

        // 조회 및 출력
        userRepository.findAll().forEach(System.out::println);
    }
}

5. build Gradle 파일 살펴보기

build Gradle 파일에서 아래 2개의 의존성이 정확히 존재하는지 확인한다.

dependencies {
	implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
	runtimeOnly 'com.oracle.database.jdbc:ojdbc11'
}

spring-boot-starter-data-jpa: JPA 핵심 기능 + Hibernate(기본 구현체) + 트랜잭션 관리 등 JPA 동작에 필요한 모든 라이브러리, 엔티티 매핑, 자동 쿼리, Repository 등 JPA 관련 기능 제공

com.oracle.database.jdbc:ojdbc11: 오라클 DB와 통신하기 위한 JDBC 드라이버 (실제 DB 접속 및 쿼리 실행)

6. 실제 테스트 해보기

(1) 클래스를 이용한 테이블 생성

import jakarta.persistence.*;
import lombok.Data;

@Entity
@Table(name= "USERS")
@Data
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String name;
    private String email;

    @Override
    public String toString() {
        return "User(id=" + id + ", name=" + name + ", email=" + email + ")";
    }
}

위 코드는 USERS 테이블을 만드는 예시이다. 원래는 getter, setter, tostring 함수를 만들어야 하나 lombok의 @Data 에너테이션으로 이를 생략하였다. @Entity는 이 클래스가 jpa로 만든 것임을 선언하고, @Table 은 테이블명을 선언한다.

toString함수를 오버라이딩 하면 객체 내부의 속성값들을 쉽게 확인할 수 있다.

(2) 실행 결과

이처럼 결과가 나오면 성공적으로 연결이 완료된 것이다.

profile
DB가 좋아요

0개의 댓글