본문 바로가기

Study Information Technology

Spring Boot와 Oracle DB 통합하기

728x90
반응형

Spring Boot와 Oracle DB 통합하기

Overview

Spring Boot와 Oracle DB를 통합하는 과정은 데이터베이스 기반 애플리케이션을 구축할 때 자주 필요합니다. Spring Boot는 설정을 간소화하여 빠르게 애플리케이션을 시작할 수 있도록 해주며, Oracle DB는 대규모 애플리케이션에서 자주 사용되는 신뢰성 높은 관계형 데이터베이스 시스템입니다. 이 가이드는 Spring Boot 애플리케이션에서 Oracle DB를 사용하는 방법을 단계별로 설명합니다.

1. 프로젝트 설정

1.1 Spring Boot 프로젝트 생성

먼저, Spring Boot 프로젝트를 생성해야 합니다. Spring Initializr를 사용하면 쉽게 생성할 수 있습니다.

  1. Spring Initializr 웹사이트에 접속합니다.
  2. Project: Maven Project (또는 Gradle Project)
  3. Language: Java
  4. Spring Boot: 최신 안정 버전 선택
  5. Group: 예를 들어 com.example
  6. Artifact: 예를 들어 demo
  7. Dependencies: 다음 의존성을 추가합니다.
  • Spring Web
  • Spring Data JPA
  • Oracle Driver

참고: Spring Data JPA는 JPA를 통해 데이터베이스 작업을 간소화하고, Oracle Driver는 Oracle 데이터베이스와의 연결을 가능하게 합니다.

1.2 Maven 의존성 추가

Spring Initializr에서 생성된 pom.xml 파일에 Oracle 데이터베이스 드라이버를 추가합니다. Maven Central Repository에서 Oracle JDBC 드라이버를 직접 다운로드할 수 없으므로, Oracle의 Maven 저장소를 사용해야 합니다.

<dependency>
  <groupId>com.oracle.database.jdbc</groupId>
  <artifactId>ojdbc8</artifactId>
  <version>19.8.0.0</version>
</dependency>

여기서 버전은 실제로 사용 중인 Oracle DB 버전에 맞게 조정해야 합니다. 최신 버전은 Oracle의 공식 웹사이트에서 확인할 수 있습니다.

2. 데이터베이스 연결 설정

2.1 application.properties 설정

Spring Boot 애플리케이션의 src/main/resources/application.properties 파일에 Oracle DB에 연결하기 위한 설정을 추가합니다.

spring.datasource.url=jdbc:oracle:thin:@localhost:1521:XE
spring.datasource.username=your_username
spring.datasource.password=your_password
spring.datasource.driver-class-name=oracle.jdbc.OracleDriver
spring.jpa.database-platform=org.hibernate.dialect.Oracle12cDialect

여기서 spring.datasource.url은 데이터베이스 URL을 지정합니다. localhost는 데이터베이스 서버의 주소이며, 1521은 기본 포트, XE는 데이터베이스 이름입니다. 이 값은 데이터베이스 설정에 따라 달라질 수 있습니다.

spring.jpa.database-platform은 Hibernate의 데이터베이스 방언을 설정합니다. Oracle 12c 이상의 버전에서는 Oracle12cDialect를 사용합니다.

2.2 데이터베이스 접속 확인

애플리케이션을 시작할 때 데이터베이스 연결이 성공적으로 이루어졌는지 확인해야 합니다. 만약 연결 오류가 발생하면, 아래와 같은 오류 메시지가 출력될 수 있습니다.

오류 메시지 예시:

org.springframework.jdbc.BadSqlGrammarException: Invalid column name

이 경우, 데이터베이스 설정(예: URL, 사용자 이름, 비밀번호 등)을 다시 확인하고, 데이터베이스가 실제로 실행 중인지 확인합니다.

3. JPA 및 Entity 설정

3.1 Entity 클래스 작성

JPA를 사용하여 Oracle DB와 상호작용하기 위해서는 Entity 클래스를 정의해야 합니다. Entity 클래스는 데이터베이스 테이블과 매핑됩니다. 예를 들어, User라는 테이블을 관리할 수 있는 User Entity 클래스를 작성할 수 있습니다.

package com.example.demo.model;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

@Entity
public class User {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String username;
private String password;

// getters and setters
}

3.2 Repository 인터페이스 작성

데이터베이스에 접근하기 위한 Repository 인터페이스를 작성합니다. Spring Data JPA는 이 인터페이스를 통해 CRUD 작업을 자동으로 처리해줍니다.

package com.example.demo.repository;

import com.example.demo.model.User;
import org.springframework.data.jpa.repository.JpaRepository;

public interface UserRepository extends JpaRepository<User, Long> {
// 추가적인 쿼리 메소드 정의 가능
}

이 인터페이스는 JpaRepository를 확장하여 기본적인 CRUD 작업을 제공합니다. 추가적인 쿼리 메소드를 정의하려면 인터페이스에 메소드 이름을 정의하면 됩니다.

3.3 서비스 및 컨트롤러 작성

서비스 클래스와 컨트롤러 클래스를 작성하여 실제 비즈니스 로직과 웹 요청 처리를 구현합니다.

Service 클래스 예시:

package com.example.demo.service;

import com.example.demo.model.User;
import com.example.demo.repository.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class UserService {

@Autowired
private UserRepository userRepository;

public List<User> getAllUsers() {
return userRepository.findAll();
}

public User getUserById(Long id) {
return userRepository.findById(id).orElse(null);
}

public User saveUser(User user) {
return userRepository.save(user);
}

public void deleteUser(Long id) {
userRepository.deleteById(id);
}
}

Controller 클래스 예시:

package com.example.demo.controller;

import com.example.demo.model.User;
import com.example.demo.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/users")
public class UserController {

@Autowired
private UserService userService;

@GetMapping
public List<User> getAllUsers() {
return userService.getAllUsers();
}

@GetMapping("/{id}")
public User getUserById(@PathVariable Long id) {
return userService.getUserById(id);
}

@PostMapping
public User createUser(@RequestBody User user) {
return userService.saveUser(user);
}

@DeleteMapping("/{id}")
public void deleteUser(@PathVariable Long id) {
userService.deleteUser(id);
}
}

4. 예외 처리 및 디버깅

Spring Boot 애플리케이션에서 Oracle DB와의 통합 시 발생할 수 있는 일반적인 오류와 그 해결 방법을 알아봅니다.

4.1 데이터베이스 연결 오류

오류 메시지:

ORA-12154: TNS:could not resolve the connect identifier specified

해결 방법:

  • application.properties 파일의 spring.datasource.url이 올바른지 확인합니다.
  • TNS 이름이 올바르게 지정되었는지 확인합니다.
  • Oracle DB가 실행 중인지, 네트워크 설정이 올바른지 점검합니다.

4.2 SQL 문법 오류

오류 메시지:

org.springframework.jdbc.BadSqlGrammarException: Invalid column name

해결 방법:

  • Entity 클래스의 필드 이름과 데이터베이스 테이블의 컬럼 이름이 일치하는지 확인합니다.
  • SQL 문법 오류가 발생할 경우, SQL 로그를 활성화하여 쿼리를 분석합니다.

참고문서

이 문서들을 통해 Spring Boot와 Oracle DB의 통합에 관한 자세한 정보를 얻을 수 있으며, 문제가 발생했을 때 참고할 수 있는 유용한 자료가 될 것입니다.

728x90
반응형